diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 72287983..38c779e7 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -9,48 +9,24 @@ jobs:
matrix:
os: [ubuntu-20.04, macos-latest]
steps:
- - uses: actions/setup-node@v2
- with:
- node-version: '18'
- - uses: actions/checkout@v2.3.2
-
- - name: Install esy
- run: npm install -g esy
+ - uses: actions/checkout@v2.3.2
- - name: Try to restore install cache
- uses: actions/cache@v2.1.1
+ - uses: actions/setup-node@v4
with:
- path: ~/.esy/source
- key: source-${{ hashFiles('**/index.json') }}
-
- - name: Install
- run: esy install
+ node-version: "20"
- - name: Print esy cache
- uses: actions/github-script@v3.0.0
- id: print_esy_cache
+ - name: Setup anew (or from cache) vcpkg (and does not build any package)
+ uses: lukka/run-vcpkg@v1
with:
- script: |
- const path = require('path')
- const scriptPath = path.resolve('.github/workflows/print_esy_cache.js')
- require(scriptPath)(core)
-
- - name: Try to restore build cache
- id: deps-cache
- uses: actions/cache@v2.1.1
+ runVcpkgInstall: true
+
+ - name: Set-up OCaml
+ uses: ocaml/setup-ocaml@v3
with:
- path: ${{ steps.print_esy_cache.outputs.esy_cache }}
- key: build-odiff-${{ matrix.os }}-${{ hashFiles('**/index.json') }}
- restore-keys: build-odiff-${{ matrix.os }}
-
- # Here we use a low-level command. In real situation you don't have to
- # but it is useful in CI as it split the log in GitHub UI.
- # You can see at a glance if it is your project or your deps that break.
- #
- # We also use --release flag to build less.
- # This allow us to spot syntax/type error more quickly.
+ ocaml-compiler: 5
+
- name: Build release dependencies
-
+
if: steps.deps-cache.outputs.cache-hit != 'true'
run: esy build-dependencies --release
diff --git a/bin/Print.ml b/bin/Print.ml
index 239c37c9..f4992669 100644
--- a/bin/Print.ml
+++ b/bin/Print.ml
@@ -1,53 +1,53 @@
-open Odiff.Diff
+(* open Odiff.Diff *)
let printDiffResult makeParsableOutput result =
- (match (result, makeParsableOutput) with
- | Layout, true -> ""
- | Layout, false ->
- Pastel.createElement
- ~children:
- [
- (Pastel.createElement ~color:Red ~bold:true ~children:[ "Failure!" ]
- () [@JSX]);
- " Images have different layout.\n";
- ]
- () [@JSX]
- | Pixel (_output, diffCount, _percentage, _lines), true when diffCount == 0 ->
- ""
- | Pixel (_output, diffCount, _percentage, _lines), false when diffCount == 0
- ->
- Pastel.createElement
- ~children:
- [
- (Pastel.createElement ~color:Green ~bold:true
- ~children:[ "Success!" ] () [@JSX]);
- " Images are equal.\n";
- (Pastel.createElement ~dim:true
- ~children:[ "No diff output created." ]
- () [@JSX]);
- ]
- () [@JSX]
- | Pixel (_output, diffCount, diffPercentage, stack), true
- when not (Stack.is_empty stack) ->
- Int.to_string diffCount ^ ";"
- ^ Float.to_string diffPercentage
- ^ ";"
- ^ (stack
- |> Stack.fold (fun acc line -> (line |> Int.to_string) ^ "," ^ acc) "")
- | Pixel (_output, diffCount, diffPercentage, _), true ->
- Int.to_string diffCount ^ ";" ^ Float.to_string diffPercentage
- | Pixel (_output, diffCount, diffPercentage, _lines), false ->
- Pastel.createElement
- ~children:
- [
- (Pastel.createElement ~color:Red ~bold:true ~children:[ "Failure!" ]
- () [@JSX]);
- " Images are different.\n";
- "Different pixels: ";
- (Pastel.createElement ~color:Red ~bold:true
- ~children:[ Printf.sprintf "%i (%f%%)" diffCount diffPercentage ]
- () [@JSX]);
- ]
- () [@JSX])
- |> Console.log;
+ (* (match (result, makeParsableOutput) with *)
+ (* | Layout, true -> "" *)
+ (* | Layout, false -> *)
+ (* Pastel.createElement *)
+ (* ~children: *)
+ (* [ *)
+ (* (Pastel.createElement ~color:Red ~bold:true ~children:[ "Failure!" ] *)
+ (* () [@JSX]); *)
+ (* " Images have different layout.\n"; *)
+ (* ] *)
+ (* () [@JSX] *)
+ (* | Pixel (_output, diffCount, _percentage, _lines), true when diffCount == 0 -> *)
+ (* "" *)
+ (* | Pixel (_output, diffCount, _percentage, _lines), false when diffCount == 0 *)
+ (* -> *)
+ (* Pastel.createElement *)
+ (* ~children: *)
+ (* [ *)
+ (* (Pastel.createElement ~color:Green ~bold:true *)
+ (* ~children:[ "Success!" ] () [@JSX]); *)
+ (* " Images are equal.\n"; *)
+ (* (Pastel.createElement ~dim:true *)
+ (* ~children:[ "No diff output created." ] *)
+ (* () [@JSX]); *)
+ (* ] *)
+ (* () [@JSX] *)
+ (* | Pixel (_output, diffCount, diffPercentage, stack), true *)
+ (* when not (Stack.is_empty stack) -> *)
+ (* Int.to_string diffCount ^ ";" *)
+ (* ^ Float.to_string diffPercentage *)
+ (* ^ ";" *)
+ (* ^ (stack *)
+ (* |> Stack.fold (fun acc line -> (line |> Int.to_string) ^ "," ^ acc) "") *)
+ (* | Pixel (_output, diffCount, diffPercentage, _), true -> *)
+ (* Int.to_string diffCount ^ ";" ^ Float.to_string diffPercentage *)
+ (* | Pixel (_output, diffCount, diffPercentage, _lines), false -> *)
+ (* Pastel.createElement *)
+ (* ~children: *)
+ (* [ *)
+ (* (Pastel.createElement ~color:Red ~bold:true ~children:[ "Failure!" ] *)
+ (* () [@JSX]); *)
+ (* " Images are different.\n"; *)
+ (* "Different pixels: "; *)
+ (* (Pastel.createElement ~color:Red ~bold:true *)
+ (* ~children:[ Printf.sprintf "%i (%f%%)" diffCount diffPercentage ] *)
+ (* () [@JSX]); *)
+ (* ] *)
+ (* () [@JSX]) *)
+ (* |> Console.log; *)
result
diff --git a/bin/dune b/bin/dune
index 78ee6dc9..d5c72b2b 100644
--- a/bin/dune
+++ b/bin/dune
@@ -4,4 +4,4 @@
(package odiff)
(flags
(:standard -w -27))
- (libraries console.lib pastel.lib odiff-core odiff-io cmdliner))
+ (libraries odiff-core odiff-io cmdliner))
diff --git a/images/out.png b/images/out.png
new file mode 100644
index 00000000..5ec21163
Binary files /dev/null and b/images/out.png differ
diff --git a/io/config/discover.ml b/io/config/discover.ml
index da8da519..5a89e8fb 100644
--- a/io/config/discover.ml
+++ b/io/config/discover.ml
@@ -1,27 +1,106 @@
module C = Configurator.V1
-let _ =
- C.main ~name:"odiff-c-lib-package-resolver" (fun _c ->
- let spng_include_path = Sys.getenv "SPNG_INCLUDE_PATH" |> String.trim in
- let spng_lib_path = Sys.getenv "SPNG_LIB_PATH" |> String.trim in
- let libspng = spng_lib_path ^ "/libspng_static.a" in
- let jpeg_include_path = Sys.getenv "JPEG_INCLUDE_PATH" |> String.trim in
- let jpeg_lib_path = Sys.getenv "JPEG_LIB_PATH" |> String.trim in
- let libjpeg = jpeg_lib_path ^ "/libjpeg.a" in
- let tiff_include_path = Sys.getenv "TIFF_INCLUDE_PATH" |> String.trim in
- let tiff_lib_path = Sys.getenv "TIFF_LIB_PATH" |> String.trim in
- let libtiff = tiff_lib_path ^ "/libtiff.a" in
- let z_lib_path = Sys.getenv "Z_LIB_PATH" |> String.trim in
- let zlib = z_lib_path ^ "/libz.a" in
- C.Flags.write_sexp "png_write_c_flags.sexp" [ "-I" ^ spng_include_path ];
- C.Flags.write_sexp "png_write_c_library_flags.sexp" [ libspng; zlib ];
- C.Flags.write_sexp "png_write_flags.sexp" [ "-cclib"; libspng ];
- C.Flags.write_sexp "png_c_flags.sexp" [ "-I" ^ spng_include_path ];
- C.Flags.write_sexp "png_c_library_flags.sexp" [ libspng; zlib ];
- C.Flags.write_sexp "png_flags.sexp" [ "-cclib"; libspng ];
- C.Flags.write_sexp "jpg_c_flags.sexp" [ "-I" ^ jpeg_include_path ];
- C.Flags.write_sexp "jpg_c_library_flags.sexp" [ libjpeg ];
- C.Flags.write_sexp "jpg_flags.sexp" [ "-cclib"; libjpeg ];
- C.Flags.write_sexp "tiff_c_flags.sexp" [ "-I" ^ tiff_include_path ];
- C.Flags.write_sexp "tiff_c_library_flags.sexp" [ libtiff; zlib ];
- C.Flags.write_sexp "tiff_flags.sexp" [ "-cclib"; libtiff ])
+exception Pkg_Config_Resolution_Failed of string
+
+type pkg_config_result = { cflags : string; libs : string }
+type process_result = { exit_code : int; stdout : string; stderr : string }
+
+let run_process ~env prog args =
+ let stdout_fn = Filename.temp_file "stdout" ".tmp" in
+ let stderr_fn = Filename.temp_file "stderr" ".tmp" in
+ let openfile f =
+ Unix.openfile f
+ [ Unix.O_WRONLY; Unix.O_CREAT; Unix.O_TRUNC; Unix.O_SHARE_DELETE ]
+ 0o666
+ in
+ let stdout = openfile stdout_fn in
+ let stderr = openfile stderr_fn in
+ let stdin, stdin_w = Unix.pipe () in
+ Unix.close stdin_w;
+
+ let pid =
+ match env with
+ | [] ->
+ Unix.create_process prog
+ (Array.of_list (prog :: args))
+ stdin stdout stderr
+ | _ ->
+ let env_array = Array.of_list env in
+ Unix.create_process_env prog
+ (Array.of_list (prog :: args))
+ env_array stdin stdout stderr
+ in
+
+ Unix.close stdin;
+ Unix.close stdout;
+ Unix.close stderr;
+
+ let _, status = Unix.waitpid [] pid in
+
+ let read_file filename =
+ let ic = open_in filename in
+ let n = in_channel_length ic in
+ let s = really_input_string ic n in
+ close_in ic;
+ s
+ in
+
+ let stdout_content = read_file stdout_fn in
+ let stderr_content = read_file stderr_fn in
+
+ Sys.remove stdout_fn;
+ Sys.remove stderr_fn;
+
+ let exit_code =
+ match status with
+ | Unix.WEXITED code -> code
+ | Unix.WSIGNALED signal ->
+ raise
+ (Pkg_Config_Resolution_Failed
+ (Printf.sprintf "Process killed by signal %d" signal))
+ | Unix.WSTOPPED signal ->
+ raise
+ (Pkg_Config_Resolution_Failed
+ (Printf.sprintf "Process stopped by signal %d" signal))
+ in
+
+ { exit_code; stdout = stdout_content; stderr = stderr_content }
+
+let run_pkg_config _c lib =
+ let pkg_config_path = Sys.getenv_opt "PKG_CONFIG_PATH" in
+ let env =
+ match pkg_config_path with
+ | Some path -> [ "PKG_CONFIG_PATH=" ^ path ]
+ | None -> []
+ in
+
+ let c_flags_result = run_process ~env "pkg-config" [ "--cflags"; lib ] in
+ let libs_result = run_process ~env "pkg-config" [ "--libs"; lib ] in
+
+ if c_flags_result.exit_code = 0 && libs_result.exit_code == 0 then
+ { cflags = c_flags_result.stdout; libs = libs_result.stdout }
+ else
+ let std_errors =
+ String.concat "\n" [ c_flags_result.stderr; libs_result.stderr ]
+ in
+
+ raise (Pkg_Config_Resolution_Failed std_errors)
+
+let () =
+ C.main ~name:"odiff-c-lib-packae-resolver" (fun c ->
+ let png_config = run_pkg_config c "libspng_static" in
+ let tiff_config = run_pkg_config c "libtiff-4" in
+ let jpeg_config = run_pkg_config c "libturbojpeg" in
+
+ C.Flags.write_sexp "png_c_flags.sexp" [ png_config.cflags ];
+ C.Flags.write_sexp "png_c_library_flags.sexp" [ png_config.libs ];
+ C.Flags.write_sexp "png_write_c_flags.sexp" [ png_config.cflags ];
+ C.Flags.write_sexp "png_write_c_library_flags.sexp" [ png_config.libs ];
+ C.Flags.write_sexp "png_write_flags.sexp" [ "-cclib"; png_config.libs ];
+ C.Flags.write_sexp "png_c_flags.sexp" [ png_config.cflags ];
+ C.Flags.write_sexp "jpg_c_flags.sexp" [ jpeg_config.cflags ];
+ C.Flags.write_sexp "jpg_c_library_flags.sexp" [ jpeg_config.libs ];
+ C.Flags.write_sexp "jpg_flags.sexp" [ "-cclib"; jpeg_config.libs ];
+ C.Flags.write_sexp "tiff_c_flags.sexp" [ tiff_config.cflags ];
+ C.Flags.write_sexp "tiff_c_library_flags.sexp" [ tiff_config.libs ];
+ C.Flags.write_sexp "tiff_flags.sexp" [ "-cclib"; tiff_config.libs ])
diff --git a/io/config/dune b/io/config/dune
index bc2970ff..187bd5e1 100644
--- a/io/config/dune
+++ b/io/config/dune
@@ -1,5 +1,3 @@
(executable
(name discover)
- (ocamlc_flags str.cma)
- (ocamlopt_flags str.cmxa)
(libraries dune-configurator))
diff --git a/io/png/dune b/io/png/dune
index a1746aad..ed298f0b 100644
--- a/io/png/dune
+++ b/io/png/dune
@@ -3,7 +3,7 @@
(public_name odiff-io.png)
(flags
(-w -40 -w +26)
- (:include png_flags.sexp))
+ )
(foreign_stubs
(language c)
(names ReadPng)
@@ -14,6 +14,6 @@
(libraries odiff-core WritePng))
(rule
- (targets png_flags.sexp png_c_flags.sexp png_c_library_flags.sexp)
+ (targets png_c_flags.sexp png_c_flags.sexp png_c_library_flags.sexp)
(action
(run ../config/discover.exe)))
diff --git a/out.png b/out.png
new file mode 100644
index 00000000..5ec21163
Binary files /dev/null and b/out.png differ
diff --git a/test/dune b/test/_dune
similarity index 100%
rename from test/dune
rename to test/_dune
diff --git a/vcpkg.json b/vcpkg.json
new file mode 100644
index 00000000..75713069
--- /dev/null
+++ b/vcpkg.json
@@ -0,0 +1,3 @@
+{
+ "dependencies": ["libspng", "tiff", "libjpeg-turbo"]
+}
diff --git a/vcpkg_installed/arm64-osx/debug/lib/libjpeg.a b/vcpkg_installed/arm64-osx/debug/lib/libjpeg.a
new file mode 100644
index 00000000..1a8e9ef3
Binary files /dev/null and b/vcpkg_installed/arm64-osx/debug/lib/libjpeg.a differ
diff --git a/vcpkg_installed/arm64-osx/debug/lib/liblzma.a b/vcpkg_installed/arm64-osx/debug/lib/liblzma.a
new file mode 100644
index 00000000..511a1cbf
Binary files /dev/null and b/vcpkg_installed/arm64-osx/debug/lib/liblzma.a differ
diff --git a/vcpkg_installed/arm64-osx/debug/lib/libspng_static.a b/vcpkg_installed/arm64-osx/debug/lib/libspng_static.a
new file mode 100644
index 00000000..ee84550c
Binary files /dev/null and b/vcpkg_installed/arm64-osx/debug/lib/libspng_static.a differ
diff --git a/vcpkg_installed/arm64-osx/debug/lib/libtiffd.a b/vcpkg_installed/arm64-osx/debug/lib/libtiffd.a
new file mode 100644
index 00000000..13b5ae71
Binary files /dev/null and b/vcpkg_installed/arm64-osx/debug/lib/libtiffd.a differ
diff --git a/vcpkg_installed/arm64-osx/debug/lib/libturbojpeg.a b/vcpkg_installed/arm64-osx/debug/lib/libturbojpeg.a
new file mode 100644
index 00000000..cc6c44b3
Binary files /dev/null and b/vcpkg_installed/arm64-osx/debug/lib/libturbojpeg.a differ
diff --git a/vcpkg_installed/arm64-osx/debug/lib/libz.a b/vcpkg_installed/arm64-osx/debug/lib/libz.a
new file mode 100644
index 00000000..8024cf93
Binary files /dev/null and b/vcpkg_installed/arm64-osx/debug/lib/libz.a differ
diff --git a/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/libjpeg.pc b/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/libjpeg.pc
new file mode 100644
index 00000000..16c5bf88
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/libjpeg.pc
@@ -0,0 +1,11 @@
+prefix=${pcfiledir}/../..
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/../include
+
+Name: libjpeg
+Description: A SIMD-accelerated JPEG codec that provides the libjpeg API
+Version: 3.0.3
+
+Libs: "-L${libdir}" -ljpeg
+Cflags: "-I${includedir}"
diff --git a/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/liblzma.pc b/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/liblzma.pc
new file mode 100644
index 00000000..35450e49
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/liblzma.pc
@@ -0,0 +1,15 @@
+prefix=${pcfiledir}/../..
+# SPDX-License-Identifier: 0BSD
+# Author: Lasse Collin
+
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/../include
+
+Name: liblzma
+Description: General purpose data compression library
+URL: https://tukaani.org/xz/
+Version: 5.6.2
+
+Libs: "-L${libdir}" -llzma -pthread
+Cflags: "-I${includedir}" -DLZMA_API_STATIC
diff --git a/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/libspng_static.pc b/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/libspng_static.pc
new file mode 100644
index 00000000..dd733d8c
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/libspng_static.pc
@@ -0,0 +1,12 @@
+prefix=${pcfiledir}/../..
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/../include/
+
+Name: libspng_static
+Description: PNG decoding and encoding library
+Version: 0.7.4
+
+Libs: "-L${libdir}" -lspng_static -lm
+Requires: zlib
+Cflags: "-I${includedir}"
diff --git a/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/libtiff-4.pc b/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/libtiff-4.pc
new file mode 100644
index 00000000..2f9e281e
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/libtiff-4.pc
@@ -0,0 +1,12 @@
+prefix=${pcfiledir}/../..
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/../include
+
+Name: libtiff
+Description: Tag Image File Format (TIFF) library.
+Version: 4.6.0
+
+Libs: "-L${libdir}" -ltiffd -lm
+Requires: zlib libjpeg liblzma
+Cflags: "-I${includedir}"
diff --git a/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/libturbojpeg.pc b/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/libturbojpeg.pc
new file mode 100644
index 00000000..58496f50
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/libturbojpeg.pc
@@ -0,0 +1,11 @@
+prefix=${pcfiledir}/../..
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/../include
+
+Name: libturbojpeg
+Description: A SIMD-accelerated JPEG codec that provides the TurboJPEG API
+Version: 3.0.3
+
+Libs: "-L${libdir}" -lturbojpeg
+Cflags: "-I${includedir}"
diff --git a/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/zlib.pc b/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/zlib.pc
new file mode 100644
index 00000000..3f1afcf5
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/debug/lib/pkgconfig/zlib.pc
@@ -0,0 +1,14 @@
+prefix=${pcfiledir}/../..
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+sharedlibdir=${prefix}/lib
+includedir=${prefix}/../include
+
+Name: zlib
+Description: zlib compression library
+Version: 1.3.1
+
+
+Libs: "-L${libdir}" "-L${sharedlibdir}" -lz
+Requires:
+Cflags: "-I${includedir}"
diff --git a/vcpkg_installed/arm64-osx/include/jconfig.h b/vcpkg_installed/arm64-osx/include/jconfig.h
new file mode 100644
index 00000000..bf91a475
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/jconfig.h
@@ -0,0 +1,60 @@
+/* Version ID for the JPEG library.
+ * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60".
+ */
+#define JPEG_LIB_VERSION 62
+
+/* libjpeg-turbo version */
+#define LIBJPEG_TURBO_VERSION 3.0.3
+
+/* libjpeg-turbo version in integer form */
+#define LIBJPEG_TURBO_VERSION_NUMBER 3000003
+
+/* Support arithmetic encoding when using 8-bit samples */
+#define C_ARITH_CODING_SUPPORTED 1
+
+/* Support arithmetic decoding when using 8-bit samples */
+#define D_ARITH_CODING_SUPPORTED 1
+
+/* Support in-memory source/destination managers */
+#define MEM_SRCDST_SUPPORTED 1
+
+/* Use accelerated SIMD routines when using 8-bit samples */
+#define WITH_SIMD 1
+
+/* This version of libjpeg-turbo supports run-time selection of data precision,
+ * so BITS_IN_JSAMPLE is no longer used to specify the data precision at build
+ * time. However, some downstream software expects the macro to be defined.
+ * Since 12-bit data precision is an opt-in feature that requires explicitly
+ * calling 12-bit-specific libjpeg API functions and using 12-bit-specific data
+ * types, the unmodified portion of the libjpeg API still behaves as if it were
+ * built for 8-bit precision, and JSAMPLE is still literally an 8-bit data
+ * type. Thus, it is correct to define BITS_IN_JSAMPLE to 8 here.
+ */
+#ifndef BITS_IN_JSAMPLE
+#define BITS_IN_JSAMPLE 8
+#endif
+
+#ifdef _WIN32
+
+#undef RIGHT_SHIFT_IS_UNSIGNED
+
+/* Define "boolean" as unsigned char, not int, per Windows custom */
+#ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */
+typedef unsigned char boolean;
+#endif
+#define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */
+
+/* Define "INT32" as int, not long, per Windows custom */
+#if !(defined(_BASETSD_H_) || defined(_BASETSD_H)) /* don't conflict if basetsd.h already read */
+typedef short INT16;
+typedef signed int INT32;
+#endif
+#define XMD_H /* prevent jmorecfg.h from redefining it */
+
+#else
+
+/* Define if your (broken) compiler shifts signed values as if they were
+ unsigned. */
+/* #undef RIGHT_SHIFT_IS_UNSIGNED */
+
+#endif
diff --git a/vcpkg_installed/arm64-osx/include/jerror.h b/vcpkg_installed/arm64-osx/include/jerror.h
new file mode 100644
index 00000000..71ba03e2
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/jerror.h
@@ -0,0 +1,336 @@
+/*
+ * jerror.h
+ *
+ * This file was part of the Independent JPEG Group's software:
+ * Copyright (C) 1994-1997, Thomas G. Lane.
+ * Modified 1997-2009 by Guido Vollbeding.
+ * Lossless JPEG Modifications:
+ * Copyright (C) 1999, Ken Murchison.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2014, 2017, 2021-2023, D. R. Commander.
+ * For conditions of distribution and use, see the accompanying README.ijg
+ * file.
+ *
+ * This file defines the error and message codes for the JPEG library.
+ * Edit this file to add new codes, or to translate the message strings to
+ * some other language.
+ * A set of error-reporting macros are defined too. Some applications using
+ * the JPEG library may wish to include this file to get the error codes
+ * and/or the macros.
+ */
+
+/*
+ * To define the enum list of message codes, include this file without
+ * defining macro JMESSAGE. To create a message string table, include it
+ * again with a suitable JMESSAGE definition (see jerror.c for an example).
+ */
+#ifndef JMESSAGE
+#ifndef JERROR_H
+/* First time through, define the enum list */
+#define JMAKE_ENUM_LIST
+#else
+/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */
+#define JMESSAGE(code, string)
+#endif /* JERROR_H */
+#endif /* JMESSAGE */
+
+#ifdef JMAKE_ENUM_LIST
+
+typedef enum {
+
+#define JMESSAGE(code, string) code,
+
+#endif /* JMAKE_ENUM_LIST */
+
+JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */
+
+/* For maintenance convenience, list is alphabetical by message code name */
+#if JPEG_LIB_VERSION < 70
+JMESSAGE(JERR_ARITH_NOTIMPL, "Sorry, arithmetic coding is not implemented")
+#endif
+JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix")
+JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix")
+JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode")
+JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS")
+#if JPEG_LIB_VERSION >= 70
+JMESSAGE(JERR_BAD_CROP_SPEC, "Invalid crop request")
+#endif
+JMESSAGE(JERR_BAD_DCT_COEF,
+ "DCT coefficient (lossy) or spatial difference (lossless) out of range")
+JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported")
+#if JPEG_LIB_VERSION >= 70
+JMESSAGE(JERR_BAD_DROP_SAMPLING,
+ "Component index %d: mismatching sampling ratio %d:%d, %d:%d, %c")
+#endif
+JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition")
+JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace")
+JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace")
+JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length")
+JMESSAGE(JERR_BAD_LIB_VERSION,
+ "Wrong JPEG library version: library is %d, caller expects %d")
+JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan")
+JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d")
+JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d")
+JMESSAGE(JERR_BAD_PROGRESSION,
+ "Invalid progressive/lossless parameters Ss=%d Se=%d Ah=%d Al=%d")
+JMESSAGE(JERR_BAD_PROG_SCRIPT,
+ "Invalid progressive/lossless parameters at scan script entry %d")
+JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors")
+JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d")
+JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d")
+JMESSAGE(JERR_BAD_STRUCT_SIZE,
+ "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u")
+JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access")
+JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small")
+JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here")
+JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet")
+JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d")
+JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request")
+JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d")
+JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x")
+JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d")
+JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d")
+JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)")
+JMESSAGE(JERR_EMS_READ, "Read from EMS failed")
+JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed")
+JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan")
+JMESSAGE(JERR_FILE_READ, "Input file read error")
+JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?")
+JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet")
+JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow")
+JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry")
+JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels")
+JMESSAGE(JERR_INPUT_EMPTY, "Empty input file")
+JMESSAGE(JERR_INPUT_EOF, "Premature end of input file")
+JMESSAGE(JERR_MISMATCHED_QUANT_TABLE,
+ "Cannot transcode due to multiple use of quantization table %d")
+JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data")
+JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change")
+JMESSAGE(JERR_NOTIMPL, "Requested features are incompatible")
+JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time")
+#if JPEG_LIB_VERSION >= 70
+JMESSAGE(JERR_NO_ARITH_TABLE, "Arithmetic table 0x%02x was not defined")
+#endif
+JMESSAGE(JERR_NO_BACKING_STORE, "Memory limit exceeded")
+JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined")
+JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image")
+JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined")
+JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x")
+JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)")
+JMESSAGE(JERR_QUANT_COMPONENTS,
+ "Cannot quantize more than %d color components")
+JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors")
+JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors")
+JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers")
+JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker")
+JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x")
+JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers")
+JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF")
+JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s")
+JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file")
+JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file")
+JMESSAGE(JERR_TFILE_WRITE,
+ "Write failed on temporary file --- out of disk space?")
+JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines")
+JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x")
+JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up")
+JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation")
+JMESSAGE(JERR_XMS_READ, "Read from XMS failed")
+JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed")
+JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT_SHORT)
+JMESSAGE(JMSG_VERSION, JVERSION)
+JMESSAGE(JTRC_16BIT_TABLES,
+ "Caution: quantization tables are too coarse for baseline JPEG")
+JMESSAGE(JTRC_ADOBE,
+ "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d")
+JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u")
+JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u")
+JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x")
+JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x")
+JMESSAGE(JTRC_DQT, "Define Quantization Table %d precision %d")
+JMESSAGE(JTRC_DRI, "Define Restart Interval %u")
+JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u")
+JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u")
+JMESSAGE(JTRC_EOI, "End Of Image")
+JMESSAGE(JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d")
+JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d")
+JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE,
+ "Warning: thumbnail image size does not match data length %u")
+JMESSAGE(JTRC_JFIF_EXTENSION, "JFIF extension marker: type 0x%02x, length %u")
+JMESSAGE(JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image")
+JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u")
+JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x")
+JMESSAGE(JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u")
+JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors")
+JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors")
+JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization")
+JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d")
+JMESSAGE(JTRC_RST, "RST%d")
+JMESSAGE(JTRC_SMOOTH_NOTIMPL,
+ "Smoothing not supported with nonstandard sampling ratios")
+JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d")
+JMESSAGE(JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d")
+JMESSAGE(JTRC_SOI, "Start of Image")
+JMESSAGE(JTRC_SOS, "Start Of Scan: %d components")
+JMESSAGE(JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d")
+JMESSAGE(JTRC_SOS_PARAMS, " Ss=%d, Se=%d, Ah=%d, Al=%d")
+JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s")
+JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s")
+JMESSAGE(JTRC_THUMB_JPEG,
+ "JFIF extension marker: JPEG-compressed thumbnail image, length %u")
+JMESSAGE(JTRC_THUMB_PALETTE,
+ "JFIF extension marker: palette thumbnail image, length %u")
+JMESSAGE(JTRC_THUMB_RGB,
+ "JFIF extension marker: RGB thumbnail image, length %u")
+JMESSAGE(JTRC_UNKNOWN_IDS,
+ "Unrecognized component IDs %d %d %d, assuming YCbCr (lossy) or RGB (lossless)")
+JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u")
+JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u")
+JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d")
+#if JPEG_LIB_VERSION >= 70
+JMESSAGE(JWRN_ARITH_BAD_CODE, "Corrupt JPEG data: bad arithmetic code")
+#endif
+JMESSAGE(JWRN_BOGUS_PROGRESSION,
+ "Inconsistent progression sequence for component %d coefficient %d")
+JMESSAGE(JWRN_EXTRANEOUS_DATA,
+ "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x")
+JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment")
+JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code")
+JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d")
+JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file")
+JMESSAGE(JWRN_MUST_RESYNC,
+ "Corrupt JPEG data: found marker 0x%02x instead of RST%d")
+JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG")
+JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines")
+#if JPEG_LIB_VERSION < 70
+JMESSAGE(JERR_BAD_CROP_SPEC, "Invalid crop request")
+#if defined(C_ARITH_CODING_SUPPORTED) || defined(D_ARITH_CODING_SUPPORTED)
+JMESSAGE(JERR_NO_ARITH_TABLE, "Arithmetic table 0x%02x was not defined")
+JMESSAGE(JWRN_ARITH_BAD_CODE, "Corrupt JPEG data: bad arithmetic code")
+#endif
+#endif
+JMESSAGE(JWRN_BOGUS_ICC, "Corrupt JPEG data: bad ICC marker")
+#if JPEG_LIB_VERSION < 70
+JMESSAGE(JERR_BAD_DROP_SAMPLING,
+ "Component index %d: mismatching sampling ratio %d:%d, %d:%d, %c")
+#endif
+JMESSAGE(JERR_BAD_RESTART,
+ "Invalid restart interval %d; must be an integer multiple of the number of MCUs in an MCU row (%d)")
+
+#ifdef JMAKE_ENUM_LIST
+
+ JMSG_LASTMSGCODE
+} J_MESSAGE_CODE;
+
+#undef JMAKE_ENUM_LIST
+#endif /* JMAKE_ENUM_LIST */
+
+/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */
+#undef JMESSAGE
+
+
+#ifndef JERROR_H
+#define JERROR_H
+
+/* Macros to simplify using the error and trace message stuff */
+/* The first parameter is either type of cinfo pointer */
+
+/* Fatal errors (print message and exit) */
+#define ERREXIT(cinfo, code) \
+ ((cinfo)->err->msg_code = (code), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr)(cinfo)))
+#define ERREXIT1(cinfo, code, p1) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr)(cinfo)))
+#define ERREXIT2(cinfo, code, p1, p2) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr)(cinfo)))
+#define ERREXIT3(cinfo, code, p1, p2, p3) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (cinfo)->err->msg_parm.i[2] = (p3), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr)(cinfo)))
+#define ERREXIT4(cinfo, code, p1, p2, p3, p4) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (cinfo)->err->msg_parm.i[2] = (p3), \
+ (cinfo)->err->msg_parm.i[3] = (p4), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr)(cinfo)))
+#define ERREXIT6(cinfo, code, p1, p2, p3, p4, p5, p6) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (cinfo)->err->msg_parm.i[2] = (p3), \
+ (cinfo)->err->msg_parm.i[3] = (p4), \
+ (cinfo)->err->msg_parm.i[4] = (p5), \
+ (cinfo)->err->msg_parm.i[5] = (p6), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr)(cinfo)))
+#define ERREXITS(cinfo, code, str) \
+ ((cinfo)->err->msg_code = (code), \
+ strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
+ (cinfo)->err->msg_parm.s[JMSG_STR_PARM_MAX - 1] = '\0', \
+ (*(cinfo)->err->error_exit) ((j_common_ptr)(cinfo)))
+
+#define MAKESTMT(stuff) do { stuff } while (0)
+
+/* Nonfatal errors (we can keep going, but the data is probably corrupt) */
+#define WARNMS(cinfo, code) \
+ ((cinfo)->err->msg_code = (code), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), -1))
+#define WARNMS1(cinfo, code, p1) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), -1))
+#define WARNMS2(cinfo, code, p1, p2) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), -1))
+
+/* Informational/debugging messages */
+#define TRACEMS(cinfo, lvl, code) \
+ ((cinfo)->err->msg_code = (code), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), (lvl)))
+#define TRACEMS1(cinfo, lvl, code, p1) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), (lvl)))
+#define TRACEMS2(cinfo, lvl, code, p1, p2) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), (lvl)))
+#define TRACEMS3(cinfo, lvl, code, p1, p2, p3) \
+ MAKESTMT(int *_mp = (cinfo)->err->msg_parm.i; \
+ _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \
+ (cinfo)->err->msg_code = (code); \
+ (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), (lvl)); )
+#define TRACEMS4(cinfo, lvl, code, p1, p2, p3, p4) \
+ MAKESTMT(int *_mp = (cinfo)->err->msg_parm.i; \
+ _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
+ (cinfo)->err->msg_code = (code); \
+ (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), (lvl)); )
+#define TRACEMS5(cinfo, lvl, code, p1, p2, p3, p4, p5) \
+ MAKESTMT(int *_mp = (cinfo)->err->msg_parm.i; \
+ _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
+ _mp[4] = (p5); \
+ (cinfo)->err->msg_code = (code); \
+ (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), (lvl)); )
+#define TRACEMS8(cinfo, lvl, code, p1, p2, p3, p4, p5, p6, p7, p8) \
+ MAKESTMT(int *_mp = (cinfo)->err->msg_parm.i; \
+ _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
+ _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \
+ (cinfo)->err->msg_code = (code); \
+ (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), (lvl)); )
+#define TRACEMSS(cinfo, lvl, code, str) \
+ ((cinfo)->err->msg_code = (code), \
+ strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
+ (cinfo)->err->msg_parm.s[JMSG_STR_PARM_MAX - 1] = '\0', \
+ (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), (lvl)))
+
+#endif /* JERROR_H */
diff --git a/vcpkg_installed/arm64-osx/include/jmorecfg.h b/vcpkg_installed/arm64-osx/include/jmorecfg.h
new file mode 100644
index 00000000..89c7842c
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/jmorecfg.h
@@ -0,0 +1,385 @@
+/*
+ * jmorecfg.h
+ *
+ * This file was part of the Independent JPEG Group's software:
+ * Copyright (C) 1991-1997, Thomas G. Lane.
+ * Modified 1997-2009 by Guido Vollbeding.
+ * Lossless JPEG Modifications:
+ * Copyright (C) 1999, Ken Murchison.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2009, 2011, 2014-2015, 2018, 2020, 2022, D. R. Commander.
+ * For conditions of distribution and use, see the accompanying README.ijg
+ * file.
+ *
+ * This file contains additional configuration options that customize the
+ * JPEG software for special applications or support machine-dependent
+ * optimizations. Most users will not need to touch this file.
+ */
+
+
+/*
+ * Maximum number of components (color channels) allowed in JPEG image.
+ * To meet the letter of Rec. ITU-T T.81 | ISO/IEC 10918-1, set this to 255.
+ * However, darn few applications need more than 4 channels (maybe 5 for CMYK +
+ * alpha mask). We recommend 10 as a reasonable compromise; use 4 if you are
+ * really short on memory. (Each allowed component costs a hundred or so
+ * bytes of storage, whether actually used in an image or not.)
+ */
+
+#define MAX_COMPONENTS 10 /* maximum number of image components */
+
+
+/*
+ * Basic data types.
+ * You may need to change these if you have a machine with unusual data
+ * type sizes; for example, "char" not 8 bits, "short" not 16 bits,
+ * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits,
+ * but it had better be at least 16.
+ */
+
+/* Representation of a single sample (pixel element value).
+ * We frequently allocate large arrays of these, so it's important to keep
+ * them small. But if you have memory to burn and access to char or short
+ * arrays is very slow on your hardware, you might want to change these.
+ */
+
+/* JSAMPLE should be the smallest type that will hold the values 0..255. */
+
+typedef unsigned char JSAMPLE;
+#define GETJSAMPLE(value) ((int)(value))
+
+#define MAXJSAMPLE 255
+#define CENTERJSAMPLE 128
+
+
+/* J12SAMPLE should be the smallest type that will hold the values 0..4095. */
+
+typedef short J12SAMPLE;
+
+#define MAXJ12SAMPLE 4095
+#define CENTERJ12SAMPLE 2048
+
+
+/* J16SAMPLE should be the smallest type that will hold the values 0..65535. */
+
+typedef unsigned short J16SAMPLE;
+
+#define MAXJ16SAMPLE 65535
+#define CENTERJ16SAMPLE 32768
+
+
+/* Representation of a DCT frequency coefficient.
+ * This should be a signed value of at least 16 bits; "short" is usually OK.
+ * Again, we allocate large arrays of these, but you can change to int
+ * if you have memory to burn and "short" is really slow.
+ */
+
+typedef short JCOEF;
+
+
+/* Compressed datastreams are represented as arrays of JOCTET.
+ * These must be EXACTLY 8 bits wide, at least once they are written to
+ * external storage. Note that when using the stdio data source/destination
+ * managers, this is also the data type passed to fread/fwrite.
+ */
+
+typedef unsigned char JOCTET;
+#define GETJOCTET(value) (value)
+
+
+/* These typedefs are used for various table entries and so forth.
+ * They must be at least as wide as specified; but making them too big
+ * won't cost a huge amount of memory, so we don't provide special
+ * extraction code like we did for JSAMPLE. (In other words, these
+ * typedefs live at a different point on the speed/space tradeoff curve.)
+ */
+
+/* UINT8 must hold at least the values 0..255. */
+
+typedef unsigned char UINT8;
+
+/* UINT16 must hold at least the values 0..65535. */
+
+typedef unsigned short UINT16;
+
+/* INT16 must hold at least the values -32768..32767. */
+
+#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */
+typedef short INT16;
+#endif
+
+/* INT32 must hold at least signed 32-bit values.
+ *
+ * NOTE: The INT32 typedef dates back to libjpeg v5 (1994.) Integers were
+ * sometimes 16-bit back then (MS-DOS), which is why INT32 is typedef'd to
+ * long. It also wasn't common (or at least as common) in 1994 for INT32 to be
+ * defined by platform headers. Since then, however, INT32 is defined in
+ * several other common places:
+ *
+ * Xmd.h (X11 header) typedefs INT32 to int on 64-bit platforms and long on
+ * 32-bit platforms (i.e always a 32-bit signed type.)
+ *
+ * basetsd.h (Win32 header) typedefs INT32 to int (always a 32-bit signed type
+ * on modern platforms.)
+ *
+ * qglobal.h (Qt header) typedefs INT32 to int (always a 32-bit signed type on
+ * modern platforms.)
+ *
+ * This is a recipe for conflict, since "long" and "int" aren't always
+ * compatible types. Since the definition of INT32 has technically been part
+ * of the libjpeg API for more than 20 years, we can't remove it, but we do not
+ * use it internally any longer. We instead define a separate type (JLONG)
+ * for internal use, which ensures that internal behavior will always be the
+ * same regardless of any external headers that may be included.
+ */
+
+#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */
+#ifndef _BASETSD_H_ /* Microsoft defines it in basetsd.h */
+#ifndef _BASETSD_H /* MinGW is slightly different */
+#ifndef QGLOBAL_H /* Qt defines it in qglobal.h */
+typedef long INT32;
+#endif
+#endif
+#endif
+#endif
+
+/* Datatype used for image dimensions. The JPEG standard only supports
+ * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore
+ * "unsigned int" is sufficient on all machines. However, if you need to
+ * handle larger images and you don't mind deviating from the spec, you
+ * can change this datatype. (Note that changing this datatype will
+ * potentially require modifying the SIMD code. The x86-64 SIMD extensions,
+ * in particular, assume a 32-bit JDIMENSION.)
+ */
+
+typedef unsigned int JDIMENSION;
+
+#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */
+
+
+/* These macros are used in all function definitions and extern declarations.
+ * You could modify them if you need to change function linkage conventions;
+ * in particular, you'll need to do that to make the library a Windows DLL.
+ * Another application is to make all functions global for use with debuggers
+ * or code profilers that require it.
+ */
+
+/* a function called through method pointers: */
+#define METHODDEF(type) static type
+/* a function used only in its module: */
+#define LOCAL(type) static type
+/* a function referenced thru EXTERNs: */
+#define GLOBAL(type) type
+/* a reference to a GLOBAL function: */
+#define EXTERN(type) extern type
+
+
+/* Originally, this macro was used as a way of defining function prototypes
+ * for both modern compilers as well as older compilers that did not support
+ * prototype parameters. libjpeg-turbo has never supported these older,
+ * non-ANSI compilers, but the macro is still included because there is some
+ * software out there that uses it.
+ */
+
+#define JMETHOD(type, methodname, arglist) type (*methodname) arglist
+
+
+/* libjpeg-turbo no longer supports platforms that have far symbols (MS-DOS),
+ * but again, some software relies on this macro.
+ */
+
+#undef FAR
+#define FAR
+
+
+/*
+ * On a few systems, type boolean and/or its values FALSE, TRUE may appear
+ * in standard header files. Or you may have conflicts with application-
+ * specific header files that you want to include together with these files.
+ * Defining HAVE_BOOLEAN before including jpeglib.h should make it work.
+ */
+
+#ifndef HAVE_BOOLEAN
+typedef int boolean;
+#endif
+#ifndef FALSE /* in case these macros already exist */
+#define FALSE 0 /* values of boolean */
+#endif
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+
+/*
+ * The remaining options affect code selection within the JPEG library,
+ * but they don't need to be visible to most applications using the library.
+ * To minimize application namespace pollution, the symbols won't be
+ * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined.
+ */
+
+#ifdef JPEG_INTERNALS
+#define JPEG_INTERNAL_OPTIONS
+#endif
+
+#ifdef JPEG_INTERNAL_OPTIONS
+
+
+/*
+ * These defines indicate whether to include various optional functions.
+ * Undefining some of these symbols will produce a smaller but less capable
+ * library. Note that you can leave certain source files out of the
+ * compilation/linking process if you've #undef'd the corresponding symbols.
+ * (You may HAVE to do that if your compiler doesn't like null source files.)
+ */
+
+/* Capability options common to encoder and decoder: */
+
+#define DCT_ISLOW_SUPPORTED /* accurate integer method */
+#define DCT_IFAST_SUPPORTED /* less accurate int method [legacy feature] */
+#define DCT_FLOAT_SUPPORTED /* floating-point method [legacy feature] */
+
+/* Encoder capability options: */
+
+#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
+#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/
+#define C_LOSSLESS_SUPPORTED /* Lossless JPEG? */
+#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */
+/* Note: if you selected 12-bit data precision, it is dangerous to turn off
+ * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit
+ * precision, so jchuff.c normally uses entropy optimization to compute
+ * usable tables for higher precision. If you don't want to do optimization,
+ * you'll have to supply different default Huffman tables.
+ * The exact same statements apply for progressive and lossless JPEG:
+ * the default tables don't work for progressive mode or lossless mode.
+ * (This may get fixed, however.)
+ */
+#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */
+
+/* Decoder capability options: */
+
+#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
+#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/
+#define D_LOSSLESS_SUPPORTED /* Lossless JPEG? */
+#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */
+#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */
+#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */
+#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */
+#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */
+#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */
+#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */
+
+/* more capability options later, no doubt */
+
+
+/*
+ * The RGB_RED, RGB_GREEN, RGB_BLUE, and RGB_PIXELSIZE macros are a vestigial
+ * feature of libjpeg. The idea was that, if an application developer needed
+ * to compress from/decompress to a BGR/BGRX/RGBX/XBGR/XRGB buffer, they could
+ * change these macros, rebuild libjpeg, and link their application statically
+ * with it. In reality, few people ever did this, because there were some
+ * severe restrictions involved (cjpeg and djpeg no longer worked properly,
+ * compressing/decompressing RGB JPEGs no longer worked properly, and the color
+ * quantizer wouldn't work with pixel sizes other than 3.) Furthermore, since
+ * all of the O/S-supplied versions of libjpeg were built with the default
+ * values of RGB_RED, RGB_GREEN, RGB_BLUE, and RGB_PIXELSIZE, many applications
+ * have come to regard these values as immutable.
+ *
+ * The libjpeg-turbo colorspace extensions provide a much cleaner way of
+ * compressing from/decompressing to buffers with arbitrary component orders
+ * and pixel sizes. Thus, we do not support changing the values of RGB_RED,
+ * RGB_GREEN, RGB_BLUE, or RGB_PIXELSIZE. In addition to the restrictions
+ * listed above, changing these values will also break the SIMD extensions and
+ * the regression tests.
+ */
+
+#define RGB_RED 0 /* Offset of Red in an RGB scanline element */
+#define RGB_GREEN 1 /* Offset of Green */
+#define RGB_BLUE 2 /* Offset of Blue */
+#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */
+
+#define JPEG_NUMCS 17
+
+#define EXT_RGB_RED 0
+#define EXT_RGB_GREEN 1
+#define EXT_RGB_BLUE 2
+#define EXT_RGB_PIXELSIZE 3
+
+#define EXT_RGBX_RED 0
+#define EXT_RGBX_GREEN 1
+#define EXT_RGBX_BLUE 2
+#define EXT_RGBX_PIXELSIZE 4
+
+#define EXT_BGR_RED 2
+#define EXT_BGR_GREEN 1
+#define EXT_BGR_BLUE 0
+#define EXT_BGR_PIXELSIZE 3
+
+#define EXT_BGRX_RED 2
+#define EXT_BGRX_GREEN 1
+#define EXT_BGRX_BLUE 0
+#define EXT_BGRX_PIXELSIZE 4
+
+#define EXT_XBGR_RED 3
+#define EXT_XBGR_GREEN 2
+#define EXT_XBGR_BLUE 1
+#define EXT_XBGR_PIXELSIZE 4
+
+#define EXT_XRGB_RED 1
+#define EXT_XRGB_GREEN 2
+#define EXT_XRGB_BLUE 3
+#define EXT_XRGB_PIXELSIZE 4
+
+static const int rgb_red[JPEG_NUMCS] = {
+ -1, -1, RGB_RED, -1, -1, -1, EXT_RGB_RED, EXT_RGBX_RED,
+ EXT_BGR_RED, EXT_BGRX_RED, EXT_XBGR_RED, EXT_XRGB_RED,
+ EXT_RGBX_RED, EXT_BGRX_RED, EXT_XBGR_RED, EXT_XRGB_RED,
+ -1
+};
+
+static const int rgb_green[JPEG_NUMCS] = {
+ -1, -1, RGB_GREEN, -1, -1, -1, EXT_RGB_GREEN, EXT_RGBX_GREEN,
+ EXT_BGR_GREEN, EXT_BGRX_GREEN, EXT_XBGR_GREEN, EXT_XRGB_GREEN,
+ EXT_RGBX_GREEN, EXT_BGRX_GREEN, EXT_XBGR_GREEN, EXT_XRGB_GREEN,
+ -1
+};
+
+static const int rgb_blue[JPEG_NUMCS] = {
+ -1, -1, RGB_BLUE, -1, -1, -1, EXT_RGB_BLUE, EXT_RGBX_BLUE,
+ EXT_BGR_BLUE, EXT_BGRX_BLUE, EXT_XBGR_BLUE, EXT_XRGB_BLUE,
+ EXT_RGBX_BLUE, EXT_BGRX_BLUE, EXT_XBGR_BLUE, EXT_XRGB_BLUE,
+ -1
+};
+
+static const int rgb_pixelsize[JPEG_NUMCS] = {
+ -1, -1, RGB_PIXELSIZE, -1, -1, -1, EXT_RGB_PIXELSIZE, EXT_RGBX_PIXELSIZE,
+ EXT_BGR_PIXELSIZE, EXT_BGRX_PIXELSIZE, EXT_XBGR_PIXELSIZE, EXT_XRGB_PIXELSIZE,
+ EXT_RGBX_PIXELSIZE, EXT_BGRX_PIXELSIZE, EXT_XBGR_PIXELSIZE, EXT_XRGB_PIXELSIZE,
+ -1
+};
+
+/* Definitions for speed-related optimizations. */
+
+/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying
+ * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER
+ * as short on such a machine. MULTIPLIER must be at least 16 bits wide.
+ */
+
+#ifndef MULTIPLIER
+#ifndef WITH_SIMD
+#define MULTIPLIER int /* type for fastest integer multiply */
+#else
+#define MULTIPLIER short /* prefer 16-bit with SIMD for parellelism */
+#endif
+#endif
+
+
+/* FAST_FLOAT should be either float or double, whichever is done faster
+ * by your compiler. (Note that this type is only used in the floating point
+ * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.)
+ */
+
+#ifndef FAST_FLOAT
+#define FAST_FLOAT float
+#endif
+
+#endif /* JPEG_INTERNAL_OPTIONS */
diff --git a/vcpkg_installed/arm64-osx/include/jpeglib.h b/vcpkg_installed/arm64-osx/include/jpeglib.h
new file mode 100644
index 00000000..a59e98c2
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/jpeglib.h
@@ -0,0 +1,1209 @@
+/*
+ * jpeglib.h
+ *
+ * This file was part of the Independent JPEG Group's software:
+ * Copyright (C) 1991-1998, Thomas G. Lane.
+ * Modified 2002-2009 by Guido Vollbeding.
+ * Lossless JPEG Modifications:
+ * Copyright (C) 1999, Ken Murchison.
+ * libjpeg-turbo Modifications:
+ * Copyright (C) 2009-2011, 2013-2014, 2016-2017, 2020, 2022-2023,
+ D. R. Commander.
+ * Copyright (C) 2015, Google, Inc.
+ * For conditions of distribution and use, see the accompanying README.ijg
+ * file.
+ *
+ * This file defines the application interface for the JPEG library.
+ * Most applications using the library need only include this file,
+ * and perhaps jerror.h if they want to know the exact error codes.
+ */
+
+#ifndef JPEGLIB_H
+#define JPEGLIB_H
+
+/*
+ * First we include the configuration files that record how this
+ * installation of the JPEG library is set up. jconfig.h can be
+ * generated automatically for many systems. jmorecfg.h contains
+ * manual configuration options that most people need not worry about.
+ */
+
+#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */
+#include "jconfig.h" /* widely used configuration options */
+#endif
+#include "jmorecfg.h" /* seldom changed options */
+
+
+#ifdef __cplusplus
+#ifndef DONT_USE_EXTERN_C
+extern "C" {
+#endif
+#endif
+
+
+/* Various constants determining the sizes of things.
+ * All of these are specified by the JPEG standard, so don't change them
+ * if you want to be compatible.
+ */
+
+/* NOTE: In lossless mode, an MCU contains one or more samples rather than one
+ * or more 8x8 DCT blocks, so the term "data unit" is used to generically
+ * describe a sample in lossless mode or an 8x8 DCT block in lossy mode. To
+ * preserve backward API/ABI compatibility, the field and macro names retain
+ * the "block" terminology.
+ */
+
+#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */
+#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */
+#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */
+#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */
+#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */
+#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */
+#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */
+/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard;
+ * the PostScript DCT filter can emit files with many more than 10 blocks/MCU.
+ * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU
+ * to handle it. We even let you do this from the jconfig.h file. However,
+ * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe
+ * sometimes emits noncompliant files doesn't mean you should too.
+ */
+#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on data units/MCU */
+#ifndef D_MAX_BLOCKS_IN_MCU
+#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on data units/MCU */
+#endif
+
+
+/* Data structures for images (arrays of samples and of DCT coefficients).
+ */
+
+typedef JSAMPLE *JSAMPROW; /* ptr to one image row of pixel samples. */
+typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */
+typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */
+
+typedef J12SAMPLE *J12SAMPROW; /* ptr to one image row of 12-bit pixel
+ samples. */
+typedef J12SAMPROW *J12SAMPARRAY; /* ptr to some 12-bit sample rows (a 2-D
+ 12-bit sample array) */
+typedef J12SAMPARRAY *J12SAMPIMAGE; /* a 3-D 12-bit sample array: top index is
+ color */
+
+typedef J16SAMPLE *J16SAMPROW; /* ptr to one image row of 16-bit pixel
+ samples. */
+typedef J16SAMPROW *J16SAMPARRAY; /* ptr to some 16-bit sample rows (a 2-D
+ 16-bit sample array) */
+typedef J16SAMPARRAY *J16SAMPIMAGE; /* a 3-D 16-bit sample array: top index is
+ color */
+
+typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */
+typedef JBLOCK *JBLOCKROW; /* pointer to one row of coefficient blocks */
+typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */
+typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */
+
+typedef JCOEF *JCOEFPTR; /* useful in a couple of places */
+
+
+/* Types for JPEG compression parameters and working tables. */
+
+
+/* DCT coefficient quantization tables. */
+
+typedef struct {
+ /* This array gives the coefficient quantizers in natural array order
+ * (not the zigzag order in which they are stored in a JPEG DQT marker).
+ * CAUTION: IJG versions prior to v6a kept this array in zigzag order.
+ */
+ UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */
+ /* This field is used only during compression. It's initialized FALSE when
+ * the table is created, and set TRUE when it's been output to the file.
+ * You could suppress output of a table by setting this to TRUE.
+ * (See jpeg_suppress_tables for an example.)
+ */
+ boolean sent_table; /* TRUE when table has been output */
+} JQUANT_TBL;
+
+
+/* Huffman coding tables. */
+
+typedef struct {
+ /* These two fields directly represent the contents of a JPEG DHT marker */
+ UINT8 bits[17]; /* bits[k] = # of symbols with codes of */
+ /* length k bits; bits[0] is unused */
+ UINT8 huffval[256]; /* The symbols, in order of incr code length */
+ /* This field is used only during compression. It's initialized FALSE when
+ * the table is created, and set TRUE when it's been output to the file.
+ * You could suppress output of a table by setting this to TRUE.
+ * (See jpeg_suppress_tables for an example.)
+ */
+ boolean sent_table; /* TRUE when table has been output */
+} JHUFF_TBL;
+
+
+/* Basic info about one component (color channel). */
+
+typedef struct {
+ /* These values are fixed over the whole image. */
+ /* For compression, they must be supplied by parameter setup; */
+ /* for decompression, they are read from the SOF marker. */
+ int component_id; /* identifier for this component (0..255) */
+ int component_index; /* its index in SOF or cinfo->comp_info[] */
+ int h_samp_factor; /* horizontal sampling factor (1..4) */
+ int v_samp_factor; /* vertical sampling factor (1..4) */
+ int quant_tbl_no; /* quantization table selector (0..3) */
+ /* These values may vary between scans. */
+ /* For compression, they must be supplied by parameter setup; */
+ /* for decompression, they are read from the SOS marker. */
+ /* The decompressor output side may not use these variables. */
+ int dc_tbl_no; /* DC entropy table selector (0..3) */
+ int ac_tbl_no; /* AC entropy table selector (0..3) */
+
+ /* Remaining fields should be treated as private by applications. */
+
+ /* These values are computed during compression or decompression startup: */
+ /* Component's size in data units.
+ * In lossy mode, any dummy blocks added to complete an MCU are not counted;
+ * therefore these values do not depend on whether a scan is interleaved or
+ * not. In lossless mode, these are always equal to the image width and
+ * height.
+ */
+ JDIMENSION width_in_blocks;
+ JDIMENSION height_in_blocks;
+ /* Size of a data unit in samples. Always DCTSIZE for lossy compression.
+ * For lossy decompression this is the size of the output from one DCT block,
+ * reflecting any scaling we choose to apply during the IDCT step.
+ * Values from 1 to 16 are supported. Note that different components may
+ * receive different IDCT scalings. In lossless mode, this is always equal
+ * to 1.
+ */
+#if JPEG_LIB_VERSION >= 70
+ int DCT_h_scaled_size;
+ int DCT_v_scaled_size;
+#else
+ int DCT_scaled_size;
+#endif
+ /* The downsampled dimensions are the component's actual, unpadded number
+ * of samples at the main buffer (preprocessing/compression interface), thus
+ * downsampled_width = ceil(image_width * Hi/Hmax)
+ * and similarly for height. For lossy decompression, IDCT scaling is
+ * included, so
+ * downsampled_width = ceil(image_width * Hi/Hmax * DCT_[h_]scaled_size/DCTSIZE)
+ * In lossless mode, these are always equal to the image width and height.
+ */
+ JDIMENSION downsampled_width; /* actual width in samples */
+ JDIMENSION downsampled_height; /* actual height in samples */
+ /* This flag is used only for decompression. In cases where some of the
+ * components will be ignored (eg grayscale output from YCbCr image),
+ * we can skip most computations for the unused components.
+ */
+ boolean component_needed; /* do we need the value of this component? */
+
+ /* These values are computed before starting a scan of the component. */
+ /* The decompressor output side may not use these variables. */
+ int MCU_width; /* number of data units per MCU, horizontally */
+ int MCU_height; /* number of data units per MCU, vertically */
+ int MCU_blocks; /* MCU_width * MCU_height */
+ int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_[h_]scaled_size */
+ int last_col_width; /* # of non-dummy data units across in last MCU */
+ int last_row_height; /* # of non-dummy data units down in last MCU */
+
+ /* Saved quantization table for component; NULL if none yet saved.
+ * See jdinput.c comments about the need for this information.
+ * This field is currently used only for decompression.
+ */
+ JQUANT_TBL *quant_table;
+
+ /* Private per-component storage for DCT or IDCT subsystem. */
+ void *dct_table;
+} jpeg_component_info;
+
+
+/* The script for encoding a multiple-scan file is an array of these: */
+
+typedef struct {
+ int comps_in_scan; /* number of components encoded in this scan */
+ int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */
+ int Ss, Se; /* progressive JPEG spectral selection parms
+ (Ss is the predictor selection value in
+ lossless mode) */
+ int Ah, Al; /* progressive JPEG successive approx. parms
+ (Al is the point transform value in lossless
+ mode) */
+} jpeg_scan_info;
+
+/* The decompressor can save APPn and COM markers in a list of these: */
+
+typedef struct jpeg_marker_struct *jpeg_saved_marker_ptr;
+
+struct jpeg_marker_struct {
+ jpeg_saved_marker_ptr next; /* next in list, or NULL */
+ UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */
+ unsigned int original_length; /* # bytes of data in the file */
+ unsigned int data_length; /* # bytes of data saved at data[] */
+ JOCTET *data; /* the data contained in the marker */
+ /* the marker length word is not counted in data_length or original_length */
+};
+
+/* Known color spaces. */
+
+#define JCS_EXTENSIONS 1
+#define JCS_ALPHA_EXTENSIONS 1
+
+typedef enum {
+ JCS_UNKNOWN, /* error/unspecified */
+ JCS_GRAYSCALE, /* monochrome */
+ JCS_RGB, /* red/green/blue as specified by the RGB_RED,
+ RGB_GREEN, RGB_BLUE, and RGB_PIXELSIZE macros */
+ JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */
+ JCS_CMYK, /* C/M/Y/K */
+ JCS_YCCK, /* Y/Cb/Cr/K */
+ JCS_EXT_RGB, /* red/green/blue */
+ JCS_EXT_RGBX, /* red/green/blue/x */
+ JCS_EXT_BGR, /* blue/green/red */
+ JCS_EXT_BGRX, /* blue/green/red/x */
+ JCS_EXT_XBGR, /* x/blue/green/red */
+ JCS_EXT_XRGB, /* x/red/green/blue */
+ /* When out_color_space it set to JCS_EXT_RGBX, JCS_EXT_BGRX, JCS_EXT_XBGR,
+ or JCS_EXT_XRGB during decompression, the X byte is undefined, and in
+ order to ensure the best performance, libjpeg-turbo can set that byte to
+ whatever value it wishes. Use the following colorspace constants to
+ ensure that the X byte is set to 0xFF, so that it can be interpreted as an
+ opaque alpha channel. */
+ JCS_EXT_RGBA, /* red/green/blue/alpha */
+ JCS_EXT_BGRA, /* blue/green/red/alpha */
+ JCS_EXT_ABGR, /* alpha/blue/green/red */
+ JCS_EXT_ARGB, /* alpha/red/green/blue */
+ JCS_RGB565 /* 5-bit red/6-bit green/5-bit blue
+ [decompression only] */
+} J_COLOR_SPACE;
+
+/* DCT/IDCT algorithm options. */
+
+typedef enum {
+ JDCT_ISLOW, /* accurate integer method */
+ JDCT_IFAST, /* less accurate integer method [legacy feature] */
+ JDCT_FLOAT /* floating-point method [legacy feature] */
+} J_DCT_METHOD;
+
+#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */
+#define JDCT_DEFAULT JDCT_ISLOW
+#endif
+#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */
+#define JDCT_FASTEST JDCT_IFAST
+#endif
+
+/* Dithering options for decompression. */
+
+typedef enum {
+ JDITHER_NONE, /* no dithering */
+ JDITHER_ORDERED, /* simple ordered dither */
+ JDITHER_FS /* Floyd-Steinberg error diffusion dither */
+} J_DITHER_MODE;
+
+
+/* Common fields between JPEG compression and decompression master structs. */
+
+#define jpeg_common_fields \
+ struct jpeg_error_mgr *err; /* Error handler module */ \
+ struct jpeg_memory_mgr *mem; /* Memory manager module */ \
+ struct jpeg_progress_mgr *progress; /* Progress monitor, or NULL if none */ \
+ void *client_data; /* Available for use by application */ \
+ boolean is_decompressor; /* So common code can tell which is which */ \
+ int global_state /* For checking call sequence validity */
+
+/* Routines that are to be used by both halves of the library are declared
+ * to receive a pointer to this structure. There are no actual instances of
+ * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
+ */
+struct jpeg_common_struct {
+ jpeg_common_fields; /* Fields common to both master struct types */
+ /* Additional fields follow in an actual jpeg_compress_struct or
+ * jpeg_decompress_struct. All three structs must agree on these
+ * initial fields! (This would be a lot cleaner in C++.)
+ */
+};
+
+typedef struct jpeg_common_struct *j_common_ptr;
+typedef struct jpeg_compress_struct *j_compress_ptr;
+typedef struct jpeg_decompress_struct *j_decompress_ptr;
+
+
+/* Master record for a compression instance */
+
+struct jpeg_compress_struct {
+ jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */
+
+ /* Destination for compressed data */
+ struct jpeg_destination_mgr *dest;
+
+ /* Description of source image --- these fields must be filled in by
+ * outer application before starting compression. in_color_space must
+ * be correct before you can even call jpeg_set_defaults().
+ */
+
+ JDIMENSION image_width; /* input image width */
+ JDIMENSION image_height; /* input image height */
+ int input_components; /* # of color components in input image */
+ J_COLOR_SPACE in_color_space; /* colorspace of input image */
+
+ double input_gamma; /* image gamma of input image */
+
+ /* Compression parameters --- these fields must be set before calling
+ * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to
+ * initialize everything to reasonable defaults, then changing anything
+ * the application specifically wants to change. That way you won't get
+ * burnt when new parameters are added. Also note that there are several
+ * helper routines to simplify changing parameters.
+ */
+
+#if JPEG_LIB_VERSION >= 70
+ unsigned int scale_num, scale_denom; /* fraction by which to scale image */
+
+ JDIMENSION jpeg_width; /* scaled JPEG image width */
+ JDIMENSION jpeg_height; /* scaled JPEG image height */
+ /* Dimensions of actual JPEG image that will be written to file,
+ * derived from input dimensions by scaling factors above.
+ * These fields are computed by jpeg_start_compress().
+ * You can also use jpeg_calc_jpeg_dimensions() to determine these values
+ * in advance of calling jpeg_start_compress().
+ */
+#endif
+
+ int data_precision; /* bits of precision in image data */
+
+ int num_components; /* # of color components in JPEG image */
+ J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
+
+ jpeg_component_info *comp_info;
+ /* comp_info[i] describes component that appears i'th in SOF */
+
+ JQUANT_TBL *quant_tbl_ptrs[NUM_QUANT_TBLS];
+#if JPEG_LIB_VERSION >= 70
+ int q_scale_factor[NUM_QUANT_TBLS];
+#endif
+ /* ptrs to coefficient quantization tables, or NULL if not defined,
+ * and corresponding scale factors (percentage, initialized 100).
+ */
+
+ JHUFF_TBL *dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
+ JHUFF_TBL *ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
+ /* ptrs to Huffman coding tables, or NULL if not defined */
+
+ UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
+ UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
+ UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
+
+ int num_scans; /* # of entries in scan_info array */
+ const jpeg_scan_info *scan_info; /* script for multi-scan file, or NULL */
+ /* The default value of scan_info is NULL, which causes a single-scan
+ * sequential JPEG file to be emitted. To create a multi-scan file,
+ * set num_scans and scan_info to point to an array of scan definitions.
+ */
+
+ boolean raw_data_in; /* TRUE=caller supplies downsampled data */
+ boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */
+ boolean optimize_coding; /* TRUE=optimize entropy encoding parms */
+ boolean CCIR601_sampling; /* TRUE=first samples are cosited */
+#if JPEG_LIB_VERSION >= 70
+ boolean do_fancy_downsampling; /* TRUE=apply fancy downsampling */
+#endif
+ int smoothing_factor; /* 1..100, or 0 for no input smoothing */
+ J_DCT_METHOD dct_method; /* DCT algorithm selector */
+
+ /* The restart interval can be specified in absolute MCUs by setting
+ * restart_interval, or in MCU rows by setting restart_in_rows
+ * (in which case the correct restart_interval will be figured
+ * for each scan).
+ */
+ unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */
+ int restart_in_rows; /* if > 0, MCU rows per restart interval */
+
+ /* Parameters controlling emission of special markers. */
+
+ boolean write_JFIF_header; /* should a JFIF marker be written? */
+ UINT8 JFIF_major_version; /* What to write for the JFIF version number */
+ UINT8 JFIF_minor_version;
+ /* These three values are not used by the JPEG code, merely copied */
+ /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */
+ /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */
+ /* ratio is defined by X_density/Y_density even when density_unit=0. */
+ UINT8 density_unit; /* JFIF code for pixel size units */
+ UINT16 X_density; /* Horizontal pixel density */
+ UINT16 Y_density; /* Vertical pixel density */
+ boolean write_Adobe_marker; /* should an Adobe marker be written? */
+
+ /* State variable: index of next scanline to be written to
+ * jpeg_write_scanlines(). Application may use this to control its
+ * processing loop, e.g., "while (next_scanline < image_height)".
+ */
+
+ JDIMENSION next_scanline; /* 0 .. image_height-1 */
+
+ /* Remaining fields are known throughout compressor, but generally
+ * should not be touched by a surrounding application.
+ */
+
+ /*
+ * These fields are computed during compression startup
+ */
+ boolean progressive_mode; /* TRUE if scan script uses progressive mode */
+ int max_h_samp_factor; /* largest h_samp_factor */
+ int max_v_samp_factor; /* largest v_samp_factor */
+
+#if JPEG_LIB_VERSION >= 70
+ int min_DCT_h_scaled_size; /* smallest DCT_h_scaled_size of any component */
+ int min_DCT_v_scaled_size; /* smallest DCT_v_scaled_size of any component */
+#endif
+
+ JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coefficient or
+ difference controller */
+ /* The coefficient or difference controller receives data in units of MCU
+ * rows as defined for fully interleaved scans (whether the JPEG file is
+ * interleaved or not). In lossy mode, there are v_samp_factor * DCTSIZE
+ * sample rows of each component in an "iMCU" (interleaved MCU) row. In
+ * lossless mode, total_iMCU_rows is always equal to the image height.
+ */
+
+ /*
+ * These fields are valid during any one scan.
+ * They describe the components and MCUs actually appearing in the scan.
+ */
+ int comps_in_scan; /* # of JPEG components in this scan */
+ jpeg_component_info *cur_comp_info[MAX_COMPS_IN_SCAN];
+ /* *cur_comp_info[i] describes component that appears i'th in SOS */
+
+ JDIMENSION MCUs_per_row; /* # of MCUs across the image */
+ JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */
+
+ int blocks_in_MCU; /* # of data units per MCU */
+ int MCU_membership[C_MAX_BLOCKS_IN_MCU];
+ /* MCU_membership[i] is index in cur_comp_info of component owning */
+ /* i'th data unit in an MCU */
+
+ int Ss, Se, Ah, Al; /* progressive/lossless JPEG parameters for
+ scan */
+
+#if JPEG_LIB_VERSION >= 80
+ int block_size; /* the basic DCT block size: 1..16 */
+ const int *natural_order; /* natural-order position array */
+ int lim_Se; /* min( Se, DCTSIZE2-1 ) */
+#endif
+
+ /*
+ * Links to compression subobjects (methods and private variables of modules)
+ */
+ struct jpeg_comp_master *master;
+ struct jpeg_c_main_controller *main;
+ struct jpeg_c_prep_controller *prep;
+ struct jpeg_c_coef_controller *coef;
+ struct jpeg_marker_writer *marker;
+ struct jpeg_color_converter *cconvert;
+ struct jpeg_downsampler *downsample;
+ struct jpeg_forward_dct *fdct;
+ struct jpeg_entropy_encoder *entropy;
+ jpeg_scan_info *script_space; /* workspace for jpeg_simple_progression */
+ int script_space_size;
+};
+
+
+/* Master record for a decompression instance */
+
+struct jpeg_decompress_struct {
+ jpeg_common_fields; /* Fields shared with jpeg_compress_struct */
+
+ /* Source of compressed data */
+ struct jpeg_source_mgr *src;
+
+ /* Basic description of image --- filled in by jpeg_read_header(). */
+ /* Application may inspect these values to decide how to process image. */
+
+ JDIMENSION image_width; /* nominal image width (from SOF marker) */
+ JDIMENSION image_height; /* nominal image height */
+ int num_components; /* # of color components in JPEG image */
+ J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
+
+ /* Decompression processing parameters --- these fields must be set before
+ * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes
+ * them to default values.
+ */
+
+ J_COLOR_SPACE out_color_space; /* colorspace for output */
+
+ unsigned int scale_num, scale_denom; /* fraction by which to scale image */
+
+ double output_gamma; /* image gamma wanted in output */
+
+ boolean buffered_image; /* TRUE=multiple output passes */
+ boolean raw_data_out; /* TRUE=downsampled data wanted */
+
+ J_DCT_METHOD dct_method; /* IDCT algorithm selector */
+ boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */
+ boolean do_block_smoothing; /* TRUE=apply interblock smoothing */
+
+ boolean quantize_colors; /* TRUE=colormapped output wanted */
+ /* the following are ignored if not quantize_colors: */
+ J_DITHER_MODE dither_mode; /* type of color dithering to use */
+ boolean two_pass_quantize; /* TRUE=use two-pass color quantization */
+ int desired_number_of_colors; /* max # colors to use in created colormap */
+ /* these are significant only in buffered-image mode: */
+ boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */
+ boolean enable_external_quant;/* enable future use of external colormap */
+ boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */
+
+ /* Description of actual output image that will be returned to application.
+ * These fields are computed by jpeg_start_decompress().
+ * You can also use jpeg_calc_output_dimensions() to determine these values
+ * in advance of calling jpeg_start_decompress().
+ */
+
+ JDIMENSION output_width; /* scaled image width */
+ JDIMENSION output_height; /* scaled image height */
+ int out_color_components; /* # of color components in out_color_space */
+ int output_components; /* # of color components returned */
+ /* output_components is 1 (a colormap index) when quantizing colors;
+ * otherwise it equals out_color_components.
+ */
+ int rec_outbuf_height; /* min recommended height of scanline buffer */
+ /* If the buffer passed to jpeg_read_scanlines() is less than this many rows
+ * high, space and time will be wasted due to unnecessary data copying.
+ * Usually rec_outbuf_height will be 1 or 2, at most 4.
+ */
+
+ /* When quantizing colors, the output colormap is described by these fields.
+ * The application can supply a colormap by setting colormap non-NULL before
+ * calling jpeg_start_decompress; otherwise a colormap is created during
+ * jpeg_start_decompress or jpeg_start_output.
+ * The map has out_color_components rows and actual_number_of_colors columns.
+ */
+ int actual_number_of_colors; /* number of entries in use */
+ JSAMPARRAY colormap; /* The color map as a 2-D pixel array
+ If data_precision is 12 or 16, then this is
+ actually a J12SAMPARRAY or a J16SAMPARRAY,
+ so callers must type-cast it in order to
+ read/write 12-bit or 16-bit samples from/to
+ the array. */
+
+ /* State variables: these variables indicate the progress of decompression.
+ * The application may examine these but must not modify them.
+ */
+
+ /* Row index of next scanline to be read from jpeg_read_scanlines().
+ * Application may use this to control its processing loop, e.g.,
+ * "while (output_scanline < output_height)".
+ */
+ JDIMENSION output_scanline; /* 0 .. output_height-1 */
+
+ /* Current input scan number and number of iMCU rows completed in scan.
+ * These indicate the progress of the decompressor input side.
+ */
+ int input_scan_number; /* Number of SOS markers seen so far */
+ JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */
+
+ /* The "output scan number" is the notional scan being displayed by the
+ * output side. The decompressor will not allow output scan/row number
+ * to get ahead of input scan/row, but it can fall arbitrarily far behind.
+ */
+ int output_scan_number; /* Nominal scan number being displayed */
+ JDIMENSION output_iMCU_row; /* Number of iMCU rows read */
+
+ /* Current progression status. coef_bits[c][i] indicates the precision
+ * with which component c's DCT coefficient i (in zigzag order) is known.
+ * It is -1 when no data has yet been received, otherwise it is the point
+ * transform (shift) value for the most recent scan of the coefficient
+ * (thus, 0 at completion of the progression).
+ * This pointer is NULL when reading a non-progressive file.
+ */
+ int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */
+
+ /* Internal JPEG parameters --- the application usually need not look at
+ * these fields. Note that the decompressor output side may not use
+ * any parameters that can change between scans.
+ */
+
+ /* Quantization and Huffman tables are carried forward across input
+ * datastreams when processing abbreviated JPEG datastreams.
+ */
+
+ JQUANT_TBL *quant_tbl_ptrs[NUM_QUANT_TBLS];
+ /* ptrs to coefficient quantization tables, or NULL if not defined */
+
+ JHUFF_TBL *dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
+ JHUFF_TBL *ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
+ /* ptrs to Huffman coding tables, or NULL if not defined */
+
+ /* These parameters are never carried across datastreams, since they
+ * are given in SOF/SOS markers or defined to be reset by SOI.
+ */
+
+ int data_precision; /* bits of precision in image data */
+
+ jpeg_component_info *comp_info;
+ /* comp_info[i] describes component that appears i'th in SOF */
+
+#if JPEG_LIB_VERSION >= 80
+ boolean is_baseline; /* TRUE if Baseline SOF0 encountered */
+#endif
+ boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */
+ boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */
+
+ UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
+ UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
+ UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
+
+ unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */
+
+ /* These fields record data obtained from optional markers recognized by
+ * the JPEG library.
+ */
+ boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */
+ /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */
+ UINT8 JFIF_major_version; /* JFIF version number */
+ UINT8 JFIF_minor_version;
+ UINT8 density_unit; /* JFIF code for pixel size units */
+ UINT16 X_density; /* Horizontal pixel density */
+ UINT16 Y_density; /* Vertical pixel density */
+ boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */
+ UINT8 Adobe_transform; /* Color transform code from Adobe marker */
+
+ boolean CCIR601_sampling; /* TRUE=first samples are cosited */
+
+ /* Aside from the specific data retained from APPn markers known to the
+ * library, the uninterpreted contents of any or all APPn and COM markers
+ * can be saved in a list for examination by the application.
+ */
+ jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */
+
+ /* Remaining fields are known throughout decompressor, but generally
+ * should not be touched by a surrounding application.
+ */
+
+ /*
+ * These fields are computed during decompression startup
+ */
+ int max_h_samp_factor; /* largest h_samp_factor */
+ int max_v_samp_factor; /* largest v_samp_factor */
+
+#if JPEG_LIB_VERSION >= 70
+ int min_DCT_h_scaled_size; /* smallest DCT_h_scaled_size of any component */
+ int min_DCT_v_scaled_size; /* smallest DCT_v_scaled_size of any component */
+#else
+ int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */
+#endif
+
+ JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */
+ /* The coefficient or difference controller's input and output progress is
+ * measured in units of "iMCU" (interleaved MCU) rows. These are the same as
+ * MCU rows in fully interleaved JPEG scans, but are used whether the scan is
+ * interleaved or not. In lossy mode, we define an iMCU row as v_samp_factor
+ * DCT block rows of each component. Therefore, the IDCT output contains
+ * v_samp_factor*DCT_[v_]scaled_size sample rows of a component per iMCU row.
+ * In lossless mode, total_iMCU_rows is always equal to the image height.
+ */
+
+ JSAMPLE *sample_range_limit; /* table for fast range-limiting
+ If data_precision is 12 or 16, then this is
+ actually a J12SAMPLE pointer or a J16SAMPLE
+ pointer, so callers must type-cast it in
+ order to read 12-bit or 16-bit samples from
+ the array. */
+
+ /*
+ * These fields are valid during any one scan.
+ * They describe the components and MCUs actually appearing in the scan.
+ * Note that the decompressor output side must not use these fields.
+ */
+ int comps_in_scan; /* # of JPEG components in this scan */
+ jpeg_component_info *cur_comp_info[MAX_COMPS_IN_SCAN];
+ /* *cur_comp_info[i] describes component that appears i'th in SOS */
+
+ JDIMENSION MCUs_per_row; /* # of MCUs across the image */
+ JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */
+
+ int blocks_in_MCU; /* # of data units per MCU */
+ int MCU_membership[D_MAX_BLOCKS_IN_MCU];
+ /* MCU_membership[i] is index in cur_comp_info of component owning */
+ /* i'th data unit in an MCU */
+
+ int Ss, Se, Ah, Al; /* progressive/lossless JPEG parameters for
+ scan */
+
+#if JPEG_LIB_VERSION >= 80
+ /* These fields are derived from Se of first SOS marker.
+ */
+ int block_size; /* the basic DCT block size: 1..16 */
+ const int *natural_order; /* natural-order position array for entropy decode */
+ int lim_Se; /* min( Se, DCTSIZE2-1 ) for entropy decode */
+#endif
+
+ /* This field is shared between entropy decoder and marker parser.
+ * It is either zero or the code of a JPEG marker that has been
+ * read from the data source, but has not yet been processed.
+ */
+ int unread_marker;
+
+ /*
+ * Links to decompression subobjects (methods, private variables of modules)
+ */
+ struct jpeg_decomp_master *master;
+ struct jpeg_d_main_controller *main;
+ struct jpeg_d_coef_controller *coef;
+ struct jpeg_d_post_controller *post;
+ struct jpeg_input_controller *inputctl;
+ struct jpeg_marker_reader *marker;
+ struct jpeg_entropy_decoder *entropy;
+ struct jpeg_inverse_dct *idct;
+ struct jpeg_upsampler *upsample;
+ struct jpeg_color_deconverter *cconvert;
+ struct jpeg_color_quantizer *cquantize;
+};
+
+
+/* "Object" declarations for JPEG modules that may be supplied or called
+ * directly by the surrounding application.
+ * As with all objects in the JPEG library, these structs only define the
+ * publicly visible methods and state variables of a module. Additional
+ * private fields may exist after the public ones.
+ */
+
+
+/* Error handler object */
+
+struct jpeg_error_mgr {
+ /* Error exit handler: does not return to caller */
+ void (*error_exit) (j_common_ptr cinfo);
+ /* Conditionally emit a trace or warning message */
+ void (*emit_message) (j_common_ptr cinfo, int msg_level);
+ /* Routine that actually outputs a trace or error message */
+ void (*output_message) (j_common_ptr cinfo);
+ /* Format a message string for the most recent JPEG error or message */
+ void (*format_message) (j_common_ptr cinfo, char *buffer);
+#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */
+ /* Reset error state variables at start of a new image */
+ void (*reset_error_mgr) (j_common_ptr cinfo);
+
+ /* The message ID code and any parameters are saved here.
+ * A message can have one string parameter or up to 8 int parameters.
+ */
+ int msg_code;
+#define JMSG_STR_PARM_MAX 80
+ union {
+ int i[8];
+ char s[JMSG_STR_PARM_MAX];
+ } msg_parm;
+
+ /* Standard state variables for error facility */
+
+ int trace_level; /* max msg_level that will be displayed */
+
+ /* For recoverable corrupt-data errors, we emit a warning message,
+ * but keep going unless emit_message chooses to abort. emit_message
+ * should count warnings in num_warnings. The surrounding application
+ * can check for bad data by seeing if num_warnings is nonzero at the
+ * end of processing.
+ */
+ long num_warnings; /* number of corrupt-data warnings */
+
+ /* These fields point to the table(s) of error message strings.
+ * An application can change the table pointer to switch to a different
+ * message list (typically, to change the language in which errors are
+ * reported). Some applications may wish to add additional error codes
+ * that will be handled by the JPEG library error mechanism; the second
+ * table pointer is used for this purpose.
+ *
+ * First table includes all errors generated by JPEG library itself.
+ * Error code 0 is reserved for a "no such error string" message.
+ */
+ const char * const *jpeg_message_table; /* Library errors */
+ int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */
+ /* Second table can be added by application (see cjpeg/djpeg for example).
+ * It contains strings numbered first_addon_message..last_addon_message.
+ */
+ const char * const *addon_message_table; /* Non-library errors */
+ int first_addon_message; /* code for first string in addon table */
+ int last_addon_message; /* code for last string in addon table */
+};
+
+
+/* Progress monitor object */
+
+struct jpeg_progress_mgr {
+ void (*progress_monitor) (j_common_ptr cinfo);
+
+ long pass_counter; /* work units completed in this pass */
+ long pass_limit; /* total number of work units in this pass */
+ int completed_passes; /* passes completed so far */
+ int total_passes; /* total number of passes expected */
+};
+
+
+/* Data destination object for compression */
+
+struct jpeg_destination_mgr {
+ JOCTET *next_output_byte; /* => next byte to write in buffer */
+ size_t free_in_buffer; /* # of byte spaces remaining in buffer */
+
+ void (*init_destination) (j_compress_ptr cinfo);
+ boolean (*empty_output_buffer) (j_compress_ptr cinfo);
+ void (*term_destination) (j_compress_ptr cinfo);
+};
+
+
+/* Data source object for decompression */
+
+struct jpeg_source_mgr {
+ const JOCTET *next_input_byte; /* => next byte to read from buffer */
+ size_t bytes_in_buffer; /* # of bytes remaining in buffer */
+
+ void (*init_source) (j_decompress_ptr cinfo);
+ boolean (*fill_input_buffer) (j_decompress_ptr cinfo);
+ void (*skip_input_data) (j_decompress_ptr cinfo, long num_bytes);
+ boolean (*resync_to_restart) (j_decompress_ptr cinfo, int desired);
+ void (*term_source) (j_decompress_ptr cinfo);
+};
+
+
+/* Memory manager object.
+ * Allocates "small" objects (a few K total), "large" objects (tens of K),
+ * and "really big" objects (virtual arrays with backing store if needed).
+ * The memory manager does not allow individual objects to be freed; rather,
+ * each created object is assigned to a pool, and whole pools can be freed
+ * at once. This is faster and more convenient than remembering exactly what
+ * to free, especially where malloc()/free() are not too speedy.
+ * NB: alloc routines never return NULL. They exit to error_exit if not
+ * successful.
+ */
+
+#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */
+#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */
+#define JPOOL_NUMPOOLS 2
+
+typedef struct jvirt_sarray_control *jvirt_sarray_ptr;
+typedef struct jvirt_barray_control *jvirt_barray_ptr;
+
+
+struct jpeg_memory_mgr {
+ /* Method pointers */
+ void *(*alloc_small) (j_common_ptr cinfo, int pool_id, size_t sizeofobject);
+ void *(*alloc_large) (j_common_ptr cinfo, int pool_id,
+ size_t sizeofobject);
+ /* If cinfo->data_precision is 12 or 16, then this method and the
+ * access_virt_sarray method actually return a J12SAMPARRAY or a
+ * J16SAMPARRAY, so callers must type-cast the return value in order to
+ * read/write 12-bit or 16-bit samples from/to the array.
+ */
+ JSAMPARRAY (*alloc_sarray) (j_common_ptr cinfo, int pool_id,
+ JDIMENSION samplesperrow, JDIMENSION numrows);
+ JBLOCKARRAY (*alloc_barray) (j_common_ptr cinfo, int pool_id,
+ JDIMENSION blocksperrow, JDIMENSION numrows);
+ jvirt_sarray_ptr (*request_virt_sarray) (j_common_ptr cinfo, int pool_id,
+ boolean pre_zero,
+ JDIMENSION samplesperrow,
+ JDIMENSION numrows,
+ JDIMENSION maxaccess);
+ jvirt_barray_ptr (*request_virt_barray) (j_common_ptr cinfo, int pool_id,
+ boolean pre_zero,
+ JDIMENSION blocksperrow,
+ JDIMENSION numrows,
+ JDIMENSION maxaccess);
+ void (*realize_virt_arrays) (j_common_ptr cinfo);
+ JSAMPARRAY (*access_virt_sarray) (j_common_ptr cinfo, jvirt_sarray_ptr ptr,
+ JDIMENSION start_row, JDIMENSION num_rows,
+ boolean writable);
+ JBLOCKARRAY (*access_virt_barray) (j_common_ptr cinfo, jvirt_barray_ptr ptr,
+ JDIMENSION start_row, JDIMENSION num_rows,
+ boolean writable);
+ void (*free_pool) (j_common_ptr cinfo, int pool_id);
+ void (*self_destruct) (j_common_ptr cinfo);
+
+ /* Limit on memory allocation for this JPEG object. (Note that this is
+ * merely advisory, not a guaranteed maximum; it only affects the space
+ * used for virtual-array buffers.) May be changed by outer application
+ * after creating the JPEG object.
+ */
+ long max_memory_to_use;
+
+ /* Maximum allocation request accepted by alloc_large. */
+ long max_alloc_chunk;
+};
+
+
+/* Routine signature for application-supplied marker processing methods.
+ * Need not pass marker code since it is stored in cinfo->unread_marker.
+ */
+typedef boolean (*jpeg_marker_parser_method) (j_decompress_ptr cinfo);
+
+
+/* Originally, this macro was used as a way of defining function prototypes
+ * for both modern compilers as well as older compilers that did not support
+ * prototype parameters. libjpeg-turbo has never supported these older,
+ * non-ANSI compilers, but the macro is still included because there is some
+ * software out there that uses it.
+ */
+
+#define JPP(arglist) arglist
+
+
+/* Default error-management setup */
+EXTERN(struct jpeg_error_mgr *) jpeg_std_error(struct jpeg_error_mgr *err);
+
+/* Initialization of JPEG compression objects.
+ * jpeg_create_compress() and jpeg_create_decompress() are the exported
+ * names that applications should call. These expand to calls on
+ * jpeg_CreateCompress and jpeg_CreateDecompress with additional information
+ * passed for version mismatch checking.
+ * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx.
+ */
+#define jpeg_create_compress(cinfo) \
+ jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \
+ (size_t)sizeof(struct jpeg_compress_struct))
+#define jpeg_create_decompress(cinfo) \
+ jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
+ (size_t)sizeof(struct jpeg_decompress_struct))
+EXTERN(void) jpeg_CreateCompress(j_compress_ptr cinfo, int version,
+ size_t structsize);
+EXTERN(void) jpeg_CreateDecompress(j_decompress_ptr cinfo, int version,
+ size_t structsize);
+/* Destruction of JPEG compression objects */
+EXTERN(void) jpeg_destroy_compress(j_compress_ptr cinfo);
+EXTERN(void) jpeg_destroy_decompress(j_decompress_ptr cinfo);
+
+/* Standard data source and destination managers: stdio streams. */
+/* Caller is responsible for opening the file before and closing after. */
+EXTERN(void) jpeg_stdio_dest(j_compress_ptr cinfo, FILE *outfile);
+EXTERN(void) jpeg_stdio_src(j_decompress_ptr cinfo, FILE *infile);
+
+/* Data source and destination managers: memory buffers. */
+EXTERN(void) jpeg_mem_dest(j_compress_ptr cinfo, unsigned char **outbuffer,
+ unsigned long *outsize);
+EXTERN(void) jpeg_mem_src(j_decompress_ptr cinfo,
+ const unsigned char *inbuffer, unsigned long insize);
+
+/* Default parameter setup for compression */
+EXTERN(void) jpeg_set_defaults(j_compress_ptr cinfo);
+/* Compression parameter setup aids */
+EXTERN(void) jpeg_set_colorspace(j_compress_ptr cinfo,
+ J_COLOR_SPACE colorspace);
+EXTERN(void) jpeg_default_colorspace(j_compress_ptr cinfo);
+EXTERN(void) jpeg_set_quality(j_compress_ptr cinfo, int quality,
+ boolean force_baseline);
+EXTERN(void) jpeg_set_linear_quality(j_compress_ptr cinfo, int scale_factor,
+ boolean force_baseline);
+#if JPEG_LIB_VERSION >= 70
+EXTERN(void) jpeg_default_qtables(j_compress_ptr cinfo,
+ boolean force_baseline);
+#endif
+EXTERN(void) jpeg_add_quant_table(j_compress_ptr cinfo, int which_tbl,
+ const unsigned int *basic_table,
+ int scale_factor, boolean force_baseline);
+EXTERN(int) jpeg_quality_scaling(int quality);
+EXTERN(void) jpeg_enable_lossless(j_compress_ptr cinfo,
+ int predictor_selection_value,
+ int point_transform);
+EXTERN(void) jpeg_simple_progression(j_compress_ptr cinfo);
+EXTERN(void) jpeg_suppress_tables(j_compress_ptr cinfo, boolean suppress);
+EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table(j_common_ptr cinfo);
+EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table(j_common_ptr cinfo);
+
+/* Main entry points for compression */
+EXTERN(void) jpeg_start_compress(j_compress_ptr cinfo,
+ boolean write_all_tables);
+EXTERN(JDIMENSION) jpeg_write_scanlines(j_compress_ptr cinfo,
+ JSAMPARRAY scanlines,
+ JDIMENSION num_lines);
+EXTERN(JDIMENSION) jpeg12_write_scanlines(j_compress_ptr cinfo,
+ J12SAMPARRAY scanlines,
+ JDIMENSION num_lines);
+EXTERN(JDIMENSION) jpeg16_write_scanlines(j_compress_ptr cinfo,
+ J16SAMPARRAY scanlines,
+ JDIMENSION num_lines);
+EXTERN(void) jpeg_finish_compress(j_compress_ptr cinfo);
+
+#if JPEG_LIB_VERSION >= 70
+/* Precalculate JPEG dimensions for current compression parameters. */
+EXTERN(void) jpeg_calc_jpeg_dimensions(j_compress_ptr cinfo);
+#endif
+
+/* Replaces jpeg_write_scanlines when writing raw downsampled data. */
+EXTERN(JDIMENSION) jpeg_write_raw_data(j_compress_ptr cinfo, JSAMPIMAGE data,
+ JDIMENSION num_lines);
+EXTERN(JDIMENSION) jpeg12_write_raw_data(j_compress_ptr cinfo,
+ J12SAMPIMAGE data,
+ JDIMENSION num_lines);
+
+/* Write a special marker. See libjpeg.txt concerning safe usage. */
+EXTERN(void) jpeg_write_marker(j_compress_ptr cinfo, int marker,
+ const JOCTET *dataptr, unsigned int datalen);
+/* Same, but piecemeal. */
+EXTERN(void) jpeg_write_m_header(j_compress_ptr cinfo, int marker,
+ unsigned int datalen);
+EXTERN(void) jpeg_write_m_byte(j_compress_ptr cinfo, int val);
+
+/* Alternate compression function: just write an abbreviated table file */
+EXTERN(void) jpeg_write_tables(j_compress_ptr cinfo);
+
+/* Write ICC profile. See libjpeg.txt for usage information. */
+EXTERN(void) jpeg_write_icc_profile(j_compress_ptr cinfo,
+ const JOCTET *icc_data_ptr,
+ unsigned int icc_data_len);
+
+
+/* Decompression startup: read start of JPEG datastream to see what's there */
+EXTERN(int) jpeg_read_header(j_decompress_ptr cinfo, boolean require_image);
+/* Return value is one of: */
+#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */
+#define JPEG_HEADER_OK 1 /* Found valid image datastream */
+#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */
+/* If you pass require_image = TRUE (normal case), you need not check for
+ * a TABLES_ONLY return code; an abbreviated file will cause an error exit.
+ * JPEG_SUSPENDED is only possible if you use a data source module that can
+ * give a suspension return (the stdio source module doesn't).
+ */
+
+/* Main entry points for decompression */
+EXTERN(boolean) jpeg_start_decompress(j_decompress_ptr cinfo);
+EXTERN(JDIMENSION) jpeg_read_scanlines(j_decompress_ptr cinfo,
+ JSAMPARRAY scanlines,
+ JDIMENSION max_lines);
+EXTERN(JDIMENSION) jpeg12_read_scanlines(j_decompress_ptr cinfo,
+ J12SAMPARRAY scanlines,
+ JDIMENSION max_lines);
+EXTERN(JDIMENSION) jpeg16_read_scanlines(j_decompress_ptr cinfo,
+ J16SAMPARRAY scanlines,
+ JDIMENSION max_lines);
+EXTERN(JDIMENSION) jpeg_skip_scanlines(j_decompress_ptr cinfo,
+ JDIMENSION num_lines);
+EXTERN(JDIMENSION) jpeg12_skip_scanlines(j_decompress_ptr cinfo,
+ JDIMENSION num_lines);
+EXTERN(void) jpeg_crop_scanline(j_decompress_ptr cinfo, JDIMENSION *xoffset,
+ JDIMENSION *width);
+EXTERN(void) jpeg12_crop_scanline(j_decompress_ptr cinfo, JDIMENSION *xoffset,
+ JDIMENSION *width);
+EXTERN(boolean) jpeg_finish_decompress(j_decompress_ptr cinfo);
+
+/* Replaces jpeg_read_scanlines when reading raw downsampled data. */
+EXTERN(JDIMENSION) jpeg_read_raw_data(j_decompress_ptr cinfo, JSAMPIMAGE data,
+ JDIMENSION max_lines);
+EXTERN(JDIMENSION) jpeg12_read_raw_data(j_decompress_ptr cinfo,
+ J12SAMPIMAGE data,
+ JDIMENSION max_lines);
+
+/* Additional entry points for buffered-image mode. */
+EXTERN(boolean) jpeg_has_multiple_scans(j_decompress_ptr cinfo);
+EXTERN(boolean) jpeg_start_output(j_decompress_ptr cinfo, int scan_number);
+EXTERN(boolean) jpeg_finish_output(j_decompress_ptr cinfo);
+EXTERN(boolean) jpeg_input_complete(j_decompress_ptr cinfo);
+EXTERN(void) jpeg_new_colormap(j_decompress_ptr cinfo);
+EXTERN(int) jpeg_consume_input(j_decompress_ptr cinfo);
+/* Return value is one of: */
+/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */
+#define JPEG_REACHED_SOS 1 /* Reached start of new scan */
+#define JPEG_REACHED_EOI 2 /* Reached end of image */
+#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */
+#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */
+
+/* Precalculate output dimensions for current decompression parameters. */
+#if JPEG_LIB_VERSION >= 80
+EXTERN(void) jpeg_core_output_dimensions(j_decompress_ptr cinfo);
+#endif
+EXTERN(void) jpeg_calc_output_dimensions(j_decompress_ptr cinfo);
+
+/* Control saving of COM and APPn markers into marker_list. */
+EXTERN(void) jpeg_save_markers(j_decompress_ptr cinfo, int marker_code,
+ unsigned int length_limit);
+
+/* Install a special processing method for COM or APPn markers. */
+EXTERN(void) jpeg_set_marker_processor(j_decompress_ptr cinfo,
+ int marker_code,
+ jpeg_marker_parser_method routine);
+
+/* Read or write raw DCT coefficients --- useful for lossless transcoding. */
+EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients(j_decompress_ptr cinfo);
+EXTERN(void) jpeg_write_coefficients(j_compress_ptr cinfo,
+ jvirt_barray_ptr *coef_arrays);
+EXTERN(void) jpeg_copy_critical_parameters(j_decompress_ptr srcinfo,
+ j_compress_ptr dstinfo);
+
+/* If you choose to abort compression or decompression before completing
+ * jpeg_finish_(de)compress, then you need to clean up to release memory,
+ * temporary files, etc. You can just call jpeg_destroy_(de)compress
+ * if you're done with the JPEG object, but if you want to clean it up and
+ * reuse it, call this:
+ */
+EXTERN(void) jpeg_abort_compress(j_compress_ptr cinfo);
+EXTERN(void) jpeg_abort_decompress(j_decompress_ptr cinfo);
+
+/* Generic versions of jpeg_abort and jpeg_destroy that work on either
+ * flavor of JPEG object. These may be more convenient in some places.
+ */
+EXTERN(void) jpeg_abort(j_common_ptr cinfo);
+EXTERN(void) jpeg_destroy(j_common_ptr cinfo);
+
+/* Default restart-marker-resync procedure for use by data source modules */
+EXTERN(boolean) jpeg_resync_to_restart(j_decompress_ptr cinfo, int desired);
+
+/* Read ICC profile. See libjpeg.txt for usage information. */
+EXTERN(boolean) jpeg_read_icc_profile(j_decompress_ptr cinfo,
+ JOCTET **icc_data_ptr,
+ unsigned int *icc_data_len);
+
+
+/* These marker codes are exported since applications and data source modules
+ * are likely to want to use them.
+ */
+
+#define JPEG_RST0 0xD0 /* RST0 marker code */
+#define JPEG_EOI 0xD9 /* EOI marker code */
+#define JPEG_APP0 0xE0 /* APP0 marker code */
+#define JPEG_COM 0xFE /* COM marker code */
+
+
+/* If we have a brain-damaged compiler that emits warnings (or worse, errors)
+ * for structure definitions that are never filled in, keep it quiet by
+ * supplying dummy definitions for the various substructures.
+ */
+
+#ifdef INCOMPLETE_TYPES_BROKEN
+#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */
+struct jvirt_sarray_control { long dummy; };
+struct jvirt_barray_control { long dummy; };
+struct jpeg_comp_master { long dummy; };
+struct jpeg_c_main_controller { long dummy; };
+struct jpeg_c_prep_controller { long dummy; };
+struct jpeg_c_coef_controller { long dummy; };
+struct jpeg_marker_writer { long dummy; };
+struct jpeg_color_converter { long dummy; };
+struct jpeg_downsampler { long dummy; };
+struct jpeg_forward_dct { long dummy; };
+struct jpeg_entropy_encoder { long dummy; };
+struct jpeg_decomp_master { long dummy; };
+struct jpeg_d_main_controller { long dummy; };
+struct jpeg_d_coef_controller { long dummy; };
+struct jpeg_d_post_controller { long dummy; };
+struct jpeg_input_controller { long dummy; };
+struct jpeg_marker_reader { long dummy; };
+struct jpeg_entropy_decoder { long dummy; };
+struct jpeg_inverse_dct { long dummy; };
+struct jpeg_upsampler { long dummy; };
+struct jpeg_color_deconverter { long dummy; };
+struct jpeg_color_quantizer { long dummy; };
+#endif /* JPEG_INTERNALS */
+#endif /* INCOMPLETE_TYPES_BROKEN */
+
+
+/*
+ * The JPEG library modules define JPEG_INTERNALS before including this file.
+ * The internal structure declarations are read only when that is true.
+ * Applications using the library should not include jpegint.h, but may wish
+ * to include jerror.h.
+ */
+
+#ifdef JPEG_INTERNALS
+#include "jpegint.h" /* fetch private declarations */
+#include "jerror.h" /* fetch error codes too */
+#endif
+
+#ifdef __cplusplus
+#ifndef DONT_USE_EXTERN_C
+}
+#endif
+#endif
+
+#endif /* JPEGLIB_H */
diff --git a/vcpkg_installed/arm64-osx/include/lzma.h b/vcpkg_installed/arm64-osx/include/lzma.h
new file mode 100644
index 00000000..3774b128
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma.h
@@ -0,0 +1,327 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file api/lzma.h
+ * \brief The public API of liblzma data compression library
+ * \mainpage
+ *
+ * liblzma is a general-purpose data compression library with a zlib-like API.
+ * The native file format is .xz, but also the old .lzma format and raw (no
+ * headers) streams are supported. Multiple compression algorithms (filters)
+ * are supported. Currently LZMA2 is the primary filter.
+ *
+ * liblzma is part of XZ Utils . XZ Utils
+ * includes a gzip-like command line tool named xz and some other tools.
+ * XZ Utils is developed and maintained by Lasse Collin.
+ *
+ * Major parts of liblzma are based on code written by Igor Pavlov,
+ * specifically the LZMA SDK .
+ *
+ * The SHA-256 implementation in liblzma is based on code written by
+ * Wei Dai in Crypto++ Library .
+ *
+ * liblzma is distributed under the BSD Zero Clause License (0BSD).
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H
+#define LZMA_H
+
+/*****************************
+ * Required standard headers *
+ *****************************/
+
+/*
+ * liblzma API headers need some standard types and macros. To allow
+ * including lzma.h without requiring the application to include other
+ * headers first, lzma.h includes the required standard headers unless
+ * they already seem to be included already or if LZMA_MANUAL_HEADERS
+ * has been defined.
+ *
+ * Here's what types and macros are needed and from which headers:
+ * - stddef.h: size_t, NULL
+ * - stdint.h: uint8_t, uint32_t, uint64_t, UINT32_C(n), uint64_C(n),
+ * UINT32_MAX, UINT64_MAX
+ *
+ * However, inttypes.h is a little more portable than stdint.h, although
+ * inttypes.h declares some unneeded things compared to plain stdint.h.
+ *
+ * The hacks below aren't perfect, specifically they assume that inttypes.h
+ * exists and that it typedefs at least uint8_t, uint32_t, and uint64_t,
+ * and that, in case of incomplete inttypes.h, unsigned int is 32-bit.
+ * If the application already takes care of setting up all the types and
+ * macros properly (for example by using gnulib's stdint.h or inttypes.h),
+ * we try to detect that the macros are already defined and don't include
+ * inttypes.h here again. However, you may define LZMA_MANUAL_HEADERS to
+ * force this file to never include any system headers.
+ *
+ * Some could argue that liblzma API should provide all the required types,
+ * for example lzma_uint64, LZMA_UINT64_C(n), and LZMA_UINT64_MAX. This was
+ * seen as an unnecessary mess, since most systems already provide all the
+ * necessary types and macros in the standard headers.
+ *
+ * Note that liblzma API still has lzma_bool, because using stdbool.h would
+ * break C89 and C++ programs on many systems. sizeof(bool) in C99 isn't
+ * necessarily the same as sizeof(bool) in C++.
+ */
+
+#ifndef LZMA_MANUAL_HEADERS
+ /*
+ * I suppose this works portably also in C++. Note that in C++,
+ * we need to get size_t into the global namespace.
+ */
+# include
+
+ /*
+ * Skip inttypes.h if we already have all the required macros. If we
+ * have the macros, we assume that we have the matching typedefs too.
+ */
+# if !defined(UINT32_C) || !defined(UINT64_C) \
+ || !defined(UINT32_MAX) || !defined(UINT64_MAX)
+ /*
+ * MSVC versions older than 2013 have no C99 support, and
+ * thus they cannot be used to compile liblzma. Using an
+ * existing liblzma.dll with old MSVC can work though(*),
+ * but we need to define the required standard integer
+ * types here in a MSVC-specific way.
+ *
+ * (*) If you do this, the existing liblzma.dll probably uses
+ * a different runtime library than your MSVC-built
+ * application. Mixing runtimes is generally bad, but
+ * in this case it should work as long as you avoid
+ * the few rarely-needed liblzma functions that allocate
+ * memory and expect the caller to free it using free().
+ */
+# if defined(_WIN32) && defined(_MSC_VER) && _MSC_VER < 1800
+ typedef unsigned __int8 uint8_t;
+ typedef unsigned __int32 uint32_t;
+ typedef unsigned __int64 uint64_t;
+# else
+ /* Use the standard inttypes.h. */
+# ifdef __cplusplus
+ /*
+ * C99 sections 7.18.2 and 7.18.4 specify
+ * that C++ implementations define the limit
+ * and constant macros only if specifically
+ * requested. Note that if you want the
+ * format macros (PRIu64 etc.) too, you need
+ * to define __STDC_FORMAT_MACROS before
+ * including lzma.h, since re-including
+ * inttypes.h with __STDC_FORMAT_MACROS
+ * defined doesn't necessarily work.
+ */
+# ifndef __STDC_LIMIT_MACROS
+# define __STDC_LIMIT_MACROS 1
+# endif
+# ifndef __STDC_CONSTANT_MACROS
+# define __STDC_CONSTANT_MACROS 1
+# endif
+# endif
+
+# include
+# endif
+
+ /*
+ * Some old systems have only the typedefs in inttypes.h, and
+ * lack all the macros. For those systems, we need a few more
+ * hacks. We assume that unsigned int is 32-bit and unsigned
+ * long is either 32-bit or 64-bit. If these hacks aren't
+ * enough, the application has to setup the types manually
+ * before including lzma.h.
+ */
+# ifndef UINT32_C
+# if defined(_WIN32) && defined(_MSC_VER)
+# define UINT32_C(n) n ## UI32
+# else
+# define UINT32_C(n) n ## U
+# endif
+# endif
+
+# ifndef UINT64_C
+# if defined(_WIN32) && defined(_MSC_VER)
+# define UINT64_C(n) n ## UI64
+# else
+ /* Get ULONG_MAX. */
+# include
+# if ULONG_MAX == 4294967295UL
+# define UINT64_C(n) n ## ULL
+# else
+# define UINT64_C(n) n ## UL
+# endif
+# endif
+# endif
+
+# ifndef UINT32_MAX
+# define UINT32_MAX (UINT32_C(4294967295))
+# endif
+
+# ifndef UINT64_MAX
+# define UINT64_MAX (UINT64_C(18446744073709551615))
+# endif
+# endif
+#endif /* ifdef LZMA_MANUAL_HEADERS */
+
+
+/******************
+ * LZMA_API macro *
+ ******************/
+
+/*
+ * Some systems require that the functions and function pointers are
+ * declared specially in the headers. LZMA_API_IMPORT is for importing
+ * symbols and LZMA_API_CALL is to specify the calling convention.
+ *
+ * By default it is assumed that the application will link dynamically
+ * against liblzma. #define LZMA_API_STATIC in your application if you
+ * want to link against static liblzma. If you don't care about portability
+ * to operating systems like Windows, or at least don't care about linking
+ * against static liblzma on them, don't worry about LZMA_API_STATIC. That
+ * is, most developers will never need to use LZMA_API_STATIC.
+ *
+ * The GCC variants are a special case on Windows (Cygwin and MinGW-w64).
+ * We rely on GCC doing the right thing with its auto-import feature,
+ * and thus don't use __declspec(dllimport). This way developers don't
+ * need to worry about LZMA_API_STATIC. Also the calling convention is
+ * omitted on Cygwin but not on MinGW-w64.
+ */
+#ifndef LZMA_API_IMPORT
+# if !1 && defined(_WIN32) && !defined(__GNUC__)
+# define LZMA_API_IMPORT __declspec(dllimport)
+# else
+# define LZMA_API_IMPORT
+# endif
+#endif
+
+#ifndef LZMA_API_CALL
+# if defined(_WIN32) && !defined(__CYGWIN__)
+# define LZMA_API_CALL __cdecl
+# else
+# define LZMA_API_CALL
+# endif
+#endif
+
+#ifndef LZMA_API
+# define LZMA_API(type) LZMA_API_IMPORT type LZMA_API_CALL
+#endif
+
+
+/***********
+ * nothrow *
+ ***********/
+
+/*
+ * None of the functions in liblzma may throw an exception. Even
+ * the functions that use callback functions won't throw exceptions,
+ * because liblzma would break if a callback function threw an exception.
+ */
+#ifndef lzma_nothrow
+# if defined(__cplusplus)
+# if __cplusplus >= 201103L || (defined(_MSVC_LANG) \
+ && _MSVC_LANG >= 201103L)
+# define lzma_nothrow noexcept
+# else
+# define lzma_nothrow throw()
+# endif
+# elif defined(__GNUC__) && (__GNUC__ > 3 \
+ || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
+# define lzma_nothrow __attribute__((__nothrow__))
+# else
+# define lzma_nothrow
+# endif
+#endif
+
+
+/********************
+ * GNU C extensions *
+ ********************/
+
+/*
+ * GNU C extensions are used conditionally in the public API. It doesn't
+ * break anything if these are sometimes enabled and sometimes not, only
+ * affects warnings and optimizations.
+ */
+#if defined(__GNUC__) && __GNUC__ >= 3
+# ifndef lzma_attribute
+# define lzma_attribute(attr) __attribute__(attr)
+# endif
+
+ /* warn_unused_result was added in GCC 3.4. */
+# ifndef lzma_attr_warn_unused_result
+# if __GNUC__ == 3 && __GNUC_MINOR__ < 4
+# define lzma_attr_warn_unused_result
+# endif
+# endif
+
+#else
+# ifndef lzma_attribute
+# define lzma_attribute(attr)
+# endif
+#endif
+
+
+#ifndef lzma_attr_pure
+# define lzma_attr_pure lzma_attribute((__pure__))
+#endif
+
+#ifndef lzma_attr_const
+# define lzma_attr_const lzma_attribute((__const__))
+#endif
+
+#ifndef lzma_attr_warn_unused_result
+# define lzma_attr_warn_unused_result \
+ lzma_attribute((__warn_unused_result__))
+#endif
+
+
+/**************
+ * Subheaders *
+ **************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Subheaders check that this is defined. It is to prevent including
+ * them directly from applications.
+ */
+#define LZMA_H_INTERNAL 1
+
+/* Basic features */
+#include "lzma/version.h"
+#include "lzma/base.h"
+#include "lzma/vli.h"
+#include "lzma/check.h"
+
+/* Filters */
+#include "lzma/filter.h"
+#include "lzma/bcj.h"
+#include "lzma/delta.h"
+#include "lzma/lzma12.h"
+
+/* Container formats */
+#include "lzma/container.h"
+
+/* Advanced features */
+#include "lzma/stream_flags.h"
+#include "lzma/block.h"
+#include "lzma/index.h"
+#include "lzma/index_hash.h"
+
+/* Hardware information */
+#include "lzma/hardware.h"
+
+/*
+ * All subheaders included. Undefine LZMA_H_INTERNAL to prevent applications
+ * re-including the subheaders.
+ */
+#undef LZMA_H_INTERNAL
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ifndef LZMA_H */
diff --git a/vcpkg_installed/arm64-osx/include/lzma/base.h b/vcpkg_installed/arm64-osx/include/lzma/base.h
new file mode 100644
index 00000000..590e1d22
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/base.h
@@ -0,0 +1,747 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/base.h
+ * \brief Data types and functions used in many places in liblzma API
+ * \note Never include this file directly. Use instead.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/**
+ * \brief Boolean
+ *
+ * This is here because C89 doesn't have stdbool.h. To set a value for
+ * variables having type lzma_bool, you can use
+ * - C99's 'true' and 'false' from stdbool.h;
+ * - C++'s internal 'true' and 'false'; or
+ * - integers one (true) and zero (false).
+ */
+typedef unsigned char lzma_bool;
+
+
+/**
+ * \brief Type of reserved enumeration variable in structures
+ *
+ * To avoid breaking library ABI when new features are added, several
+ * structures contain extra variables that may be used in future. Since
+ * sizeof(enum) can be different than sizeof(int), and sizeof(enum) may
+ * even vary depending on the range of enumeration constants, we specify
+ * a separate type to be used for reserved enumeration variables. All
+ * enumeration constants in liblzma API will be non-negative and less
+ * than 128, which should guarantee that the ABI won't break even when
+ * new constants are added to existing enumerations.
+ */
+typedef enum {
+ LZMA_RESERVED_ENUM = 0
+} lzma_reserved_enum;
+
+
+/**
+ * \brief Return values used by several functions in liblzma
+ *
+ * Check the descriptions of specific functions to find out which return
+ * values they can return. With some functions the return values may have
+ * more specific meanings than described here; those differences are
+ * described per-function basis.
+ */
+typedef enum {
+ LZMA_OK = 0,
+ /**<
+ * \brief Operation completed successfully
+ */
+
+ LZMA_STREAM_END = 1,
+ /**<
+ * \brief End of stream was reached
+ *
+ * In encoder, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, or
+ * LZMA_FINISH was finished. In decoder, this indicates
+ * that all the data was successfully decoded.
+ *
+ * In all cases, when LZMA_STREAM_END is returned, the last
+ * output bytes should be picked from strm->next_out.
+ */
+
+ LZMA_NO_CHECK = 2,
+ /**<
+ * \brief Input stream has no integrity check
+ *
+ * This return value can be returned only if the
+ * LZMA_TELL_NO_CHECK flag was used when initializing
+ * the decoder. LZMA_NO_CHECK is just a warning, and
+ * the decoding can be continued normally.
+ *
+ * It is possible to call lzma_get_check() immediately after
+ * lzma_code has returned LZMA_NO_CHECK. The result will
+ * naturally be LZMA_CHECK_NONE, but the possibility to call
+ * lzma_get_check() may be convenient in some applications.
+ */
+
+ LZMA_UNSUPPORTED_CHECK = 3,
+ /**<
+ * \brief Cannot calculate the integrity check
+ *
+ * The usage of this return value is different in encoders
+ * and decoders.
+ *
+ * Encoders can return this value only from the initialization
+ * function. If initialization fails with this value, the
+ * encoding cannot be done, because there's no way to produce
+ * output with the correct integrity check.
+ *
+ * Decoders can return this value only from lzma_code() and
+ * only if the LZMA_TELL_UNSUPPORTED_CHECK flag was used when
+ * initializing the decoder. The decoding can still be
+ * continued normally even if the check type is unsupported,
+ * but naturally the check will not be validated, and possible
+ * errors may go undetected.
+ *
+ * With decoder, it is possible to call lzma_get_check()
+ * immediately after lzma_code() has returned
+ * LZMA_UNSUPPORTED_CHECK. This way it is possible to find
+ * out what the unsupported Check ID was.
+ */
+
+ LZMA_GET_CHECK = 4,
+ /**<
+ * \brief Integrity check type is now available
+ *
+ * This value can be returned only by the lzma_code() function
+ * and only if the decoder was initialized with the
+ * LZMA_TELL_ANY_CHECK flag. LZMA_GET_CHECK tells the
+ * application that it may now call lzma_get_check() to find
+ * out the Check ID. This can be used, for example, to
+ * implement a decoder that accepts only files that have
+ * strong enough integrity check.
+ */
+
+ LZMA_MEM_ERROR = 5,
+ /**<
+ * \brief Cannot allocate memory
+ *
+ * Memory allocation failed, or the size of the allocation
+ * would be greater than SIZE_MAX.
+ *
+ * Due to internal implementation reasons, the coding cannot
+ * be continued even if more memory were made available after
+ * LZMA_MEM_ERROR.
+ */
+
+ LZMA_MEMLIMIT_ERROR = 6,
+ /**<
+ * \brief Memory usage limit was reached
+ *
+ * Decoder would need more memory than allowed by the
+ * specified memory usage limit. To continue decoding,
+ * the memory usage limit has to be increased with
+ * lzma_memlimit_set().
+ *
+ * liblzma 5.2.6 and earlier had a bug in single-threaded .xz
+ * decoder (lzma_stream_decoder()) which made it impossible
+ * to continue decoding after LZMA_MEMLIMIT_ERROR even if
+ * the limit was increased using lzma_memlimit_set().
+ * Other decoders worked correctly.
+ */
+
+ LZMA_FORMAT_ERROR = 7,
+ /**<
+ * \brief File format not recognized
+ *
+ * The decoder did not recognize the input as supported file
+ * format. This error can occur, for example, when trying to
+ * decode .lzma format file with lzma_stream_decoder,
+ * because lzma_stream_decoder accepts only the .xz format.
+ */
+
+ LZMA_OPTIONS_ERROR = 8,
+ /**<
+ * \brief Invalid or unsupported options
+ *
+ * Invalid or unsupported options, for example
+ * - unsupported filter(s) or filter options; or
+ * - reserved bits set in headers (decoder only).
+ *
+ * Rebuilding liblzma with more features enabled, or
+ * upgrading to a newer version of liblzma may help.
+ */
+
+ LZMA_DATA_ERROR = 9,
+ /**<
+ * \brief Data is corrupt
+ *
+ * The usage of this return value is different in encoders
+ * and decoders. In both encoder and decoder, the coding
+ * cannot continue after this error.
+ *
+ * Encoders return this if size limits of the target file
+ * format would be exceeded. These limits are huge, thus
+ * getting this error from an encoder is mostly theoretical.
+ * For example, the maximum compressed and uncompressed
+ * size of a .xz Stream is roughly 8 EiB (2^63 bytes).
+ *
+ * Decoders return this error if the input data is corrupt.
+ * This can mean, for example, invalid CRC32 in headers
+ * or invalid check of uncompressed data.
+ */
+
+ LZMA_BUF_ERROR = 10,
+ /**<
+ * \brief No progress is possible
+ *
+ * This error code is returned when the coder cannot consume
+ * any new input and produce any new output. The most common
+ * reason for this error is that the input stream being
+ * decoded is truncated or corrupt.
+ *
+ * This error is not fatal. Coding can be continued normally
+ * by providing more input and/or more output space, if
+ * possible.
+ *
+ * Typically the first call to lzma_code() that can do no
+ * progress returns LZMA_OK instead of LZMA_BUF_ERROR. Only
+ * the second consecutive call doing no progress will return
+ * LZMA_BUF_ERROR. This is intentional.
+ *
+ * With zlib, Z_BUF_ERROR may be returned even if the
+ * application is doing nothing wrong, so apps will need
+ * to handle Z_BUF_ERROR specially. The above hack
+ * guarantees that liblzma never returns LZMA_BUF_ERROR
+ * to properly written applications unless the input file
+ * is truncated or corrupt. This should simplify the
+ * applications a little.
+ */
+
+ LZMA_PROG_ERROR = 11,
+ /**<
+ * \brief Programming error
+ *
+ * This indicates that the arguments given to the function are
+ * invalid or the internal state of the decoder is corrupt.
+ * - Function arguments are invalid or the structures
+ * pointed by the argument pointers are invalid
+ * e.g. if strm->next_out has been set to NULL and
+ * strm->avail_out > 0 when calling lzma_code().
+ * - lzma_* functions have been called in wrong order
+ * e.g. lzma_code() was called right after lzma_end().
+ * - If errors occur randomly, the reason might be flaky
+ * hardware.
+ *
+ * If you think that your code is correct, this error code
+ * can be a sign of a bug in liblzma. See the documentation
+ * how to report bugs.
+ */
+
+ LZMA_SEEK_NEEDED = 12,
+ /**<
+ * \brief Request to change the input file position
+ *
+ * Some coders can do random access in the input file. The
+ * initialization functions of these coders take the file size
+ * as an argument. No other coders can return LZMA_SEEK_NEEDED.
+ *
+ * When this value is returned, the application must seek to
+ * the file position given in lzma_stream.seek_pos. This value
+ * is guaranteed to never exceed the file size that was
+ * specified at the coder initialization.
+ *
+ * After seeking the application should read new input and
+ * pass it normally via lzma_stream.next_in and .avail_in.
+ */
+
+ /*
+ * These enumerations may be used internally by liblzma
+ * but they will never be returned to applications.
+ */
+ LZMA_RET_INTERNAL1 = 101,
+ LZMA_RET_INTERNAL2 = 102,
+ LZMA_RET_INTERNAL3 = 103,
+ LZMA_RET_INTERNAL4 = 104,
+ LZMA_RET_INTERNAL5 = 105,
+ LZMA_RET_INTERNAL6 = 106,
+ LZMA_RET_INTERNAL7 = 107,
+ LZMA_RET_INTERNAL8 = 108
+} lzma_ret;
+
+
+/**
+ * \brief The 'action' argument for lzma_code()
+ *
+ * After the first use of LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, LZMA_FULL_BARRIER,
+ * or LZMA_FINISH, the same 'action' must be used until lzma_code() returns
+ * LZMA_STREAM_END. Also, the amount of input (that is, strm->avail_in) must
+ * not be modified by the application until lzma_code() returns
+ * LZMA_STREAM_END. Changing the 'action' or modifying the amount of input
+ * will make lzma_code() return LZMA_PROG_ERROR.
+ */
+typedef enum {
+ LZMA_RUN = 0,
+ /**<
+ * \brief Continue coding
+ *
+ * Encoder: Encode as much input as possible. Some internal
+ * buffering will probably be done (depends on the filter
+ * chain in use), which causes latency: the input used won't
+ * usually be decodeable from the output of the same
+ * lzma_code() call.
+ *
+ * Decoder: Decode as much input as possible and produce as
+ * much output as possible.
+ */
+
+ LZMA_SYNC_FLUSH = 1,
+ /**<
+ * \brief Make all the input available at output
+ *
+ * Normally the encoder introduces some latency.
+ * LZMA_SYNC_FLUSH forces all the buffered data to be
+ * available at output without resetting the internal
+ * state of the encoder. This way it is possible to use
+ * compressed stream for example for communication over
+ * network.
+ *
+ * Only some filters support LZMA_SYNC_FLUSH. Trying to use
+ * LZMA_SYNC_FLUSH with filters that don't support it will
+ * make lzma_code() return LZMA_OPTIONS_ERROR. For example,
+ * LZMA1 doesn't support LZMA_SYNC_FLUSH but LZMA2 does.
+ *
+ * Using LZMA_SYNC_FLUSH very often can dramatically reduce
+ * the compression ratio. With some filters (for example,
+ * LZMA2), fine-tuning the compression options may help
+ * mitigate this problem significantly (for example,
+ * match finder with LZMA2).
+ *
+ * Decoders don't support LZMA_SYNC_FLUSH.
+ */
+
+ LZMA_FULL_FLUSH = 2,
+ /**<
+ * \brief Finish encoding of the current Block
+ *
+ * All the input data going to the current Block must have
+ * been given to the encoder (the last bytes can still be
+ * pending in *next_in). Call lzma_code() with LZMA_FULL_FLUSH
+ * until it returns LZMA_STREAM_END. Then continue normally
+ * with LZMA_RUN or finish the Stream with LZMA_FINISH.
+ *
+ * This action is currently supported only by Stream encoder
+ * and easy encoder (which uses Stream encoder). If there is
+ * no unfinished Block, no empty Block is created.
+ */
+
+ LZMA_FULL_BARRIER = 4,
+ /**<
+ * \brief Finish encoding of the current Block
+ *
+ * This is like LZMA_FULL_FLUSH except that this doesn't
+ * necessarily wait until all the input has been made
+ * available via the output buffer. That is, lzma_code()
+ * might return LZMA_STREAM_END as soon as all the input
+ * has been consumed (avail_in == 0).
+ *
+ * LZMA_FULL_BARRIER is useful with a threaded encoder if
+ * one wants to split the .xz Stream into Blocks at specific
+ * offsets but doesn't care if the output isn't flushed
+ * immediately. Using LZMA_FULL_BARRIER allows keeping
+ * the threads busy while LZMA_FULL_FLUSH would make
+ * lzma_code() wait until all the threads have finished
+ * until more data could be passed to the encoder.
+ *
+ * With a lzma_stream initialized with the single-threaded
+ * lzma_stream_encoder() or lzma_easy_encoder(),
+ * LZMA_FULL_BARRIER is an alias for LZMA_FULL_FLUSH.
+ */
+
+ LZMA_FINISH = 3
+ /**<
+ * \brief Finish the coding operation
+ *
+ * All the input data must have been given to the encoder
+ * (the last bytes can still be pending in next_in).
+ * Call lzma_code() with LZMA_FINISH until it returns
+ * LZMA_STREAM_END. Once LZMA_FINISH has been used,
+ * the amount of input must no longer be changed by
+ * the application.
+ *
+ * When decoding, using LZMA_FINISH is optional unless the
+ * LZMA_CONCATENATED flag was used when the decoder was
+ * initialized. When LZMA_CONCATENATED was not used, the only
+ * effect of LZMA_FINISH is that the amount of input must not
+ * be changed just like in the encoder.
+ */
+} lzma_action;
+
+
+/**
+ * \brief Custom functions for memory handling
+ *
+ * A pointer to lzma_allocator may be passed via lzma_stream structure
+ * to liblzma, and some advanced functions take a pointer to lzma_allocator
+ * as a separate function argument. The library will use the functions
+ * specified in lzma_allocator for memory handling instead of the default
+ * malloc() and free(). C++ users should note that the custom memory
+ * handling functions must not throw exceptions.
+ *
+ * Single-threaded mode only: liblzma doesn't make an internal copy of
+ * lzma_allocator. Thus, it is OK to change these function pointers in
+ * the middle of the coding process, but obviously it must be done
+ * carefully to make sure that the replacement 'free' can deallocate
+ * memory allocated by the earlier 'alloc' function(s).
+ *
+ * Multithreaded mode: liblzma might internally store pointers to the
+ * lzma_allocator given via the lzma_stream structure. The application
+ * must not change the allocator pointer in lzma_stream or the contents
+ * of the pointed lzma_allocator structure until lzma_end() has been used
+ * to free the memory associated with that lzma_stream. The allocation
+ * functions might be called simultaneously from multiple threads, and
+ * thus they must be thread safe.
+ */
+typedef struct {
+ /**
+ * \brief Pointer to a custom memory allocation function
+ *
+ * If you don't want a custom allocator, but still want
+ * custom free(), set this to NULL and liblzma will use
+ * the standard malloc().
+ *
+ * \param opaque lzma_allocator.opaque (see below)
+ * \param nmemb Number of elements like in calloc(). liblzma
+ * will always set nmemb to 1, so it is safe to
+ * ignore nmemb in a custom allocator if you like.
+ * The nmemb argument exists only for
+ * compatibility with zlib and libbzip2.
+ * \param size Size of an element in bytes.
+ * liblzma never sets this to zero.
+ *
+ * \return Pointer to the beginning of a memory block of
+ * 'size' bytes, or NULL if allocation fails
+ * for some reason. When allocation fails, functions
+ * of liblzma return LZMA_MEM_ERROR.
+ *
+ * The allocator should not waste time zeroing the allocated buffers.
+ * This is not only about speed, but also memory usage, since the
+ * operating system kernel doesn't necessarily allocate the requested
+ * memory in physical memory until it is actually used. With small
+ * input files, liblzma may actually need only a fraction of the
+ * memory that it requested for allocation.
+ *
+ * \note LZMA_MEM_ERROR is also used when the size of the
+ * allocation would be greater than SIZE_MAX. Thus,
+ * don't assume that the custom allocator must have
+ * returned NULL if some function from liblzma
+ * returns LZMA_MEM_ERROR.
+ */
+ void *(LZMA_API_CALL *alloc)(void *opaque, size_t nmemb, size_t size);
+
+ /**
+ * \brief Pointer to a custom memory freeing function
+ *
+ * If you don't want a custom freeing function, but still
+ * want a custom allocator, set this to NULL and liblzma
+ * will use the standard free().
+ *
+ * \param opaque lzma_allocator.opaque (see below)
+ * \param ptr Pointer returned by lzma_allocator.alloc(),
+ * or when it is set to NULL, a pointer returned
+ * by the standard malloc().
+ */
+ void (LZMA_API_CALL *free)(void *opaque, void *ptr);
+
+ /**
+ * \brief Pointer passed to .alloc() and .free()
+ *
+ * opaque is passed as the first argument to lzma_allocator.alloc()
+ * and lzma_allocator.free(). This intended to ease implementing
+ * custom memory allocation functions for use with liblzma.
+ *
+ * If you don't need this, you should set this to NULL.
+ */
+ void *opaque;
+
+} lzma_allocator;
+
+
+/**
+ * \brief Internal data structure
+ *
+ * The contents of this structure is not visible outside the library.
+ */
+typedef struct lzma_internal_s lzma_internal;
+
+
+/**
+ * \brief Passing data to and from liblzma
+ *
+ * The lzma_stream structure is used for
+ * - passing pointers to input and output buffers to liblzma;
+ * - defining custom memory handler functions; and
+ * - holding a pointer to coder-specific internal data structures.
+ *
+ * Typical usage:
+ *
+ * - After allocating lzma_stream (on stack or with malloc()), it must be
+ * initialized to LZMA_STREAM_INIT (see LZMA_STREAM_INIT for details).
+ *
+ * - Initialize a coder to the lzma_stream, for example by using
+ * lzma_easy_encoder() or lzma_auto_decoder(). Some notes:
+ * - In contrast to zlib, strm->next_in and strm->next_out are
+ * ignored by all initialization functions, thus it is safe
+ * to not initialize them yet.
+ * - The initialization functions always set strm->total_in and
+ * strm->total_out to zero.
+ * - If the initialization function fails, no memory is left allocated
+ * that would require freeing with lzma_end() even if some memory was
+ * associated with the lzma_stream structure when the initialization
+ * function was called.
+ *
+ * - Use lzma_code() to do the actual work.
+ *
+ * - Once the coding has been finished, the existing lzma_stream can be
+ * reused. It is OK to reuse lzma_stream with different initialization
+ * function without calling lzma_end() first. Old allocations are
+ * automatically freed.
+ *
+ * - Finally, use lzma_end() to free the allocated memory. lzma_end() never
+ * frees the lzma_stream structure itself.
+ *
+ * Application may modify the values of total_in and total_out as it wants.
+ * They are updated by liblzma to match the amount of data read and
+ * written but aren't used for anything else except as a possible return
+ * values from lzma_get_progress().
+ */
+typedef struct {
+ const uint8_t *next_in; /**< Pointer to the next input byte. */
+ size_t avail_in; /**< Number of available input bytes in next_in. */
+ uint64_t total_in; /**< Total number of bytes read by liblzma. */
+
+ uint8_t *next_out; /**< Pointer to the next output position. */
+ size_t avail_out; /**< Amount of free space in next_out. */
+ uint64_t total_out; /**< Total number of bytes written by liblzma. */
+
+ /**
+ * \brief Custom memory allocation functions
+ *
+ * In most cases this is NULL which makes liblzma use
+ * the standard malloc() and free().
+ *
+ * \note In 5.0.x this is not a const pointer.
+ */
+ const lzma_allocator *allocator;
+
+ /** Internal state is not visible to applications. */
+ lzma_internal *internal;
+
+ /*
+ * Reserved space to allow possible future extensions without
+ * breaking the ABI. Excluding the initialization of this structure,
+ * you should not touch these, because the names of these variables
+ * may change.
+ */
+
+ /** \private Reserved member. */
+ void *reserved_ptr1;
+
+ /** \private Reserved member. */
+ void *reserved_ptr2;
+
+ /** \private Reserved member. */
+ void *reserved_ptr3;
+
+ /** \private Reserved member. */
+ void *reserved_ptr4;
+
+ /**
+ * \brief New seek input position for LZMA_SEEK_NEEDED
+ *
+ * When lzma_code() returns LZMA_SEEK_NEEDED, the new input position
+ * needed by liblzma will be available seek_pos. The value is
+ * guaranteed to not exceed the file size that was specified when
+ * this lzma_stream was initialized.
+ *
+ * In all other situations the value of this variable is undefined.
+ */
+ uint64_t seek_pos;
+
+ /** \private Reserved member. */
+ uint64_t reserved_int2;
+
+ /** \private Reserved member. */
+ size_t reserved_int3;
+
+ /** \private Reserved member. */
+ size_t reserved_int4;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum1;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum2;
+
+} lzma_stream;
+
+
+/**
+ * \brief Initialization for lzma_stream
+ *
+ * When you declare an instance of lzma_stream, you can immediately
+ * initialize it so that initialization functions know that no memory
+ * has been allocated yet:
+ *
+ * lzma_stream strm = LZMA_STREAM_INIT;
+ *
+ * If you need to initialize a dynamically allocated lzma_stream, you can use
+ * memset(strm_pointer, 0, sizeof(lzma_stream)). Strictly speaking, this
+ * violates the C standard since NULL may have different internal
+ * representation than zero, but it should be portable enough in practice.
+ * Anyway, for maximum portability, you can use something like this:
+ *
+ * lzma_stream tmp = LZMA_STREAM_INIT;
+ * *strm = tmp;
+ */
+#define LZMA_STREAM_INIT \
+ { NULL, 0, 0, NULL, 0, 0, NULL, NULL, \
+ NULL, NULL, NULL, NULL, 0, 0, 0, 0, \
+ LZMA_RESERVED_ENUM, LZMA_RESERVED_ENUM }
+
+
+/**
+ * \brief Encode or decode data
+ *
+ * Once the lzma_stream has been successfully initialized (e.g. with
+ * lzma_stream_encoder()), the actual encoding or decoding is done
+ * using this function. The application has to update strm->next_in,
+ * strm->avail_in, strm->next_out, and strm->avail_out to pass input
+ * to and get output from liblzma.
+ *
+ * See the description of the coder-specific initialization function to find
+ * out what 'action' values are supported by the coder.
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param action Action for this function to take. Must be a valid
+ * lzma_action enum value.
+ *
+ * \return Any valid lzma_ret. See the lzma_ret enum description for more
+ * information.
+ */
+extern LZMA_API(lzma_ret) lzma_code(lzma_stream *strm, lzma_action action)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Free memory allocated for the coder data structures
+ *
+ * After lzma_end(strm), strm->internal is guaranteed to be NULL. No other
+ * members of the lzma_stream structure are touched.
+ *
+ * \note zlib indicates an error if application end()s unfinished
+ * stream structure. liblzma doesn't do this, and assumes that
+ * application knows what it is doing.
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ */
+extern LZMA_API(void) lzma_end(lzma_stream *strm) lzma_nothrow;
+
+
+/**
+ * \brief Get progress information
+ *
+ * In single-threaded mode, applications can get progress information from
+ * strm->total_in and strm->total_out. In multi-threaded mode this is less
+ * useful because a significant amount of both input and output data gets
+ * buffered internally by liblzma. This makes total_in and total_out give
+ * misleading information and also makes the progress indicator updates
+ * non-smooth.
+ *
+ * This function gives realistic progress information also in multi-threaded
+ * mode by taking into account the progress made by each thread. In
+ * single-threaded mode *progress_in and *progress_out are set to
+ * strm->total_in and strm->total_out, respectively.
+ *
+ * \param strm Pointer to lzma_stream that is at least
+ * initialized with LZMA_STREAM_INIT.
+ * \param[out] progress_in Pointer to the number of input bytes processed.
+ * \param[out] progress_out Pointer to the number of output bytes processed.
+ */
+extern LZMA_API(void) lzma_get_progress(lzma_stream *strm,
+ uint64_t *progress_in, uint64_t *progress_out) lzma_nothrow;
+
+
+/**
+ * \brief Get the memory usage of decoder filter chain
+ *
+ * This function is currently supported only when *strm has been initialized
+ * with a function that takes a memlimit argument. With other functions, you
+ * should use e.g. lzma_raw_encoder_memusage() or lzma_raw_decoder_memusage()
+ * to estimate the memory requirements.
+ *
+ * This function is useful e.g. after LZMA_MEMLIMIT_ERROR to find out how big
+ * the memory usage limit should have been to decode the input. Note that
+ * this may give misleading information if decoding .xz Streams that have
+ * multiple Blocks, because each Block can have different memory requirements.
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ *
+ * \return How much memory is currently allocated for the filter
+ * decoders. If no filter chain is currently allocated,
+ * some non-zero value is still returned, which is less than
+ * or equal to what any filter chain would indicate as its
+ * memory requirement.
+ *
+ * If this function isn't supported by *strm or some other error
+ * occurs, zero is returned.
+ */
+extern LZMA_API(uint64_t) lzma_memusage(const lzma_stream *strm)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Get the current memory usage limit
+ *
+ * This function is supported only when *strm has been initialized with
+ * a function that takes a memlimit argument.
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ *
+ * \return On success, the current memory usage limit is returned
+ * (always non-zero). On error, zero is returned.
+ */
+extern LZMA_API(uint64_t) lzma_memlimit_get(const lzma_stream *strm)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Set the memory usage limit
+ *
+ * This function is supported only when *strm has been initialized with
+ * a function that takes a memlimit argument.
+ *
+ * liblzma 5.2.3 and earlier has a bug where memlimit value of 0 causes
+ * this function to do nothing (leaving the limit unchanged) and still
+ * return LZMA_OK. Later versions treat 0 as if 1 had been specified (so
+ * lzma_memlimit_get() will return 1 even if you specify 0 here).
+ *
+ * liblzma 5.2.6 and earlier had a bug in single-threaded .xz decoder
+ * (lzma_stream_decoder()) which made it impossible to continue decoding
+ * after LZMA_MEMLIMIT_ERROR even if the limit was increased using
+ * lzma_memlimit_set(). Other decoders worked correctly.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: New memory usage limit successfully set.
+ * - LZMA_MEMLIMIT_ERROR: The new limit is too small.
+ * The limit was not changed.
+ * - LZMA_PROG_ERROR: Invalid arguments, e.g. *strm doesn't
+ * support memory usage limit.
+ */
+extern LZMA_API(lzma_ret) lzma_memlimit_set(
+ lzma_stream *strm, uint64_t memlimit) lzma_nothrow;
diff --git a/vcpkg_installed/arm64-osx/include/lzma/bcj.h b/vcpkg_installed/arm64-osx/include/lzma/bcj.h
new file mode 100644
index 00000000..7f6611fe
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/bcj.h
@@ -0,0 +1,98 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/bcj.h
+ * \brief Branch/Call/Jump conversion filters
+ * \note Never include this file directly. Use instead.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/* Filter IDs for lzma_filter.id */
+
+/**
+ * \brief Filter for x86 binaries
+ */
+#define LZMA_FILTER_X86 LZMA_VLI_C(0x04)
+
+/**
+ * \brief Filter for Big endian PowerPC binaries
+ */
+#define LZMA_FILTER_POWERPC LZMA_VLI_C(0x05)
+
+/**
+ * \brief Filter for IA-64 (Itanium) binaries
+ */
+#define LZMA_FILTER_IA64 LZMA_VLI_C(0x06)
+
+/**
+ * \brief Filter for ARM binaries
+ */
+#define LZMA_FILTER_ARM LZMA_VLI_C(0x07)
+
+/**
+ * \brief Filter for ARM-Thumb binaries
+ */
+#define LZMA_FILTER_ARMTHUMB LZMA_VLI_C(0x08)
+
+/**
+ * \brief Filter for SPARC binaries
+ */
+#define LZMA_FILTER_SPARC LZMA_VLI_C(0x09)
+
+/**
+ * \brief Filter for ARM64 binaries
+ */
+#define LZMA_FILTER_ARM64 LZMA_VLI_C(0x0A)
+
+/**
+ * \brief Filter for RISC-V binaries
+ */
+#define LZMA_FILTER_RISCV LZMA_VLI_C(0x0B)
+
+
+/**
+ * \brief Options for BCJ filters
+ *
+ * The BCJ filters never change the size of the data. Specifying options
+ * for them is optional: if pointer to options is NULL, default value is
+ * used. You probably never need to specify options to BCJ filters, so just
+ * set the options pointer to NULL and be happy.
+ *
+ * If options with non-default values have been specified when encoding,
+ * the same options must also be specified when decoding.
+ *
+ * \note At the moment, none of the BCJ filters support
+ * LZMA_SYNC_FLUSH. If LZMA_SYNC_FLUSH is specified,
+ * LZMA_OPTIONS_ERROR will be returned. If there is need,
+ * partial support for LZMA_SYNC_FLUSH can be added in future.
+ * Partial means that flushing would be possible only at
+ * offsets that are multiple of 2, 4, or 16 depending on
+ * the filter, except x86 which cannot be made to support
+ * LZMA_SYNC_FLUSH predictably.
+ */
+typedef struct {
+ /**
+ * \brief Start offset for conversions
+ *
+ * This setting is useful only when the same filter is used
+ * _separately_ for multiple sections of the same executable file,
+ * and the sections contain cross-section branch/call/jump
+ * instructions. In that case it is beneficial to set the start
+ * offset of the non-first sections so that the relative addresses
+ * of the cross-section branch/call/jump instructions will use the
+ * same absolute addresses as in the first section.
+ *
+ * When the pointer to options is NULL, the default value (zero)
+ * is used.
+ */
+ uint32_t start_offset;
+
+} lzma_options_bcj;
diff --git a/vcpkg_installed/arm64-osx/include/lzma/block.h b/vcpkg_installed/arm64-osx/include/lzma/block.h
new file mode 100644
index 00000000..05b77e59
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/block.h
@@ -0,0 +1,694 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/block.h
+ * \brief .xz Block handling
+ * \note Never include this file directly. Use instead.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/**
+ * \brief Options for the Block and Block Header encoders and decoders
+ *
+ * Different Block handling functions use different parts of this structure.
+ * Some read some members, other functions write, and some do both. Only the
+ * members listed for reading need to be initialized when the specified
+ * functions are called. The members marked for writing will be assigned
+ * new values at some point either by calling the given function or by
+ * later calls to lzma_code().
+ */
+typedef struct {
+ /**
+ * \brief Block format version
+ *
+ * To prevent API and ABI breakages when new features are needed,
+ * a version number is used to indicate which members in this
+ * structure are in use:
+ * - liblzma >= 5.0.0: version = 0 is supported.
+ * - liblzma >= 5.1.4beta: Support for version = 1 was added,
+ * which adds the ignore_check member.
+ *
+ * If version is greater than one, most Block related functions
+ * will return LZMA_OPTIONS_ERROR (lzma_block_header_decode() works
+ * with any version value).
+ *
+ * Read by:
+ * - lzma_block_header_size()
+ * - lzma_block_header_encode()
+ * - lzma_block_header_decode()
+ * - lzma_block_compressed_size()
+ * - lzma_block_unpadded_size()
+ * - lzma_block_total_size()
+ * - lzma_block_encoder()
+ * - lzma_block_decoder()
+ * - lzma_block_buffer_encode()
+ * - lzma_block_uncomp_encode()
+ * - lzma_block_buffer_decode()
+ *
+ * Written by:
+ * - lzma_block_header_decode()
+ */
+ uint32_t version;
+
+ /**
+ * \brief Size of the Block Header field in bytes
+ *
+ * This is always a multiple of four.
+ *
+ * Read by:
+ * - lzma_block_header_encode()
+ * - lzma_block_header_decode()
+ * - lzma_block_compressed_size()
+ * - lzma_block_unpadded_size()
+ * - lzma_block_total_size()
+ * - lzma_block_decoder()
+ * - lzma_block_buffer_decode()
+ *
+ * Written by:
+ * - lzma_block_header_size()
+ * - lzma_block_buffer_encode()
+ * - lzma_block_uncomp_encode()
+ */
+ uint32_t header_size;
+# define LZMA_BLOCK_HEADER_SIZE_MIN 8
+# define LZMA_BLOCK_HEADER_SIZE_MAX 1024
+
+ /**
+ * \brief Type of integrity Check
+ *
+ * The Check ID is not stored into the Block Header, thus its value
+ * must be provided also when decoding.
+ *
+ * Read by:
+ * - lzma_block_header_encode()
+ * - lzma_block_header_decode()
+ * - lzma_block_compressed_size()
+ * - lzma_block_unpadded_size()
+ * - lzma_block_total_size()
+ * - lzma_block_encoder()
+ * - lzma_block_decoder()
+ * - lzma_block_buffer_encode()
+ * - lzma_block_buffer_decode()
+ */
+ lzma_check check;
+
+ /**
+ * \brief Size of the Compressed Data in bytes
+ *
+ * Encoding: If this is not LZMA_VLI_UNKNOWN, Block Header encoder
+ * will store this value to the Block Header. Block encoder doesn't
+ * care about this value, but will set it once the encoding has been
+ * finished.
+ *
+ * Decoding: If this is not LZMA_VLI_UNKNOWN, Block decoder will
+ * verify that the size of the Compressed Data field matches
+ * compressed_size.
+ *
+ * Usually you don't know this value when encoding in streamed mode,
+ * and thus cannot write this field into the Block Header.
+ *
+ * In non-streamed mode you can reserve space for this field before
+ * encoding the actual Block. After encoding the data, finish the
+ * Block by encoding the Block Header. Steps in detail:
+ *
+ * - Set compressed_size to some big enough value. If you don't know
+ * better, use LZMA_VLI_MAX, but remember that bigger values take
+ * more space in Block Header.
+ *
+ * - Call lzma_block_header_size() to see how much space you need to
+ * reserve for the Block Header.
+ *
+ * - Encode the Block using lzma_block_encoder() and lzma_code().
+ * It sets compressed_size to the correct value.
+ *
+ * - Use lzma_block_header_encode() to encode the Block Header.
+ * Because space was reserved in the first step, you don't need
+ * to call lzma_block_header_size() anymore, because due to
+ * reserving, header_size has to be big enough. If it is "too big",
+ * lzma_block_header_encode() will add enough Header Padding to
+ * make Block Header to match the size specified by header_size.
+ *
+ * Read by:
+ * - lzma_block_header_size()
+ * - lzma_block_header_encode()
+ * - lzma_block_compressed_size()
+ * - lzma_block_unpadded_size()
+ * - lzma_block_total_size()
+ * - lzma_block_decoder()
+ * - lzma_block_buffer_decode()
+ *
+ * Written by:
+ * - lzma_block_header_decode()
+ * - lzma_block_compressed_size()
+ * - lzma_block_encoder()
+ * - lzma_block_decoder()
+ * - lzma_block_buffer_encode()
+ * - lzma_block_uncomp_encode()
+ * - lzma_block_buffer_decode()
+ */
+ lzma_vli compressed_size;
+
+ /**
+ * \brief Uncompressed Size in bytes
+ *
+ * This is handled very similarly to compressed_size above.
+ *
+ * uncompressed_size is needed by fewer functions than
+ * compressed_size. This is because uncompressed_size isn't
+ * needed to validate that Block stays within proper limits.
+ *
+ * Read by:
+ * - lzma_block_header_size()
+ * - lzma_block_header_encode()
+ * - lzma_block_decoder()
+ * - lzma_block_buffer_decode()
+ *
+ * Written by:
+ * - lzma_block_header_decode()
+ * - lzma_block_encoder()
+ * - lzma_block_decoder()
+ * - lzma_block_buffer_encode()
+ * - lzma_block_uncomp_encode()
+ * - lzma_block_buffer_decode()
+ */
+ lzma_vli uncompressed_size;
+
+ /**
+ * \brief Array of filters
+ *
+ * There can be 1-4 filters. The end of the array is marked with
+ * .id = LZMA_VLI_UNKNOWN.
+ *
+ * Read by:
+ * - lzma_block_header_size()
+ * - lzma_block_header_encode()
+ * - lzma_block_encoder()
+ * - lzma_block_decoder()
+ * - lzma_block_buffer_encode()
+ * - lzma_block_buffer_decode()
+ *
+ * Written by:
+ * - lzma_block_header_decode(): Note that this does NOT free()
+ * the old filter options structures. All unused filters[] will
+ * have .id == LZMA_VLI_UNKNOWN and .options == NULL. If
+ * decoding fails, all filters[] are guaranteed to be
+ * LZMA_VLI_UNKNOWN and NULL.
+ *
+ * \note Because of the array is terminated with
+ * .id = LZMA_VLI_UNKNOWN, the actual array must
+ * have LZMA_FILTERS_MAX + 1 members or the Block
+ * Header decoder will overflow the buffer.
+ */
+ lzma_filter *filters;
+
+ /**
+ * \brief Raw value stored in the Check field
+ *
+ * After successful coding, the first lzma_check_size(check) bytes
+ * of this array contain the raw value stored in the Check field.
+ *
+ * Note that CRC32 and CRC64 are stored in little endian byte order.
+ * Take it into account if you display the Check values to the user.
+ *
+ * Written by:
+ * - lzma_block_encoder()
+ * - lzma_block_decoder()
+ * - lzma_block_buffer_encode()
+ * - lzma_block_uncomp_encode()
+ * - lzma_block_buffer_decode()
+ */
+ uint8_t raw_check[LZMA_CHECK_SIZE_MAX];
+
+ /*
+ * Reserved space to allow possible future extensions without
+ * breaking the ABI. You should not touch these, because the names
+ * of these variables may change. These are and will never be used
+ * with the currently supported options, so it is safe to leave these
+ * uninitialized.
+ */
+
+ /** \private Reserved member. */
+ void *reserved_ptr1;
+
+ /** \private Reserved member. */
+ void *reserved_ptr2;
+
+ /** \private Reserved member. */
+ void *reserved_ptr3;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int1;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int2;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_int3;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_int4;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_int5;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_int6;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_int7;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_int8;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum1;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum2;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum3;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum4;
+
+ /**
+ * \brief A flag to Block decoder to not verify the Check field
+ *
+ * This member is supported by liblzma >= 5.1.4beta if .version >= 1.
+ *
+ * If this is set to true, the integrity check won't be calculated
+ * and verified. Unless you know what you are doing, you should
+ * leave this to false. (A reason to set this to true is when the
+ * file integrity is verified externally anyway and you want to
+ * speed up the decompression, which matters mostly when using
+ * SHA-256 as the integrity check.)
+ *
+ * If .version >= 1, read by:
+ * - lzma_block_decoder()
+ * - lzma_block_buffer_decode()
+ *
+ * Written by (.version is ignored):
+ * - lzma_block_header_decode() always sets this to false
+ */
+ lzma_bool ignore_check;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool2;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool3;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool4;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool5;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool6;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool7;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool8;
+
+} lzma_block;
+
+
+/**
+ * \brief Decode the Block Header Size field
+ *
+ * To decode Block Header using lzma_block_header_decode(), the size of the
+ * Block Header has to be known and stored into lzma_block.header_size.
+ * The size can be calculated from the first byte of a Block using this macro.
+ * Note that if the first byte is 0x00, it indicates beginning of Index; use
+ * this macro only when the byte is not 0x00.
+ *
+ * There is no encoding macro because lzma_block_header_size() and
+ * lzma_block_header_encode() should be used.
+ */
+#define lzma_block_header_size_decode(b) (((uint32_t)(b) + 1) * 4)
+
+
+/**
+ * \brief Calculate Block Header Size
+ *
+ * Calculate the minimum size needed for the Block Header field using the
+ * settings specified in the lzma_block structure. Note that it is OK to
+ * increase the calculated header_size value as long as it is a multiple of
+ * four and doesn't exceed LZMA_BLOCK_HEADER_SIZE_MAX. Increasing header_size
+ * just means that lzma_block_header_encode() will add Header Padding.
+ *
+ * \note This doesn't check that all the options are valid i.e. this
+ * may return LZMA_OK even if lzma_block_header_encode() or
+ * lzma_block_encoder() would fail. If you want to validate the
+ * filter chain, consider using lzma_memlimit_encoder() which as
+ * a side-effect validates the filter chain.
+ *
+ * \param block Block options
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Size calculated successfully and stored to
+ * block->header_size.
+ * - LZMA_OPTIONS_ERROR: Unsupported version, filters or
+ * filter options.
+ * - LZMA_PROG_ERROR: Invalid values like compressed_size == 0.
+ */
+extern LZMA_API(lzma_ret) lzma_block_header_size(lzma_block *block)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Encode Block Header
+ *
+ * The caller must have calculated the size of the Block Header already with
+ * lzma_block_header_size(). If a value larger than the one calculated by
+ * lzma_block_header_size() is used, the Block Header will be padded to the
+ * specified size.
+ *
+ * \param block Block options to be encoded.
+ * \param[out] out Beginning of the output buffer. This must be
+ * at least block->header_size bytes.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Encoding was successful. block->header_size
+ * bytes were written to output buffer.
+ * - LZMA_OPTIONS_ERROR: Invalid or unsupported options.
+ * - LZMA_PROG_ERROR: Invalid arguments, for example
+ * block->header_size is invalid or block->filters is NULL.
+ */
+extern LZMA_API(lzma_ret) lzma_block_header_encode(
+ const lzma_block *block, uint8_t *out)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Decode Block Header
+ *
+ * block->version should (usually) be set to the highest value supported
+ * by the application. If the application sets block->version to a value
+ * higher than supported by the current liblzma version, this function will
+ * downgrade block->version to the highest value supported by it. Thus one
+ * should check the value of block->version after calling this function if
+ * block->version was set to a non-zero value and the application doesn't
+ * otherwise know that the liblzma version being used is new enough to
+ * support the specified block->version.
+ *
+ * The size of the Block Header must have already been decoded with
+ * lzma_block_header_size_decode() macro and stored to block->header_size.
+ *
+ * The integrity check type from Stream Header must have been stored
+ * to block->check.
+ *
+ * block->filters must have been allocated, but they don't need to be
+ * initialized (possible existing filter options are not freed).
+ *
+ * \param[out] block Destination for Block options
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() (and also free()
+ * if an error occurs).
+ * \param in Beginning of the input buffer. This must be
+ * at least block->header_size bytes.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Decoding was successful. block->header_size
+ * bytes were read from the input buffer.
+ * - LZMA_OPTIONS_ERROR: The Block Header specifies some
+ * unsupported options such as unsupported filters. This can
+ * happen also if block->version was set to a too low value
+ * compared to what would be required to properly represent
+ * the information stored in the Block Header.
+ * - LZMA_DATA_ERROR: Block Header is corrupt, for example,
+ * the CRC32 doesn't match.
+ * - LZMA_PROG_ERROR: Invalid arguments, for example
+ * block->header_size is invalid or block->filters is NULL.
+ */
+extern LZMA_API(lzma_ret) lzma_block_header_decode(lzma_block *block,
+ const lzma_allocator *allocator, const uint8_t *in)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Validate and set Compressed Size according to Unpadded Size
+ *
+ * Block Header stores Compressed Size, but Index has Unpadded Size. If the
+ * application has already parsed the Index and is now decoding Blocks,
+ * it can calculate Compressed Size from Unpadded Size. This function does
+ * exactly that with error checking:
+ *
+ * - Compressed Size calculated from Unpadded Size must be positive integer,
+ * that is, Unpadded Size must be big enough that after Block Header and
+ * Check fields there's still at least one byte for Compressed Size.
+ *
+ * - If Compressed Size was present in Block Header, the new value
+ * calculated from Unpadded Size is compared against the value
+ * from Block Header.
+ *
+ * \note This function must be called _after_ decoding the Block Header
+ * field so that it can properly validate Compressed Size if it
+ * was present in Block Header.
+ *
+ * \param block Block options: block->header_size must
+ * already be set with lzma_block_header_size().
+ * \param unpadded_size Unpadded Size from the Index field in bytes
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: block->compressed_size was set successfully.
+ * - LZMA_DATA_ERROR: unpadded_size is too small compared to
+ * block->header_size and lzma_check_size(block->check).
+ * - LZMA_PROG_ERROR: Some values are invalid. For example,
+ * block->header_size must be a multiple of four and
+ * between 8 and 1024 inclusive.
+ */
+extern LZMA_API(lzma_ret) lzma_block_compressed_size(
+ lzma_block *block, lzma_vli unpadded_size)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Calculate Unpadded Size
+ *
+ * The Index field stores Unpadded Size and Uncompressed Size. The latter
+ * can be taken directly from the lzma_block structure after coding a Block,
+ * but Unpadded Size needs to be calculated from Block Header Size,
+ * Compressed Size, and size of the Check field. This is where this function
+ * is needed.
+ *
+ * \param block Block options: block->header_size must already be
+ * set with lzma_block_header_size().
+ *
+ * \return Unpadded Size on success, or zero on error.
+ */
+extern LZMA_API(lzma_vli) lzma_block_unpadded_size(const lzma_block *block)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Calculate the total encoded size of a Block
+ *
+ * This is equivalent to lzma_block_unpadded_size() except that the returned
+ * value includes the size of the Block Padding field.
+ *
+ * \param block Block options: block->header_size must already be
+ * set with lzma_block_header_size().
+ *
+ * \return On success, total encoded size of the Block. On error,
+ * zero is returned.
+ */
+extern LZMA_API(lzma_vli) lzma_block_total_size(const lzma_block *block)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Initialize .xz Block encoder
+ *
+ * Valid actions for lzma_code() are LZMA_RUN, LZMA_SYNC_FLUSH (only if the
+ * filter chain supports it), and LZMA_FINISH.
+ *
+ * The Block encoder encodes the Block Data, Block Padding, and Check value.
+ * It does NOT encode the Block Header which can be encoded with
+ * lzma_block_header_encode().
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param block Block options: block->version, block->check,
+ * and block->filters must have been initialized.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: All good, continue with lzma_code().
+ * - LZMA_MEM_ERROR
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_UNSUPPORTED_CHECK: block->check specifies a Check ID
+ * that is not supported by this build of liblzma. Initializing
+ * the encoder failed.
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_block_encoder(
+ lzma_stream *strm, lzma_block *block)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Initialize .xz Block decoder
+ *
+ * Valid actions for lzma_code() are LZMA_RUN and LZMA_FINISH. Using
+ * LZMA_FINISH is not required. It is supported only for convenience.
+ *
+ * The Block decoder decodes the Block Data, Block Padding, and Check value.
+ * It does NOT decode the Block Header which can be decoded with
+ * lzma_block_header_decode().
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param block Block options
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: All good, continue with lzma_code().
+ * - LZMA_PROG_ERROR
+ * - LZMA_MEM_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_block_decoder(
+ lzma_stream *strm, lzma_block *block)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Calculate maximum output size for single-call Block encoding
+ *
+ * This is equivalent to lzma_stream_buffer_bound() but for .xz Blocks.
+ * See the documentation of lzma_stream_buffer_bound().
+ *
+ * \param uncompressed_size Size of the data to be encoded with the
+ * single-call Block encoder.
+ *
+ * \return Maximum output size in bytes for single-call Block encoding.
+ */
+extern LZMA_API(size_t) lzma_block_buffer_bound(size_t uncompressed_size)
+ lzma_nothrow;
+
+
+/**
+ * \brief Single-call .xz Block encoder
+ *
+ * In contrast to the multi-call encoder initialized with
+ * lzma_block_encoder(), this function encodes also the Block Header. This
+ * is required to make it possible to write appropriate Block Header also
+ * in case the data isn't compressible, and different filter chain has to be
+ * used to encode the data in uncompressed form using uncompressed chunks
+ * of the LZMA2 filter.
+ *
+ * When the data isn't compressible, header_size, compressed_size, and
+ * uncompressed_size are set just like when the data was compressible, but
+ * it is possible that header_size is too small to hold the filter chain
+ * specified in block->filters, because that isn't necessarily the filter
+ * chain that was actually used to encode the data. lzma_block_unpadded_size()
+ * still works normally, because it doesn't read the filters array.
+ *
+ * \param block Block options: block->version, block->check,
+ * and block->filters must have been initialized.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ * \param in Beginning of the input buffer
+ * \param in_size Size of the input buffer
+ * \param[out] out Beginning of the output buffer
+ * \param[out] out_pos The next byte will be written to out[*out_pos].
+ * *out_pos is updated only if encoding succeeds.
+ * \param out_size Size of the out buffer; the first byte into
+ * which no data is written to is out[out_size].
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Encoding was successful.
+ * - LZMA_BUF_ERROR: Not enough output buffer space.
+ * - LZMA_UNSUPPORTED_CHECK
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_MEM_ERROR
+ * - LZMA_DATA_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_block_buffer_encode(
+ lzma_block *block, const lzma_allocator *allocator,
+ const uint8_t *in, size_t in_size,
+ uint8_t *out, size_t *out_pos, size_t out_size)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Single-call uncompressed .xz Block encoder
+ *
+ * This is like lzma_block_buffer_encode() except this doesn't try to
+ * compress the data and instead encodes the data using LZMA2 uncompressed
+ * chunks. The required output buffer size can be determined with
+ * lzma_block_buffer_bound().
+ *
+ * Since the data won't be compressed, this function ignores block->filters.
+ * This function doesn't take lzma_allocator because this function doesn't
+ * allocate any memory from the heap.
+ *
+ * \param block Block options: block->version, block->check,
+ * and block->filters must have been initialized.
+ * \param in Beginning of the input buffer
+ * \param in_size Size of the input buffer
+ * \param[out] out Beginning of the output buffer
+ * \param[out] out_pos The next byte will be written to out[*out_pos].
+ * *out_pos is updated only if encoding succeeds.
+ * \param out_size Size of the out buffer; the first byte into
+ * which no data is written to is out[out_size].
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Encoding was successful.
+ * - LZMA_BUF_ERROR: Not enough output buffer space.
+ * - LZMA_UNSUPPORTED_CHECK
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_MEM_ERROR
+ * - LZMA_DATA_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_block_uncomp_encode(lzma_block *block,
+ const uint8_t *in, size_t in_size,
+ uint8_t *out, size_t *out_pos, size_t out_size)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Single-call .xz Block decoder
+ *
+ * This is single-call equivalent of lzma_block_decoder(), and requires that
+ * the caller has already decoded Block Header and checked its memory usage.
+ *
+ * \param block Block options
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ * \param in Beginning of the input buffer
+ * \param in_pos The next byte will be read from in[*in_pos].
+ * *in_pos is updated only if decoding succeeds.
+ * \param in_size Size of the input buffer; the first byte that
+ * won't be read is in[in_size].
+ * \param[out] out Beginning of the output buffer
+ * \param[out] out_pos The next byte will be written to out[*out_pos].
+ * *out_pos is updated only if encoding succeeds.
+ * \param out_size Size of the out buffer; the first byte into
+ * which no data is written to is out[out_size].
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Decoding was successful.
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_DATA_ERROR
+ * - LZMA_MEM_ERROR
+ * - LZMA_BUF_ERROR: Output buffer was too small.
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_block_buffer_decode(
+ lzma_block *block, const lzma_allocator *allocator,
+ const uint8_t *in, size_t *in_pos, size_t in_size,
+ uint8_t *out, size_t *out_pos, size_t out_size)
+ lzma_nothrow;
diff --git a/vcpkg_installed/arm64-osx/include/lzma/check.h b/vcpkg_installed/arm64-osx/include/lzma/check.h
new file mode 100644
index 00000000..e7a50ed3
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/check.h
@@ -0,0 +1,163 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/check.h
+ * \brief Integrity checks
+ * \note Never include this file directly. Use instead.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/**
+ * \brief Type of the integrity check (Check ID)
+ *
+ * The .xz format supports multiple types of checks that are calculated
+ * from the uncompressed data. They vary in both speed and ability to
+ * detect errors.
+ */
+typedef enum {
+ LZMA_CHECK_NONE = 0,
+ /**<
+ * No Check is calculated.
+ *
+ * Size of the Check field: 0 bytes
+ */
+
+ LZMA_CHECK_CRC32 = 1,
+ /**<
+ * CRC32 using the polynomial from the IEEE 802.3 standard
+ *
+ * Size of the Check field: 4 bytes
+ */
+
+ LZMA_CHECK_CRC64 = 4,
+ /**<
+ * CRC64 using the polynomial from the ECMA-182 standard
+ *
+ * Size of the Check field: 8 bytes
+ */
+
+ LZMA_CHECK_SHA256 = 10
+ /**<
+ * SHA-256
+ *
+ * Size of the Check field: 32 bytes
+ */
+} lzma_check;
+
+
+/**
+ * \brief Maximum valid Check ID
+ *
+ * The .xz file format specification specifies 16 Check IDs (0-15). Some
+ * of them are only reserved, that is, no actual Check algorithm has been
+ * assigned. When decoding, liblzma still accepts unknown Check IDs for
+ * future compatibility. If a valid but unsupported Check ID is detected,
+ * liblzma can indicate a warning; see the flags LZMA_TELL_NO_CHECK,
+ * LZMA_TELL_UNSUPPORTED_CHECK, and LZMA_TELL_ANY_CHECK in container.h.
+ */
+#define LZMA_CHECK_ID_MAX 15
+
+
+/**
+ * \brief Test if the given Check ID is supported
+ *
+ * LZMA_CHECK_NONE and LZMA_CHECK_CRC32 are always supported (even if
+ * liblzma is built with limited features).
+ *
+ * \note It is safe to call this with a value that is not in the
+ * range [0, 15]; in that case the return value is always false.
+ *
+ * \param check Check ID
+ *
+ * \return lzma_bool:
+ * - true if Check ID is supported by this liblzma build.
+ * - false otherwise.
+ */
+extern LZMA_API(lzma_bool) lzma_check_is_supported(lzma_check check)
+ lzma_nothrow lzma_attr_const;
+
+
+/**
+ * \brief Get the size of the Check field with the given Check ID
+ *
+ * Although not all Check IDs have a check algorithm associated, the size of
+ * every Check is already frozen. This function returns the size (in bytes) of
+ * the Check field with the specified Check ID. The values are:
+ * { 0, 4, 4, 4, 8, 8, 8, 16, 16, 16, 32, 32, 32, 64, 64, 64 }
+ *
+ * \param check Check ID
+ *
+ * \return Size of the Check field in bytes. If the argument is not in
+ * the range [0, 15], UINT32_MAX is returned.
+ */
+extern LZMA_API(uint32_t) lzma_check_size(lzma_check check)
+ lzma_nothrow lzma_attr_const;
+
+
+/**
+ * \brief Maximum size of a Check field
+ */
+#define LZMA_CHECK_SIZE_MAX 64
+
+
+/**
+ * \brief Calculate CRC32
+ *
+ * Calculate CRC32 using the polynomial from the IEEE 802.3 standard.
+ *
+ * \param buf Pointer to the input buffer
+ * \param size Size of the input buffer
+ * \param crc Previously returned CRC value. This is used to
+ * calculate the CRC of a big buffer in smaller chunks.
+ * Set to zero when starting a new calculation.
+ *
+ * \return Updated CRC value, which can be passed to this function
+ * again to continue CRC calculation.
+ */
+extern LZMA_API(uint32_t) lzma_crc32(
+ const uint8_t *buf, size_t size, uint32_t crc)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Calculate CRC64
+ *
+ * Calculate CRC64 using the polynomial from the ECMA-182 standard.
+ *
+ * This function is used similarly to lzma_crc32().
+ *
+ * \param buf Pointer to the input buffer
+ * \param size Size of the input buffer
+ * \param crc Previously returned CRC value. This is used to
+ * calculate the CRC of a big buffer in smaller chunks.
+ * Set to zero when starting a new calculation.
+ *
+ * \return Updated CRC value, which can be passed to this function
+ * again to continue CRC calculation.
+ */
+extern LZMA_API(uint64_t) lzma_crc64(
+ const uint8_t *buf, size_t size, uint64_t crc)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Get the type of the integrity check
+ *
+ * This function can be called only immediately after lzma_code() has
+ * returned LZMA_NO_CHECK, LZMA_UNSUPPORTED_CHECK, or LZMA_GET_CHECK.
+ * Calling this function in any other situation has undefined behavior.
+ *
+ * \param strm Pointer to lzma_stream meeting the above conditions.
+ *
+ * \return Check ID in the lzma_stream, or undefined if called improperly.
+ */
+extern LZMA_API(lzma_check) lzma_get_check(const lzma_stream *strm)
+ lzma_nothrow;
diff --git a/vcpkg_installed/arm64-osx/include/lzma/container.h b/vcpkg_installed/arm64-osx/include/lzma/container.h
new file mode 100644
index 00000000..8e4af420
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/container.h
@@ -0,0 +1,995 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/container.h
+ * \brief File formats
+ * \note Never include this file directly. Use instead.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/************
+ * Encoding *
+ ************/
+
+/**
+ * \brief Default compression preset
+ *
+ * It's not straightforward to recommend a default preset, because in some
+ * cases keeping the resource usage relatively low is more important that
+ * getting the maximum compression ratio.
+ */
+#define LZMA_PRESET_DEFAULT UINT32_C(6)
+
+
+/**
+ * \brief Mask for preset level
+ *
+ * This is useful only if you need to extract the level from the preset
+ * variable. That should be rare.
+ */
+#define LZMA_PRESET_LEVEL_MASK UINT32_C(0x1F)
+
+
+/*
+ * Preset flags
+ *
+ * Currently only one flag is defined.
+ */
+
+/**
+ * \brief Extreme compression preset
+ *
+ * This flag modifies the preset to make the encoding significantly slower
+ * while improving the compression ratio only marginally. This is useful
+ * when you don't mind spending time to get as small result as possible.
+ *
+ * This flag doesn't affect the memory usage requirements of the decoder (at
+ * least not significantly). The memory usage of the encoder may be increased
+ * a little but only at the lowest preset levels (0-3).
+ */
+#define LZMA_PRESET_EXTREME (UINT32_C(1) << 31)
+
+
+/**
+ * \brief Multithreading options
+ */
+typedef struct {
+ /**
+ * \brief Flags
+ *
+ * Set this to zero if no flags are wanted.
+ *
+ * Encoder: No flags are currently supported.
+ *
+ * Decoder: Bitwise-or of zero or more of the decoder flags:
+ * - LZMA_TELL_NO_CHECK
+ * - LZMA_TELL_UNSUPPORTED_CHECK
+ * - LZMA_TELL_ANY_CHECK
+ * - LZMA_IGNORE_CHECK
+ * - LZMA_CONCATENATED
+ * - LZMA_FAIL_FAST
+ */
+ uint32_t flags;
+
+ /**
+ * \brief Number of worker threads to use
+ */
+ uint32_t threads;
+
+ /**
+ * \brief Encoder only: Maximum uncompressed size of a Block
+ *
+ * The encoder will start a new .xz Block every block_size bytes.
+ * Using LZMA_FULL_FLUSH or LZMA_FULL_BARRIER with lzma_code()
+ * the caller may tell liblzma to start a new Block earlier.
+ *
+ * With LZMA2, a recommended block size is 2-4 times the LZMA2
+ * dictionary size. With very small dictionaries, it is recommended
+ * to use at least 1 MiB block size for good compression ratio, even
+ * if this is more than four times the dictionary size. Note that
+ * these are only recommendations for typical use cases; feel free
+ * to use other values. Just keep in mind that using a block size
+ * less than the LZMA2 dictionary size is waste of RAM.
+ *
+ * Set this to 0 to let liblzma choose the block size depending
+ * on the compression options. For LZMA2 it will be 3*dict_size
+ * or 1 MiB, whichever is more.
+ *
+ * For each thread, about 3 * block_size bytes of memory will be
+ * allocated. This may change in later liblzma versions. If so,
+ * the memory usage will probably be reduced, not increased.
+ */
+ uint64_t block_size;
+
+ /**
+ * \brief Timeout to allow lzma_code() to return early
+ *
+ * Multithreading can make liblzma consume input and produce
+ * output in a very bursty way: it may first read a lot of input
+ * to fill internal buffers, then no input or output occurs for
+ * a while.
+ *
+ * In single-threaded mode, lzma_code() won't return until it has
+ * either consumed all the input or filled the output buffer. If
+ * this is done in multithreaded mode, it may cause a call
+ * lzma_code() to take even tens of seconds, which isn't acceptable
+ * in all applications.
+ *
+ * To avoid very long blocking times in lzma_code(), a timeout
+ * (in milliseconds) may be set here. If lzma_code() would block
+ * longer than this number of milliseconds, it will return with
+ * LZMA_OK. Reasonable values are 100 ms or more. The xz command
+ * line tool uses 300 ms.
+ *
+ * If long blocking times are acceptable, set timeout to a special
+ * value of 0. This will disable the timeout mechanism and will make
+ * lzma_code() block until all the input is consumed or the output
+ * buffer has been filled.
+ *
+ * \note Even with a timeout, lzma_code() might sometimes take
+ * a long time to return. No timing guarantees are made.
+ */
+ uint32_t timeout;
+
+ /**
+ * \brief Encoder only: Compression preset
+ *
+ * The preset is set just like with lzma_easy_encoder().
+ * The preset is ignored if filters below is non-NULL.
+ */
+ uint32_t preset;
+
+ /**
+ * \brief Encoder only: Filter chain (alternative to a preset)
+ *
+ * If this is NULL, the preset above is used. Otherwise the preset
+ * is ignored and the filter chain specified here is used.
+ */
+ const lzma_filter *filters;
+
+ /**
+ * \brief Encoder only: Integrity check type
+ *
+ * See check.h for available checks. The xz command line tool
+ * defaults to LZMA_CHECK_CRC64, which is a good choice if you
+ * are unsure.
+ */
+ lzma_check check;
+
+ /*
+ * Reserved space to allow possible future extensions without
+ * breaking the ABI. You should not touch these, because the names
+ * of these variables may change. These are and will never be used
+ * with the currently supported options, so it is safe to leave these
+ * uninitialized.
+ */
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum1;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum2;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum3;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int1;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int2;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int3;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int4;
+
+ /**
+ * \brief Memory usage limit to reduce the number of threads
+ *
+ * Encoder: Ignored.
+ *
+ * Decoder:
+ *
+ * If the number of threads has been set so high that more than
+ * memlimit_threading bytes of memory would be needed, the number
+ * of threads will be reduced so that the memory usage will not exceed
+ * memlimit_threading bytes. However, if memlimit_threading cannot
+ * be met even in single-threaded mode, then decoding will continue
+ * in single-threaded mode and memlimit_threading may be exceeded
+ * even by a large amount. That is, memlimit_threading will never make
+ * lzma_code() return LZMA_MEMLIMIT_ERROR. To truly cap the memory
+ * usage, see memlimit_stop below.
+ *
+ * Setting memlimit_threading to UINT64_MAX or a similar huge value
+ * means that liblzma is allowed to keep the whole compressed file
+ * and the whole uncompressed file in memory in addition to the memory
+ * needed by the decompressor data structures used by each thread!
+ * In other words, a reasonable value limit must be set here or it
+ * will cause problems sooner or later. If you have no idea what
+ * a reasonable value could be, try lzma_physmem() / 4 as a starting
+ * point. Setting this limit will never prevent decompression of
+ * a file; this will only reduce the number of threads.
+ *
+ * If memlimit_threading is greater than memlimit_stop, then the value
+ * of memlimit_stop will be used for both.
+ */
+ uint64_t memlimit_threading;
+
+ /**
+ * \brief Memory usage limit that should never be exceeded
+ *
+ * Encoder: Ignored.
+ *
+ * Decoder: If decompressing will need more than this amount of
+ * memory even in the single-threaded mode, then lzma_code() will
+ * return LZMA_MEMLIMIT_ERROR.
+ */
+ uint64_t memlimit_stop;
+
+ /** \private Reserved member. */
+ uint64_t reserved_int7;
+
+ /** \private Reserved member. */
+ uint64_t reserved_int8;
+
+ /** \private Reserved member. */
+ void *reserved_ptr1;
+
+ /** \private Reserved member. */
+ void *reserved_ptr2;
+
+ /** \private Reserved member. */
+ void *reserved_ptr3;
+
+ /** \private Reserved member. */
+ void *reserved_ptr4;
+
+} lzma_mt;
+
+
+/**
+ * \brief Calculate approximate memory usage of easy encoder
+ *
+ * This function is a wrapper for lzma_raw_encoder_memusage().
+ *
+ * \param preset Compression preset (level and possible flags)
+ *
+ * \return Number of bytes of memory required for the given
+ * preset when encoding or UINT64_MAX on error.
+ */
+extern LZMA_API(uint64_t) lzma_easy_encoder_memusage(uint32_t preset)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Calculate approximate decoder memory usage of a preset
+ *
+ * This function is a wrapper for lzma_raw_decoder_memusage().
+ *
+ * \param preset Compression preset (level and possible flags)
+ *
+ * \return Number of bytes of memory required to decompress a file
+ * that was compressed using the given preset or UINT64_MAX
+ * on error.
+ */
+extern LZMA_API(uint64_t) lzma_easy_decoder_memusage(uint32_t preset)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Initialize .xz Stream encoder using a preset number
+ *
+ * This function is intended for those who just want to use the basic features
+ * of liblzma (that is, most developers out there).
+ *
+ * If initialization fails (return value is not LZMA_OK), all the memory
+ * allocated for *strm by liblzma is always freed. Thus, there is no need
+ * to call lzma_end() after failed initialization.
+ *
+ * If initialization succeeds, use lzma_code() to do the actual encoding.
+ * Valid values for 'action' (the second argument of lzma_code()) are
+ * LZMA_RUN, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, and LZMA_FINISH. In future,
+ * there may be compression levels or flags that don't support LZMA_SYNC_FLUSH.
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param preset Compression preset to use. A preset consist of level
+ * number and zero or more flags. Usually flags aren't
+ * used, so preset is simply a number [0, 9] which match
+ * the options -0 ... -9 of the xz command line tool.
+ * Additional flags can be be set using bitwise-or with
+ * the preset level number, e.g. 6 | LZMA_PRESET_EXTREME.
+ * \param check Integrity check type to use. See check.h for available
+ * checks. The xz command line tool defaults to
+ * LZMA_CHECK_CRC64, which is a good choice if you are
+ * unsure. LZMA_CHECK_CRC32 is good too as long as the
+ * uncompressed file is not many gigabytes.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Initialization succeeded. Use lzma_code() to
+ * encode your data.
+ * - LZMA_MEM_ERROR: Memory allocation failed.
+ * - LZMA_OPTIONS_ERROR: The given compression preset is not
+ * supported by this build of liblzma.
+ * - LZMA_UNSUPPORTED_CHECK: The given check type is not
+ * supported by this liblzma build.
+ * - LZMA_PROG_ERROR: One or more of the parameters have values
+ * that will never be valid. For example, strm == NULL.
+ */
+extern LZMA_API(lzma_ret) lzma_easy_encoder(
+ lzma_stream *strm, uint32_t preset, lzma_check check)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Single-call .xz Stream encoding using a preset number
+ *
+ * The maximum required output buffer size can be calculated with
+ * lzma_stream_buffer_bound().
+ *
+ * \param preset Compression preset to use. See the description
+ * in lzma_easy_encoder().
+ * \param check Type of the integrity check to calculate from
+ * uncompressed data.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ * \param in Beginning of the input buffer
+ * \param in_size Size of the input buffer
+ * \param[out] out Beginning of the output buffer
+ * \param[out] out_pos The next byte will be written to out[*out_pos].
+ * *out_pos is updated only if encoding succeeds.
+ * \param out_size Size of the out buffer; the first byte into
+ * which no data is written to is out[out_size].
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Encoding was successful.
+ * - LZMA_BUF_ERROR: Not enough output buffer space.
+ * - LZMA_UNSUPPORTED_CHECK
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_MEM_ERROR
+ * - LZMA_DATA_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_easy_buffer_encode(
+ uint32_t preset, lzma_check check,
+ const lzma_allocator *allocator,
+ const uint8_t *in, size_t in_size,
+ uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow;
+
+
+/**
+ * \brief Initialize .xz Stream encoder using a custom filter chain
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param filters Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN. See filters.h for more
+ * information.
+ * \param check Type of the integrity check to calculate from
+ * uncompressed data.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Initialization was successful.
+ * - LZMA_MEM_ERROR
+ * - LZMA_UNSUPPORTED_CHECK
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_stream_encoder(lzma_stream *strm,
+ const lzma_filter *filters, lzma_check check)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Calculate approximate memory usage of multithreaded .xz encoder
+ *
+ * Since doing the encoding in threaded mode doesn't affect the memory
+ * requirements of single-threaded decompressor, you can use
+ * lzma_easy_decoder_memusage(options->preset) or
+ * lzma_raw_decoder_memusage(options->filters) to calculate
+ * the decompressor memory requirements.
+ *
+ * \param options Compression options
+ *
+ * \return Number of bytes of memory required for encoding with the
+ * given options. If an error occurs, for example due to
+ * unsupported preset or filter chain, UINT64_MAX is returned.
+ */
+extern LZMA_API(uint64_t) lzma_stream_encoder_mt_memusage(
+ const lzma_mt *options) lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Initialize multithreaded .xz Stream encoder
+ *
+ * This provides the functionality of lzma_easy_encoder() and
+ * lzma_stream_encoder() as a single function for multithreaded use.
+ *
+ * The supported actions for lzma_code() are LZMA_RUN, LZMA_FULL_FLUSH,
+ * LZMA_FULL_BARRIER, and LZMA_FINISH. Support for LZMA_SYNC_FLUSH might be
+ * added in the future.
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param options Pointer to multithreaded compression options
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_MEM_ERROR
+ * - LZMA_UNSUPPORTED_CHECK
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_stream_encoder_mt(
+ lzma_stream *strm, const lzma_mt *options)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Calculate recommended Block size for multithreaded .xz encoder
+ *
+ * This calculates a recommended Block size for multithreaded encoding given
+ * a filter chain. This is used internally by lzma_stream_encoder_mt() to
+ * determine the Block size if the block_size member is not set to the
+ * special value of 0 in the lzma_mt options struct.
+ *
+ * If one wishes to change the filters between Blocks, this function is
+ * helpful to set the block_size member of the lzma_mt struct before calling
+ * lzma_stream_encoder_mt(). Since the block_size member represents the
+ * maximum possible Block size for the multithreaded .xz encoder, one can
+ * use this function to find the maximum recommended Block size based on
+ * all planned filter chains. Otherwise, the multithreaded encoder will
+ * base its maximum Block size on the first filter chain used (if the
+ * block_size member is not set), which may unnecessarily limit the Block
+ * size for a later filter chain.
+ *
+ * \param filters Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN.
+ *
+ * \return Recommended Block size in bytes, or UINT64_MAX if
+ * an error occurred.
+ */
+extern LZMA_API(uint64_t) lzma_mt_block_size(const lzma_filter *filters)
+ lzma_nothrow;
+
+
+/**
+ * \brief Initialize .lzma encoder (legacy file format)
+ *
+ * The .lzma format is sometimes called the LZMA_Alone format, which is the
+ * reason for the name of this function. The .lzma format supports only the
+ * LZMA1 filter. There is no support for integrity checks like CRC32.
+ *
+ * Use this function if and only if you need to create files readable by
+ * legacy LZMA tools such as LZMA Utils 4.32.x. Moving to the .xz format
+ * is strongly recommended.
+ *
+ * The valid action values for lzma_code() are LZMA_RUN and LZMA_FINISH.
+ * No kind of flushing is supported, because the file format doesn't make
+ * it possible.
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param options Pointer to encoder options
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_MEM_ERROR
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_alone_encoder(
+ lzma_stream *strm, const lzma_options_lzma *options)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Calculate output buffer size for single-call Stream encoder
+ *
+ * When trying to compress incompressible data, the encoded size will be
+ * slightly bigger than the input data. This function calculates how much
+ * output buffer space is required to be sure that lzma_stream_buffer_encode()
+ * doesn't return LZMA_BUF_ERROR.
+ *
+ * The calculated value is not exact, but it is guaranteed to be big enough.
+ * The actual maximum output space required may be slightly smaller (up to
+ * about 100 bytes). This should not be a problem in practice.
+ *
+ * If the calculated maximum size doesn't fit into size_t or would make the
+ * Stream grow past LZMA_VLI_MAX (which should never happen in practice),
+ * zero is returned to indicate the error.
+ *
+ * \note The limit calculated by this function applies only to
+ * single-call encoding. Multi-call encoding may (and probably
+ * will) have larger maximum expansion when encoding
+ * incompressible data. Currently there is no function to
+ * calculate the maximum expansion of multi-call encoding.
+ *
+ * \param uncompressed_size Size in bytes of the uncompressed
+ * input data
+ *
+ * \return Maximum number of bytes needed to store the compressed data.
+ */
+extern LZMA_API(size_t) lzma_stream_buffer_bound(size_t uncompressed_size)
+ lzma_nothrow;
+
+
+/**
+ * \brief Single-call .xz Stream encoder
+ *
+ * \param filters Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN. See filters.h for more
+ * information.
+ * \param check Type of the integrity check to calculate from
+ * uncompressed data.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ * \param in Beginning of the input buffer
+ * \param in_size Size of the input buffer
+ * \param[out] out Beginning of the output buffer
+ * \param[out] out_pos The next byte will be written to out[*out_pos].
+ * *out_pos is updated only if encoding succeeds.
+ * \param out_size Size of the out buffer; the first byte into
+ * which no data is written to is out[out_size].
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Encoding was successful.
+ * - LZMA_BUF_ERROR: Not enough output buffer space.
+ * - LZMA_UNSUPPORTED_CHECK
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_MEM_ERROR
+ * - LZMA_DATA_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_stream_buffer_encode(
+ lzma_filter *filters, lzma_check check,
+ const lzma_allocator *allocator,
+ const uint8_t *in, size_t in_size,
+ uint8_t *out, size_t *out_pos, size_t out_size)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief MicroLZMA encoder
+ *
+ * The MicroLZMA format is a raw LZMA stream whose first byte (always 0x00)
+ * has been replaced with bitwise-negation of the LZMA properties (lc/lp/pb).
+ * This encoding ensures that the first byte of MicroLZMA stream is never
+ * 0x00. There is no end of payload marker and thus the uncompressed size
+ * must be stored separately. For the best error detection the dictionary
+ * size should be stored separately as well but alternatively one may use
+ * the uncompressed size as the dictionary size when decoding.
+ *
+ * With the MicroLZMA encoder, lzma_code() behaves slightly unusually.
+ * The action argument must be LZMA_FINISH and the return value will never be
+ * LZMA_OK. Thus the encoding is always done with a single lzma_code() after
+ * the initialization. The benefit of the combination of initialization
+ * function and lzma_code() is that memory allocations can be re-used for
+ * better performance.
+ *
+ * lzma_code() will try to encode as much input as is possible to fit into
+ * the given output buffer. If not all input can be encoded, the stream will
+ * be finished without encoding all the input. The caller must check both
+ * input and output buffer usage after lzma_code() (total_in and total_out
+ * in lzma_stream can be convenient). Often lzma_code() can fill the output
+ * buffer completely if there is a lot of input, but sometimes a few bytes
+ * may remain unused because the next LZMA symbol would require more space.
+ *
+ * lzma_stream.avail_out must be at least 6. Otherwise LZMA_PROG_ERROR
+ * will be returned.
+ *
+ * The LZMA dictionary should be reasonably low to speed up the encoder
+ * re-initialization. A good value is bigger than the resulting
+ * uncompressed size of most of the output chunks. For example, if output
+ * size is 4 KiB, dictionary size of 32 KiB or 64 KiB is good. If the
+ * data compresses extremely well, even 128 KiB may be useful.
+ *
+ * The MicroLZMA format and this encoder variant were made with the EROFS
+ * file system in mind. This format may be convenient in other embedded
+ * uses too where many small streams are needed. XZ Embedded includes a
+ * decoder for this format.
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param options Pointer to encoder options
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_STREAM_END: All good. Check the amounts of input used
+ * and output produced. Store the amount of input used
+ * (uncompressed size) as it needs to be known to decompress
+ * the data.
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_MEM_ERROR
+ * - LZMA_PROG_ERROR: In addition to the generic reasons for this
+ * error code, this may also be returned if there isn't enough
+ * output space (6 bytes) to create a valid MicroLZMA stream.
+ */
+extern LZMA_API(lzma_ret) lzma_microlzma_encoder(
+ lzma_stream *strm, const lzma_options_lzma *options)
+ lzma_nothrow;
+
+
+/************
+ * Decoding *
+ ************/
+
+/**
+ * This flag makes lzma_code() return LZMA_NO_CHECK if the input stream
+ * being decoded has no integrity check. Note that when used with
+ * lzma_auto_decoder(), all .lzma files will trigger LZMA_NO_CHECK
+ * if LZMA_TELL_NO_CHECK is used.
+ */
+#define LZMA_TELL_NO_CHECK UINT32_C(0x01)
+
+
+/**
+ * This flag makes lzma_code() return LZMA_UNSUPPORTED_CHECK if the input
+ * stream has an integrity check, but the type of the integrity check is not
+ * supported by this liblzma version or build. Such files can still be
+ * decoded, but the integrity check cannot be verified.
+ */
+#define LZMA_TELL_UNSUPPORTED_CHECK UINT32_C(0x02)
+
+
+/**
+ * This flag makes lzma_code() return LZMA_GET_CHECK as soon as the type
+ * of the integrity check is known. The type can then be got with
+ * lzma_get_check().
+ */
+#define LZMA_TELL_ANY_CHECK UINT32_C(0x04)
+
+
+/**
+ * This flag makes lzma_code() not calculate and verify the integrity check
+ * of the compressed data in .xz files. This means that invalid integrity
+ * check values won't be detected and LZMA_DATA_ERROR won't be returned in
+ * such cases.
+ *
+ * This flag only affects the checks of the compressed data itself; the CRC32
+ * values in the .xz headers will still be verified normally.
+ *
+ * Don't use this flag unless you know what you are doing. Possible reasons
+ * to use this flag:
+ *
+ * - Trying to recover data from a corrupt .xz file.
+ *
+ * - Speeding up decompression, which matters mostly with SHA-256
+ * or with files that have compressed extremely well. It's recommended
+ * to not use this flag for this purpose unless the file integrity is
+ * verified externally in some other way.
+ *
+ * Support for this flag was added in liblzma 5.1.4beta.
+ */
+#define LZMA_IGNORE_CHECK UINT32_C(0x10)
+
+
+/**
+ * This flag enables decoding of concatenated files with file formats that
+ * allow concatenating compressed files as is. From the formats currently
+ * supported by liblzma, only the .xz and .lz formats allow concatenated
+ * files. Concatenated files are not allowed with the legacy .lzma format.
+ *
+ * This flag also affects the usage of the 'action' argument for lzma_code().
+ * When LZMA_CONCATENATED is used, lzma_code() won't return LZMA_STREAM_END
+ * unless LZMA_FINISH is used as 'action'. Thus, the application has to set
+ * LZMA_FINISH in the same way as it does when encoding.
+ *
+ * If LZMA_CONCATENATED is not used, the decoders still accept LZMA_FINISH
+ * as 'action' for lzma_code(), but the usage of LZMA_FINISH isn't required.
+ */
+#define LZMA_CONCATENATED UINT32_C(0x08)
+
+
+/**
+ * This flag makes the threaded decoder report errors (like LZMA_DATA_ERROR)
+ * as soon as they are detected. This saves time when the application has no
+ * interest in a partially decompressed truncated or corrupt file. Note that
+ * due to timing randomness, if the same truncated or corrupt input is
+ * decompressed multiple times with this flag, a different amount of output
+ * may be produced by different runs, and even the error code might vary.
+ *
+ * When using LZMA_FAIL_FAST, it is recommended to use LZMA_FINISH to tell
+ * the decoder when no more input will be coming because it can help fast
+ * detection and reporting of truncated files. Note that in this situation
+ * truncated files might be diagnosed with LZMA_DATA_ERROR instead of
+ * LZMA_OK or LZMA_BUF_ERROR!
+ *
+ * Without this flag the threaded decoder will provide as much output as
+ * possible at first and then report the pending error. This default behavior
+ * matches the single-threaded decoder and provides repeatable behavior
+ * with truncated or corrupt input. There are a few special cases where the
+ * behavior can still differ like memory allocation failures (LZMA_MEM_ERROR).
+ *
+ * Single-threaded decoders currently ignore this flag.
+ *
+ * Support for this flag was added in liblzma 5.3.3alpha. Note that in older
+ * versions this flag isn't supported (LZMA_OPTIONS_ERROR) even by functions
+ * that ignore this flag in newer liblzma versions.
+ */
+#define LZMA_FAIL_FAST UINT32_C(0x20)
+
+
+/**
+ * \brief Initialize .xz Stream decoder
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param memlimit Memory usage limit as bytes. Use UINT64_MAX
+ * to effectively disable the limiter. liblzma
+ * 5.2.3 and earlier don't allow 0 here and return
+ * LZMA_PROG_ERROR; later versions treat 0 as if 1
+ * had been specified.
+ * \param flags Bitwise-or of zero or more of the decoder flags:
+ * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK,
+ * LZMA_TELL_ANY_CHECK, LZMA_IGNORE_CHECK,
+ * LZMA_CONCATENATED, LZMA_FAIL_FAST
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Initialization was successful.
+ * - LZMA_MEM_ERROR: Cannot allocate memory.
+ * - LZMA_OPTIONS_ERROR: Unsupported flags
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_stream_decoder(
+ lzma_stream *strm, uint64_t memlimit, uint32_t flags)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Initialize multithreaded .xz Stream decoder
+ *
+ * The decoder can decode multiple Blocks in parallel. This requires that each
+ * Block Header contains the Compressed Size and Uncompressed size fields
+ * which are added by the multi-threaded encoder, see lzma_stream_encoder_mt().
+ *
+ * A Stream with one Block will only utilize one thread. A Stream with multiple
+ * Blocks but without size information in Block Headers will be processed in
+ * single-threaded mode in the same way as done by lzma_stream_decoder().
+ * Concatenated Streams are processed one Stream at a time; no inter-Stream
+ * parallelization is done.
+ *
+ * This function behaves like lzma_stream_decoder() when options->threads == 1
+ * and options->memlimit_threading <= 1.
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param options Pointer to multithreaded compression options
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Initialization was successful.
+ * - LZMA_MEM_ERROR: Cannot allocate memory.
+ * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached.
+ * - LZMA_OPTIONS_ERROR: Unsupported flags.
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_stream_decoder_mt(
+ lzma_stream *strm, const lzma_mt *options)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Decode .xz, .lzma, and .lz (lzip) files with autodetection
+ *
+ * This decoder autodetects between the .xz, .lzma, and .lz file formats,
+ * and calls lzma_stream_decoder(), lzma_alone_decoder(), or
+ * lzma_lzip_decoder() once the type of the input file has been detected.
+ *
+ * Support for .lz was added in 5.4.0.
+ *
+ * If the flag LZMA_CONCATENATED is used and the input is a .lzma file:
+ * For historical reasons concatenated .lzma files aren't supported.
+ * If there is trailing data after one .lzma stream, lzma_code() will
+ * return LZMA_DATA_ERROR. (lzma_alone_decoder() doesn't have such a check
+ * as it doesn't support any decoder flags. It will return LZMA_STREAM_END
+ * after one .lzma stream.)
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param memlimit Memory usage limit as bytes. Use UINT64_MAX
+ * to effectively disable the limiter. liblzma
+ * 5.2.3 and earlier don't allow 0 here and return
+ * LZMA_PROG_ERROR; later versions treat 0 as if 1
+ * had been specified.
+ * \param flags Bitwise-or of zero or more of the decoder flags:
+ * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK,
+ * LZMA_TELL_ANY_CHECK, LZMA_IGNORE_CHECK,
+ * LZMA_CONCATENATED, LZMA_FAIL_FAST
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Initialization was successful.
+ * - LZMA_MEM_ERROR: Cannot allocate memory.
+ * - LZMA_OPTIONS_ERROR: Unsupported flags
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_auto_decoder(
+ lzma_stream *strm, uint64_t memlimit, uint32_t flags)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Initialize .lzma decoder (legacy file format)
+ *
+ * Valid 'action' arguments to lzma_code() are LZMA_RUN and LZMA_FINISH.
+ * There is no need to use LZMA_FINISH, but it's allowed because it may
+ * simplify certain types of applications.
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param memlimit Memory usage limit as bytes. Use UINT64_MAX
+ * to effectively disable the limiter. liblzma
+ * 5.2.3 and earlier don't allow 0 here and return
+ * LZMA_PROG_ERROR; later versions treat 0 as if 1
+ * had been specified.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_MEM_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_alone_decoder(
+ lzma_stream *strm, uint64_t memlimit)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Initialize .lz (lzip) decoder (a foreign file format)
+ *
+ * This decoder supports the .lz format version 0 and the unextended .lz
+ * format version 1:
+ *
+ * - Files in the format version 0 were produced by lzip 1.3 and older.
+ * Such files aren't common but may be found from file archives
+ * as a few source packages were released in this format. People
+ * might have old personal files in this format too. Decompression
+ * support for the format version 0 was removed in lzip 1.18.
+ *
+ * - lzip 1.3 added decompression support for .lz format version 1 files.
+ * Compression support was added in lzip 1.4. In lzip 1.6 the .lz format
+ * version 1 was extended to support the Sync Flush marker. This extension
+ * is not supported by liblzma. lzma_code() will return LZMA_DATA_ERROR
+ * at the location of the Sync Flush marker. In practice files with
+ * the Sync Flush marker are very rare and thus liblzma can decompress
+ * almost all .lz files.
+ *
+ * Just like with lzma_stream_decoder() for .xz files, LZMA_CONCATENATED
+ * should be used when decompressing normal standalone .lz files.
+ *
+ * The .lz format allows putting non-.lz data at the end of a file after at
+ * least one valid .lz member. That is, one can append custom data at the end
+ * of a .lz file and the decoder is required to ignore it. In liblzma this
+ * is relevant only when LZMA_CONCATENATED is used. In that case lzma_code()
+ * will return LZMA_STREAM_END and leave lzma_stream.next_in pointing to
+ * the first byte of the non-.lz data. An exception to this is if the first
+ * 1-3 bytes of the non-.lz data are identical to the .lz magic bytes
+ * (0x4C, 0x5A, 0x49, 0x50; "LZIP" in US-ASCII). In such a case the 1-3 bytes
+ * will have been ignored by lzma_code(). If one wishes to locate the non-.lz
+ * data reliably, one must ensure that the first byte isn't 0x4C. Actually
+ * one should ensure that none of the first four bytes of trailing data are
+ * equal to the magic bytes because lzip >= 1.20 requires it by default.
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param memlimit Memory usage limit as bytes. Use UINT64_MAX
+ * to effectively disable the limiter.
+ * \param flags Bitwise-or of flags, or zero for no flags.
+ * All decoder flags listed above are supported
+ * although only LZMA_CONCATENATED and (in very rare
+ * cases) LZMA_IGNORE_CHECK are actually useful.
+ * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK,
+ * and LZMA_FAIL_FAST do nothing. LZMA_TELL_ANY_CHECK
+ * is supported for consistency only as CRC32 is
+ * always used in the .lz format.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Initialization was successful.
+ * - LZMA_MEM_ERROR: Cannot allocate memory.
+ * - LZMA_OPTIONS_ERROR: Unsupported flags
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_lzip_decoder(
+ lzma_stream *strm, uint64_t memlimit, uint32_t flags)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Single-call .xz Stream decoder
+ *
+ * \param memlimit Pointer to how much memory the decoder is allowed
+ * to allocate. The value pointed by this pointer is
+ * modified if and only if LZMA_MEMLIMIT_ERROR is
+ * returned.
+ * \param flags Bitwise-or of zero or more of the decoder flags:
+ * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK,
+ * LZMA_IGNORE_CHECK, LZMA_CONCATENATED,
+ * LZMA_FAIL_FAST. Note that LZMA_TELL_ANY_CHECK
+ * is not allowed and will return LZMA_PROG_ERROR.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ * \param in Beginning of the input buffer
+ * \param in_pos The next byte will be read from in[*in_pos].
+ * *in_pos is updated only if decoding succeeds.
+ * \param in_size Size of the input buffer; the first byte that
+ * won't be read is in[in_size].
+ * \param[out] out Beginning of the output buffer
+ * \param[out] out_pos The next byte will be written to out[*out_pos].
+ * *out_pos is updated only if decoding succeeds.
+ * \param out_size Size of the out buffer; the first byte into
+ * which no data is written to is out[out_size].
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Decoding was successful.
+ * - LZMA_FORMAT_ERROR
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_DATA_ERROR
+ * - LZMA_NO_CHECK: This can be returned only if using
+ * the LZMA_TELL_NO_CHECK flag.
+ * - LZMA_UNSUPPORTED_CHECK: This can be returned only if using
+ * the LZMA_TELL_UNSUPPORTED_CHECK flag.
+ * - LZMA_MEM_ERROR
+ * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached.
+ * The minimum required memlimit value was stored to *memlimit.
+ * - LZMA_BUF_ERROR: Output buffer was too small.
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_stream_buffer_decode(
+ uint64_t *memlimit, uint32_t flags,
+ const lzma_allocator *allocator,
+ const uint8_t *in, size_t *in_pos, size_t in_size,
+ uint8_t *out, size_t *out_pos, size_t out_size)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief MicroLZMA decoder
+ *
+ * See lzma_microlzma_encoder() for more information.
+ *
+ * The lzma_code() usage with this decoder is completely normal. The
+ * special behavior of lzma_code() applies to lzma_microlzma_encoder() only.
+ *
+ * \param strm Pointer to lzma_stream that is at least initialized
+ * with LZMA_STREAM_INIT.
+ * \param comp_size Compressed size of the MicroLZMA stream.
+ * The caller must somehow know this exactly.
+ * \param uncomp_size Uncompressed size of the MicroLZMA stream.
+ * If the exact uncompressed size isn't known, this
+ * can be set to a value that is at most as big as
+ * the exact uncompressed size would be, but then the
+ * next argument uncomp_size_is_exact must be false.
+ * \param uncomp_size_is_exact
+ * If true, uncomp_size must be exactly correct.
+ * This will improve error detection at the end of
+ * the stream. If the exact uncompressed size isn't
+ * known, this must be false. uncomp_size must still
+ * be at most as big as the exact uncompressed size
+ * is. Setting this to false when the exact size is
+ * known will work but error detection at the end of
+ * the stream will be weaker.
+ * \param dict_size LZMA dictionary size that was used when
+ * compressing the data. It is OK to use a bigger
+ * value too but liblzma will then allocate more
+ * memory than would actually be required and error
+ * detection will be slightly worse. (Note that with
+ * the implementation in XZ Embedded it doesn't
+ * affect the memory usage if one specifies bigger
+ * dictionary than actually required.)
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_MEM_ERROR
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_microlzma_decoder(
+ lzma_stream *strm, uint64_t comp_size,
+ uint64_t uncomp_size, lzma_bool uncomp_size_is_exact,
+ uint32_t dict_size) lzma_nothrow;
diff --git a/vcpkg_installed/arm64-osx/include/lzma/delta.h b/vcpkg_installed/arm64-osx/include/lzma/delta.h
new file mode 100644
index 00000000..5ebacef8
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/delta.h
@@ -0,0 +1,95 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/delta.h
+ * \brief Delta filter
+ * \note Never include this file directly. Use instead.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/**
+ * \brief Filter ID
+ *
+ * Filter ID of the Delta filter. This is used as lzma_filter.id.
+ */
+#define LZMA_FILTER_DELTA LZMA_VLI_C(0x03)
+
+
+/**
+ * \brief Type of the delta calculation
+ *
+ * Currently only byte-wise delta is supported. Other possible types could
+ * be, for example, delta of 16/32/64-bit little/big endian integers, but
+ * these are not currently planned since byte-wise delta is almost as good.
+ */
+typedef enum {
+ LZMA_DELTA_TYPE_BYTE
+} lzma_delta_type;
+
+
+/**
+ * \brief Options for the Delta filter
+ *
+ * These options are needed by both encoder and decoder.
+ */
+typedef struct {
+ /** For now, this must always be LZMA_DELTA_TYPE_BYTE. */
+ lzma_delta_type type;
+
+ /**
+ * \brief Delta distance
+ *
+ * With the only currently supported type, LZMA_DELTA_TYPE_BYTE,
+ * the distance is as bytes.
+ *
+ * Examples:
+ * - 16-bit stereo audio: distance = 4 bytes
+ * - 24-bit RGB image data: distance = 3 bytes
+ */
+ uint32_t dist;
+
+ /**
+ * \brief Minimum value for lzma_options_delta.dist.
+ */
+# define LZMA_DELTA_DIST_MIN 1
+
+ /**
+ * \brief Maximum value for lzma_options_delta.dist.
+ */
+# define LZMA_DELTA_DIST_MAX 256
+
+ /*
+ * Reserved space to allow possible future extensions without
+ * breaking the ABI. You should not touch these, because the names
+ * of these variables may change. These are and will never be used
+ * when type is LZMA_DELTA_TYPE_BYTE, so it is safe to leave these
+ * uninitialized.
+ */
+
+ /** \private Reserved member. */
+ uint32_t reserved_int1;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int2;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int3;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int4;
+
+ /** \private Reserved member. */
+ void *reserved_ptr1;
+
+ /** \private Reserved member. */
+ void *reserved_ptr2;
+
+} lzma_options_delta;
diff --git a/vcpkg_installed/arm64-osx/include/lzma/filter.h b/vcpkg_installed/arm64-osx/include/lzma/filter.h
new file mode 100644
index 00000000..e86809c4
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/filter.h
@@ -0,0 +1,769 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/filter.h
+ * \brief Common filter related types and functions
+ * \note Never include this file directly. Use instead.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/**
+ * \brief Maximum number of filters in a chain
+ *
+ * A filter chain can have 1-4 filters, of which three are allowed to change
+ * the size of the data. Usually only one or two filters are needed.
+ */
+#define LZMA_FILTERS_MAX 4
+
+
+/**
+ * \brief Filter options
+ *
+ * This structure is used to pass a Filter ID and a pointer to the filter's
+ * options to liblzma. A few functions work with a single lzma_filter
+ * structure, while most functions expect a filter chain.
+ *
+ * A filter chain is indicated with an array of lzma_filter structures.
+ * The array is terminated with .id = LZMA_VLI_UNKNOWN. Thus, the filter
+ * array must have LZMA_FILTERS_MAX + 1 elements (that is, five) to
+ * be able to hold any arbitrary filter chain. This is important when
+ * using lzma_block_header_decode() from block.h, because a filter array
+ * that is too small would make liblzma write past the end of the array.
+ */
+typedef struct {
+ /**
+ * \brief Filter ID
+ *
+ * Use constants whose name begin with 'LZMA_FILTER_' to specify
+ * different filters. In an array of lzma_filter structures, use
+ * LZMA_VLI_UNKNOWN to indicate end of filters.
+ *
+ * \note This is not an enum, because on some systems enums
+ * cannot be 64-bit.
+ */
+ lzma_vli id;
+
+ /**
+ * \brief Pointer to filter-specific options structure
+ *
+ * If the filter doesn't need options, set this to NULL. If id is
+ * set to LZMA_VLI_UNKNOWN, options is ignored, and thus
+ * doesn't need be initialized.
+ */
+ void *options;
+
+} lzma_filter;
+
+
+/**
+ * \brief Test if the given Filter ID is supported for encoding
+ *
+ * \param id Filter ID
+ *
+ * \return lzma_bool:
+ * - true if the Filter ID is supported for encoding by this
+ * liblzma build.
+ * - false otherwise.
+ */
+extern LZMA_API(lzma_bool) lzma_filter_encoder_is_supported(lzma_vli id)
+ lzma_nothrow lzma_attr_const;
+
+
+/**
+ * \brief Test if the given Filter ID is supported for decoding
+ *
+ * \param id Filter ID
+ *
+ * \return lzma_bool:
+ * - true if the Filter ID is supported for decoding by this
+ * liblzma build.
+ * - false otherwise.
+ */
+extern LZMA_API(lzma_bool) lzma_filter_decoder_is_supported(lzma_vli id)
+ lzma_nothrow lzma_attr_const;
+
+
+/**
+ * \brief Copy the filters array
+ *
+ * Copy the Filter IDs and filter-specific options from src to dest.
+ * Up to LZMA_FILTERS_MAX filters are copied, plus the terminating
+ * .id == LZMA_VLI_UNKNOWN. Thus, dest should have at least
+ * LZMA_FILTERS_MAX + 1 elements space unless the caller knows that
+ * src is smaller than that.
+ *
+ * Unless the filter-specific options is NULL, the Filter ID has to be
+ * supported by liblzma, because liblzma needs to know the size of every
+ * filter-specific options structure. The filter-specific options are not
+ * validated. If options is NULL, any unsupported Filter IDs are copied
+ * without returning an error.
+ *
+ * Old filter-specific options in dest are not freed, so dest doesn't
+ * need to be initialized by the caller in any way.
+ *
+ * If an error occurs, memory possibly already allocated by this function
+ * is always freed. liblzma versions older than 5.2.7 may modify the dest
+ * array and leave its contents in an undefined state if an error occurs.
+ * liblzma 5.2.7 and newer only modify the dest array when returning LZMA_OK.
+ *
+ * \param src Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN.
+ * \param[out] dest Destination filter array
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_MEM_ERROR
+ * - LZMA_OPTIONS_ERROR: Unsupported Filter ID and its options
+ * is not NULL.
+ * - LZMA_PROG_ERROR: src or dest is NULL.
+ */
+extern LZMA_API(lzma_ret) lzma_filters_copy(
+ const lzma_filter *src, lzma_filter *dest,
+ const lzma_allocator *allocator)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Free the options in the array of lzma_filter structures
+ *
+ * This frees the filter chain options. The filters array itself is not freed.
+ *
+ * The filters array must have at most LZMA_FILTERS_MAX + 1 elements
+ * including the terminating element which must have .id = LZMA_VLI_UNKNOWN.
+ * For all elements before the terminating element:
+ * - options will be freed using the given lzma_allocator or,
+ * if allocator is NULL, using free().
+ * - options will be set to NULL.
+ * - id will be set to LZMA_VLI_UNKNOWN.
+ *
+ * If filters is NULL, this does nothing. Again, this never frees the
+ * filters array itself.
+ *
+ * \param filters Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ */
+extern LZMA_API(void) lzma_filters_free(
+ lzma_filter *filters, const lzma_allocator *allocator)
+ lzma_nothrow;
+
+
+/**
+ * \brief Calculate approximate memory requirements for raw encoder
+ *
+ * This function can be used to calculate the memory requirements for
+ * Block and Stream encoders too because Block and Stream encoders don't
+ * need significantly more memory than raw encoder.
+ *
+ * \param filters Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN.
+ *
+ * \return Number of bytes of memory required for the given
+ * filter chain when encoding or UINT64_MAX on error.
+ */
+extern LZMA_API(uint64_t) lzma_raw_encoder_memusage(const lzma_filter *filters)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Calculate approximate memory requirements for raw decoder
+ *
+ * This function can be used to calculate the memory requirements for
+ * Block and Stream decoders too because Block and Stream decoders don't
+ * need significantly more memory than raw decoder.
+ *
+ * \param filters Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN.
+ *
+ * \return Number of bytes of memory required for the given
+ * filter chain when decoding or UINT64_MAX on error.
+ */
+extern LZMA_API(uint64_t) lzma_raw_decoder_memusage(const lzma_filter *filters)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Initialize raw encoder
+ *
+ * This function may be useful when implementing custom file formats.
+ *
+ * The 'action' with lzma_code() can be LZMA_RUN, LZMA_SYNC_FLUSH (if the
+ * filter chain supports it), or LZMA_FINISH.
+ *
+ * \param strm Pointer to lzma_stream that is at least
+ * initialized with LZMA_STREAM_INIT.
+ * \param filters Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_MEM_ERROR
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_raw_encoder(
+ lzma_stream *strm, const lzma_filter *filters)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Initialize raw decoder
+ *
+ * The initialization of raw decoder goes similarly to raw encoder.
+ *
+ * The 'action' with lzma_code() can be LZMA_RUN or LZMA_FINISH. Using
+ * LZMA_FINISH is not required, it is supported just for convenience.
+ *
+ * \param strm Pointer to lzma_stream that is at least
+ * initialized with LZMA_STREAM_INIT.
+ * \param filters Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_MEM_ERROR
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_raw_decoder(
+ lzma_stream *strm, const lzma_filter *filters)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Update the filter chain in the encoder
+ *
+ * This function may be called after lzma_code() has returned LZMA_STREAM_END
+ * when LZMA_FULL_BARRIER, LZMA_FULL_FLUSH, or LZMA_SYNC_FLUSH was used:
+ *
+ * - After LZMA_FULL_BARRIER or LZMA_FULL_FLUSH: Single-threaded .xz Stream
+ * encoder (lzma_stream_encoder()) and (since liblzma 5.4.0) multi-threaded
+ * Stream encoder (lzma_stream_encoder_mt()) allow setting a new filter
+ * chain to be used for the next Block(s).
+ *
+ * - After LZMA_SYNC_FLUSH: Raw encoder (lzma_raw_encoder()),
+ * Block encoder (lzma_block_encoder()), and single-threaded .xz Stream
+ * encoder (lzma_stream_encoder()) allow changing certain filter-specific
+ * options in the middle of encoding. The actual filters in the chain
+ * (Filter IDs) must not be changed! Currently only the lc, lp, and pb
+ * options of LZMA2 (not LZMA1) can be changed this way.
+ *
+ * - In the future some filters might allow changing some of their options
+ * without any barrier or flushing but currently such filters don't exist.
+ *
+ * This function may also be called when no data has been compressed yet
+ * although this is rarely useful. In that case, this function will behave
+ * as if LZMA_FULL_FLUSH (Stream encoders) or LZMA_SYNC_FLUSH (Raw or Block
+ * encoder) had been used right before calling this function.
+ *
+ * \param strm Pointer to lzma_stream that is at least
+ * initialized with LZMA_STREAM_INIT.
+ * \param filters Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_MEM_ERROR
+ * - LZMA_MEMLIMIT_ERROR
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_filters_update(
+ lzma_stream *strm, const lzma_filter *filters) lzma_nothrow;
+
+
+/**
+ * \brief Single-call raw encoder
+ *
+ * \note There is no function to calculate how big output buffer
+ * would surely be big enough. (lzma_stream_buffer_bound()
+ * works only for lzma_stream_buffer_encode(); raw encoder
+ * won't necessarily meet that bound.)
+ *
+ * \param filters Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ * \param in Beginning of the input buffer
+ * \param in_size Size of the input buffer
+ * \param[out] out Beginning of the output buffer
+ * \param[out] out_pos The next byte will be written to out[*out_pos].
+ * *out_pos is updated only if encoding succeeds.
+ * \param out_size Size of the out buffer; the first byte into
+ * which no data is written to is out[out_size].
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Encoding was successful.
+ * - LZMA_BUF_ERROR: Not enough output buffer space.
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_MEM_ERROR
+ * - LZMA_DATA_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_raw_buffer_encode(
+ const lzma_filter *filters, const lzma_allocator *allocator,
+ const uint8_t *in, size_t in_size, uint8_t *out,
+ size_t *out_pos, size_t out_size) lzma_nothrow;
+
+
+/**
+ * \brief Single-call raw decoder
+ *
+ * \param filters Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ * \param in Beginning of the input buffer
+ * \param in_pos The next byte will be read from in[*in_pos].
+ * *in_pos is updated only if decoding succeeds.
+ * \param in_size Size of the input buffer; the first byte that
+ * won't be read is in[in_size].
+ * \param[out] out Beginning of the output buffer
+ * \param[out] out_pos The next byte will be written to out[*out_pos].
+ * *out_pos is updated only if encoding succeeds.
+ * \param out_size Size of the out buffer; the first byte into
+ * which no data is written to is out[out_size].
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Decoding was successful.
+ * - LZMA_BUF_ERROR: Not enough output buffer space.
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_MEM_ERROR
+ * - LZMA_DATA_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_raw_buffer_decode(
+ const lzma_filter *filters, const lzma_allocator *allocator,
+ const uint8_t *in, size_t *in_pos, size_t in_size,
+ uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow;
+
+
+/**
+ * \brief Get the size of the Filter Properties field
+ *
+ * This function may be useful when implementing custom file formats
+ * using the raw encoder and decoder.
+ *
+ * \note This function validates the Filter ID, but does not
+ * necessarily validate the options. Thus, it is possible
+ * that this returns LZMA_OK while the following call to
+ * lzma_properties_encode() returns LZMA_OPTIONS_ERROR.
+ *
+ * \param[out] size Pointer to uint32_t to hold the size of the properties
+ * \param filter Filter ID and options (the size of the properties may
+ * vary depending on the options)
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_properties_size(
+ uint32_t *size, const lzma_filter *filter) lzma_nothrow;
+
+
+/**
+ * \brief Encode the Filter Properties field
+ *
+ * \note Even this function won't validate more options than actually
+ * necessary. Thus, it is possible that encoding the properties
+ * succeeds but using the same options to initialize the encoder
+ * will fail.
+ *
+ * \note If lzma_properties_size() indicated that the size
+ * of the Filter Properties field is zero, calling
+ * lzma_properties_encode() is not required, but it
+ * won't do any harm either.
+ *
+ * \param filter Filter ID and options
+ * \param[out] props Buffer to hold the encoded options. The size of
+ * the buffer must have been already determined with
+ * lzma_properties_size().
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_properties_encode(
+ const lzma_filter *filter, uint8_t *props) lzma_nothrow;
+
+
+/**
+ * \brief Decode the Filter Properties field
+ *
+ * \param filter filter->id must have been set to the correct
+ * Filter ID. filter->options doesn't need to be
+ * initialized (it's not freed by this function). The
+ * decoded options will be stored in filter->options;
+ * it's application's responsibility to free it when
+ * appropriate. filter->options is set to NULL if
+ * there are no properties or if an error occurs.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ * and in case of an error, also free().
+ * \param props Input buffer containing the properties.
+ * \param props_size Size of the properties. This must be the exact
+ * size; giving too much or too little input will
+ * return LZMA_OPTIONS_ERROR.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_MEM_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_properties_decode(
+ lzma_filter *filter, const lzma_allocator *allocator,
+ const uint8_t *props, size_t props_size) lzma_nothrow;
+
+
+/**
+ * \brief Calculate encoded size of a Filter Flags field
+ *
+ * Knowing the size of Filter Flags is useful to know when allocating
+ * memory to hold the encoded Filter Flags.
+ *
+ * \note If you need to calculate size of List of Filter Flags,
+ * you need to loop over every lzma_filter entry.
+ *
+ * \param[out] size Pointer to integer to hold the calculated size
+ * \param filter Filter ID and associated options whose encoded
+ * size is to be calculated
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: *size set successfully. Note that this doesn't
+ * guarantee that filter->options is valid, thus
+ * lzma_filter_flags_encode() may still fail.
+ * - LZMA_OPTIONS_ERROR: Unknown Filter ID or unsupported options.
+ * - LZMA_PROG_ERROR: Invalid options
+ */
+extern LZMA_API(lzma_ret) lzma_filter_flags_size(
+ uint32_t *size, const lzma_filter *filter)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Encode Filter Flags into given buffer
+ *
+ * In contrast to some functions, this doesn't allocate the needed buffer.
+ * This is due to how this function is used internally by liblzma.
+ *
+ * \param filter Filter ID and options to be encoded
+ * \param[out] out Beginning of the output buffer
+ * \param[out] out_pos out[*out_pos] is the next write position. This
+ * is updated by the encoder.
+ * \param out_size out[out_size] is the first byte to not write.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Encoding was successful.
+ * - LZMA_OPTIONS_ERROR: Invalid or unsupported options.
+ * - LZMA_PROG_ERROR: Invalid options or not enough output
+ * buffer space (you should have checked it with
+ * lzma_filter_flags_size()).
+ */
+extern LZMA_API(lzma_ret) lzma_filter_flags_encode(const lzma_filter *filter,
+ uint8_t *out, size_t *out_pos, size_t out_size)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Decode Filter Flags from given buffer
+ *
+ * The decoded result is stored into *filter. The old value of
+ * filter->options is not free()d. If anything other than LZMA_OK
+ * is returned, filter->options is set to NULL.
+ *
+ * \param[out] filter Destination filter. The decoded Filter ID will
+ * be stored in filter->id. If options are needed
+ * they will be allocated and the pointer will be
+ * stored in filter->options.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ * \param in Beginning of the input buffer
+ * \param[out] in_pos The next byte will be read from in[*in_pos].
+ * *in_pos is updated only if decoding succeeds.
+ * \param in_size Size of the input buffer; the first byte that
+ * won't be read is in[in_size].
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_OPTIONS_ERROR
+ * - LZMA_MEM_ERROR
+ * - LZMA_DATA_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_filter_flags_decode(
+ lzma_filter *filter, const lzma_allocator *allocator,
+ const uint8_t *in, size_t *in_pos, size_t in_size)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/***********
+ * Strings *
+ ***********/
+
+/**
+ * \brief Allow or show all filters
+ *
+ * By default only the filters supported in the .xz format are accept by
+ * lzma_str_to_filters() or shown by lzma_str_list_filters().
+ */
+#define LZMA_STR_ALL_FILTERS UINT32_C(0x01)
+
+
+/**
+ * \brief Do not validate the filter chain in lzma_str_to_filters()
+ *
+ * By default lzma_str_to_filters() can return an error if the filter chain
+ * as a whole isn't usable in the .xz format or in the raw encoder or decoder.
+ * With this flag, this validation is skipped. This flag doesn't affect the
+ * handling of the individual filter options. To allow non-.xz filters also
+ * LZMA_STR_ALL_FILTERS is needed.
+ */
+#define LZMA_STR_NO_VALIDATION UINT32_C(0x02)
+
+
+/**
+ * \brief Stringify encoder options
+ *
+ * Show the filter-specific options that the encoder will use.
+ * This may be useful for verbose diagnostic messages.
+ *
+ * Note that if options were decoded from .xz headers then the encoder options
+ * may be undefined. This flag shouldn't be used in such a situation.
+ */
+#define LZMA_STR_ENCODER UINT32_C(0x10)
+
+
+/**
+ * \brief Stringify decoder options
+ *
+ * Show the filter-specific options that the decoder will use.
+ * This may be useful for showing what filter options were decoded
+ * from file headers.
+ */
+#define LZMA_STR_DECODER UINT32_C(0x20)
+
+
+/**
+ * \brief Produce xz-compatible getopt_long() syntax
+ *
+ * That is, "delta:dist=2 lzma2:dict=4MiB,pb=1,lp=1" becomes
+ * "--delta=dist=2 --lzma2=dict=4MiB,pb=1,lp=1".
+ *
+ * This syntax is compatible with xz 5.0.0 as long as the filters and
+ * their options are supported too.
+ */
+#define LZMA_STR_GETOPT_LONG UINT32_C(0x40)
+
+
+/**
+ * \brief Use two dashes "--" instead of a space to separate filters
+ *
+ * That is, "delta:dist=2 lzma2:pb=1,lp=1" becomes
+ * "delta:dist=2--lzma2:pb=1,lp=1". This looks slightly odd but this
+ * kind of strings should be usable on the command line without quoting.
+ * However, it is possible that future versions with new filter options
+ * might produce strings that require shell quoting anyway as the exact
+ * set of possible characters isn't frozen for now.
+ *
+ * It is guaranteed that the single quote (') will never be used in
+ * filter chain strings (even if LZMA_STR_NO_SPACES isn't used).
+ */
+#define LZMA_STR_NO_SPACES UINT32_C(0x80)
+
+
+/**
+ * \brief Convert a string to a filter chain
+ *
+ * This tries to make it easier to write applications that allow users
+ * to set custom compression options. This only handles the filter
+ * configuration (including presets) but not the number of threads,
+ * block size, check type, or memory limits.
+ *
+ * The input string can be either a preset or a filter chain. Presets
+ * begin with a digit 0-9 and may be followed by zero or more flags
+ * which are lower-case letters. Currently only "e" is supported, matching
+ * LZMA_PRESET_EXTREME. For partial xz command line syntax compatibility,
+ * a preset string may start with a single dash "-".
+ *
+ * A filter chain consists of one or more "filtername:opt1=value1,opt2=value2"
+ * strings separated by one or more spaces. Leading and trailing spaces are
+ * ignored. All names and values must be lower-case. Extra commas in the
+ * option list are ignored. The order of filters is significant: when
+ * encoding, the uncompressed input data goes to the leftmost filter first.
+ * Normally "lzma2" is the last filter in the chain.
+ *
+ * If one wishes to avoid spaces, for example, to avoid shell quoting,
+ * it is possible to use two dashes "--" instead of spaces to separate
+ * the filters.
+ *
+ * For xz command line compatibility, each filter may be prefixed with
+ * two dashes "--" and the colon ":" separating the filter name from
+ * the options may be replaced with an equals sign "=".
+ *
+ * By default, only filters that can be used in the .xz format are accepted.
+ * To allow all filters (LZMA1) use the flag LZMA_STR_ALL_FILTERS.
+ *
+ * By default, very basic validation is done for the filter chain as a whole,
+ * for example, that LZMA2 is only used as the last filter in the chain.
+ * The validation isn't perfect though and it's possible that this function
+ * succeeds but using the filter chain for encoding or decoding will still
+ * result in LZMA_OPTIONS_ERROR. To disable this validation, use the flag
+ * LZMA_STR_NO_VALIDATION.
+ *
+ * The available filter names and their options are available via
+ * lzma_str_list_filters(). See the xz man page for the description
+ * of filter names and options.
+ *
+ * For command line applications, below is an example how an error message
+ * can be displayed. Note the use of an empty string for the field width.
+ * If "^" was used there it would create an off-by-one error except at
+ * the very beginning of the line.
+ *
+ * \code{.c}
+ * const char *str = ...; // From user
+ * lzma_filter filters[LZMA_FILTERS_MAX + 1];
+ * int pos;
+ * const char *msg = lzma_str_to_filters(str, &pos, filters, 0, NULL);
+ * if (msg != NULL) {
+ * printf("%s: Error in XZ compression options:\n", argv[0]);
+ * printf("%s: %s\n", argv[0], str);
+ * printf("%s: %*s^\n", argv[0], errpos, "");
+ * printf("%s: %s\n", argv[0], msg);
+ * }
+ * \endcode
+ *
+ * \param str User-supplied string describing a preset or
+ * a filter chain. If a default value is needed and
+ * you don't know what would be good, use "6" since
+ * that is the default preset in xz too.
+ * \param[out] error_pos If this isn't NULL, this value will be set on
+ * both success and on all errors. This tells the
+ * location of the error in the string. This is
+ * an int to make it straightforward to use this
+ * as printf() field width. The value is guaranteed
+ * to be in the range [0, INT_MAX] even if strlen(str)
+ * somehow was greater than INT_MAX.
+ * \param[out] filters An array of lzma_filter structures. There must
+ * be LZMA_FILTERS_MAX + 1 (that is, five) elements
+ * in the array. The old contents are ignored so it
+ * doesn't need to be initialized. This array is
+ * modified only if this function returns NULL.
+ * Once the allocated filter options are no longer
+ * needed, lzma_filters_free() can be used to free the
+ * options (it doesn't free the filters array itself).
+ * \param flags Bitwise-or of zero or more of the flags
+ * LZMA_STR_ALL_FILTERS and LZMA_STR_NO_VALIDATION.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ *
+ * \return On success, NULL is returned. On error, a statically-allocated
+ * error message is returned which together with the error_pos
+ * should give some idea what is wrong.
+ */
+extern LZMA_API(const char *) lzma_str_to_filters(
+ const char *str, int *error_pos, lzma_filter *filters,
+ uint32_t flags, const lzma_allocator *allocator)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Convert a filter chain to a string
+ *
+ * Use cases:
+ *
+ * - Verbose output showing the full encoder options to the user
+ * (use LZMA_STR_ENCODER in flags)
+ *
+ * - Showing the filters and options that are required to decode a file
+ * (use LZMA_STR_DECODER in flags)
+ *
+ * - Showing the filter names without any options in informational messages
+ * where the technical details aren't important (no flags). In this case
+ * the .options in the filters array are ignored and may be NULL even if
+ * a filter has a mandatory options structure.
+ *
+ * Note that even if the filter chain was specified using a preset,
+ * the resulting filter chain isn't reversed to a preset. So if you
+ * specify "6" to lzma_str_to_filters() then lzma_str_from_filters()
+ * will produce a string containing "lzma2".
+ *
+ * \param[out] str On success *str will be set to point to an
+ * allocated string describing the given filter
+ * chain. Old value is ignored. On error *str is
+ * always set to NULL.
+ * \param filters Array of filters terminated with
+ * .id == LZMA_VLI_UNKNOWN.
+ * \param flags Bitwise-or of zero or more of the flags
+ * LZMA_STR_ENCODER, LZMA_STR_DECODER,
+ * LZMA_STR_GETOPT_LONG, and LZMA_STR_NO_SPACES.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_OPTIONS_ERROR: Empty filter chain
+ * (filters[0].id == LZMA_VLI_UNKNOWN) or the filter chain
+ * includes a Filter ID that is not supported by this function.
+ * - LZMA_MEM_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_str_from_filters(
+ char **str, const lzma_filter *filters, uint32_t flags,
+ const lzma_allocator *allocator)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief List available filters and/or their options (for help message)
+ *
+ * If a filter_id is given then only one line is created which contains the
+ * filter name. If LZMA_STR_ENCODER or LZMA_STR_DECODER is used then the
+ * options read by the encoder or decoder are printed on the same line.
+ *
+ * If filter_id is LZMA_VLI_UNKNOWN then all supported .xz-compatible filters
+ * are listed:
+ *
+ * - If neither LZMA_STR_ENCODER nor LZMA_STR_DECODER is used then
+ * the supported filter names are listed on a single line separated
+ * by spaces.
+ *
+ * - If LZMA_STR_ENCODER or LZMA_STR_DECODER is used then filters and
+ * the supported options are listed one filter per line. There won't
+ * be a newline after the last filter.
+ *
+ * - If LZMA_STR_ALL_FILTERS is used then the list will include also
+ * those filters that cannot be used in the .xz format (LZMA1).
+ *
+ * \param str On success *str will be set to point to an
+ * allocated string listing the filters and options.
+ * Old value is ignored. On error *str is always set
+ * to NULL.
+ * \param filter_id Filter ID or LZMA_VLI_UNKNOWN.
+ * \param flags Bitwise-or of zero or more of the flags
+ * LZMA_STR_ALL_FILTERS, LZMA_STR_ENCODER,
+ * LZMA_STR_DECODER, and LZMA_STR_GETOPT_LONG.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_OPTIONS_ERROR: Unsupported filter_id or flags
+ * - LZMA_MEM_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_str_list_filters(
+ char **str, lzma_vli filter_id, uint32_t flags,
+ const lzma_allocator *allocator)
+ lzma_nothrow lzma_attr_warn_unused_result;
diff --git a/vcpkg_installed/arm64-osx/include/lzma/hardware.h b/vcpkg_installed/arm64-osx/include/lzma/hardware.h
new file mode 100644
index 00000000..7a1a84fc
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/hardware.h
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/hardware.h
+ * \brief Hardware information
+ * \note Never include this file directly. Use instead.
+ *
+ * Since liblzma can consume a lot of system resources, it also provides
+ * ways to limit the resource usage. Applications linking against liblzma
+ * need to do the actual decisions how much resources to let liblzma to use.
+ * To ease making these decisions, liblzma provides functions to find out
+ * the relevant capabilities of the underlying hardware. Currently there
+ * is only a function to find out the amount of RAM, but in the future there
+ * will be also a function to detect how many concurrent threads the system
+ * can run.
+ *
+ * \note On some operating systems, these function may temporarily
+ * load a shared library or open file descriptor(s) to find out
+ * the requested hardware information. Unless the application
+ * assumes that specific file descriptors are not touched by
+ * other threads, this should have no effect on thread safety.
+ * Possible operations involving file descriptors will restart
+ * the syscalls if they return EINTR.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/**
+ * \brief Get the total amount of physical memory (RAM) in bytes
+ *
+ * This function may be useful when determining a reasonable memory
+ * usage limit for decompressing or how much memory it is OK to use
+ * for compressing.
+ *
+ * \return On success, the total amount of physical memory in bytes
+ * is returned. If the amount of RAM cannot be determined,
+ * zero is returned. This can happen if an error occurs
+ * or if there is no code in liblzma to detect the amount
+ * of RAM on the specific operating system.
+ */
+extern LZMA_API(uint64_t) lzma_physmem(void) lzma_nothrow;
+
+
+/**
+ * \brief Get the number of processor cores or threads
+ *
+ * This function may be useful when determining how many threads to use.
+ * If the hardware supports more than one thread per CPU core, the number
+ * of hardware threads is returned if that information is available.
+ *
+ * \return On success, the number of available CPU threads or cores is
+ * returned. If this information isn't available or an error
+ * occurs, zero is returned.
+ */
+extern LZMA_API(uint32_t) lzma_cputhreads(void) lzma_nothrow;
diff --git a/vcpkg_installed/arm64-osx/include/lzma/index.h b/vcpkg_installed/arm64-osx/include/lzma/index.h
new file mode 100644
index 00000000..b17025e3
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/index.h
@@ -0,0 +1,882 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/index.h
+ * \brief Handling of .xz Index and related information
+ * \note Never include this file directly. Use instead.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/**
+ * \brief Opaque data type to hold the Index(es) and other information
+ *
+ * lzma_index often holds just one .xz Index and possibly the Stream Flags
+ * of the same Stream and size of the Stream Padding field. However,
+ * multiple lzma_indexes can be concatenated with lzma_index_cat() and then
+ * there may be information about multiple Streams in the same lzma_index.
+ *
+ * Notes about thread safety: Only one thread may modify lzma_index at
+ * a time. All functions that take non-const pointer to lzma_index
+ * modify it. As long as no thread is modifying the lzma_index, getting
+ * information from the same lzma_index can be done from multiple threads
+ * at the same time with functions that take a const pointer to
+ * lzma_index or use lzma_index_iter. The same iterator must be used
+ * only by one thread at a time, of course, but there can be as many
+ * iterators for the same lzma_index as needed.
+ */
+typedef struct lzma_index_s lzma_index;
+
+
+/**
+ * \brief Iterator to get information about Blocks and Streams
+ */
+typedef struct {
+ struct {
+ /**
+ * \brief Pointer to Stream Flags
+ *
+ * This is NULL if Stream Flags have not been set for
+ * this Stream with lzma_index_stream_flags().
+ */
+ const lzma_stream_flags *flags;
+
+ /** \private Reserved member. */
+ const void *reserved_ptr1;
+
+ /** \private Reserved member. */
+ const void *reserved_ptr2;
+
+ /** \private Reserved member. */
+ const void *reserved_ptr3;
+
+ /**
+ * \brief Stream number in the lzma_index
+ *
+ * The first Stream is 1.
+ */
+ lzma_vli number;
+
+ /**
+ * \brief Number of Blocks in the Stream
+ *
+ * If this is zero, the block structure below has
+ * undefined values.
+ */
+ lzma_vli block_count;
+
+ /**
+ * \brief Compressed start offset of this Stream
+ *
+ * The offset is relative to the beginning of the lzma_index
+ * (i.e. usually the beginning of the .xz file).
+ */
+ lzma_vli compressed_offset;
+
+ /**
+ * \brief Uncompressed start offset of this Stream
+ *
+ * The offset is relative to the beginning of the lzma_index
+ * (i.e. usually the beginning of the .xz file).
+ */
+ lzma_vli uncompressed_offset;
+
+ /**
+ * \brief Compressed size of this Stream
+ *
+ * This includes all headers except the possible
+ * Stream Padding after this Stream.
+ */
+ lzma_vli compressed_size;
+
+ /**
+ * \brief Uncompressed size of this Stream
+ */
+ lzma_vli uncompressed_size;
+
+ /**
+ * \brief Size of Stream Padding after this Stream
+ *
+ * If it hasn't been set with lzma_index_stream_padding(),
+ * this defaults to zero. Stream Padding is always
+ * a multiple of four bytes.
+ */
+ lzma_vli padding;
+
+
+ /** \private Reserved member. */
+ lzma_vli reserved_vli1;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_vli2;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_vli3;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_vli4;
+ } stream;
+
+ struct {
+ /**
+ * \brief Block number in the file
+ *
+ * The first Block is 1.
+ */
+ lzma_vli number_in_file;
+
+ /**
+ * \brief Compressed start offset of this Block
+ *
+ * This offset is relative to the beginning of the
+ * lzma_index (i.e. usually the beginning of the .xz file).
+ * Normally this is where you should seek in the .xz file
+ * to start decompressing this Block.
+ */
+ lzma_vli compressed_file_offset;
+
+ /**
+ * \brief Uncompressed start offset of this Block
+ *
+ * This offset is relative to the beginning of the lzma_index
+ * (i.e. usually the beginning of the .xz file).
+ *
+ * When doing random-access reading, it is possible that
+ * the target offset is not exactly at Block boundary. One
+ * will need to compare the target offset against
+ * uncompressed_file_offset or uncompressed_stream_offset,
+ * and possibly decode and throw away some amount of data
+ * before reaching the target offset.
+ */
+ lzma_vli uncompressed_file_offset;
+
+ /**
+ * \brief Block number in this Stream
+ *
+ * The first Block is 1.
+ */
+ lzma_vli number_in_stream;
+
+ /**
+ * \brief Compressed start offset of this Block
+ *
+ * This offset is relative to the beginning of the Stream
+ * containing this Block.
+ */
+ lzma_vli compressed_stream_offset;
+
+ /**
+ * \brief Uncompressed start offset of this Block
+ *
+ * This offset is relative to the beginning of the Stream
+ * containing this Block.
+ */
+ lzma_vli uncompressed_stream_offset;
+
+ /**
+ * \brief Uncompressed size of this Block
+ *
+ * You should pass this to the Block decoder if you will
+ * decode this Block. It will allow the Block decoder to
+ * validate the uncompressed size.
+ */
+ lzma_vli uncompressed_size;
+
+ /**
+ * \brief Unpadded size of this Block
+ *
+ * You should pass this to the Block decoder if you will
+ * decode this Block. It will allow the Block decoder to
+ * validate the unpadded size.
+ */
+ lzma_vli unpadded_size;
+
+ /**
+ * \brief Total compressed size
+ *
+ * This includes all headers and padding in this Block.
+ * This is useful if you need to know how many bytes
+ * the Block decoder will actually read.
+ */
+ lzma_vli total_size;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_vli1;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_vli2;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_vli3;
+
+ /** \private Reserved member. */
+ lzma_vli reserved_vli4;
+
+ /** \private Reserved member. */
+ const void *reserved_ptr1;
+
+ /** \private Reserved member. */
+ const void *reserved_ptr2;
+
+ /** \private Reserved member. */
+ const void *reserved_ptr3;
+
+ /** \private Reserved member. */
+ const void *reserved_ptr4;
+ } block;
+
+ /**
+ * \private Internal data
+ *
+ * Internal data which is used to store the state of the iterator.
+ * The exact format may vary between liblzma versions, so don't
+ * touch these in any way.
+ */
+ union {
+ /** \private Internal member. */
+ const void *p;
+
+ /** \private Internal member. */
+ size_t s;
+
+ /** \private Internal member. */
+ lzma_vli v;
+ } internal[6];
+} lzma_index_iter;
+
+
+/**
+ * \brief Operation mode for lzma_index_iter_next()
+ */
+typedef enum {
+ LZMA_INDEX_ITER_ANY = 0,
+ /**<
+ * \brief Get the next Block or Stream
+ *
+ * Go to the next Block if the current Stream has at least
+ * one Block left. Otherwise go to the next Stream even if
+ * it has no Blocks. If the Stream has no Blocks
+ * (lzma_index_iter.stream.block_count == 0),
+ * lzma_index_iter.block will have undefined values.
+ */
+
+ LZMA_INDEX_ITER_STREAM = 1,
+ /**<
+ * \brief Get the next Stream
+ *
+ * Go to the next Stream even if the current Stream has
+ * unread Blocks left. If the next Stream has at least one
+ * Block, the iterator will point to the first Block.
+ * If there are no Blocks, lzma_index_iter.block will have
+ * undefined values.
+ */
+
+ LZMA_INDEX_ITER_BLOCK = 2,
+ /**<
+ * \brief Get the next Block
+ *
+ * Go to the next Block if the current Stream has at least
+ * one Block left. If the current Stream has no Blocks left,
+ * the next Stream with at least one Block is located and
+ * the iterator will be made to point to the first Block of
+ * that Stream.
+ */
+
+ LZMA_INDEX_ITER_NONEMPTY_BLOCK = 3
+ /**<
+ * \brief Get the next non-empty Block
+ *
+ * This is like LZMA_INDEX_ITER_BLOCK except that it will
+ * skip Blocks whose Uncompressed Size is zero.
+ */
+
+} lzma_index_iter_mode;
+
+
+/**
+ * \brief Mask for return value from lzma_index_checks() for check none
+ *
+ * \note This and the other CHECK_MASK macros were added in 5.5.1alpha.
+ */
+#define LZMA_INDEX_CHECK_MASK_NONE (UINT32_C(1) << LZMA_CHECK_NONE)
+
+/**
+ * \brief Mask for return value from lzma_index_checks() for check CRC32
+ */
+#define LZMA_INDEX_CHECK_MASK_CRC32 (UINT32_C(1) << LZMA_CHECK_CRC32)
+
+/**
+ * \brief Mask for return value from lzma_index_checks() for check CRC64
+ */
+#define LZMA_INDEX_CHECK_MASK_CRC64 (UINT32_C(1) << LZMA_CHECK_CRC64)
+
+/**
+ * \brief Mask for return value from lzma_index_checks() for check SHA256
+ */
+#define LZMA_INDEX_CHECK_MASK_SHA256 (UINT32_C(1) << LZMA_CHECK_SHA256)
+
+/**
+ * \brief Calculate memory usage of lzma_index
+ *
+ * On disk, the size of the Index field depends on both the number of Records
+ * stored and the size of the Records (due to variable-length integer
+ * encoding). When the Index is kept in lzma_index structure, the memory usage
+ * depends only on the number of Records/Blocks stored in the Index(es), and
+ * in case of concatenated lzma_indexes, the number of Streams. The size in
+ * RAM is almost always significantly bigger than in the encoded form on disk.
+ *
+ * This function calculates an approximate amount of memory needed to hold
+ * the given number of Streams and Blocks in lzma_index structure. This
+ * value may vary between CPU architectures and also between liblzma versions
+ * if the internal implementation is modified.
+ *
+ * \param streams Number of Streams
+ * \param blocks Number of Blocks
+ *
+ * \return Approximate memory in bytes needed in a lzma_index structure.
+ */
+extern LZMA_API(uint64_t) lzma_index_memusage(
+ lzma_vli streams, lzma_vli blocks) lzma_nothrow;
+
+
+/**
+ * \brief Calculate the memory usage of an existing lzma_index
+ *
+ * This is a shorthand for lzma_index_memusage(lzma_index_stream_count(i),
+ * lzma_index_block_count(i)).
+ *
+ * \param i Pointer to lzma_index structure
+ *
+ * \return Approximate memory in bytes used by the lzma_index structure.
+ */
+extern LZMA_API(uint64_t) lzma_index_memused(const lzma_index *i)
+ lzma_nothrow;
+
+
+/**
+ * \brief Allocate and initialize a new lzma_index structure
+ *
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ *
+ * \return On success, a pointer to an empty initialized lzma_index is
+ * returned. If allocation fails, NULL is returned.
+ */
+extern LZMA_API(lzma_index *) lzma_index_init(const lzma_allocator *allocator)
+ lzma_nothrow;
+
+
+/**
+ * \brief Deallocate lzma_index
+ *
+ * If i is NULL, this does nothing.
+ *
+ * \param i Pointer to lzma_index structure to deallocate
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ */
+extern LZMA_API(void) lzma_index_end(
+ lzma_index *i, const lzma_allocator *allocator) lzma_nothrow;
+
+
+/**
+ * \brief Add a new Block to lzma_index
+ *
+ * \param i Pointer to a lzma_index structure
+ * \param allocator lzma_allocator for custom allocator
+ * functions. Set to NULL to use malloc()
+ * and free().
+ * \param unpadded_size Unpadded Size of a Block. This can be
+ * calculated with lzma_block_unpadded_size()
+ * after encoding or decoding the Block.
+ * \param uncompressed_size Uncompressed Size of a Block. This can be
+ * taken directly from lzma_block structure
+ * after encoding or decoding the Block.
+ *
+ * Appending a new Block does not invalidate iterators. For example,
+ * if an iterator was pointing to the end of the lzma_index, after
+ * lzma_index_append() it is possible to read the next Block with
+ * an existing iterator.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_MEM_ERROR
+ * - LZMA_DATA_ERROR: Compressed or uncompressed size of the
+ * Stream or size of the Index field would grow too big.
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_index_append(
+ lzma_index *i, const lzma_allocator *allocator,
+ lzma_vli unpadded_size, lzma_vli uncompressed_size)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Set the Stream Flags
+ *
+ * Set the Stream Flags of the last (and typically the only) Stream
+ * in lzma_index. This can be useful when reading information from the
+ * lzma_index, because to decode Blocks, knowing the integrity check type
+ * is needed.
+ *
+ * \param i Pointer to lzma_index structure
+ * \param stream_flags Pointer to lzma_stream_flags structure. This
+ * is copied into the internal preallocated
+ * structure, so the caller doesn't need to keep
+ * the flags' data available after calling this
+ * function.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_OPTIONS_ERROR: Unsupported stream_flags->version.
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_index_stream_flags(
+ lzma_index *i, const lzma_stream_flags *stream_flags)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Get the types of integrity Checks
+ *
+ * If lzma_index_stream_flags() is used to set the Stream Flags for
+ * every Stream, lzma_index_checks() can be used to get a bitmask to
+ * indicate which Check types have been used. It can be useful e.g. if
+ * showing the Check types to the user.
+ *
+ * The bitmask is 1 << check_id, e.g. CRC32 is 1 << 1 and SHA-256 is 1 << 10.
+ * These masks are defined for convenience as LZMA_INDEX_CHECK_MASK_XXX
+ *
+ * \param i Pointer to lzma_index structure
+ *
+ * \return Bitmask indicating which Check types are used in the lzma_index
+ */
+extern LZMA_API(uint32_t) lzma_index_checks(const lzma_index *i)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Set the amount of Stream Padding
+ *
+ * Set the amount of Stream Padding of the last (and typically the only)
+ * Stream in the lzma_index. This is needed when planning to do random-access
+ * reading within multiple concatenated Streams.
+ *
+ * By default, the amount of Stream Padding is assumed to be zero bytes.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_DATA_ERROR: The file size would grow too big.
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_index_stream_padding(
+ lzma_index *i, lzma_vli stream_padding)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Get the number of Streams
+ *
+ * \param i Pointer to lzma_index structure
+ *
+ * \return Number of Streams in the lzma_index
+ */
+extern LZMA_API(lzma_vli) lzma_index_stream_count(const lzma_index *i)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Get the number of Blocks
+ *
+ * This returns the total number of Blocks in lzma_index. To get number
+ * of Blocks in individual Streams, use lzma_index_iter.
+ *
+ * \param i Pointer to lzma_index structure
+ *
+ * \return Number of blocks in the lzma_index
+ */
+extern LZMA_API(lzma_vli) lzma_index_block_count(const lzma_index *i)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Get the size of the Index field as bytes
+ *
+ * This is needed to verify the Backward Size field in the Stream Footer.
+ *
+ * \param i Pointer to lzma_index structure
+ *
+ * \return Size in bytes of the Index
+ */
+extern LZMA_API(lzma_vli) lzma_index_size(const lzma_index *i)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Get the total size of the Stream
+ *
+ * If multiple lzma_indexes have been combined, this works as if the Blocks
+ * were in a single Stream. This is useful if you are going to combine
+ * Blocks from multiple Streams into a single new Stream.
+ *
+ * \param i Pointer to lzma_index structure
+ *
+ * \return Size in bytes of the Stream (if all Blocks are combined
+ * into one Stream).
+ */
+extern LZMA_API(lzma_vli) lzma_index_stream_size(const lzma_index *i)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Get the total size of the Blocks
+ *
+ * This doesn't include the Stream Header, Stream Footer, Stream Padding,
+ * or Index fields.
+ *
+ * \param i Pointer to lzma_index structure
+ *
+ * \return Size in bytes of all Blocks in the Stream(s)
+ */
+extern LZMA_API(lzma_vli) lzma_index_total_size(const lzma_index *i)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Get the total size of the file
+ *
+ * When no lzma_indexes have been combined with lzma_index_cat() and there is
+ * no Stream Padding, this function is identical to lzma_index_stream_size().
+ * If multiple lzma_indexes have been combined, this includes also the headers
+ * of each separate Stream and the possible Stream Padding fields.
+ *
+ * \param i Pointer to lzma_index structure
+ *
+ * \return Total size of the .xz file in bytes
+ */
+extern LZMA_API(lzma_vli) lzma_index_file_size(const lzma_index *i)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Get the uncompressed size of the file
+ *
+ * \param i Pointer to lzma_index structure
+ *
+ * \return Size in bytes of the uncompressed data in the file
+ */
+extern LZMA_API(lzma_vli) lzma_index_uncompressed_size(const lzma_index *i)
+ lzma_nothrow lzma_attr_pure;
+
+
+/**
+ * \brief Initialize an iterator
+ *
+ * This function associates the iterator with the given lzma_index, and calls
+ * lzma_index_iter_rewind() on the iterator.
+ *
+ * This function doesn't allocate any memory, thus there is no
+ * lzma_index_iter_end(). The iterator is valid as long as the
+ * associated lzma_index is valid, that is, until lzma_index_end() or
+ * using it as source in lzma_index_cat(). Specifically, lzma_index doesn't
+ * become invalid if new Blocks are added to it with lzma_index_append() or
+ * if it is used as the destination in lzma_index_cat().
+ *
+ * It is safe to make copies of an initialized lzma_index_iter, for example,
+ * to easily restart reading at some particular position.
+ *
+ * \param iter Pointer to a lzma_index_iter structure
+ * \param i lzma_index to which the iterator will be associated
+ */
+extern LZMA_API(void) lzma_index_iter_init(
+ lzma_index_iter *iter, const lzma_index *i) lzma_nothrow;
+
+
+/**
+ * \brief Rewind the iterator
+ *
+ * Rewind the iterator so that next call to lzma_index_iter_next() will
+ * return the first Block or Stream.
+ *
+ * \param iter Pointer to a lzma_index_iter structure
+ */
+extern LZMA_API(void) lzma_index_iter_rewind(lzma_index_iter *iter)
+ lzma_nothrow;
+
+
+/**
+ * \brief Get the next Block or Stream
+ *
+ * \param iter Iterator initialized with lzma_index_iter_init()
+ * \param mode Specify what kind of information the caller wants
+ * to get. See lzma_index_iter_mode for details.
+ *
+ * \return lzma_bool:
+ * - true if no Block or Stream matching the mode is found.
+ * *iter is not updated (failure).
+ * - false if the next Block or Stream matching the mode was
+ * found. *iter is updated (success).
+ */
+extern LZMA_API(lzma_bool) lzma_index_iter_next(
+ lzma_index_iter *iter, lzma_index_iter_mode mode)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Locate a Block
+ *
+ * If it is possible to seek in the .xz file, it is possible to parse
+ * the Index field(s) and use lzma_index_iter_locate() to do random-access
+ * reading with granularity of Block size.
+ *
+ * If the target is smaller than the uncompressed size of the Stream (can be
+ * checked with lzma_index_uncompressed_size()):
+ * - Information about the Stream and Block containing the requested
+ * uncompressed offset is stored into *iter.
+ * - Internal state of the iterator is adjusted so that
+ * lzma_index_iter_next() can be used to read subsequent Blocks or Streams.
+ *
+ * If the target is greater than the uncompressed size of the Stream, *iter
+ * is not modified.
+ *
+ * \param iter Iterator that was earlier initialized with
+ * lzma_index_iter_init().
+ * \param target Uncompressed target offset which the caller would
+ * like to locate from the Stream
+ *
+ * \return lzma_bool:
+ * - true if the target is greater than or equal to the
+ * uncompressed size of the Stream (failure)
+ * - false if the target is smaller than the uncompressed size
+ * of the Stream (success)
+ */
+extern LZMA_API(lzma_bool) lzma_index_iter_locate(
+ lzma_index_iter *iter, lzma_vli target) lzma_nothrow;
+
+
+/**
+ * \brief Concatenate lzma_indexes
+ *
+ * Concatenating lzma_indexes is useful when doing random-access reading in
+ * multi-Stream .xz file, or when combining multiple Streams into single
+ * Stream.
+ *
+ * \param[out] dest lzma_index after which src is appended
+ * \param src lzma_index to be appended after dest. If this
+ * function succeeds, the memory allocated for src
+ * is freed or moved to be part of dest, and all
+ * iterators pointing to src will become invalid.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: lzma_indexes were concatenated successfully.
+ * src is now a dangling pointer.
+ * - LZMA_DATA_ERROR: *dest would grow too big.
+ * - LZMA_MEM_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_index_cat(lzma_index *dest, lzma_index *src,
+ const lzma_allocator *allocator)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Duplicate lzma_index
+ *
+ * \param i Pointer to lzma_index structure to be duplicated
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ *
+ * \return A copy of the lzma_index, or NULL if memory allocation failed.
+ */
+extern LZMA_API(lzma_index *) lzma_index_dup(
+ const lzma_index *i, const lzma_allocator *allocator)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Initialize .xz Index encoder
+ *
+ * \param strm Pointer to properly prepared lzma_stream
+ * \param i Pointer to lzma_index which should be encoded.
+ *
+ * The valid 'action' values for lzma_code() are LZMA_RUN and LZMA_FINISH.
+ * It is enough to use only one of them (you can choose freely).
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Initialization succeeded, continue with lzma_code().
+ * - LZMA_MEM_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_index_encoder(
+ lzma_stream *strm, const lzma_index *i)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Initialize .xz Index decoder
+ *
+ * \param strm Pointer to properly prepared lzma_stream
+ * \param[out] i The decoded Index will be made available via
+ * this pointer. Initially this function will
+ * set *i to NULL (the old value is ignored). If
+ * decoding succeeds (lzma_code() returns
+ * LZMA_STREAM_END), *i will be set to point
+ * to a new lzma_index, which the application
+ * has to later free with lzma_index_end().
+ * \param memlimit How much memory the resulting lzma_index is
+ * allowed to require. liblzma 5.2.3 and earlier
+ * don't allow 0 here and return LZMA_PROG_ERROR;
+ * later versions treat 0 as if 1 had been specified.
+ *
+ * Valid 'action' arguments to lzma_code() are LZMA_RUN and LZMA_FINISH.
+ * There is no need to use LZMA_FINISH, but it's allowed because it may
+ * simplify certain types of applications.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Initialization succeeded, continue with lzma_code().
+ * - LZMA_MEM_ERROR
+ * - LZMA_PROG_ERROR
+ *
+ * \note liblzma 5.2.3 and older list also LZMA_MEMLIMIT_ERROR here
+ * but that error code has never been possible from this
+ * initialization function.
+ */
+extern LZMA_API(lzma_ret) lzma_index_decoder(
+ lzma_stream *strm, lzma_index **i, uint64_t memlimit)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Single-call .xz Index encoder
+ *
+ * \note This function doesn't take allocator argument since all
+ * the internal data is allocated on stack.
+ *
+ * \param i lzma_index to be encoded
+ * \param[out] out Beginning of the output buffer
+ * \param[out] out_pos The next byte will be written to out[*out_pos].
+ * *out_pos is updated only if encoding succeeds.
+ * \param out_size Size of the out buffer; the first byte into
+ * which no data is written to is out[out_size].
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Encoding was successful.
+ * - LZMA_BUF_ERROR: Output buffer is too small. Use
+ * lzma_index_size() to find out how much output
+ * space is needed.
+ * - LZMA_PROG_ERROR
+ *
+ */
+extern LZMA_API(lzma_ret) lzma_index_buffer_encode(const lzma_index *i,
+ uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow;
+
+
+/**
+ * \brief Single-call .xz Index decoder
+ *
+ * \param[out] i If decoding succeeds, *i will point to a new
+ * lzma_index, which the application has to
+ * later free with lzma_index_end(). If an error
+ * occurs, *i will be NULL. The old value of *i
+ * is always ignored and thus doesn't need to be
+ * initialized by the caller.
+ * \param[out] memlimit Pointer to how much memory the resulting
+ * lzma_index is allowed to require. The value
+ * pointed by this pointer is modified if and only
+ * if LZMA_MEMLIMIT_ERROR is returned.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ * \param in Beginning of the input buffer
+ * \param in_pos The next byte will be read from in[*in_pos].
+ * *in_pos is updated only if decoding succeeds.
+ * \param in_size Size of the input buffer; the first byte that
+ * won't be read is in[in_size].
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Decoding was successful.
+ * - LZMA_MEM_ERROR
+ * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached.
+ * The minimum required memlimit value was stored to *memlimit.
+ * - LZMA_DATA_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_index_buffer_decode(lzma_index **i,
+ uint64_t *memlimit, const lzma_allocator *allocator,
+ const uint8_t *in, size_t *in_pos, size_t in_size)
+ lzma_nothrow;
+
+
+/**
+ * \brief Initialize a .xz file information decoder
+ *
+ * This decoder decodes the Stream Header, Stream Footer, Index, and
+ * Stream Padding field(s) from the input .xz file and stores the resulting
+ * combined index in *dest_index. This information can be used to get the
+ * uncompressed file size with lzma_index_uncompressed_size(*dest_index) or,
+ * for example, to implement random access reading by locating the Blocks
+ * in the Streams.
+ *
+ * To get the required information from the .xz file, lzma_code() may ask
+ * the application to seek in the input file by returning LZMA_SEEK_NEEDED
+ * and having the target file position specified in lzma_stream.seek_pos.
+ * The number of seeks required depends on the input file and how big buffers
+ * the application provides. When possible, the decoder will seek backward
+ * and forward in the given buffer to avoid useless seek requests. Thus, if
+ * the application provides the whole file at once, no external seeking will
+ * be required (that is, lzma_code() won't return LZMA_SEEK_NEEDED).
+ *
+ * The value in lzma_stream.total_in can be used to estimate how much data
+ * liblzma had to read to get the file information. However, due to seeking
+ * and the way total_in is updated, the value of total_in will be somewhat
+ * inaccurate (a little too big). Thus, total_in is a good estimate but don't
+ * expect to see the same exact value for the same file if you change the
+ * input buffer size or switch to a different liblzma version.
+ *
+ * Valid 'action' arguments to lzma_code() are LZMA_RUN and LZMA_FINISH.
+ * You only need to use LZMA_RUN; LZMA_FINISH is only supported because it
+ * might be convenient for some applications. If you use LZMA_FINISH and if
+ * lzma_code() asks the application to seek, remember to reset 'action' back
+ * to LZMA_RUN unless you hit the end of the file again.
+ *
+ * Possible return values from lzma_code():
+ * - LZMA_OK: All OK so far, more input needed
+ * - LZMA_SEEK_NEEDED: Provide more input starting from the absolute
+ * file position strm->seek_pos
+ * - LZMA_STREAM_END: Decoding was successful, *dest_index has been set
+ * - LZMA_FORMAT_ERROR: The input file is not in the .xz format (the
+ * expected magic bytes were not found from the beginning of the file)
+ * - LZMA_OPTIONS_ERROR: File looks valid but contains headers that aren't
+ * supported by this version of liblzma
+ * - LZMA_DATA_ERROR: File is corrupt
+ * - LZMA_BUF_ERROR
+ * - LZMA_MEM_ERROR
+ * - LZMA_MEMLIMIT_ERROR
+ * - LZMA_PROG_ERROR
+ *
+ * \param strm Pointer to a properly prepared lzma_stream
+ * \param[out] dest_index Pointer to a pointer where the decoder will put
+ * the decoded lzma_index. The old value
+ * of *dest_index is ignored (not freed).
+ * \param memlimit How much memory the resulting lzma_index is
+ * allowed to require. Use UINT64_MAX to
+ * effectively disable the limiter.
+ * \param file_size Size of the input .xz file
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_MEM_ERROR
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_file_info_decoder(
+ lzma_stream *strm, lzma_index **dest_index,
+ uint64_t memlimit, uint64_t file_size)
+ lzma_nothrow;
diff --git a/vcpkg_installed/arm64-osx/include/lzma/index_hash.h b/vcpkg_installed/arm64-osx/include/lzma/index_hash.h
new file mode 100644
index 00000000..68f9024e
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/index_hash.h
@@ -0,0 +1,123 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/index_hash.h
+ * \brief Validate Index by using a hash function
+ * \note Never include this file directly. Use instead.
+ *
+ * Hashing makes it possible to use constant amount of memory to validate
+ * Index of arbitrary size.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+/**
+ * \brief Opaque data type to hold the Index hash
+ */
+typedef struct lzma_index_hash_s lzma_index_hash;
+
+
+/**
+ * \brief Allocate and initialize a new lzma_index_hash structure
+ *
+ * If index_hash is NULL, this function allocates and initializes a new
+ * lzma_index_hash structure and returns a pointer to it. If allocation
+ * fails, NULL is returned.
+ *
+ * If index_hash is non-NULL, this function reinitializes the lzma_index_hash
+ * structure and returns the same pointer. In this case, return value cannot
+ * be NULL or a different pointer than the index_hash that was given as
+ * an argument.
+ *
+ * \param index_hash Pointer to a lzma_index_hash structure or NULL.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ *
+ * \return Initialized lzma_index_hash structure on success or
+ * NULL on failure.
+ */
+extern LZMA_API(lzma_index_hash *) lzma_index_hash_init(
+ lzma_index_hash *index_hash, const lzma_allocator *allocator)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Deallocate lzma_index_hash structure
+ *
+ * \param index_hash Pointer to a lzma_index_hash structure to free.
+ * \param allocator lzma_allocator for custom allocator functions.
+ * Set to NULL to use malloc() and free().
+ */
+extern LZMA_API(void) lzma_index_hash_end(
+ lzma_index_hash *index_hash, const lzma_allocator *allocator)
+ lzma_nothrow;
+
+
+/**
+ * \brief Add a new Record to an Index hash
+ *
+ * \param index_hash Pointer to a lzma_index_hash structure
+ * \param unpadded_size Unpadded Size of a Block
+ * \param uncompressed_size Uncompressed Size of a Block
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK
+ * - LZMA_DATA_ERROR: Compressed or uncompressed size of the
+ * Stream or size of the Index field would grow too big.
+ * - LZMA_PROG_ERROR: Invalid arguments or this function is being
+ * used when lzma_index_hash_decode() has already been used.
+ */
+extern LZMA_API(lzma_ret) lzma_index_hash_append(lzma_index_hash *index_hash,
+ lzma_vli unpadded_size, lzma_vli uncompressed_size)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Decode and validate the Index field
+ *
+ * After telling the sizes of all Blocks with lzma_index_hash_append(),
+ * the actual Index field is decoded with this function. Specifically,
+ * once decoding of the Index field has been started, no more Records
+ * can be added using lzma_index_hash_append().
+ *
+ * This function doesn't use lzma_stream structure to pass the input data.
+ * Instead, the input buffer is specified using three arguments. This is
+ * because it matches better the internal APIs of liblzma.
+ *
+ * \param index_hash Pointer to a lzma_index_hash structure
+ * \param in Pointer to the beginning of the input buffer
+ * \param[out] in_pos in[*in_pos] is the next byte to process
+ * \param in_size in[in_size] is the first byte not to process
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: So far good, but more input is needed.
+ * - LZMA_STREAM_END: Index decoded successfully and it matches
+ * the Records given with lzma_index_hash_append().
+ * - LZMA_DATA_ERROR: Index is corrupt or doesn't match the
+ * information given with lzma_index_hash_append().
+ * - LZMA_BUF_ERROR: Cannot progress because *in_pos >= in_size.
+ * - LZMA_PROG_ERROR
+ */
+extern LZMA_API(lzma_ret) lzma_index_hash_decode(lzma_index_hash *index_hash,
+ const uint8_t *in, size_t *in_pos, size_t in_size)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Get the size of the Index field as bytes
+ *
+ * This is needed to verify the Backward Size field in the Stream Footer.
+ *
+ * \param index_hash Pointer to a lzma_index_hash structure
+ *
+ * \return Size of the Index field in bytes.
+ */
+extern LZMA_API(lzma_vli) lzma_index_hash_size(
+ const lzma_index_hash *index_hash)
+ lzma_nothrow lzma_attr_pure;
diff --git a/vcpkg_installed/arm64-osx/include/lzma/lzma12.h b/vcpkg_installed/arm64-osx/include/lzma/lzma12.h
new file mode 100644
index 00000000..05f5b66e
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/lzma12.h
@@ -0,0 +1,568 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/lzma12.h
+ * \brief LZMA1 and LZMA2 filters
+ * \note Never include this file directly. Use instead.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/**
+ * \brief LZMA1 Filter ID (for raw encoder/decoder only, not in .xz)
+ *
+ * LZMA1 is the very same thing as what was called just LZMA in LZMA Utils,
+ * 7-Zip, and LZMA SDK. It's called LZMA1 here to prevent developers from
+ * accidentally using LZMA when they actually want LZMA2.
+ */
+#define LZMA_FILTER_LZMA1 LZMA_VLI_C(0x4000000000000001)
+
+/**
+ * \brief LZMA1 Filter ID with extended options (for raw encoder/decoder)
+ *
+ * This is like LZMA_FILTER_LZMA1 but with this ID a few extra options
+ * are supported in the lzma_options_lzma structure:
+ *
+ * - A flag to tell the encoder if the end of payload marker (EOPM) alias
+ * end of stream (EOS) marker must be written at the end of the stream.
+ * In contrast, LZMA_FILTER_LZMA1 always writes the end marker.
+ *
+ * - Decoder needs to be told the uncompressed size of the stream
+ * or that it is unknown (using the special value UINT64_MAX).
+ * If the size is known, a flag can be set to allow the presence of
+ * the end marker anyway. In contrast, LZMA_FILTER_LZMA1 always
+ * behaves as if the uncompressed size was unknown.
+ *
+ * This allows handling file formats where LZMA1 streams are used but where
+ * the end marker isn't allowed or where it might not (always) be present.
+ * This extended LZMA1 functionality is provided as a Filter ID for raw
+ * encoder and decoder instead of adding new encoder and decoder initialization
+ * functions because this way it is possible to also use extra filters,
+ * for example, LZMA_FILTER_X86 in a filter chain with LZMA_FILTER_LZMA1EXT,
+ * which might be needed to handle some file formats.
+ */
+#define LZMA_FILTER_LZMA1EXT LZMA_VLI_C(0x4000000000000002)
+
+/**
+ * \brief LZMA2 Filter ID
+ *
+ * Usually you want this instead of LZMA1. Compared to LZMA1, LZMA2 adds
+ * support for LZMA_SYNC_FLUSH, uncompressed chunks (smaller expansion
+ * when trying to compress incompressible data), possibility to change
+ * lc/lp/pb in the middle of encoding, and some other internal improvements.
+ */
+#define LZMA_FILTER_LZMA2 LZMA_VLI_C(0x21)
+
+
+/**
+ * \brief Match finders
+ *
+ * Match finder has major effect on both speed and compression ratio.
+ * Usually hash chains are faster than binary trees.
+ *
+ * If you will use LZMA_SYNC_FLUSH often, the hash chains may be a better
+ * choice, because binary trees get much higher compression ratio penalty
+ * with LZMA_SYNC_FLUSH.
+ *
+ * The memory usage formulas are only rough estimates, which are closest to
+ * reality when dict_size is a power of two. The formulas are more complex
+ * in reality, and can also change a little between liblzma versions. Use
+ * lzma_raw_encoder_memusage() to get more accurate estimate of memory usage.
+ */
+typedef enum {
+ LZMA_MF_HC3 = 0x03,
+ /**<
+ * \brief Hash Chain with 2- and 3-byte hashing
+ *
+ * Minimum nice_len: 3
+ *
+ * Memory usage:
+ * - dict_size <= 16 MiB: dict_size * 7.5
+ * - dict_size > 16 MiB: dict_size * 5.5 + 64 MiB
+ */
+
+ LZMA_MF_HC4 = 0x04,
+ /**<
+ * \brief Hash Chain with 2-, 3-, and 4-byte hashing
+ *
+ * Minimum nice_len: 4
+ *
+ * Memory usage:
+ * - dict_size <= 32 MiB: dict_size * 7.5
+ * - dict_size > 32 MiB: dict_size * 6.5
+ */
+
+ LZMA_MF_BT2 = 0x12,
+ /**<
+ * \brief Binary Tree with 2-byte hashing
+ *
+ * Minimum nice_len: 2
+ *
+ * Memory usage: dict_size * 9.5
+ */
+
+ LZMA_MF_BT3 = 0x13,
+ /**<
+ * \brief Binary Tree with 2- and 3-byte hashing
+ *
+ * Minimum nice_len: 3
+ *
+ * Memory usage:
+ * - dict_size <= 16 MiB: dict_size * 11.5
+ * - dict_size > 16 MiB: dict_size * 9.5 + 64 MiB
+ */
+
+ LZMA_MF_BT4 = 0x14
+ /**<
+ * \brief Binary Tree with 2-, 3-, and 4-byte hashing
+ *
+ * Minimum nice_len: 4
+ *
+ * Memory usage:
+ * - dict_size <= 32 MiB: dict_size * 11.5
+ * - dict_size > 32 MiB: dict_size * 10.5
+ */
+} lzma_match_finder;
+
+
+/**
+ * \brief Test if given match finder is supported
+ *
+ * It is safe to call this with a value that isn't listed in
+ * lzma_match_finder enumeration; the return value will be false.
+ *
+ * There is no way to list which match finders are available in this
+ * particular liblzma version and build. It would be useless, because
+ * a new match finder, which the application developer wasn't aware,
+ * could require giving additional options to the encoder that the older
+ * match finders don't need.
+ *
+ * \param match_finder Match finder ID
+ *
+ * \return lzma_bool:
+ * - true if the match finder is supported by this liblzma build.
+ * - false otherwise.
+ */
+extern LZMA_API(lzma_bool) lzma_mf_is_supported(lzma_match_finder match_finder)
+ lzma_nothrow lzma_attr_const;
+
+
+/**
+ * \brief Compression modes
+ *
+ * This selects the function used to analyze the data produced by the match
+ * finder.
+ */
+typedef enum {
+ LZMA_MODE_FAST = 1,
+ /**<
+ * \brief Fast compression
+ *
+ * Fast mode is usually at its best when combined with
+ * a hash chain match finder.
+ */
+
+ LZMA_MODE_NORMAL = 2
+ /**<
+ * \brief Normal compression
+ *
+ * This is usually notably slower than fast mode. Use this
+ * together with binary tree match finders to expose the
+ * full potential of the LZMA1 or LZMA2 encoder.
+ */
+} lzma_mode;
+
+
+/**
+ * \brief Test if given compression mode is supported
+ *
+ * It is safe to call this with a value that isn't listed in lzma_mode
+ * enumeration; the return value will be false.
+ *
+ * There is no way to list which modes are available in this particular
+ * liblzma version and build. It would be useless, because a new compression
+ * mode, which the application developer wasn't aware, could require giving
+ * additional options to the encoder that the older modes don't need.
+ *
+ * \param mode Mode ID.
+ *
+ * \return lzma_bool:
+ * - true if the compression mode is supported by this liblzma
+ * build.
+ * - false otherwise.
+ */
+extern LZMA_API(lzma_bool) lzma_mode_is_supported(lzma_mode mode)
+ lzma_nothrow lzma_attr_const;
+
+
+/**
+ * \brief Options specific to the LZMA1 and LZMA2 filters
+ *
+ * Since LZMA1 and LZMA2 share most of the code, it's simplest to share
+ * the options structure too. For encoding, all but the reserved variables
+ * need to be initialized unless specifically mentioned otherwise.
+ * lzma_lzma_preset() can be used to get a good starting point.
+ *
+ * For raw decoding, both LZMA1 and LZMA2 need dict_size, preset_dict, and
+ * preset_dict_size (if preset_dict != NULL). LZMA1 needs also lc, lp, and pb.
+ */
+typedef struct {
+ /**
+ * \brief Dictionary size in bytes
+ *
+ * Dictionary size indicates how many bytes of the recently processed
+ * uncompressed data is kept in memory. One method to reduce size of
+ * the uncompressed data is to store distance-length pairs, which
+ * indicate what data to repeat from the dictionary buffer. Thus,
+ * the bigger the dictionary, the better the compression ratio
+ * usually is.
+ *
+ * Maximum size of the dictionary depends on multiple things:
+ * - Memory usage limit
+ * - Available address space (not a problem on 64-bit systems)
+ * - Selected match finder (encoder only)
+ *
+ * Currently the maximum dictionary size for encoding is 1.5 GiB
+ * (i.e. (UINT32_C(1) << 30) + (UINT32_C(1) << 29)) even on 64-bit
+ * systems for certain match finder implementation reasons. In the
+ * future, there may be match finders that support bigger
+ * dictionaries.
+ *
+ * Decoder already supports dictionaries up to 4 GiB - 1 B (i.e.
+ * UINT32_MAX), so increasing the maximum dictionary size of the
+ * encoder won't cause problems for old decoders.
+ *
+ * Because extremely small dictionaries sizes would have unneeded
+ * overhead in the decoder, the minimum dictionary size is 4096 bytes.
+ *
+ * \note When decoding, too big dictionary does no other harm
+ * than wasting memory.
+ */
+ uint32_t dict_size;
+# define LZMA_DICT_SIZE_MIN UINT32_C(4096)
+# define LZMA_DICT_SIZE_DEFAULT (UINT32_C(1) << 23)
+
+ /**
+ * \brief Pointer to an initial dictionary
+ *
+ * It is possible to initialize the LZ77 history window using
+ * a preset dictionary. It is useful when compressing many
+ * similar, relatively small chunks of data independently from
+ * each other. The preset dictionary should contain typical
+ * strings that occur in the files being compressed. The most
+ * probable strings should be near the end of the preset dictionary.
+ *
+ * This feature should be used only in special situations. For
+ * now, it works correctly only with raw encoding and decoding.
+ * Currently none of the container formats supported by
+ * liblzma allow preset dictionary when decoding, thus if
+ * you create a .xz or .lzma file with preset dictionary, it
+ * cannot be decoded with the regular decoder functions. In the
+ * future, the .xz format will likely get support for preset
+ * dictionary though.
+ */
+ const uint8_t *preset_dict;
+
+ /**
+ * \brief Size of the preset dictionary
+ *
+ * Specifies the size of the preset dictionary. If the size is
+ * bigger than dict_size, only the last dict_size bytes are
+ * processed.
+ *
+ * This variable is read only when preset_dict is not NULL.
+ * If preset_dict is not NULL but preset_dict_size is zero,
+ * no preset dictionary is used (identical to only setting
+ * preset_dict to NULL).
+ */
+ uint32_t preset_dict_size;
+
+ /**
+ * \brief Number of literal context bits
+ *
+ * How many of the highest bits of the previous uncompressed
+ * eight-bit byte (also known as 'literal') are taken into
+ * account when predicting the bits of the next literal.
+ *
+ * E.g. in typical English text, an upper-case letter is
+ * often followed by a lower-case letter, and a lower-case
+ * letter is usually followed by another lower-case letter.
+ * In the US-ASCII character set, the highest three bits are 010
+ * for upper-case letters and 011 for lower-case letters.
+ * When lc is at least 3, the literal coding can take advantage of
+ * this property in the uncompressed data.
+ *
+ * There is a limit that applies to literal context bits and literal
+ * position bits together: lc + lp <= 4. Without this limit the
+ * decoding could become very slow, which could have security related
+ * results in some cases like email servers doing virus scanning.
+ * This limit also simplifies the internal implementation in liblzma.
+ *
+ * There may be LZMA1 streams that have lc + lp > 4 (maximum possible
+ * lc would be 8). It is not possible to decode such streams with
+ * liblzma.
+ */
+ uint32_t lc;
+# define LZMA_LCLP_MIN 0
+# define LZMA_LCLP_MAX 4
+# define LZMA_LC_DEFAULT 3
+
+ /**
+ * \brief Number of literal position bits
+ *
+ * lp affects what kind of alignment in the uncompressed data is
+ * assumed when encoding literals. A literal is a single 8-bit byte.
+ * See pb below for more information about alignment.
+ */
+ uint32_t lp;
+# define LZMA_LP_DEFAULT 0
+
+ /**
+ * \brief Number of position bits
+ *
+ * pb affects what kind of alignment in the uncompressed data is
+ * assumed in general. The default means four-byte alignment
+ * (2^ pb =2^2=4), which is often a good choice when there's
+ * no better guess.
+ *
+ * When the alignment is known, setting pb accordingly may reduce
+ * the file size a little. E.g. with text files having one-byte
+ * alignment (US-ASCII, ISO-8859-*, UTF-8), setting pb=0 can
+ * improve compression slightly. For UTF-16 text, pb=1 is a good
+ * choice. If the alignment is an odd number like 3 bytes, pb=0
+ * might be the best choice.
+ *
+ * Even though the assumed alignment can be adjusted with pb and
+ * lp, LZMA1 and LZMA2 still slightly favor 16-byte alignment.
+ * It might be worth taking into account when designing file formats
+ * that are likely to be often compressed with LZMA1 or LZMA2.
+ */
+ uint32_t pb;
+# define LZMA_PB_MIN 0
+# define LZMA_PB_MAX 4
+# define LZMA_PB_DEFAULT 2
+
+ /** Compression mode */
+ lzma_mode mode;
+
+ /**
+ * \brief Nice length of a match
+ *
+ * This determines how many bytes the encoder compares from the match
+ * candidates when looking for the best match. Once a match of at
+ * least nice_len bytes long is found, the encoder stops looking for
+ * better candidates and encodes the match. (Naturally, if the found
+ * match is actually longer than nice_len, the actual length is
+ * encoded; it's not truncated to nice_len.)
+ *
+ * Bigger values usually increase the compression ratio and
+ * compression time. For most files, 32 to 128 is a good value,
+ * which gives very good compression ratio at good speed.
+ *
+ * The exact minimum value depends on the match finder. The maximum
+ * is 273, which is the maximum length of a match that LZMA1 and
+ * LZMA2 can encode.
+ */
+ uint32_t nice_len;
+
+ /** Match finder ID */
+ lzma_match_finder mf;
+
+ /**
+ * \brief Maximum search depth in the match finder
+ *
+ * For every input byte, match finder searches through the hash chain
+ * or binary tree in a loop, each iteration going one step deeper in
+ * the chain or tree. The searching stops if
+ * - a match of at least nice_len bytes long is found;
+ * - all match candidates from the hash chain or binary tree have
+ * been checked; or
+ * - maximum search depth is reached.
+ *
+ * Maximum search depth is needed to prevent the match finder from
+ * wasting too much time in case there are lots of short match
+ * candidates. On the other hand, stopping the search before all
+ * candidates have been checked can reduce compression ratio.
+ *
+ * Setting depth to zero tells liblzma to use an automatic default
+ * value, that depends on the selected match finder and nice_len.
+ * The default is in the range [4, 200] or so (it may vary between
+ * liblzma versions).
+ *
+ * Using a bigger depth value than the default can increase
+ * compression ratio in some cases. There is no strict maximum value,
+ * but high values (thousands or millions) should be used with care:
+ * the encoder could remain fast enough with typical input, but
+ * malicious input could cause the match finder to slow down
+ * dramatically, possibly creating a denial of service attack.
+ */
+ uint32_t depth;
+
+ /**
+ * \brief For LZMA_FILTER_LZMA1EXT: Extended flags
+ *
+ * This is used only with LZMA_FILTER_LZMA1EXT.
+ *
+ * Currently only one flag is supported, LZMA_LZMA1EXT_ALLOW_EOPM:
+ *
+ * - Encoder: If the flag is set, then end marker is written just
+ * like it is with LZMA_FILTER_LZMA1. Without this flag the
+ * end marker isn't written and the application has to store
+ * the uncompressed size somewhere outside the compressed stream.
+ * To decompress streams without the end marker, the application
+ * has to set the correct uncompressed size in ext_size_low and
+ * ext_size_high.
+ *
+ * - Decoder: If the uncompressed size in ext_size_low and
+ * ext_size_high is set to the special value UINT64_MAX
+ * (indicating unknown uncompressed size) then this flag is
+ * ignored and the end marker must always be present, that is,
+ * the behavior is identical to LZMA_FILTER_LZMA1.
+ *
+ * Otherwise, if this flag isn't set, then the input stream
+ * must not have the end marker; if the end marker is detected
+ * then it will result in LZMA_DATA_ERROR. This is useful when
+ * it is known that the stream must not have the end marker and
+ * strict validation is wanted.
+ *
+ * If this flag is set, then it is autodetected if the end marker
+ * is present after the specified number of uncompressed bytes
+ * has been decompressed (ext_size_low and ext_size_high). The
+ * end marker isn't allowed in any other position. This behavior
+ * is useful when uncompressed size is known but the end marker
+ * may or may not be present. This is the case, for example,
+ * in .7z files (valid .7z files that have the end marker in
+ * LZMA1 streams are rare but they do exist).
+ */
+ uint32_t ext_flags;
+# define LZMA_LZMA1EXT_ALLOW_EOPM UINT32_C(0x01)
+
+ /**
+ * \brief For LZMA_FILTER_LZMA1EXT: Uncompressed size (low bits)
+ *
+ * The 64-bit uncompressed size is needed for decompression with
+ * LZMA_FILTER_LZMA1EXT. The size is ignored by the encoder.
+ *
+ * The special value UINT64_MAX indicates that the uncompressed size
+ * is unknown and that the end of payload marker (also known as
+ * end of stream marker) must be present to indicate the end of
+ * the LZMA1 stream. Any other value indicates the expected
+ * uncompressed size of the LZMA1 stream. (If LZMA1 was used together
+ * with filters that change the size of the data then the uncompressed
+ * size of the LZMA1 stream could be different than the final
+ * uncompressed size of the filtered stream.)
+ *
+ * ext_size_low holds the least significant 32 bits of the
+ * uncompressed size. The most significant 32 bits must be set
+ * in ext_size_high. The macro lzma_ext_size_set(opt_lzma, u64size)
+ * can be used to set these members.
+ *
+ * The 64-bit uncompressed size is split into two uint32_t variables
+ * because there were no reserved uint64_t members and using the
+ * same options structure for LZMA_FILTER_LZMA1, LZMA_FILTER_LZMA1EXT,
+ * and LZMA_FILTER_LZMA2 was otherwise more convenient than having
+ * a new options structure for LZMA_FILTER_LZMA1EXT. (Replacing two
+ * uint32_t members with one uint64_t changes the ABI on some systems
+ * as the alignment of this struct can increase from 4 bytes to 8.)
+ */
+ uint32_t ext_size_low;
+
+ /**
+ * \brief For LZMA_FILTER_LZMA1EXT: Uncompressed size (high bits)
+ *
+ * This holds the most significant 32 bits of the uncompressed size.
+ */
+ uint32_t ext_size_high;
+
+ /*
+ * Reserved space to allow possible future extensions without
+ * breaking the ABI. You should not touch these, because the names
+ * of these variables may change. These are and will never be used
+ * with the currently supported options, so it is safe to leave these
+ * uninitialized.
+ */
+
+ /** \private Reserved member. */
+ uint32_t reserved_int4;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int5;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int6;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int7;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int8;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum1;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum2;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum3;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum4;
+
+ /** \private Reserved member. */
+ void *reserved_ptr1;
+
+ /** \private Reserved member. */
+ void *reserved_ptr2;
+
+} lzma_options_lzma;
+
+
+/**
+ * \brief Macro to set the 64-bit uncompressed size in ext_size_*
+ *
+ * This might be convenient when decoding using LZMA_FILTER_LZMA1EXT.
+ * This isn't used with LZMA_FILTER_LZMA1 or LZMA_FILTER_LZMA2.
+ */
+#define lzma_set_ext_size(opt_lzma2, u64size) \
+do { \
+ (opt_lzma2).ext_size_low = (uint32_t)(u64size); \
+ (opt_lzma2).ext_size_high = (uint32_t)((uint64_t)(u64size) >> 32); \
+} while (0)
+
+
+/**
+ * \brief Set a compression preset to lzma_options_lzma structure
+ *
+ * 0 is the fastest and 9 is the slowest. These match the switches -0 .. -9
+ * of the xz command line tool. In addition, it is possible to bitwise-or
+ * flags to the preset. Currently only LZMA_PRESET_EXTREME is supported.
+ * The flags are defined in container.h, because the flags are used also
+ * with lzma_easy_encoder().
+ *
+ * The preset levels are subject to changes between liblzma versions.
+ *
+ * This function is available only if LZMA1 or LZMA2 encoder has been enabled
+ * when building liblzma.
+ *
+ * If features (like certain match finders) have been disabled at build time,
+ * then the function may return success (false) even though the resulting
+ * LZMA1/LZMA2 options may not be usable for encoder initialization
+ * (LZMA_OPTIONS_ERROR).
+ *
+ * \param[out] options Pointer to LZMA1 or LZMA2 options to be filled
+ * \param preset Preset level bitwse-ORed with preset flags
+ *
+ * \return lzma_bool:
+ * - true if the preset is not supported (failure).
+ * - false otherwise (success).
+ */
+extern LZMA_API(lzma_bool) lzma_lzma_preset(
+ lzma_options_lzma *options, uint32_t preset) lzma_nothrow;
diff --git a/vcpkg_installed/arm64-osx/include/lzma/stream_flags.h b/vcpkg_installed/arm64-osx/include/lzma/stream_flags.h
new file mode 100644
index 00000000..a33fe468
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/stream_flags.h
@@ -0,0 +1,265 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/stream_flags.h
+ * \brief .xz Stream Header and Stream Footer encoder and decoder
+ * \note Never include this file directly. Use instead.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/**
+ * \brief Size of Stream Header and Stream Footer
+ *
+ * Stream Header and Stream Footer have the same size and they are not
+ * going to change even if a newer version of the .xz file format is
+ * developed in future.
+ */
+#define LZMA_STREAM_HEADER_SIZE 12
+
+
+/**
+ * \brief Options for encoding/decoding Stream Header and Stream Footer
+ */
+typedef struct {
+ /**
+ * \brief Stream Flags format version
+ *
+ * To prevent API and ABI breakages if new features are needed in
+ * Stream Header or Stream Footer, a version number is used to
+ * indicate which members in this structure are in use. For now,
+ * version must always be zero. With non-zero version, the
+ * lzma_stream_header_encode() and lzma_stream_footer_encode()
+ * will return LZMA_OPTIONS_ERROR.
+ *
+ * lzma_stream_header_decode() and lzma_stream_footer_decode()
+ * will always set this to the lowest value that supports all the
+ * features indicated by the Stream Flags field. The application
+ * must check that the version number set by the decoding functions
+ * is supported by the application. Otherwise it is possible that
+ * the application will decode the Stream incorrectly.
+ */
+ uint32_t version;
+
+ /**
+ * \brief Backward Size
+ *
+ * Backward Size must be a multiple of four bytes. In this Stream
+ * format version, Backward Size is the size of the Index field.
+ *
+ * Backward Size isn't actually part of the Stream Flags field, but
+ * it is convenient to include in this structure anyway. Backward
+ * Size is present only in the Stream Footer. There is no need to
+ * initialize backward_size when encoding Stream Header.
+ *
+ * lzma_stream_header_decode() always sets backward_size to
+ * LZMA_VLI_UNKNOWN so that it is convenient to use
+ * lzma_stream_flags_compare() when both Stream Header and Stream
+ * Footer have been decoded.
+ */
+ lzma_vli backward_size;
+
+ /**
+ * \brief Minimum value for lzma_stream_flags.backward_size
+ */
+# define LZMA_BACKWARD_SIZE_MIN 4
+
+ /**
+ * \brief Maximum value for lzma_stream_flags.backward_size
+ */
+# define LZMA_BACKWARD_SIZE_MAX (LZMA_VLI_C(1) << 34)
+
+ /**
+ * \brief Check ID
+ *
+ * This indicates the type of the integrity check calculated from
+ * uncompressed data.
+ */
+ lzma_check check;
+
+ /*
+ * Reserved space to allow possible future extensions without
+ * breaking the ABI. You should not touch these, because the
+ * names of these variables may change.
+ *
+ * (We will never be able to use all of these since Stream Flags
+ * is just two bytes plus Backward Size of four bytes. But it's
+ * nice to have the proper types when they are needed.)
+ */
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum1;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum2;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum3;
+
+ /** \private Reserved member. */
+ lzma_reserved_enum reserved_enum4;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool1;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool2;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool3;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool4;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool5;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool6;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool7;
+
+ /** \private Reserved member. */
+ lzma_bool reserved_bool8;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int1;
+
+ /** \private Reserved member. */
+ uint32_t reserved_int2;
+
+} lzma_stream_flags;
+
+
+/**
+ * \brief Encode Stream Header
+ *
+ * \param options Stream Header options to be encoded.
+ * options->backward_size is ignored and doesn't
+ * need to be initialized.
+ * \param[out] out Beginning of the output buffer of
+ * LZMA_STREAM_HEADER_SIZE bytes.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Encoding was successful.
+ * - LZMA_OPTIONS_ERROR: options->version is not supported by
+ * this liblzma version.
+ * - LZMA_PROG_ERROR: Invalid options.
+ */
+extern LZMA_API(lzma_ret) lzma_stream_header_encode(
+ const lzma_stream_flags *options, uint8_t *out)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Encode Stream Footer
+ *
+ * \param options Stream Footer options to be encoded.
+ * \param[out] out Beginning of the output buffer of
+ * LZMA_STREAM_HEADER_SIZE bytes.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Encoding was successful.
+ * - LZMA_OPTIONS_ERROR: options->version is not supported by
+ * this liblzma version.
+ * - LZMA_PROG_ERROR: Invalid options.
+ */
+extern LZMA_API(lzma_ret) lzma_stream_footer_encode(
+ const lzma_stream_flags *options, uint8_t *out)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Decode Stream Header
+ *
+ * options->backward_size is always set to LZMA_VLI_UNKNOWN. This is to
+ * help comparing Stream Flags from Stream Header and Stream Footer with
+ * lzma_stream_flags_compare().
+ *
+ * \note When decoding .xz files that contain multiple Streams, it may
+ * make sense to print "file format not recognized" only if
+ * decoding of the Stream Header of the \a first Stream gives
+ * LZMA_FORMAT_ERROR. If non-first Stream Header gives
+ * LZMA_FORMAT_ERROR, the message used for LZMA_DATA_ERROR is
+ * probably more appropriate.
+ * For example, the Stream decoder in liblzma uses
+ * LZMA_DATA_ERROR if LZMA_FORMAT_ERROR is returned by
+ * lzma_stream_header_decode() when decoding non-first Stream.
+ *
+ * \param[out] options Target for the decoded Stream Header options.
+ * \param in Beginning of the input buffer of
+ * LZMA_STREAM_HEADER_SIZE bytes.
+ *
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Decoding was successful.
+ * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given
+ * buffer cannot be Stream Header.
+ * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the header
+ * is corrupt.
+ * - LZMA_OPTIONS_ERROR: Unsupported options are present
+ * in the header.
+ */
+extern LZMA_API(lzma_ret) lzma_stream_header_decode(
+ lzma_stream_flags *options, const uint8_t *in)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Decode Stream Footer
+ *
+ * \note If Stream Header was already decoded successfully, but
+ * decoding Stream Footer returns LZMA_FORMAT_ERROR, the
+ * application should probably report some other error message
+ * than "file format not recognized". The file likely
+ * is corrupt (possibly truncated). The Stream decoder in liblzma
+ * uses LZMA_DATA_ERROR in this situation.
+ *
+ * \param[out] options Target for the decoded Stream Footer options.
+ * \param in Beginning of the input buffer of
+ * LZMA_STREAM_HEADER_SIZE bytes.
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Decoding was successful.
+ * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given
+ * buffer cannot be Stream Footer.
+ * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the Stream Footer
+ * is corrupt.
+ * - LZMA_OPTIONS_ERROR: Unsupported options are present
+ * in Stream Footer.
+ */
+extern LZMA_API(lzma_ret) lzma_stream_footer_decode(
+ lzma_stream_flags *options, const uint8_t *in)
+ lzma_nothrow lzma_attr_warn_unused_result;
+
+
+/**
+ * \brief Compare two lzma_stream_flags structures
+ *
+ * backward_size values are compared only if both are not
+ * LZMA_VLI_UNKNOWN.
+ *
+ * \param a Pointer to lzma_stream_flags structure
+ * \param b Pointer to lzma_stream_flags structure
+ *
+ * \return Possible lzma_ret values:
+ * - LZMA_OK: Both are equal. If either had backward_size set
+ * to LZMA_VLI_UNKNOWN, backward_size values were not
+ * compared or validated.
+ * - LZMA_DATA_ERROR: The structures differ.
+ * - LZMA_OPTIONS_ERROR: version in either structure is greater
+ * than the maximum supported version (currently zero).
+ * - LZMA_PROG_ERROR: Invalid value, e.g. invalid check or
+ * backward_size.
+ */
+extern LZMA_API(lzma_ret) lzma_stream_flags_compare(
+ const lzma_stream_flags *a, const lzma_stream_flags *b)
+ lzma_nothrow lzma_attr_pure;
diff --git a/vcpkg_installed/arm64-osx/include/lzma/version.h b/vcpkg_installed/arm64-osx/include/lzma/version.h
new file mode 100644
index 00000000..53526b99
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/version.h
@@ -0,0 +1,134 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/version.h
+ * \brief Version number
+ * \note Never include this file directly. Use instead.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/** \brief Major version number of the liblzma release. */
+#define LZMA_VERSION_MAJOR 5
+
+/** \brief Minor version number of the liblzma release. */
+#define LZMA_VERSION_MINOR 6
+
+/** \brief Patch version number of the liblzma release. */
+#define LZMA_VERSION_PATCH 2
+
+/**
+ * \brief Version stability marker
+ *
+ * This will always be one of three values:
+ * - LZMA_VERSION_STABILITY_ALPHA
+ * - LZMA_VERSION_STABILITY_BETA
+ * - LZMA_VERSION_STABILITY_STABLE
+ */
+#define LZMA_VERSION_STABILITY LZMA_VERSION_STABILITY_STABLE
+
+/** \brief Commit version number of the liblzma release */
+#ifndef LZMA_VERSION_COMMIT
+# define LZMA_VERSION_COMMIT ""
+#endif
+
+
+/*
+ * Map symbolic stability levels to integers.
+ */
+#define LZMA_VERSION_STABILITY_ALPHA 0
+#define LZMA_VERSION_STABILITY_BETA 1
+#define LZMA_VERSION_STABILITY_STABLE 2
+
+
+/**
+ * \brief Compile-time version number
+ *
+ * The version number is of format xyyyzzzs where
+ * - x = major
+ * - yyy = minor
+ * - zzz = revision
+ * - s indicates stability: 0 = alpha, 1 = beta, 2 = stable
+ *
+ * The same xyyyzzz triplet is never reused with different stability levels.
+ * For example, if 5.1.0alpha has been released, there will never be 5.1.0beta
+ * or 5.1.0 stable.
+ *
+ * \note The version number of liblzma has nothing to with
+ * the version number of Igor Pavlov's LZMA SDK.
+ */
+#define LZMA_VERSION (LZMA_VERSION_MAJOR * UINT32_C(10000000) \
+ + LZMA_VERSION_MINOR * UINT32_C(10000) \
+ + LZMA_VERSION_PATCH * UINT32_C(10) \
+ + LZMA_VERSION_STABILITY)
+
+
+/*
+ * Macros to construct the compile-time version string
+ */
+#if LZMA_VERSION_STABILITY == LZMA_VERSION_STABILITY_ALPHA
+# define LZMA_VERSION_STABILITY_STRING "alpha"
+#elif LZMA_VERSION_STABILITY == LZMA_VERSION_STABILITY_BETA
+# define LZMA_VERSION_STABILITY_STRING "beta"
+#elif LZMA_VERSION_STABILITY == LZMA_VERSION_STABILITY_STABLE
+# define LZMA_VERSION_STABILITY_STRING ""
+#else
+# error Incorrect LZMA_VERSION_STABILITY
+#endif
+
+#define LZMA_VERSION_STRING_C_(major, minor, patch, stability, commit) \
+ #major "." #minor "." #patch stability commit
+
+#define LZMA_VERSION_STRING_C(major, minor, patch, stability, commit) \
+ LZMA_VERSION_STRING_C_(major, minor, patch, stability, commit)
+
+
+/**
+ * \brief Compile-time version as a string
+ *
+ * This can be for example "4.999.5alpha", "4.999.8beta", or "5.0.0" (stable
+ * versions don't have any "stable" suffix). In future, a snapshot built
+ * from source code repository may include an additional suffix, for example
+ * "4.999.8beta-21-g1d92". The commit ID won't be available in numeric form
+ * in LZMA_VERSION macro.
+ */
+#define LZMA_VERSION_STRING LZMA_VERSION_STRING_C( \
+ LZMA_VERSION_MAJOR, LZMA_VERSION_MINOR, \
+ LZMA_VERSION_PATCH, LZMA_VERSION_STABILITY_STRING, \
+ LZMA_VERSION_COMMIT)
+
+
+/* #ifndef is needed for use with windres (MinGW-w64 or Cygwin). */
+#ifndef LZMA_H_INTERNAL_RC
+
+/**
+ * \brief Run-time version number as an integer
+ *
+ * This allows an application to compare if it was built against the same,
+ * older, or newer version of liblzma that is currently running.
+ *
+ * \return The value of LZMA_VERSION macro at the compile time of liblzma
+ */
+extern LZMA_API(uint32_t) lzma_version_number(void)
+ lzma_nothrow lzma_attr_const;
+
+
+/**
+ * \brief Run-time version as a string
+ *
+ * This function may be useful to display which version of liblzma an
+ * application is currently using.
+ *
+ * \return Run-time version of liblzma
+ */
+extern LZMA_API(const char *) lzma_version_string(void)
+ lzma_nothrow lzma_attr_const;
+
+#endif
diff --git a/vcpkg_installed/arm64-osx/include/lzma/vli.h b/vcpkg_installed/arm64-osx/include/lzma/vli.h
new file mode 100644
index 00000000..6b049021
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/lzma/vli.h
@@ -0,0 +1,166 @@
+/* SPDX-License-Identifier: 0BSD */
+
+/**
+ * \file lzma/vli.h
+ * \brief Variable-length integer handling
+ * \note Never include this file directly. Use instead.
+ *
+ * In the .xz format, most integers are encoded in a variable-length
+ * representation, which is sometimes called little endian base-128 encoding.
+ * This saves space when smaller values are more likely than bigger values.
+ *
+ * The encoding scheme encodes seven bits to every byte, using minimum
+ * number of bytes required to represent the given value. Encodings that use
+ * non-minimum number of bytes are invalid, thus every integer has exactly
+ * one encoded representation. The maximum number of bits in a VLI is 63,
+ * thus the vli argument must be less than or equal to UINT64_MAX / 2. You
+ * should use LZMA_VLI_MAX for clarity.
+ */
+
+/*
+ * Author: Lasse Collin
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use instead.
+#endif
+
+
+/**
+ * \brief Maximum supported value of a variable-length integer
+ */
+#define LZMA_VLI_MAX (UINT64_MAX / 2)
+
+/**
+ * \brief VLI value to denote that the value is unknown
+ */
+#define LZMA_VLI_UNKNOWN UINT64_MAX
+
+/**
+ * \brief Maximum supported encoded length of variable length integers
+ */
+#define LZMA_VLI_BYTES_MAX 9
+
+/**
+ * \brief VLI constant suffix
+ */
+#define LZMA_VLI_C(n) UINT64_C(n)
+
+
+/**
+ * \brief Variable-length integer type
+ *
+ * Valid VLI values are in the range [0, LZMA_VLI_MAX]. Unknown value is
+ * indicated with LZMA_VLI_UNKNOWN, which is the maximum value of the
+ * underlying integer type.
+ *
+ * lzma_vli will be uint64_t for the foreseeable future. If a bigger size
+ * is needed in the future, it is guaranteed that 2 * LZMA_VLI_MAX will
+ * not overflow lzma_vli. This simplifies integer overflow detection.
+ */
+typedef uint64_t lzma_vli;
+
+
+/**
+ * \brief Validate a variable-length integer
+ *
+ * This is useful to test that application has given acceptable values
+ * for example in the uncompressed_size and compressed_size variables.
+ *
+ * \return True if the integer is representable as a VLI or if it
+ * indicates an unknown value. False otherwise.
+ */
+#define lzma_vli_is_valid(vli) \
+ ((vli) <= LZMA_VLI_MAX || (vli) == LZMA_VLI_UNKNOWN)
+
+
+/**
+ * \brief Encode a variable-length integer
+ *
+ * This function has two modes: single-call and multi-call. Single-call mode
+ * encodes the whole integer at once; it is an error if the output buffer is
+ * too small. Multi-call mode saves the position in *vli_pos, and thus it is
+ * possible to continue encoding if the buffer becomes full before the whole
+ * integer has been encoded.
+ *
+ * \param vli Integer to be encoded
+ * \param[out] vli_pos How many VLI-encoded bytes have already been written
+ * out. When starting to encode a new integer in
+ * multi-call mode, *vli_pos must be set to zero.
+ * To use single-call encoding, set vli_pos to NULL.
+ * \param[out] out Beginning of the output buffer
+ * \param[out] out_pos The next byte will be written to out[*out_pos].
+ * \param out_size Size of the out buffer; the first byte into
+ * which no data is written to is out[out_size].
+ *
+ * \return Slightly different return values are used in multi-call and
+ * single-call modes.
+ *
+ * Single-call (vli_pos == NULL):
+ * - LZMA_OK: Integer successfully encoded.
+ * - LZMA_PROG_ERROR: Arguments are not sane. This can be due
+ * to too little output space; single-call mode doesn't use
+ * LZMA_BUF_ERROR, since the application should have checked
+ * the encoded size with lzma_vli_size().
+ *
+ * Multi-call (vli_pos != NULL):
+ * - LZMA_OK: So far all OK, but the integer is not
+ * completely written out yet.
+ * - LZMA_STREAM_END: Integer successfully encoded.
+ * - LZMA_BUF_ERROR: No output space was provided.
+ * - LZMA_PROG_ERROR: Arguments are not sane.
+ */
+extern LZMA_API(lzma_ret) lzma_vli_encode(lzma_vli vli, size_t *vli_pos,
+ uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow;
+
+
+/**
+ * \brief Decode a variable-length integer
+ *
+ * Like lzma_vli_encode(), this function has single-call and multi-call modes.
+ *
+ * \param[out] vli Pointer to decoded integer. The decoder will
+ * initialize it to zero when *vli_pos == 0, so
+ * application isn't required to initialize *vli.
+ * \param[out] vli_pos How many bytes have already been decoded. When
+ * starting to decode a new integer in multi-call
+ * mode, *vli_pos must be initialized to zero. To
+ * use single-call decoding, set vli_pos to NULL.
+ * \param in Beginning of the input buffer
+ * \param[out] in_pos The next byte will be read from in[*in_pos].
+ * \param in_size Size of the input buffer; the first byte that
+ * won't be read is in[in_size].
+ *
+ * \return Slightly different return values are used in multi-call and
+ * single-call modes.
+ *
+ * Single-call (vli_pos == NULL):
+ * - LZMA_OK: Integer successfully decoded.
+ * - LZMA_DATA_ERROR: Integer is corrupt. This includes hitting
+ * the end of the input buffer before the whole integer was
+ * decoded; providing no input at all will use LZMA_DATA_ERROR.
+ * - LZMA_PROG_ERROR: Arguments are not sane.
+ *
+ * Multi-call (vli_pos != NULL):
+ * - LZMA_OK: So far all OK, but the integer is not
+ * completely decoded yet.
+ * - LZMA_STREAM_END: Integer successfully decoded.
+ * - LZMA_DATA_ERROR: Integer is corrupt.
+ * - LZMA_BUF_ERROR: No input was provided.
+ * - LZMA_PROG_ERROR: Arguments are not sane.
+ */
+extern LZMA_API(lzma_ret) lzma_vli_decode(lzma_vli *vli, size_t *vli_pos,
+ const uint8_t *in, size_t *in_pos, size_t in_size)
+ lzma_nothrow;
+
+
+/**
+ * \brief Get the number of bytes required to encode a VLI
+ *
+ * \param vli Integer whose encoded size is to be determined
+ *
+ * \return Number of bytes on success (1-9). If vli isn't valid,
+ * zero is returned.
+ */
+extern LZMA_API(uint32_t) lzma_vli_size(lzma_vli vli)
+ lzma_nothrow lzma_attr_pure;
diff --git a/vcpkg_installed/arm64-osx/include/spng.h b/vcpkg_installed/arm64-osx/include/spng.h
new file mode 100644
index 00000000..8f946337
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/spng.h
@@ -0,0 +1,537 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+#ifndef SPNG_H
+#define SPNG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(SPNG_STATIC)
+ #if defined(SPNG__BUILD)
+ #define SPNG_API __declspec(dllexport)
+ #else
+ #define SPNG_API __declspec(dllimport)
+ #endif
+#else
+ #define SPNG_API
+#endif
+
+#if defined(_MSC_VER)
+ #define SPNG_CDECL __cdecl
+#else
+ #define SPNG_CDECL
+#endif
+
+#include
+#include
+#include
+
+#define SPNG_VERSION_MAJOR 0
+#define SPNG_VERSION_MINOR 7
+#define SPNG_VERSION_PATCH 4
+
+enum spng_errno
+{
+ SPNG_IO_ERROR = -2,
+ SPNG_IO_EOF = -1,
+ SPNG_OK = 0,
+ SPNG_EINVAL,
+ SPNG_EMEM,
+ SPNG_EOVERFLOW,
+ SPNG_ESIGNATURE,
+ SPNG_EWIDTH,
+ SPNG_EHEIGHT,
+ SPNG_EUSER_WIDTH,
+ SPNG_EUSER_HEIGHT,
+ SPNG_EBIT_DEPTH,
+ SPNG_ECOLOR_TYPE,
+ SPNG_ECOMPRESSION_METHOD,
+ SPNG_EFILTER_METHOD,
+ SPNG_EINTERLACE_METHOD,
+ SPNG_EIHDR_SIZE,
+ SPNG_ENOIHDR,
+ SPNG_ECHUNK_POS,
+ SPNG_ECHUNK_SIZE,
+ SPNG_ECHUNK_CRC,
+ SPNG_ECHUNK_TYPE,
+ SPNG_ECHUNK_UNKNOWN_CRITICAL,
+ SPNG_EDUP_PLTE,
+ SPNG_EDUP_CHRM,
+ SPNG_EDUP_GAMA,
+ SPNG_EDUP_ICCP,
+ SPNG_EDUP_SBIT,
+ SPNG_EDUP_SRGB,
+ SPNG_EDUP_BKGD,
+ SPNG_EDUP_HIST,
+ SPNG_EDUP_TRNS,
+ SPNG_EDUP_PHYS,
+ SPNG_EDUP_TIME,
+ SPNG_EDUP_OFFS,
+ SPNG_EDUP_EXIF,
+ SPNG_ECHRM,
+ SPNG_EPLTE_IDX,
+ SPNG_ETRNS_COLOR_TYPE,
+ SPNG_ETRNS_NO_PLTE,
+ SPNG_EGAMA,
+ SPNG_EICCP_NAME,
+ SPNG_EICCP_COMPRESSION_METHOD,
+ SPNG_ESBIT,
+ SPNG_ESRGB,
+ SPNG_ETEXT,
+ SPNG_ETEXT_KEYWORD,
+ SPNG_EZTXT,
+ SPNG_EZTXT_COMPRESSION_METHOD,
+ SPNG_EITXT,
+ SPNG_EITXT_COMPRESSION_FLAG,
+ SPNG_EITXT_COMPRESSION_METHOD,
+ SPNG_EITXT_LANG_TAG,
+ SPNG_EITXT_TRANSLATED_KEY,
+ SPNG_EBKGD_NO_PLTE,
+ SPNG_EBKGD_PLTE_IDX,
+ SPNG_EHIST_NO_PLTE,
+ SPNG_EPHYS,
+ SPNG_ESPLT_NAME,
+ SPNG_ESPLT_DUP_NAME,
+ SPNG_ESPLT_DEPTH,
+ SPNG_ETIME,
+ SPNG_EOFFS,
+ SPNG_EEXIF,
+ SPNG_EIDAT_TOO_SHORT,
+ SPNG_EIDAT_STREAM,
+ SPNG_EZLIB,
+ SPNG_EFILTER,
+ SPNG_EBUFSIZ,
+ SPNG_EIO,
+ SPNG_EOF,
+ SPNG_EBUF_SET,
+ SPNG_EBADSTATE,
+ SPNG_EFMT,
+ SPNG_EFLAGS,
+ SPNG_ECHUNKAVAIL,
+ SPNG_ENCODE_ONLY,
+ SPNG_EOI,
+ SPNG_ENOPLTE,
+ SPNG_ECHUNK_LIMITS,
+ SPNG_EZLIB_INIT,
+ SPNG_ECHUNK_STDLEN,
+ SPNG_EINTERNAL,
+ SPNG_ECTXTYPE,
+ SPNG_ENOSRC,
+ SPNG_ENODST,
+ SPNG_EOPSTATE,
+ SPNG_ENOTFINAL,
+};
+
+enum spng_text_type
+{
+ SPNG_TEXT = 1,
+ SPNG_ZTXT = 2,
+ SPNG_ITXT = 3
+};
+
+enum spng_color_type
+{
+ SPNG_COLOR_TYPE_GRAYSCALE = 0,
+ SPNG_COLOR_TYPE_TRUECOLOR = 2,
+ SPNG_COLOR_TYPE_INDEXED = 3,
+ SPNG_COLOR_TYPE_GRAYSCALE_ALPHA = 4,
+ SPNG_COLOR_TYPE_TRUECOLOR_ALPHA = 6
+};
+
+enum spng_filter
+{
+ SPNG_FILTER_NONE = 0,
+ SPNG_FILTER_SUB = 1,
+ SPNG_FILTER_UP = 2,
+ SPNG_FILTER_AVERAGE = 3,
+ SPNG_FILTER_PAETH = 4
+};
+
+enum spng_filter_choice
+{
+ SPNG_DISABLE_FILTERING = 0,
+ SPNG_FILTER_CHOICE_NONE = 8,
+ SPNG_FILTER_CHOICE_SUB = 16,
+ SPNG_FILTER_CHOICE_UP = 32,
+ SPNG_FILTER_CHOICE_AVG = 64,
+ SPNG_FILTER_CHOICE_PAETH = 128,
+ SPNG_FILTER_CHOICE_ALL = (8|16|32|64|128)
+};
+
+enum spng_interlace_method
+{
+ SPNG_INTERLACE_NONE = 0,
+ SPNG_INTERLACE_ADAM7 = 1
+};
+
+/* Channels are always in byte-order */
+enum spng_format
+{
+ SPNG_FMT_RGBA8 = 1,
+ SPNG_FMT_RGBA16 = 2,
+ SPNG_FMT_RGB8 = 4,
+
+ /* Partially implemented, see documentation */
+ SPNG_FMT_GA8 = 16,
+ SPNG_FMT_GA16 = 32,
+ SPNG_FMT_G8 = 64,
+
+ /* No conversion or scaling */
+ SPNG_FMT_PNG = 256,
+ SPNG_FMT_RAW = 512 /* big-endian (everything else is host-endian) */
+};
+
+enum spng_ctx_flags
+{
+ SPNG_CTX_IGNORE_ADLER32 = 1, /* Ignore checksum in DEFLATE streams */
+ SPNG_CTX_ENCODER = 2 /* Create an encoder context */
+};
+
+enum spng_decode_flags
+{
+ SPNG_DECODE_USE_TRNS = 1, /* Deprecated */
+ SPNG_DECODE_USE_GAMA = 2, /* Deprecated */
+ SPNG_DECODE_USE_SBIT = 8, /* Undocumented */
+
+ SPNG_DECODE_TRNS = 1, /* Apply transparency */
+ SPNG_DECODE_GAMMA = 2, /* Apply gamma correction */
+ SPNG_DECODE_PROGRESSIVE = 256 /* Initialize for progressive reads */
+};
+
+enum spng_crc_action
+{
+ /* Default for critical chunks */
+ SPNG_CRC_ERROR = 0,
+
+ /* Discard chunk, invalid for critical chunks.
+ Since v0.6.2: default for ancillary chunks */
+ SPNG_CRC_DISCARD = 1,
+
+ /* Ignore and don't calculate checksum.
+ Since v0.6.2: also ignores checksums in DEFLATE streams */
+ SPNG_CRC_USE = 2
+};
+
+enum spng_encode_flags
+{
+ SPNG_ENCODE_PROGRESSIVE = 1, /* Initialize for progressive writes */
+ SPNG_ENCODE_FINALIZE = 2, /* Finalize PNG after encoding image */
+};
+
+struct spng_ihdr
+{
+ uint32_t width;
+ uint32_t height;
+ uint8_t bit_depth;
+ uint8_t color_type;
+ uint8_t compression_method;
+ uint8_t filter_method;
+ uint8_t interlace_method;
+};
+
+struct spng_plte_entry
+{
+ uint8_t red;
+ uint8_t green;
+ uint8_t blue;
+
+ uint8_t alpha; /* Reserved for internal use */
+};
+
+struct spng_plte
+{
+ uint32_t n_entries;
+ struct spng_plte_entry entries[256];
+};
+
+struct spng_trns
+{
+ uint16_t gray;
+
+ uint16_t red;
+ uint16_t green;
+ uint16_t blue;
+
+ uint32_t n_type3_entries;
+ uint8_t type3_alpha[256];
+};
+
+struct spng_chrm_int
+{
+ uint32_t white_point_x;
+ uint32_t white_point_y;
+ uint32_t red_x;
+ uint32_t red_y;
+ uint32_t green_x;
+ uint32_t green_y;
+ uint32_t blue_x;
+ uint32_t blue_y;
+};
+
+struct spng_chrm
+{
+ double white_point_x;
+ double white_point_y;
+ double red_x;
+ double red_y;
+ double green_x;
+ double green_y;
+ double blue_x;
+ double blue_y;
+};
+
+struct spng_iccp
+{
+ char profile_name[80];
+ size_t profile_len;
+ char *profile;
+};
+
+struct spng_sbit
+{
+ uint8_t grayscale_bits;
+ uint8_t red_bits;
+ uint8_t green_bits;
+ uint8_t blue_bits;
+ uint8_t alpha_bits;
+};
+
+struct spng_text
+{
+ char keyword[80];
+ int type;
+
+ size_t length;
+ char *text;
+
+ uint8_t compression_flag; /* iTXt only */
+ uint8_t compression_method; /* iTXt, ztXt only */
+ char *language_tag; /* iTXt only */
+ char *translated_keyword; /* iTXt only */
+};
+
+struct spng_bkgd
+{
+ uint16_t gray; /* Only for gray/gray alpha */
+ uint16_t red;
+ uint16_t green;
+ uint16_t blue;
+ uint16_t plte_index; /* Only for indexed color */
+};
+
+struct spng_hist
+{
+ uint16_t frequency[256];
+};
+
+struct spng_phys
+{
+ uint32_t ppu_x, ppu_y;
+ uint8_t unit_specifier;
+};
+
+struct spng_splt_entry
+{
+ uint16_t red;
+ uint16_t green;
+ uint16_t blue;
+ uint16_t alpha;
+ uint16_t frequency;
+};
+
+struct spng_splt
+{
+ char name[80];
+ uint8_t sample_depth;
+ uint32_t n_entries;
+ struct spng_splt_entry *entries;
+};
+
+struct spng_time
+{
+ uint16_t year;
+ uint8_t month;
+ uint8_t day;
+ uint8_t hour;
+ uint8_t minute;
+ uint8_t second;
+};
+
+struct spng_offs
+{
+ int32_t x, y;
+ uint8_t unit_specifier;
+};
+
+struct spng_exif
+{
+ size_t length;
+ char *data;
+};
+
+struct spng_chunk
+{
+ size_t offset;
+ uint32_t length;
+ uint8_t type[4];
+ uint32_t crc;
+};
+
+enum spng_location
+{
+ SPNG_AFTER_IHDR = 1,
+ SPNG_AFTER_PLTE = 2,
+ SPNG_AFTER_IDAT = 8,
+};
+
+struct spng_unknown_chunk
+{
+ uint8_t type[4];
+ size_t length;
+ void *data;
+ enum spng_location location;
+};
+
+enum spng_option
+{
+ SPNG_KEEP_UNKNOWN_CHUNKS = 1,
+
+ SPNG_IMG_COMPRESSION_LEVEL,
+ SPNG_IMG_WINDOW_BITS,
+ SPNG_IMG_MEM_LEVEL,
+ SPNG_IMG_COMPRESSION_STRATEGY,
+
+ SPNG_TEXT_COMPRESSION_LEVEL,
+ SPNG_TEXT_WINDOW_BITS,
+ SPNG_TEXT_MEM_LEVEL,
+ SPNG_TEXT_COMPRESSION_STRATEGY,
+
+ SPNG_FILTER_CHOICE,
+ SPNG_CHUNK_COUNT_LIMIT,
+ SPNG_ENCODE_TO_BUFFER,
+};
+
+typedef void* SPNG_CDECL spng_malloc_fn(size_t size);
+typedef void* SPNG_CDECL spng_realloc_fn(void* ptr, size_t size);
+typedef void* SPNG_CDECL spng_calloc_fn(size_t count, size_t size);
+typedef void SPNG_CDECL spng_free_fn(void* ptr);
+
+struct spng_alloc
+{
+ spng_malloc_fn *malloc_fn;
+ spng_realloc_fn *realloc_fn;
+ spng_calloc_fn *calloc_fn;
+ spng_free_fn *free_fn;
+};
+
+struct spng_row_info
+{
+ uint32_t scanline_idx;
+ uint32_t row_num; /* deinterlaced row index */
+ int pass;
+ uint8_t filter;
+};
+
+typedef struct spng_ctx spng_ctx;
+
+typedef int spng_read_fn(spng_ctx *ctx, void *user, void *dest, size_t length);
+typedef int spng_write_fn(spng_ctx *ctx, void *user, void *src, size_t length);
+
+typedef int spng_rw_fn(spng_ctx *ctx, void *user, void *dst_src, size_t length);
+
+SPNG_API spng_ctx *spng_ctx_new(int flags);
+SPNG_API spng_ctx *spng_ctx_new2(struct spng_alloc *alloc, int flags);
+SPNG_API void spng_ctx_free(spng_ctx *ctx);
+
+SPNG_API int spng_set_png_buffer(spng_ctx *ctx, const void *buf, size_t size);
+SPNG_API int spng_set_png_stream(spng_ctx *ctx, spng_rw_fn *rw_func, void *user);
+SPNG_API int spng_set_png_file(spng_ctx *ctx, FILE *file);
+
+SPNG_API void *spng_get_png_buffer(spng_ctx *ctx, size_t *len, int *error);
+
+SPNG_API int spng_set_image_limits(spng_ctx *ctx, uint32_t width, uint32_t height);
+SPNG_API int spng_get_image_limits(spng_ctx *ctx, uint32_t *width, uint32_t *height);
+
+SPNG_API int spng_set_chunk_limits(spng_ctx *ctx, size_t chunk_size, size_t cache_size);
+SPNG_API int spng_get_chunk_limits(spng_ctx *ctx, size_t *chunk_size, size_t *cache_size);
+
+SPNG_API int spng_set_crc_action(spng_ctx *ctx, int critical, int ancillary);
+
+SPNG_API int spng_set_option(spng_ctx *ctx, enum spng_option option, int value);
+SPNG_API int spng_get_option(spng_ctx *ctx, enum spng_option option, int *value);
+
+SPNG_API int spng_decoded_image_size(spng_ctx *ctx, int fmt, size_t *len);
+
+/* Decode */
+SPNG_API int spng_decode_image(spng_ctx *ctx, void *out, size_t len, int fmt, int flags);
+
+/* Progressive decode */
+SPNG_API int spng_decode_scanline(spng_ctx *ctx, void *out, size_t len);
+SPNG_API int spng_decode_row(spng_ctx *ctx, void *out, size_t len);
+SPNG_API int spng_decode_chunks(spng_ctx *ctx);
+
+/* Encode/decode */
+SPNG_API int spng_get_row_info(spng_ctx *ctx, struct spng_row_info *row_info);
+
+/* Encode */
+SPNG_API int spng_encode_image(spng_ctx *ctx, const void *img, size_t len, int fmt, int flags);
+
+/* Progressive encode */
+SPNG_API int spng_encode_scanline(spng_ctx *ctx, const void *scanline, size_t len);
+SPNG_API int spng_encode_row(spng_ctx *ctx, const void *row, size_t len);
+SPNG_API int spng_encode_chunks(spng_ctx *ctx);
+
+SPNG_API int spng_get_ihdr(spng_ctx *ctx, struct spng_ihdr *ihdr);
+SPNG_API int spng_get_plte(spng_ctx *ctx, struct spng_plte *plte);
+SPNG_API int spng_get_trns(spng_ctx *ctx, struct spng_trns *trns);
+SPNG_API int spng_get_chrm(spng_ctx *ctx, struct spng_chrm *chrm);
+SPNG_API int spng_get_chrm_int(spng_ctx *ctx, struct spng_chrm_int *chrm_int);
+SPNG_API int spng_get_gama(spng_ctx *ctx, double *gamma);
+SPNG_API int spng_get_gama_int(spng_ctx *ctx, uint32_t *gama_int);
+SPNG_API int spng_get_iccp(spng_ctx *ctx, struct spng_iccp *iccp);
+SPNG_API int spng_get_sbit(spng_ctx *ctx, struct spng_sbit *sbit);
+SPNG_API int spng_get_srgb(spng_ctx *ctx, uint8_t *rendering_intent);
+SPNG_API int spng_get_text(spng_ctx *ctx, struct spng_text *text, uint32_t *n_text);
+SPNG_API int spng_get_bkgd(spng_ctx *ctx, struct spng_bkgd *bkgd);
+SPNG_API int spng_get_hist(spng_ctx *ctx, struct spng_hist *hist);
+SPNG_API int spng_get_phys(spng_ctx *ctx, struct spng_phys *phys);
+SPNG_API int spng_get_splt(spng_ctx *ctx, struct spng_splt *splt, uint32_t *n_splt);
+SPNG_API int spng_get_time(spng_ctx *ctx, struct spng_time *time);
+SPNG_API int spng_get_unknown_chunks(spng_ctx *ctx, struct spng_unknown_chunk *chunks, uint32_t *n_chunks);
+
+/* Official extensions */
+SPNG_API int spng_get_offs(spng_ctx *ctx, struct spng_offs *offs);
+SPNG_API int spng_get_exif(spng_ctx *ctx, struct spng_exif *exif);
+
+
+SPNG_API int spng_set_ihdr(spng_ctx *ctx, struct spng_ihdr *ihdr);
+SPNG_API int spng_set_plte(spng_ctx *ctx, struct spng_plte *plte);
+SPNG_API int spng_set_trns(spng_ctx *ctx, struct spng_trns *trns);
+SPNG_API int spng_set_chrm(spng_ctx *ctx, struct spng_chrm *chrm);
+SPNG_API int spng_set_chrm_int(spng_ctx *ctx, struct spng_chrm_int *chrm_int);
+SPNG_API int spng_set_gama(spng_ctx *ctx, double gamma);
+SPNG_API int spng_set_gama_int(spng_ctx *ctx, uint32_t gamma);
+SPNG_API int spng_set_iccp(spng_ctx *ctx, struct spng_iccp *iccp);
+SPNG_API int spng_set_sbit(spng_ctx *ctx, struct spng_sbit *sbit);
+SPNG_API int spng_set_srgb(spng_ctx *ctx, uint8_t rendering_intent);
+SPNG_API int spng_set_text(spng_ctx *ctx, struct spng_text *text, uint32_t n_text);
+SPNG_API int spng_set_bkgd(spng_ctx *ctx, struct spng_bkgd *bkgd);
+SPNG_API int spng_set_hist(spng_ctx *ctx, struct spng_hist *hist);
+SPNG_API int spng_set_phys(spng_ctx *ctx, struct spng_phys *phys);
+SPNG_API int spng_set_splt(spng_ctx *ctx, struct spng_splt *splt, uint32_t n_splt);
+SPNG_API int spng_set_time(spng_ctx *ctx, struct spng_time *time);
+SPNG_API int spng_set_unknown_chunks(spng_ctx *ctx, struct spng_unknown_chunk *chunks, uint32_t n_chunks);
+
+/* Official extensions */
+SPNG_API int spng_set_offs(spng_ctx *ctx, struct spng_offs *offs);
+SPNG_API int spng_set_exif(spng_ctx *ctx, struct spng_exif *exif);
+
+
+SPNG_API const char *spng_strerror(int err);
+SPNG_API const char *spng_version_string(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SPNG_H */
diff --git a/vcpkg_installed/arm64-osx/include/tiff.h b/vcpkg_installed/arm64-osx/include/tiff.h
new file mode 100644
index 00000000..d8da33dc
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/tiff.h
@@ -0,0 +1,899 @@
+/*
+ * Copyright (c) 1988-1997 Sam Leffler
+ * Copyright (c) 1991-1997 Silicon Graphics, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that (i) the above copyright notices and this permission notice appear in
+ * all copies of the software and related documentation, and (ii) the names of
+ * Sam Leffler and Silicon Graphics may not be used in any advertising or
+ * publicity relating to the software without the specific, prior written
+ * permission of Sam Leffler and Silicon Graphics.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#ifndef _TIFF_
+#define _TIFF_
+
+#include "tiffconf.h"
+
+/*
+ * Tag Image File Format (TIFF)
+ *
+ * Based on Rev 6.0 from:
+ * Developer's Desk
+ * Aldus Corporation
+ * 411 First Ave. South
+ * Suite 200
+ * Seattle, WA 98104
+ * 206-622-5500
+ *
+ * (http://partners.adobe.com/asn/developer/PDFS/TN/TIFF6.pdf)
+ *
+ * For BigTIFF design notes see the following links
+ * http://www.remotesensing.org/libtiff/bigtiffdesign.html
+ * http://www.awaresystems.be/imaging/tiff/bigtiff.html
+ */
+
+#define TIFF_VERSION_CLASSIC 42
+#define TIFF_VERSION_BIG 43
+
+#define TIFF_BIGENDIAN 0x4d4d
+#define TIFF_LITTLEENDIAN 0x4949
+#define MDI_LITTLEENDIAN 0x5045
+#define MDI_BIGENDIAN 0x4550
+
+/*
+ * Intrinsic data types required by the file format:
+ *
+ * 8-bit quantities int8_t/uint_8_t
+ * 16-bit quantities int16_t/uint_16_t
+ * 32-bit quantities int32_t/uint_32_t
+ * 64-bit quantities int64_t/uint_64_t
+ * strings unsigned char*
+ */
+#ifdef __GNUC__
+#define TIFF_GCC_DEPRECATED __attribute__((deprecated))
+#else
+#define TIFF_GCC_DEPRECATED
+#endif
+#ifdef _MSC_VER
+#define TIFF_MSC_DEPRECATED \
+ __declspec(deprecated("libtiff type deprecated; please use corresponding " \
+ "C99 stdint.h type"))
+#else
+#define TIFF_MSC_DEPRECATED
+#endif
+
+#ifndef TIFF_DISABLE_DEPRECATED
+typedef TIFF_MSC_DEPRECATED int8_t int8 TIFF_GCC_DEPRECATED;
+typedef TIFF_MSC_DEPRECATED uint8_t uint8 TIFF_GCC_DEPRECATED;
+
+typedef TIFF_MSC_DEPRECATED int16_t int16 TIFF_GCC_DEPRECATED;
+typedef TIFF_MSC_DEPRECATED uint16_t uint16 TIFF_GCC_DEPRECATED;
+
+typedef TIFF_MSC_DEPRECATED int32_t int32 TIFF_GCC_DEPRECATED;
+typedef TIFF_MSC_DEPRECATED uint32_t uint32 TIFF_GCC_DEPRECATED;
+
+typedef TIFF_MSC_DEPRECATED int64_t int64 TIFF_GCC_DEPRECATED;
+typedef TIFF_MSC_DEPRECATED uint64_t uint64 TIFF_GCC_DEPRECATED;
+#endif /* TIFF_DISABLE_DEPRECATED */
+
+/*
+ * Some types as promoted in a variable argument list
+ * We use uint16_vap rather then directly using int, because this way
+ * we document the type we actually want to pass through, conceptually,
+ * rather then confusing the issue by merely stating the type it gets
+ * promoted to
+ */
+
+typedef int uint16_vap;
+
+/*
+ * TIFF header.
+ */
+typedef struct
+{
+ uint16_t tiff_magic; /* magic number (defines byte order) */
+ uint16_t tiff_version; /* TIFF version number */
+} TIFFHeaderCommon;
+typedef struct
+{
+ uint16_t tiff_magic; /* magic number (defines byte order) */
+ uint16_t tiff_version; /* TIFF version number */
+ uint32_t tiff_diroff; /* byte offset to first directory */
+} TIFFHeaderClassic;
+typedef struct
+{
+ uint16_t tiff_magic; /* magic number (defines byte order) */
+ uint16_t tiff_version; /* TIFF version number */
+ uint16_t tiff_offsetsize; /* size of offsets, should be 8 */
+ uint16_t tiff_unused; /* unused word, should be 0 */
+ uint64_t tiff_diroff; /* byte offset to first directory */
+} TIFFHeaderBig;
+
+/*
+ * NB: In the comments below,
+ * - items marked with a + are obsoleted by revision 5.0,
+ * - items marked with a ! are introduced in revision 6.0.
+ * - items marked with a % are introduced post revision 6.0.
+ * - items marked with a $ are obsoleted by revision 6.0.
+ * - items marked with a & are introduced by Adobe DNG specification.
+ */
+
+/*
+ * Tag data type information.
+ *
+ * Note: RATIONALs are the ratio of two 32-bit integer values.
+ *--:
+ * Note2: TIFF_IFD8 data type is used in tiffFields[]-tag definition in order to
+ distinguish the write-handling of those tags between ClassicTIFF and BigTiff:
+ For ClassicTIFF libtiff writes a 32-bit value and the TIFF_IFD
+ type-id into the file For BigTIFF libtiff writes a 64-bit value and the
+ TIFF_IFD8 type-id into the file
+ */
+typedef enum
+{
+ TIFF_NOTYPE = 0, /* placeholder */
+ TIFF_BYTE = 1, /* 8-bit unsigned integer */
+ TIFF_ASCII = 2, /* 8-bit bytes w/ last byte null */
+ TIFF_SHORT = 3, /* 16-bit unsigned integer */
+ TIFF_LONG = 4, /* 32-bit unsigned integer */
+ TIFF_RATIONAL = 5, /* 64-bit unsigned fraction */
+ TIFF_SBYTE = 6, /* !8-bit signed integer */
+ TIFF_UNDEFINED = 7, /* !8-bit untyped data */
+ TIFF_SSHORT = 8, /* !16-bit signed integer */
+ TIFF_SLONG = 9, /* !32-bit signed integer */
+ TIFF_SRATIONAL = 10, /* !64-bit signed fraction */
+ TIFF_FLOAT = 11, /* !32-bit IEEE floating point */
+ TIFF_DOUBLE = 12, /* !64-bit IEEE floating point */
+ TIFF_IFD = 13, /* %32-bit unsigned integer (offset) */
+ TIFF_LONG8 = 16, /* BigTIFF 64-bit unsigned integer */
+ TIFF_SLONG8 = 17, /* BigTIFF 64-bit signed integer */
+ TIFF_IFD8 = 18 /* BigTIFF 64-bit unsigned integer (offset) */
+} TIFFDataType;
+
+/*
+ * TIFF Tag Definitions.
+ */
+/* clang-format off */ /* for better readability of tag comments */
+#define TIFFTAG_SUBFILETYPE 254 /* subfile data descriptor */
+#define FILETYPE_REDUCEDIMAGE 0x1 /* reduced resolution version */
+#define FILETYPE_PAGE 0x2 /* one page of many */
+#define FILETYPE_MASK 0x4 /* transparency mask */
+#define TIFFTAG_OSUBFILETYPE 255 /* +kind of data in subfile */
+#define OFILETYPE_IMAGE 1 /* full resolution image data */
+#define OFILETYPE_REDUCEDIMAGE 2 /* reduced size image data */
+#define OFILETYPE_PAGE 3 /* one page of many */
+#define TIFFTAG_IMAGEWIDTH 256 /* image width in pixels */
+#define TIFFTAG_IMAGELENGTH 257 /* image height in pixels */
+#define TIFFTAG_BITSPERSAMPLE 258 /* bits per channel (sample) */
+#define TIFFTAG_COMPRESSION 259 /* data compression technique */
+#define COMPRESSION_NONE 1 /* dump mode */
+#define COMPRESSION_CCITTRLE 2 /* CCITT modified Huffman RLE */
+#define COMPRESSION_CCITTFAX3 3 /* CCITT Group 3 fax encoding */
+#define COMPRESSION_CCITT_T4 3 /* CCITT T.4 (TIFF 6 name) */
+#define COMPRESSION_CCITTFAX4 4 /* CCITT Group 4 fax encoding */
+#define COMPRESSION_CCITT_T6 4 /* CCITT T.6 (TIFF 6 name) */
+#define COMPRESSION_LZW 5 /* Lempel-Ziv & Welch */
+#define COMPRESSION_OJPEG 6 /* !6.0 JPEG */
+#define COMPRESSION_JPEG 7 /* %JPEG DCT compression */
+#define COMPRESSION_T85 9 /* !TIFF/FX T.85 JBIG compression */
+#define COMPRESSION_T43 10 /* !TIFF/FX T.43 colour by layered JBIG compression */
+#define COMPRESSION_NEXT 32766 /* NeXT 2-bit RLE */
+#define COMPRESSION_CCITTRLEW 32771 /* #1 w/ word alignment */
+#define COMPRESSION_PACKBITS 32773 /* Macintosh RLE */
+#define COMPRESSION_THUNDERSCAN 32809 /* ThunderScan RLE */
+/* codes 32895-32898 are reserved for ANSI IT8 TIFF/IT */
+#define COMPRESSION_DCS 32947 /* Kodak DCS encoding */
+#define COMPRESSION_JBIG 34661 /* ISO JBIG */
+#define COMPRESSION_SGILOG 34676 /* SGI Log Luminance RLE */
+#define COMPRESSION_SGILOG24 34677 /* SGI Log 24-bit packed */
+#define COMPRESSION_JP2000 34712 /* Leadtools JPEG2000 */
+#define COMPRESSION_LERC 34887 /* ESRI Lerc codec: https://github.com/Esri/lerc */
+/* compression codes 34887-34889 are reserved for ESRI */
+#define COMPRESSION_LZMA 34925 /* LZMA2 */
+#define COMPRESSION_ZSTD 50000 /* ZSTD: WARNING not registered in Adobe-maintained registry */
+#define COMPRESSION_WEBP 50001 /* WEBP: WARNING not registered in Adobe-maintained registry */
+#define COMPRESSION_JXL 50002 /* JPEGXL: WARNING not registered in Adobe-maintained registry */
+#define TIFFTAG_PHOTOMETRIC 262 /* photometric interpretation */
+#define PHOTOMETRIC_MINISWHITE 0 /* min value is white */
+#define PHOTOMETRIC_MINISBLACK 1 /* min value is black */
+#define PHOTOMETRIC_RGB 2 /* RGB color model */
+#define PHOTOMETRIC_PALETTE 3 /* color map indexed */
+#define PHOTOMETRIC_MASK 4 /* $holdout mask */
+#define PHOTOMETRIC_SEPARATED 5 /* !color separations */
+#define PHOTOMETRIC_YCBCR 6 /* !CCIR 601 */
+#define PHOTOMETRIC_CIELAB 8 /* !1976 CIE L*a*b* */
+#define PHOTOMETRIC_ICCLAB 9 /* ICC L*a*b* [Adobe TIFF Technote 4] */
+#define PHOTOMETRIC_ITULAB 10 /* ITU L*a*b* */
+#define PHOTOMETRIC_CFA 32803 /* color filter array */
+#define PHOTOMETRIC_LOGL 32844 /* CIE Log2(L) */
+#define PHOTOMETRIC_LOGLUV 32845 /* CIE Log2(L) (u',v') */
+#define TIFFTAG_THRESHHOLDING 263 /* +thresholding used on data */
+#define THRESHHOLD_BILEVEL 1 /* b&w art scan */
+#define THRESHHOLD_HALFTONE 2 /* or dithered scan */
+#define THRESHHOLD_ERRORDIFFUSE 3 /* usually floyd-steinberg */
+#define TIFFTAG_CELLWIDTH 264 /* +dithering matrix width */
+#define TIFFTAG_CELLLENGTH 265 /* +dithering matrix height */
+#define TIFFTAG_FILLORDER 266 /* data order within a byte */
+#define FILLORDER_MSB2LSB 1 /* most significant -> least */
+#define FILLORDER_LSB2MSB 2 /* least significant -> most */
+#define TIFFTAG_DOCUMENTNAME 269 /* name of doc. image is from */
+#define TIFFTAG_IMAGEDESCRIPTION 270 /* info about image */
+#define TIFFTAG_MAKE 271 /* scanner manufacturer name */
+#define TIFFTAG_MODEL 272 /* scanner model name/number */
+#define TIFFTAG_STRIPOFFSETS 273 /* offsets to data strips */
+#define TIFFTAG_ORIENTATION 274 /* +image orientation */
+#define ORIENTATION_TOPLEFT 1 /* row 0 top, col 0 lhs */
+#define ORIENTATION_TOPRIGHT 2 /* row 0 top, col 0 rhs */
+#define ORIENTATION_BOTRIGHT 3 /* row 0 bottom, col 0 rhs */
+#define ORIENTATION_BOTLEFT 4 /* row 0 bottom, col 0 lhs */
+#define ORIENTATION_LEFTTOP 5 /* row 0 lhs, col 0 top */
+#define ORIENTATION_RIGHTTOP 6 /* row 0 rhs, col 0 top */
+#define ORIENTATION_RIGHTBOT 7 /* row 0 rhs, col 0 bottom */
+#define ORIENTATION_LEFTBOT 8 /* row 0 lhs, col 0 bottom */
+#define TIFFTAG_SAMPLESPERPIXEL 277 /* samples per pixel */
+#define TIFFTAG_ROWSPERSTRIP 278 /* rows per strip of data */
+#define TIFFTAG_STRIPBYTECOUNTS 279 /* bytes counts for strips */
+#define TIFFTAG_MINSAMPLEVALUE 280 /* +minimum sample value */
+#define TIFFTAG_MAXSAMPLEVALUE 281 /* +maximum sample value */
+#define TIFFTAG_XRESOLUTION 282 /* pixels/resolution in x */
+#define TIFFTAG_YRESOLUTION 283 /* pixels/resolution in y */
+#define TIFFTAG_PLANARCONFIG 284 /* storage organization */
+#define PLANARCONFIG_CONTIG 1 /* single image plane */
+#define PLANARCONFIG_SEPARATE 2 /* separate planes of data */
+#define TIFFTAG_PAGENAME 285 /* page name image is from */
+#define TIFFTAG_XPOSITION 286 /* x page offset of image lhs */
+#define TIFFTAG_YPOSITION 287 /* y page offset of image lhs */
+#define TIFFTAG_FREEOFFSETS 288 /* +byte offset to free block */
+#define TIFFTAG_FREEBYTECOUNTS 289 /* +sizes of free blocks */
+#define TIFFTAG_GRAYRESPONSEUNIT 290 /* $gray scale curve accuracy */
+#define GRAYRESPONSEUNIT_10S 1 /* tenths of a unit */
+#define GRAYRESPONSEUNIT_100S 2 /* hundredths of a unit */
+#define GRAYRESPONSEUNIT_1000S 3 /* thousandths of a unit */
+#define GRAYRESPONSEUNIT_10000S 4 /* ten-thousandths of a unit */
+#define GRAYRESPONSEUNIT_100000S 5 /* hundred-thousandths */
+#define TIFFTAG_GRAYRESPONSECURVE 291 /* $gray scale response curve */
+#define TIFFTAG_GROUP3OPTIONS 292 /* 32 flag bits */
+#define TIFFTAG_T4OPTIONS 292 /* TIFF 6.0 proper name alias */
+#define GROUP3OPT_2DENCODING 0x1 /* 2-dimensional coding */
+#define GROUP3OPT_UNCOMPRESSED 0x2 /* data not compressed */
+#define GROUP3OPT_FILLBITS 0x4 /* fill to byte boundary */
+#define TIFFTAG_GROUP4OPTIONS 293 /* 32 flag bits */
+#define TIFFTAG_T6OPTIONS 293 /* TIFF 6.0 proper name */
+#define GROUP4OPT_UNCOMPRESSED 0x2 /* data not compressed */
+#define TIFFTAG_RESOLUTIONUNIT 296 /* units of resolutions */
+#define RESUNIT_NONE 1 /* no meaningful units */
+#define RESUNIT_INCH 2 /* english */
+#define RESUNIT_CENTIMETER 3 /* metric */
+#define TIFFTAG_PAGENUMBER 297 /* page numbers of multi-page */
+#define TIFFTAG_COLORRESPONSEUNIT 300 /* $color curve accuracy */
+#define COLORRESPONSEUNIT_10S 1 /* tenths of a unit */
+#define COLORRESPONSEUNIT_100S 2 /* hundredths of a unit */
+#define COLORRESPONSEUNIT_1000S 3 /* thousandths of a unit */
+#define COLORRESPONSEUNIT_10000S 4 /* ten-thousandths of a unit */
+#define COLORRESPONSEUNIT_100000S 5 /* hundred-thousandths */
+#define TIFFTAG_TRANSFERFUNCTION 301 /* !colorimetry info */
+#define TIFFTAG_SOFTWARE 305 /* name & release */
+#define TIFFTAG_DATETIME 306 /* creation date and time */
+#define TIFFTAG_ARTIST 315 /* creator of image */
+#define TIFFTAG_HOSTCOMPUTER 316 /* machine where created */
+#define TIFFTAG_PREDICTOR 317 /* prediction scheme w/ LZW */
+#define PREDICTOR_NONE 1 /* no prediction scheme used */
+#define PREDICTOR_HORIZONTAL 2 /* horizontal differencing */
+#define PREDICTOR_FLOATINGPOINT 3 /* floating point predictor */
+#define TIFFTAG_WHITEPOINT 318 /* image white point */
+#define TIFFTAG_PRIMARYCHROMATICITIES 319 /* !primary chromaticities */
+#define TIFFTAG_COLORMAP 320 /* RGB map for palette image */
+#define TIFFTAG_HALFTONEHINTS 321 /* !highlight+shadow info */
+#define TIFFTAG_TILEWIDTH 322 /* !tile width in pixels */
+#define TIFFTAG_TILELENGTH 323 /* !tile height in pixels */
+#define TIFFTAG_TILEOFFSETS 324 /* !offsets to data tiles */
+#define TIFFTAG_TILEBYTECOUNTS 325 /* !byte counts for tiles */
+#define TIFFTAG_BADFAXLINES 326 /* lines w/ wrong pixel count */
+#define TIFFTAG_CLEANFAXDATA 327 /* regenerated line info */
+#define CLEANFAXDATA_CLEAN 0 /* no errors detected */
+#define CLEANFAXDATA_REGENERATED 1 /* receiver regenerated lines */
+#define CLEANFAXDATA_UNCLEAN 2 /* uncorrected errors exist */
+#define TIFFTAG_CONSECUTIVEBADFAXLINES 328 /* max consecutive bad lines */
+#define TIFFTAG_SUBIFD 330 /* subimage descriptors */
+#define TIFFTAG_INKSET 332 /* !inks in separated image */
+#define INKSET_CMYK 1 /* !cyan-magenta-yellow-black color */
+#define INKSET_MULTIINK 2 /* !multi-ink or hi-fi color */
+#define TIFFTAG_INKNAMES 333 /* !ascii names of inks */
+#define TIFFTAG_NUMBEROFINKS 334 /* !number of inks */
+#define TIFFTAG_DOTRANGE 336 /* !0% and 100% dot codes */
+#define TIFFTAG_TARGETPRINTER 337 /* !separation target */
+#define TIFFTAG_EXTRASAMPLES 338 /* !info about extra samples */
+#define EXTRASAMPLE_UNSPECIFIED 0 /* !unspecified data */
+#define EXTRASAMPLE_ASSOCALPHA 1 /* !associated alpha data */
+#define EXTRASAMPLE_UNASSALPHA 2 /* !unassociated alpha data */
+#define TIFFTAG_SAMPLEFORMAT 339 /* !data sample format */
+#define SAMPLEFORMAT_UINT 1 /* !unsigned integer data */
+#define SAMPLEFORMAT_INT 2 /* !signed integer data */
+#define SAMPLEFORMAT_IEEEFP 3 /* !IEEE floating point data */
+#define SAMPLEFORMAT_VOID 4 /* !untyped data */
+#define SAMPLEFORMAT_COMPLEXINT 5 /* !complex signed int */
+#define SAMPLEFORMAT_COMPLEXIEEEFP 6 /* !complex ieee floating */
+#define TIFFTAG_SMINSAMPLEVALUE 340 /* !variable MinSampleValue */
+#define TIFFTAG_SMAXSAMPLEVALUE 341 /* !variable MaxSampleValue */
+#define TIFFTAG_CLIPPATH 343 /* %ClipPath [Adobe TIFF technote 2] */
+#define TIFFTAG_XCLIPPATHUNITS 344 /* %XClipPathUnits [Adobe TIFF technote 2] */
+#define TIFFTAG_YCLIPPATHUNITS 345 /* %YClipPathUnits [Adobe TIFF technote 2] */
+#define TIFFTAG_INDEXED 346 /* %Indexed [Adobe TIFF Technote 3] */
+#define TIFFTAG_JPEGTABLES 347 /* %JPEG table stream */
+#define TIFFTAG_OPIPROXY 351 /* %OPI Proxy [Adobe TIFF technote] */
+/* Tags 400-435 are from the TIFF/FX spec */
+#define TIFFTAG_GLOBALPARAMETERSIFD 400 /* ! */
+#define TIFFTAG_PROFILETYPE 401 /* ! */
+#define PROFILETYPE_UNSPECIFIED 0 /* ! */
+#define PROFILETYPE_G3_FAX 1 /* ! */
+#define TIFFTAG_FAXPROFILE 402 /* ! */
+#define FAXPROFILE_S 1 /* !TIFF/FX FAX profile S */
+#define FAXPROFILE_F 2 /* !TIFF/FX FAX profile F */
+#define FAXPROFILE_J 3 /* !TIFF/FX FAX profile J */
+#define FAXPROFILE_C 4 /* !TIFF/FX FAX profile C */
+#define FAXPROFILE_L 5 /* !TIFF/FX FAX profile L */
+#define FAXPROFILE_M 6 /* !TIFF/FX FAX profile LM */
+#define TIFFTAG_CODINGMETHODS 403 /* !TIFF/FX coding methods */
+#define CODINGMETHODS_T4_1D (1 << 1) /* !T.4 1D */
+#define CODINGMETHODS_T4_2D (1 << 2) /* !T.4 2D */
+#define CODINGMETHODS_T6 (1 << 3) /* !T.6 */
+#define CODINGMETHODS_T85 (1 << 4) /* !T.85 JBIG */
+#define CODINGMETHODS_T42 (1 << 5) /* !T.42 JPEG */
+#define CODINGMETHODS_T43 (1 << 6) /* !T.43 colour by layered JBIG */
+#define TIFFTAG_VERSIONYEAR 404 /* !TIFF/FX version year */
+#define TIFFTAG_MODENUMBER 405 /* !TIFF/FX mode number */
+#define TIFFTAG_DECODE 433 /* !TIFF/FX decode */
+#define TIFFTAG_IMAGEBASECOLOR 434 /* !TIFF/FX image base colour */
+#define TIFFTAG_T82OPTIONS 435 /* !TIFF/FX T.82 options */
+/*
+ * Tags 512-521 are obsoleted by Technical Note #2 which specifies a
+ * revised JPEG-in-TIFF scheme.
+ */
+#define TIFFTAG_JPEGPROC 512 /* !JPEG processing algorithm */
+#define JPEGPROC_BASELINE 1 /* !baseline sequential */
+#define JPEGPROC_LOSSLESS 14 /* !Huffman coded lossless */
+#define TIFFTAG_JPEGIFOFFSET 513 /* !pointer to SOI marker */
+#define TIFFTAG_JPEGIFBYTECOUNT 514 /* !JFIF stream length */
+#define TIFFTAG_JPEGRESTARTINTERVAL 515 /* !restart interval length */
+#define TIFFTAG_JPEGLOSSLESSPREDICTORS 517 /* !lossless proc predictor */
+#define TIFFTAG_JPEGPOINTTRANSFORM 518 /* !lossless point transform */
+#define TIFFTAG_JPEGQTABLES 519 /* !Q matrix offsets */
+#define TIFFTAG_JPEGDCTABLES 520 /* !DCT table offsets */
+#define TIFFTAG_JPEGACTABLES 521 /* !AC coefficient offsets */
+#define TIFFTAG_YCBCRCOEFFICIENTS 529 /* !RGB -> YCbCr transform */
+#define TIFFTAG_YCBCRSUBSAMPLING 530 /* !YCbCr subsampling factors */
+#define TIFFTAG_YCBCRPOSITIONING 531 /* !subsample positioning */
+#define YCBCRPOSITION_CENTERED 1 /* !as in PostScript Level 2 */
+#define YCBCRPOSITION_COSITED 2 /* !as in CCIR 601-1 */
+#define TIFFTAG_REFERENCEBLACKWHITE 532 /* !colorimetry info */
+#define TIFFTAG_STRIPROWCOUNTS 559 /* !TIFF/FX strip row counts */
+#define TIFFTAG_XMLPACKET 700 /* %XML packet [Adobe XMP Specification, January 2004 */
+#define TIFFTAG_OPIIMAGEID 32781 /* %OPI ImageID [Adobe TIFF technote] */
+/* For eiStream Annotation Specification, Version 1.00.06 see
+ * http://web.archive.org/web/20050309141348/http://www.kofile.com/support%20pro/faqs/annospec.htm */
+#define TIFFTAG_TIFFANNOTATIONDATA 32932
+/* tags 32952-32956 are private tags registered to Island Graphics */
+#define TIFFTAG_REFPTS 32953 /* image reference points */
+#define TIFFTAG_REGIONTACKPOINT 32954 /* region-xform tack point */
+#define TIFFTAG_REGIONWARPCORNERS 32955 /* warp quadrilateral */
+#define TIFFTAG_REGIONAFFINE 32956 /* affine transformation mat */
+/* tags 32995-32999 are private tags registered to SGI */
+#define TIFFTAG_MATTEING 32995 /* $use ExtraSamples */
+#define TIFFTAG_DATATYPE 32996 /* $use SampleFormat */
+#define TIFFTAG_IMAGEDEPTH 32997 /* z depth of image */
+#define TIFFTAG_TILEDEPTH 32998 /* z depth/data tile */
+/* tags 33300-33309 are private tags registered to Pixar */
+/*
+ * TIFFTAG_PIXAR_IMAGEFULLWIDTH and TIFFTAG_PIXAR_IMAGEFULLLENGTH
+ * are set when an image has been cropped out of a larger image.
+ * They reflect the size of the original uncropped image.
+ * The TIFFTAG_XPOSITION and TIFFTAG_YPOSITION can be used
+ * to determine the position of the smaller image in the larger one.
+ */
+#define TIFFTAG_PIXAR_IMAGEFULLWIDTH 33300 /* full image size in x */
+#define TIFFTAG_PIXAR_IMAGEFULLLENGTH 33301 /* full image size in y */
+/* Tags 33302-33306 are used to identify special image modes and data
+ * used by Pixar's texture formats.
+ */
+#define TIFFTAG_PIXAR_TEXTUREFORMAT 33302 /* texture map format */
+#define TIFFTAG_PIXAR_WRAPMODES 33303 /* s & t wrap modes */
+#define TIFFTAG_PIXAR_FOVCOT 33304 /* cotan(fov) for env. maps */
+#define TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN 33305
+#define TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA 33306
+/* tag 33405 is a private tag registered to Eastman Kodak */
+#define TIFFTAG_WRITERSERIALNUMBER 33405 /* device serial number */
+#define TIFFTAG_CFAREPEATPATTERNDIM 33421 /* (alias for TIFFTAG_EP_CFAREPEATPATTERNDIM)*/
+#define TIFFTAG_CFAPATTERN 33422 /* (alias for TIFFTAG_EP_CFAPATTERN) */
+#define TIFFTAG_BATTERYLEVEL 33423 /* (alias for TIFFTAG_EP_BATTERYLEVEL) */
+/* tag 33432 is listed in the 6.0 spec w/ unknown ownership */
+#define TIFFTAG_COPYRIGHT 33432 /* copyright string */
+/* Tags 33445-33452 are used for Molecular Dynamics GEL fileformat,
+ * see http://research.stowers-institute.org/mcm/efg/ScientificSoftware/Utility/TiffTags/GEL-FileFormat.pdf
+ * (2023: the above web site is unavailable but tags are explained briefly at
+ * https://www.awaresystems.be/imaging/tiff/tifftags/docs/gel.html
+ */
+#define TIFFTAG_MD_FILETAG 33445 /* Specifies the pixel data format encoding in the GEL file format. */
+#define TIFFTAG_MD_SCALEPIXEL 33446 /* scale factor */
+#define TIFFTAG_MD_COLORTABLE 33447 /* conversion from 16bit to 8bit */
+#define TIFFTAG_MD_LABNAME 33448 /* name of the lab that scanned this file. */
+#define TIFFTAG_MD_SAMPLEINFO 33449 /* information about the scanned GEL sample */
+#define TIFFTAG_MD_PREPDATE 33450 /* information about the date the sample was prepared YY/MM/DD */
+#define TIFFTAG_MD_PREPTIME 33451 /* information about the time the sample was prepared HH:MM*/
+#define TIFFTAG_MD_FILEUNITS 33452 /* Units for data in this file, as used in the GEL file format. */
+/* IPTC TAG from RichTIFF specifications */
+#define TIFFTAG_RICHTIFFIPTC 33723
+#define TIFFTAG_INGR_PACKET_DATA_TAG 33918 /* Intergraph Application specific storage. */
+#define TIFFTAG_INGR_FLAG_REGISTERS 33919 /* Intergraph Application specific flags. */
+#define TIFFTAG_IRASB_TRANSORMATION_MATRIX 33920 /* Originally part of Intergraph's GeoTIFF tags, but likely understood by IrasB only. */
+#define TIFFTAG_MODELTIEPOINTTAG 33922 /* GeoTIFF */
+/* 34016-34029 are reserved for ANSI IT8 TIFF/IT */
+#define TIFFTAG_STONITS 37439 /* Sample value to Nits */
+/* tag 34929 is a private tag registered to FedEx */
+#define TIFFTAG_FEDEX_EDR 34929 /* unknown use */
+#define TIFFTAG_IMAGESOURCEDATA 37724 /* http://justsolve.archiveteam.org/wiki/PSD, http://www.adobe.com/devnet-apps/photoshop/fileformatashtml/ */
+#define TIFFTAG_INTEROPERABILITYIFD 40965 /* Pointer to EXIF Interoperability private directory */
+#define TIFFTAG_GDAL_METADATA 42112 /* Used by the GDAL library */
+#define TIFFTAG_GDAL_NODATA 42113 /* Used by the GDAL library */
+#define TIFFTAG_OCE_SCANJOB_DESCRIPTION 50215 /* Used in the Oce scanning process */
+#define TIFFTAG_OCE_APPLICATION_SELECTOR 50216 /* Used in the Oce scanning process. */
+#define TIFFTAG_OCE_IDENTIFICATION_NUMBER 50217
+#define TIFFTAG_OCE_IMAGELOGIC_CHARACTERISTICS 50218
+/* tags 50674 to 50677 are reserved for ESRI */
+#define TIFFTAG_LERC_PARAMETERS 50674 /* Stores LERC version and additional compression method */
+
+/* Adobe Digital Negative (DNG) format tags */
+#define TIFFTAG_DNGVERSION 50706 /* &DNG version number */
+#define TIFFTAG_DNGBACKWARDVERSION 50707 /* &DNG compatibility version */
+#define TIFFTAG_UNIQUECAMERAMODEL 50708 /* &name for the camera model */
+#define TIFFTAG_LOCALIZEDCAMERAMODEL 50709 /* &localized camera model name (UTF-8) */
+#define TIFFTAG_CFAPLANECOLOR 50710 /* &CFAPattern->LinearRaw space mapping */
+#define TIFFTAG_CFALAYOUT 50711 /* &spatial layout of the CFA */
+#define TIFFTAG_LINEARIZATIONTABLE 50712 /* &lookup table description */
+#define TIFFTAG_BLACKLEVELREPEATDIM 50713 /* &repeat pattern size for the BlackLevel tag */
+#define TIFFTAG_BLACKLEVEL 50714 /* &zero light encoding level */
+#define TIFFTAG_BLACKLEVELDELTAH 50715 /* &zero light encoding level differences (columns) */
+#define TIFFTAG_BLACKLEVELDELTAV 50716 /* &zero light encoding level differences (rows) */
+#define TIFFTAG_WHITELEVEL 50717 /* &fully saturated encoding level */
+#define TIFFTAG_DEFAULTSCALE 50718 /* &default scale factors */
+#define TIFFTAG_DEFAULTCROPORIGIN 50719 /* &origin of the final image area */
+#define TIFFTAG_DEFAULTCROPSIZE 50720 /* &size of the final image area */
+#define TIFFTAG_COLORMATRIX1 50721 /* &XYZ->reference color space transformation matrix 1 */
+#define TIFFTAG_COLORMATRIX2 50722 /* &XYZ->reference color space transformation matrix 2 */
+#define TIFFTAG_CAMERACALIBRATION1 50723 /* &calibration matrix 1 */
+#define TIFFTAG_CAMERACALIBRATION2 50724 /* &calibration matrix 2 */
+#define TIFFTAG_REDUCTIONMATRIX1 50725 /* &dimensionality reduction matrix 1 */
+#define TIFFTAG_REDUCTIONMATRIX2 50726 /* &dimensionality reduction matrix 2 */
+#define TIFFTAG_ANALOGBALANCE 50727 /* &gain applied the stored raw values*/
+#define TIFFTAG_ASSHOTNEUTRAL 50728 /* &selected white balance in linear reference space */
+#define TIFFTAG_ASSHOTWHITEXY 50729 /* &selected white balance in x-y chromaticity coordinates */
+#define TIFFTAG_BASELINEEXPOSURE 50730 /* &how much to move the zero point */
+#define TIFFTAG_BASELINENOISE 50731 /* &relative noise level */
+#define TIFFTAG_BASELINESHARPNESS 50732 /* &relative amount of sharpening */
+/* TIFFTAG_BAYERGREENSPLIT: &how closely the values of the green pixels in the blue/green rows
+ * track the values of the green pixels in the red/green rows */
+#define TIFFTAG_BAYERGREENSPLIT 50733
+#define TIFFTAG_LINEARRESPONSELIMIT 50734 /* &non-linear encoding range */
+#define TIFFTAG_CAMERASERIALNUMBER 50735 /* &camera's serial number */
+#define TIFFTAG_LENSINFO 50736 /* info about the lens */
+#define TIFFTAG_CHROMABLURRADIUS 50737 /* &chroma blur radius */
+#define TIFFTAG_ANTIALIASSTRENGTH 50738 /* &relative strength of the camera's anti-alias filter */
+#define TIFFTAG_SHADOWSCALE 50739 /* &used by Adobe Camera Raw */
+#define TIFFTAG_DNGPRIVATEDATA 50740 /* &manufacturer's private data */
+#define TIFFTAG_MAKERNOTESAFETY 50741 /* &whether the EXIF MakerNote tag is safe to preserve along with the rest of the EXIF data */
+#define TIFFTAG_CALIBRATIONILLUMINANT1 50778 /* &illuminant 1 */
+#define TIFFTAG_CALIBRATIONILLUMINANT2 50779 /* &illuminant 2 */
+#define TIFFTAG_BESTQUALITYSCALE 50780 /* &best quality multiplier */
+#define TIFFTAG_RAWDATAUNIQUEID 50781 /* &unique identifier for the raw image data */
+#define TIFFTAG_ORIGINALRAWFILENAME 50827 /* &file name of the original raw file (UTF-8) */
+#define TIFFTAG_ORIGINALRAWFILEDATA 50828 /* &contents of the original raw file */
+#define TIFFTAG_ACTIVEAREA 50829 /* &active (non-masked) pixels of the sensor */
+#define TIFFTAG_MASKEDAREAS 50830 /* &list of coordinates of fully masked pixels */
+#define TIFFTAG_ASSHOTICCPROFILE 50831 /* &these two tags used to */
+#define TIFFTAG_ASSHOTPREPROFILEMATRIX 50832 /* map cameras's color space into ICC profile space */
+#define TIFFTAG_CURRENTICCPROFILE 50833 /* & */
+#define TIFFTAG_CURRENTPREPROFILEMATRIX 50834 /* & */
+
+/* DNG 1.2.0.0 */
+#define TIFFTAG_COLORIMETRICREFERENCE 50879 /* &colorimetric reference */
+#define TIFFTAG_CAMERACALIBRATIONSIGNATURE 50931 /* &camera calibration signature (UTF-8) */
+#define TIFFTAG_PROFILECALIBRATIONSIGNATURE 50932 /* &profile calibration signature (UTF-8) */
+/* TIFFTAG_EXTRACAMERAPROFILES 50933 &extra camera profiles : is already defined for GeoTIFF DGIWG */
+#define TIFFTAG_ASSHOTPROFILENAME 50934 /* &as shot profile name (UTF-8) */
+#define TIFFTAG_NOISEREDUCTIONAPPLIED 50935 /* &amount of applied noise reduction */
+#define TIFFTAG_PROFILENAME 50936 /* &camera profile name (UTF-8) */
+#define TIFFTAG_PROFILEHUESATMAPDIMS 50937 /* &dimensions of HSV mapping */
+#define TIFFTAG_PROFILEHUESATMAPDATA1 50938 /* &first HSV mapping table */
+#define TIFFTAG_PROFILEHUESATMAPDATA2 50939 /* &second HSV mapping table */
+#define TIFFTAG_PROFILETONECURVE 50940 /* &default tone curve */
+#define TIFFTAG_PROFILEEMBEDPOLICY 50941 /* &profile embedding policy */
+#define TIFFTAG_PROFILECOPYRIGHT 50942 /* &profile copyright information (UTF-8) */
+#define TIFFTAG_FORWARDMATRIX1 50964 /* &matrix for mapping white balanced camera colors to XYZ D50 */
+#define TIFFTAG_FORWARDMATRIX2 50965 /* &matrix for mapping white balanced camera colors to XYZ D50 */
+#define TIFFTAG_PREVIEWAPPLICATIONNAME 50966 /* &name of application that created preview (UTF-8) */
+#define TIFFTAG_PREVIEWAPPLICATIONVERSION 50967 /* &version of application that created preview (UTF-8) */
+#define TIFFTAG_PREVIEWSETTINGSNAME 50968 /* &name of conversion settings (UTF-8) */
+#define TIFFTAG_PREVIEWSETTINGSDIGEST 50969 /* &unique id of conversion settings */
+#define TIFFTAG_PREVIEWCOLORSPACE 50970 /* &preview color space */
+#define TIFFTAG_PREVIEWDATETIME 50971 /* &date/time preview was rendered */
+#define TIFFTAG_RAWIMAGEDIGEST 50972 /* &md5 of raw image data */
+#define TIFFTAG_ORIGINALRAWFILEDIGEST 50973 /* &md5 of the data stored in the OriginalRawFileData tag */
+#define TIFFTAG_SUBTILEBLOCKSIZE 50974 /* &subtile block size */
+#define TIFFTAG_ROWINTERLEAVEFACTOR 50975 /* &number of interleaved fields */
+#define TIFFTAG_PROFILELOOKTABLEDIMS 50981 /* &num of input samples in each dim of default "look" table */
+#define TIFFTAG_PROFILELOOKTABLEDATA 50982 /* &default "look" table for use as starting point */
+
+/* DNG 1.3.0.0 */
+#define TIFFTAG_OPCODELIST1 51008 /* &opcodes that should be applied to raw image after reading */
+#define TIFFTAG_OPCODELIST2 51009 /* &opcodes that should be applied after mapping to linear reference */
+#define TIFFTAG_OPCODELIST3 51022 /* &opcodes that should be applied after demosaicing */
+#define TIFFTAG_NOISEPROFILE 51041 /* &noise profile */
+
+/* DNG 1.4.0.0 */
+#define TIFFTAG_DEFAULTUSERCROP 51125 /* &default user crop rectangle in relative coords */
+#define TIFFTAG_DEFAULTBLACKRENDER 51110 /* &black rendering hint */
+#define TIFFTAG_BASELINEEXPOSUREOFFSET 51109 /* &baseline exposure offset */
+#define TIFFTAG_PROFILELOOKTABLEENCODING 51108 /* &3D LookTable indexing conversion */
+#define TIFFTAG_PROFILEHUESATMAPENCODING 51107 /* &3D HueSatMap indexing conversion */
+#define TIFFTAG_ORIGINALDEFAULTFINALSIZE 51089 /* &default final size of larger original file for this proxy */
+#define TIFFTAG_ORIGINALBESTQUALITYFINALSIZE 51090 /* &best quality final size of larger original file for this proxy */
+#define TIFFTAG_ORIGINALDEFAULTCROPSIZE 51091 /* &the default crop size of larger original file for this proxy */
+#define TIFFTAG_NEWRAWIMAGEDIGEST 51111 /* &modified MD5 digest of the raw image data */
+#define TIFFTAG_RAWTOPREVIEWGAIN 51112 /* &The gain between the main raw FD and the preview IFD containing this tag */
+
+/* DNG 1.5.0.0 */
+#define TIFFTAG_DEPTHFORMAT 51177 /* &encoding of the depth data in the file */
+#define TIFFTAG_DEPTHNEAR 51178 /* &distance from the camera represented by value 0 in the depth map */
+#define TIFFTAG_DEPTHFAR 51179 /* &distance from the camera represented by the maximum value in the depth map */
+#define TIFFTAG_DEPTHUNITS 51180 /* &measurement units for DepthNear and DepthFar */
+#define TIFFTAG_DEPTHMEASURETYPE 51181 /* &measurement geometry for the depth map */
+#define TIFFTAG_ENHANCEPARAMS 51182 /* &a string that documents how the enhanced image data was processed. */
+
+/* DNG 1.6.0.0 */
+#define TIFFTAG_PROFILEGAINTABLEMAP 52525 /* &spatially varying gain tables that can be applied as starting point */
+#define TIFFTAG_SEMANTICNAME 52526 /* &a string that identifies the semantic mask */
+#define TIFFTAG_SEMANTICINSTANCEID 52528 /* &a string that identifies a specific instance in a semantic mask */
+#define TIFFTAG_MASKSUBAREA 52536 /* &the crop rectangle of this IFD's mask, relative to the main image */
+#define TIFFTAG_RGBTABLES 52543 /* &color transforms to apply to masked image regions */
+#define TIFFTAG_CALIBRATIONILLUMINANT3 52529 /* &the illuminant used for the third set of color calibration tags */
+#define TIFFTAG_COLORMATRIX3 52531 /* &matrix to convert XYZ values to reference camera native color space under CalibrationIlluminant3 */
+#define TIFFTAG_CAMERACALIBRATION3 52530 /* &matrix to transform reference camera native space values to individual camera native space values under CalibrationIlluminant3 */
+#define TIFFTAG_REDUCTIONMATRIX3 52538 /* &dimensionality reduction matrix for use in color conversion to XYZ under CalibrationIlluminant3 */
+#define TIFFTAG_PROFILEHUESATMAPDATA3 52537 /* &the data for the third HSV table */
+#define TIFFTAG_FORWARDMATRIX3 52532 /* &matrix to map white balanced camera colors to XYZ D50 */
+#define TIFFTAG_ILLUMINANTDATA1 52533 /* &data for the first calibration illuminant */
+#define TIFFTAG_ILLUMINANTDATA2 52534 /* &data for the second calibration illuminant */
+#define TIFFTAG_ILLUMINANTDATA3 53535 /* &data for the third calibration illuminant */
+
+/* TIFF/EP */
+#define TIFFTAG_EP_CFAREPEATPATTERNDIM 33421 /* dimensions of CFA pattern */
+#define TIFFTAG_EP_CFAPATTERN 33422 /* color filter array pattern */
+#define TIFFTAG_EP_BATTERYLEVEL 33423 /* battery level (rational or ASCII) */
+#define TIFFTAG_EP_INTERLACE 34857 /* Number of multi-field images */
+/* TIFFTAG_EP_IPTC_NAA and TIFFTAG_RICHTIFFIPTC share the same tag number (33723)
+ * LibTIFF type is UNDEFINED or BYTE, but often times incorrectly specified as LONG,
+ * because TIFF/EP (ISO/DIS 12234-2) specifies type LONG or ASCII. */
+#define TIFFTAG_EP_IPTC_NAA 33723 /* Alias IPTC/NAA Newspaper Association RichTIFF */
+#define TIFFTAG_EP_TIMEZONEOFFSET 34858 /* Time zone offset relative to UTC */
+#define TIFFTAG_EP_SELFTIMERMODE 34859 /* Number of seconds capture was delayed from button press */
+#define TIFFTAG_EP_FLASHENERGY 37387 /* Flash energy, or range if there is uncertainty */
+#define TIFFTAG_EP_SPATIALFREQUENCYRESPONSE 37388 /* Spatial frequency response */
+#define TIFFTAG_EP_NOISE 37389 /* Camera noise measurement values */
+#define TIFFTAG_EP_FOCALPLANEXRESOLUTION 37390 /* Focal plane X resolution */
+#define TIFFTAG_EP_FOCALPLANEYRESOLUTION 37391 /* Focal plane Y resolution */
+#define TIFFTAG_EP_FOCALPLANERESOLUTIONUNIT 37392 /* Focal plane resolution unit */
+#define TIFFTAG_EP_IMAGENUMBER 37393 /* Number of image when several of burst shot stored in same TIFF/EP */
+#define TIFFTAG_EP_SECURITYCLASSIFICATION 37394 /* Security classification */
+#define TIFFTAG_EP_IMAGEHISTORY 37395 /* Record of what has been done to the image */
+#define TIFFTAG_EP_EXPOSUREINDEX 37397 /* Exposure index */
+#define TIFFTAG_EP_STANDARDID 37398 /* TIFF/EP standard version, n.n.n.n */
+#define TIFFTAG_EP_SENSINGMETHOD 37399 /* Type of image sensor */
+/*
+ * TIFF/EP tags equivalent to EXIF tags
+ * Note that TIFF-EP and EXIF use nearly the same metadata tag set, but TIFF-EP stores the tags in IFD 0,
+ * while EXIF store the tags in a separate IFD. Either location is allowed by DNG, but the EXIF location is preferred.
+ */
+#define TIFFTAG_EP_EXPOSURETIME 33434 /* Exposure time */
+#define TIFFTAG_EP_FNUMBER 33437 /* F number */
+#define TIFFTAG_EP_EXPOSUREPROGRAM 34850 /* Exposure program */
+#define TIFFTAG_EP_SPECTRALSENSITIVITY 34852 /* Spectral sensitivity */
+#define TIFFTAG_EP_ISOSPEEDRATINGS 34855 /* ISO speed rating */
+#define TIFFTAG_EP_OECF 34856 /* Optoelectric conversion factor */
+#define TIFFTAG_EP_DATETIMEORIGINAL 36867 /* Date and time of original data generation */
+#define TIFFTAG_EP_COMPRESSEDBITSPERPIXEL 37122 /* Image compression mode */
+#define TIFFTAG_EP_SHUTTERSPEEDVALUE 37377 /* Shutter speed */
+#define TIFFTAG_EP_APERTUREVALUE 37378 /* Aperture */
+#define TIFFTAG_EP_BRIGHTNESSVALUE 37379 /* Brightness */
+#define TIFFTAG_EP_EXPOSUREBIASVALUE 37380 /* Exposure bias */
+#define TIFFTAG_EP_MAXAPERTUREVALUE 37381 /* Maximum lens aperture */
+#define TIFFTAG_EP_SUBJECTDISTANCE 37382 /* Subject distance */
+#define TIFFTAG_EP_METERINGMODE 37383 /* Metering mode */
+#define TIFFTAG_EP_LIGHTSOURCE 37384 /* Light source */
+#define TIFFTAG_EP_FLASH 37385 /* Flash */
+#define TIFFTAG_EP_FOCALLENGTH 37386 /* Lens focal length */
+#define TIFFTAG_EP_SUBJECTLOCATION 37396 /* Subject location (area) */
+
+#define TIFFTAG_RPCCOEFFICIENT 50844 /* Define by GDAL for geospatial georeferencing through RPC: http://geotiff.maptools.org/rpc_prop.html */
+#define TIFFTAG_ALIAS_LAYER_METADATA 50784 /* Alias Sketchbook Pro layer usage description. */
+
+/* GeoTIFF DGIWG */
+#define TIFFTAG_TIFF_RSID 50908 /* https://www.awaresystems.be/imaging/tiff/tifftags/tiff_rsid.html */
+#define TIFFTAG_GEO_METADATA 50909 /* https://www.awaresystems.be/imaging/tiff/tifftags/geo_metadata.html */
+#define TIFFTAG_EXTRACAMERAPROFILES 50933 /* http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec_1.4.0.0.pdf */
+
+/* tag 65535 is an undefined tag used by Eastman Kodak */
+#define TIFFTAG_DCSHUESHIFTVALUES 65535 /* hue shift correction data */
+
+/*
+ * The following are ``pseudo tags'' that can be used to control
+ * codec-specific functionality. These tags are not written to file.
+ * Note that these values start at 0xffff+1 so that they'll never
+ * collide with Aldus-assigned tags.
+ *
+ * If you want your private pseudo tags ``registered'' (i.e. added to
+ * this file), please post a bug report via the tracking system at
+ * http://www.remotesensing.org/libtiff/bugs.html with the appropriate
+ * C definitions to add.
+ */
+#define TIFFTAG_FAXMODE 65536 /* Group 3/4 format control */
+#define FAXMODE_CLASSIC 0x0000 /* default, include RTC */
+#define FAXMODE_NORTC 0x0001 /* no RTC at end of data */
+#define FAXMODE_NOEOL 0x0002 /* no EOL code at end of row */
+#define FAXMODE_BYTEALIGN 0x0004 /* byte align row */
+#define FAXMODE_WORDALIGN 0x0008 /* word align row */
+#define FAXMODE_CLASSF FAXMODE_NORTC /* TIFF Class F */
+#define TIFFTAG_JPEGQUALITY 65537 /* Compression quality level */
+/* Note: quality level is on the IJG 0-100 scale. Default value is 75 */
+#define TIFFTAG_JPEGCOLORMODE 65538 /* Auto RGB<=>YCbCr convert? */
+#define JPEGCOLORMODE_RAW 0x0000 /* no conversion (default) */
+#define JPEGCOLORMODE_RGB 0x0001 /* do auto conversion */
+#define TIFFTAG_JPEGTABLESMODE 65539 /* What to put in JPEGTables */
+#define JPEGTABLESMODE_QUANT 0x0001 /* include quantization tbls */
+#define JPEGTABLESMODE_HUFF 0x0002 /* include Huffman tbls */
+/* Note: default is JPEGTABLESMODE_QUANT | JPEGTABLESMODE_HUFF */
+#define TIFFTAG_FAXFILLFUNC 65540 /* G3/G4 fill function */
+#define TIFFTAG_PIXARLOGDATAFMT 65549 /* PixarLogCodec I/O data sz */
+#define PIXARLOGDATAFMT_8BIT 0 /* regular u_char samples */
+#define PIXARLOGDATAFMT_8BITABGR 1 /* ABGR-order u_chars */
+#define PIXARLOGDATAFMT_11BITLOG 2 /* 11-bit log-encoded (raw) */
+#define PIXARLOGDATAFMT_12BITPICIO 3 /* as per PICIO (1.0==2048) */
+#define PIXARLOGDATAFMT_16BIT 4 /* signed short samples */
+#define PIXARLOGDATAFMT_FLOAT 5 /* IEEE float samples */
+/* 65550-65556 are allocated to Oceana Matrix */
+#define TIFFTAG_DCSIMAGERTYPE 65550 /* imager model & filter */
+#define DCSIMAGERMODEL_M3 0 /* M3 chip (1280 x 1024) */
+#define DCSIMAGERMODEL_M5 1 /* M5 chip (1536 x 1024) */
+#define DCSIMAGERMODEL_M6 2 /* M6 chip (3072 x 2048) */
+#define DCSIMAGERFILTER_IR 0 /* infrared filter */
+#define DCSIMAGERFILTER_MONO 1 /* monochrome filter */
+#define DCSIMAGERFILTER_CFA 2 /* color filter array */
+#define DCSIMAGERFILTER_OTHER 3 /* other filter */
+#define TIFFTAG_DCSINTERPMODE 65551 /* interpolation mode */
+#define DCSINTERPMODE_NORMAL 0x0 /* whole image, default */
+#define DCSINTERPMODE_PREVIEW 0x1 /* preview of image (384x256) */
+#define TIFFTAG_DCSBALANCEARRAY 65552 /* color balance values */
+#define TIFFTAG_DCSCORRECTMATRIX 65553 /* color correction values */
+#define TIFFTAG_DCSGAMMA 65554 /* gamma value */
+#define TIFFTAG_DCSTOESHOULDERPTS 65555 /* toe & shoulder points */
+#define TIFFTAG_DCSCALIBRATIONFD 65556 /* calibration file desc */
+/* Note: quality level is on the ZLIB 1-9 scale. Default value is -1 */
+#define TIFFTAG_ZIPQUALITY 65557 /* compression quality level */
+#define TIFFTAG_PIXARLOGQUALITY 65558 /* PixarLog uses same scale */
+/* 65559 is allocated to Oceana Matrix */
+#define TIFFTAG_DCSCLIPRECTANGLE 65559 /* area of image to acquire */
+#define TIFFTAG_SGILOGDATAFMT 65560 /* SGILog user data format */
+#define SGILOGDATAFMT_FLOAT 0 /* IEEE float samples */
+#define SGILOGDATAFMT_16BIT 1 /* 16-bit samples */
+#define SGILOGDATAFMT_RAW 2 /* uninterpreted data */
+#define SGILOGDATAFMT_8BIT 3 /* 8-bit RGB monitor values */
+#define TIFFTAG_SGILOGENCODE 65561 /* SGILog data encoding control*/
+#define SGILOGENCODE_NODITHER 0 /* do not dither encoded values*/
+#define SGILOGENCODE_RANDITHER 1 /* randomly dither encd values */
+#define TIFFTAG_LZMAPRESET 65562 /* LZMA2 preset (compression level) */
+#define TIFFTAG_PERSAMPLE 65563 /* interface for per sample tags */
+#define PERSAMPLE_MERGED 0 /* present as a single value */
+#define PERSAMPLE_MULTI 1 /* present as multiple values */
+#define TIFFTAG_ZSTD_LEVEL 65564 /* ZSTD compression level */
+#define TIFFTAG_LERC_VERSION 65565 /* LERC version */
+#define LERC_VERSION_2_4 4
+#define TIFFTAG_LERC_ADD_COMPRESSION 65566 /* LERC additional compression */
+#define LERC_ADD_COMPRESSION_NONE 0
+#define LERC_ADD_COMPRESSION_DEFLATE 1
+#define LERC_ADD_COMPRESSION_ZSTD 2
+#define TIFFTAG_LERC_MAXZERROR 65567 /* LERC maximum error */
+#define TIFFTAG_WEBP_LEVEL 65568 /* WebP compression level */
+#define TIFFTAG_WEBP_LOSSLESS 65569 /* WebP lossless/lossy */
+#define TIFFTAG_WEBP_LOSSLESS_EXACT 65571 /* WebP lossless exact mode. Set-only mode. Default is 1. Can be set to 0 to increase compression rate, but R,G,B in areas where alpha = 0 will not be preserved */
+#define TIFFTAG_DEFLATE_SUBCODEC 65570 /* ZIP codec: to get/set the sub-codec to use. Will default to libdeflate when available */
+#define DEFLATE_SUBCODEC_ZLIB 0
+#define DEFLATE_SUBCODEC_LIBDEFLATE 1
+
+/*
+ * EXIF tags
+ */
+#define EXIFTAG_EXPOSURETIME 33434 /* Exposure time */
+#define EXIFTAG_FNUMBER 33437 /* F number */
+#define EXIFTAG_EXPOSUREPROGRAM 34850 /* Exposure program */
+#define EXIFTAG_SPECTRALSENSITIVITY 34852 /* Spectral sensitivity */
+/* After EXIF 2.2.1 ISOSpeedRatings is named PhotographicSensitivity.
+ In addition, while "Count=Any", only 1 count should be used. */
+#define EXIFTAG_ISOSPEEDRATINGS 34855 /* ISO speed rating */
+#define EXIFTAG_PHOTOGRAPHICSENSITIVITY 34855 /* Photographic Sensitivity (new name for tag 34855) */
+#define EXIFTAG_OECF 34856 /* Optoelectric conversion factor */
+#define EXIFTAG_EXIFVERSION 36864 /* Exif version */
+#define EXIFTAG_DATETIMEORIGINAL 36867 /* Date and time of original data generation */
+#define EXIFTAG_DATETIMEDIGITIZED 36868 /* Date and time of digital data generation */
+#define EXIFTAG_COMPONENTSCONFIGURATION 37121 /* Meaning of each component */
+#define EXIFTAG_COMPRESSEDBITSPERPIXEL 37122 /* Image compression mode */
+#define EXIFTAG_SHUTTERSPEEDVALUE 37377 /* Shutter speed */
+#define EXIFTAG_APERTUREVALUE 37378 /* Aperture */
+#define EXIFTAG_BRIGHTNESSVALUE 37379 /* Brightness */
+#define EXIFTAG_EXPOSUREBIASVALUE 37380 /* Exposure bias */
+#define EXIFTAG_MAXAPERTUREVALUE 37381 /* Maximum lens aperture */
+#define EXIFTAG_SUBJECTDISTANCE 37382 /* Subject distance */
+#define EXIFTAG_METERINGMODE 37383 /* Metering mode */
+#define EXIFTAG_LIGHTSOURCE 37384 /* Light source */
+#define EXIFTAG_FLASH 37385 /* Flash */
+#define EXIFTAG_FOCALLENGTH 37386 /* Lens focal length */
+#define EXIFTAG_SUBJECTAREA 37396 /* Subject area */
+#define EXIFTAG_MAKERNOTE 37500 /* Manufacturer notes */
+#define EXIFTAG_USERCOMMENT 37510 /* User comments */
+#define EXIFTAG_SUBSECTIME 37520 /* DateTime subseconds */
+#define EXIFTAG_SUBSECTIMEORIGINAL 37521 /* DateTimeOriginal subseconds */
+#define EXIFTAG_SUBSECTIMEDIGITIZED 37522 /* DateTimeDigitized subseconds */
+#define EXIFTAG_FLASHPIXVERSION 40960 /* Supported Flashpix version */
+#define EXIFTAG_COLORSPACE 40961 /* Color space information */
+#define EXIFTAG_PIXELXDIMENSION 40962 /* Valid image width */
+#define EXIFTAG_PIXELYDIMENSION 40963 /* Valid image height */
+#define EXIFTAG_RELATEDSOUNDFILE 40964 /* Related audio file */
+#define EXIFTAG_FLASHENERGY 41483 /* Flash energy */
+#define EXIFTAG_SPATIALFREQUENCYRESPONSE 41484 /* Spatial frequency response */
+#define EXIFTAG_FOCALPLANEXRESOLUTION 41486 /* Focal plane X resolution */
+#define EXIFTAG_FOCALPLANEYRESOLUTION 41487 /* Focal plane Y resolution */
+#define EXIFTAG_FOCALPLANERESOLUTIONUNIT 41488 /* Focal plane resolution unit */
+#define EXIFTAG_SUBJECTLOCATION 41492 /* Subject location */
+#define EXIFTAG_EXPOSUREINDEX 41493 /* Exposure index */
+#define EXIFTAG_SENSINGMETHOD 41495 /* Sensing method */
+#define EXIFTAG_FILESOURCE 41728 /* File source */
+#define EXIFTAG_SCENETYPE 41729 /* Scene type */
+#define EXIFTAG_CFAPATTERN 41730 /* CFA pattern */
+#define EXIFTAG_CUSTOMRENDERED 41985 /* Custom image processing */
+#define EXIFTAG_EXPOSUREMODE 41986 /* Exposure mode */
+#define EXIFTAG_WHITEBALANCE 41987 /* White balance */
+#define EXIFTAG_DIGITALZOOMRATIO 41988 /* Digital zoom ratio */
+#define EXIFTAG_FOCALLENGTHIN35MMFILM 41989 /* Focal length in 35 mm film */
+#define EXIFTAG_SCENECAPTURETYPE 41990 /* Scene capture type */
+#define EXIFTAG_GAINCONTROL 41991 /* Gain control */
+#define EXIFTAG_CONTRAST 41992 /* Contrast */
+#define EXIFTAG_SATURATION 41993 /* Saturation */
+#define EXIFTAG_SHARPNESS 41994 /* Sharpness */
+#define EXIFTAG_DEVICESETTINGDESCRIPTION 41995 /* Device settings description */
+#define EXIFTAG_SUBJECTDISTANCERANGE 41996 /* Subject distance range */
+#define EXIFTAG_IMAGEUNIQUEID 42016 /* Unique image ID */
+
+/*--: New for EXIF-Version 2.32, May 2019 ... */
+#define EXIFTAG_SENSITIVITYTYPE 34864 /* The SensitivityType tag indicates which one of the parameters of ISO12232 is the PhotographicSensitivity tag. */
+#define EXIFTAG_STANDARDOUTPUTSENSITIVITY 34865 /* This tag indicates the standard output sensitivity value of a camera or input device defined in ISO 12232. */
+#define EXIFTAG_RECOMMENDEDEXPOSUREINDEX 34866 /* recommended exposure index */
+#define EXIFTAG_ISOSPEED 34867 /* ISO speed value */
+#define EXIFTAG_ISOSPEEDLATITUDEYYY 34868 /* ISO speed latitude yyy */
+#define EXIFTAG_ISOSPEEDLATITUDEZZZ 34869 /* ISO speed latitude zzz */
+#define EXIFTAG_OFFSETTIME 36880 /* offset from UTC of the time of DateTime tag. */
+#define EXIFTAG_OFFSETTIMEORIGINAL 36881 /* offset from UTC of the time of DateTimeOriginal tag. */
+#define EXIFTAG_OFFSETTIMEDIGITIZED 36882 /* offset from UTC of the time of DateTimeDigitized tag. */
+#define EXIFTAG_TEMPERATURE 37888 /* Temperature as the ambient situation at the shot in dergee Celsius */
+#define EXIFTAG_HUMIDITY 37889 /* Humidity as the ambient situation at the shot in percent */
+#define EXIFTAG_PRESSURE 37890 /* Pressure as the ambient situation at the shot hecto-Pascal (hPa) */
+#define EXIFTAG_WATERDEPTH 37891 /* WaterDepth as the ambient situation at the shot in meter (m) */
+#define EXIFTAG_ACCELERATION 37892 /* Acceleration (a scalar regardless of direction) as the ambientsituation at the shot in units of mGal (10-5 m/s^2) */
+/* EXIFTAG_CAMERAELEVATIONANGLE: Elevation/depression. angle of the orientation of the camera(imaging optical axis)
+ * as the ambient situation at the shot in degree from -180deg to +180deg. */
+#define EXIFTAG_CAMERAELEVATIONANGLE 37893
+#define EXIFTAG_CAMERAOWNERNAME 42032 /* owner of a camera */
+#define EXIFTAG_BODYSERIALNUMBER 42033 /* serial number of the body of the camera */
+/* EXIFTAG_LENSSPECIFICATION: minimum focal length (in mm), maximum focal length (in mm),minimum F number in the minimum focal length,
+ * and minimum F number in the maximum focal length, */
+#define EXIFTAG_LENSSPECIFICATION 42034
+#define EXIFTAG_LENSMAKE 42035 /* the lens manufacturer */
+#define EXIFTAG_LENSMODEL 42036 /* the lens model name and model number */
+#define EXIFTAG_LENSSERIALNUMBER 42037 /* the serial number of the interchangeable lens */
+#define EXIFTAG_GAMMA 42240 /* value of coefficient gamma */
+#define EXIFTAG_COMPOSITEIMAGE 42080 /* composite image */
+#define EXIFTAG_SOURCEIMAGENUMBEROFCOMPOSITEIMAGE 42081 /* source image number of composite image */
+#define EXIFTAG_SOURCEEXPOSURETIMESOFCOMPOSITEIMAGE 42082 /* source exposure times of composite image */
+
+/*
+ * EXIF-GPS tags (Version 2.31, July 2016)
+ */
+#define GPSTAG_VERSIONID 0 /* Indicates the version of GPSInfoIFD. */
+#define GPSTAG_LATITUDEREF 1 /* Indicates whether the latitude is north or south latitude. */
+#define GPSTAG_LATITUDE 2 /* Indicates the latitude. */
+#define GPSTAG_LONGITUDEREF 3 /* Indicates whether the longitude is east or west longitude. */
+#define GPSTAG_LONGITUDE 4 /* Indicates the longitude. */
+#define GPSTAG_ALTITUDEREF 5 /* Indicates the altitude used as the reference altitude. */
+#define GPSTAG_ALTITUDE 6 /* Indicates the altitude based on the reference in GPSAltitudeRef. */
+#define GPSTAG_TIMESTAMP 7 /*Indicates the time as UTC (Coordinated Universal Time). */
+#define GPSTAG_SATELLITES 8 /*Indicates the GPS satellites used for measurements. */
+#define GPSTAG_STATUS 9 /* Indicates the status of the GPS receiver when the image is recorded. */
+#define GPSTAG_MEASUREMODE 10 /* Indicates the GPS measurement mode. */
+#define GPSTAG_DOP 11 /* Indicates the GPS DOP (data degree of precision). */
+#define GPSTAG_SPEEDREF 12 /* Indicates the unit used to express the GPS receiver speed of movement. */
+#define GPSTAG_SPEED 13 /* Indicates the speed of GPS receiver movement. */
+#define GPSTAG_TRACKREF 14 /* Indicates the reference for giving the direction of GPS receiver movement. */
+#define GPSTAG_TRACK 15 /* Indicates the direction of GPS receiver movement. */
+#define GPSTAG_IMGDIRECTIONREF 16 /* Indicates the reference for giving the direction of the image when it is captured. */
+#define GPSTAG_IMGDIRECTION 17 /* Indicates the direction of the image when it was captured. */
+#define GPSTAG_MAPDATUM 18 /* Indicates the geodetic survey data used by the GPS receiver. (e.g. WGS-84) */
+#define GPSTAG_DESTLATITUDEREF 19 /* Indicates whether the latitude of the destination point is north or south latitude. */
+#define GPSTAG_DESTLATITUDE 20 /* Indicates the latitude of the destination point. */
+#define GPSTAG_DESTLONGITUDEREF 21 /* Indicates whether the longitude of the destination point is east or west longitude. */
+#define GPSTAG_DESTLONGITUDE 22 /* Indicates the longitude of the destination point. */
+#define GPSTAG_DESTBEARINGREF 23 /* Indicates the reference used for giving the bearing to the destination point. */
+#define GPSTAG_DESTBEARING 24 /* Indicates the bearing to the destination point. */
+#define GPSTAG_DESTDISTANCEREF 25 /* Indicates the unit used to express the distance to the destination point. */
+#define GPSTAG_DESTDISTANCE 26 /* Indicates the distance to the destination point. */
+#define GPSTAG_PROCESSINGMETHOD 27 /* A character string recording the name of the method used for location finding. */
+#define GPSTAG_AREAINFORMATION 28 /* A character string recording the name of the GPS area. */
+#define GPSTAG_DATESTAMP 29 /* A character string recording date and time information relative to UTC (Coordinated Universal Time). */
+#define GPSTAG_DIFFERENTIAL 30 /* Indicates whether differential correction is applied to the GPS receiver. */
+#define GPSTAG_GPSHPOSITIONINGERROR 31 /* Indicates horizontal positioning errors in meters. */
+
+#endif /* _TIFF_ */
diff --git a/vcpkg_installed/arm64-osx/include/tiffconf.h b/vcpkg_installed/arm64-osx/include/tiffconf.h
new file mode 100644
index 00000000..97d19e1a
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/tiffconf.h
@@ -0,0 +1,144 @@
+/*
+ Configuration defines for installed libtiff.
+ This file maintained for backward compatibility. Do not use definitions
+ from this file in your programs.
+*/
+
+/* clang-format off */
+/* clang-format disabled because CMake scripts are very sensitive to the
+ * formatting of this file. configure_file variables of type "" are
+ * modified by clang-format and won't be substituted.
+ */
+
+#ifndef _TIFFCONF_
+#define _TIFFCONF_
+
+
+#include
+#include
+#include
+
+
+/* Signed 16-bit type */
+#define TIFF_INT16_T int16_t
+
+/* Signed 32-bit type */
+#define TIFF_INT32_T int32_t
+
+/* Signed 64-bit type */
+#define TIFF_INT64_T int64_t
+
+/* Signed 8-bit type */
+#define TIFF_INT8_T int8_t
+
+/* Unsigned 16-bit type */
+#define TIFF_UINT16_T uint16_t
+
+/* Unsigned 32-bit type */
+#define TIFF_UINT32_T uint32_t
+
+/* Unsigned 64-bit type */
+#define TIFF_UINT64_T uint64_t
+
+/* Unsigned 8-bit type */
+#define TIFF_UINT8_T uint8_t
+
+/* Signed size type */
+#define TIFF_SSIZE_T int64_t
+
+/* Compatibility stuff. */
+
+/* Define as 0 or 1 according to the floating point format supported by the
+ machine */
+#define HAVE_IEEEFP 1
+
+/* The concept of HOST_FILLORDER is broken. Since libtiff 4.5.1
+ * this macro will always be hardcoded to FILLORDER_LSB2MSB on all
+ * architectures, to reflect past long behavior of doing so on x86 architecture.
+ * Note however that the default FillOrder used by libtiff is FILLORDER_MSB2LSB,
+ * as mandated per the TIFF specification.
+ * The influence of HOST_FILLORDER is only when passing the 'H' mode in
+ * TIFFOpen().
+ * You should NOT rely on this macro to decide the CPU endianness!
+ * This macro will be removed in libtiff 4.6
+ */
+#define HOST_FILLORDER FILLORDER_LSB2MSB
+
+/* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian
+ (Intel) */
+#define HOST_BIGENDIAN 0
+
+/* Support CCITT Group 3 & 4 algorithms */
+#define CCITT_SUPPORT 1
+
+/* Support JPEG compression (requires IJG JPEG library) */
+#define JPEG_SUPPORT 1
+
+/* Support JBIG compression (requires JBIG-KIT library) */
+/* #undef JBIG_SUPPORT */
+
+/* Support LERC compression */
+/* #undef LERC_SUPPORT */
+
+/* Support LogLuv high dynamic range encoding */
+#define LOGLUV_SUPPORT 1
+
+/* Support LZW algorithm */
+#define LZW_SUPPORT 1
+
+/* Support NeXT 2-bit RLE algorithm */
+#define NEXT_SUPPORT 1
+
+/* Support Old JPEG compresson (read contrib/ojpeg/README first! Compilation
+ fails with unpatched IJG JPEG library) */
+#define OJPEG_SUPPORT 1
+
+/* Support Macintosh PackBits algorithm */
+#define PACKBITS_SUPPORT 1
+
+/* Support Pixar log-format algorithm (requires Zlib) */
+#define PIXARLOG_SUPPORT 1
+
+/* Support ThunderScan 4-bit RLE algorithm */
+#define THUNDER_SUPPORT 1
+
+/* Support Deflate compression */
+#define ZIP_SUPPORT 1
+
+/* Support libdeflate enhanced compression */
+/* #undef LIBDEFLATE_SUPPORT */
+
+/* Support strip chopping (whether or not to convert single-strip uncompressed
+ images to multiple strips of ~8Kb to reduce memory usage) */
+#define STRIPCHOP_DEFAULT TIFF_STRIPCHOP
+
+/* Enable SubIFD tag (330) support */
+#define SUBIFD_SUPPORT 1
+
+/* Treat extra sample as alpha (default enabled). The RGBA interface will
+ treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA. Many
+ packages produce RGBA files but don't mark the alpha properly. */
+#define DEFAULT_EXTRASAMPLE_AS_ALPHA 1
+
+/* Pick up YCbCr subsampling info from the JPEG data stream to support files
+ lacking the tag (default enabled). */
+#define CHECK_JPEG_YCBCR_SUBSAMPLING 1
+
+/* Support MS MDI magic number files as TIFF */
+#define MDI_SUPPORT 1
+
+/*
+ * Feature support definitions.
+ * XXX: These macros are obsoleted. Don't use them in your apps!
+ * Macros stays here for backward compatibility and should be always defined.
+ */
+#define COLORIMETRY_SUPPORT
+#define YCBCR_SUPPORT
+#define CMYK_SUPPORT
+#define ICC_SUPPORT
+#define PHOTOSHOP_SUPPORT
+#define IPTC_SUPPORT
+
+#endif /* _TIFFCONF_ */
+
+/* clang-format on */
diff --git a/vcpkg_installed/arm64-osx/include/tiffio.h b/vcpkg_installed/arm64-osx/include/tiffio.h
new file mode 100644
index 00000000..20460542
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/tiffio.h
@@ -0,0 +1,653 @@
+/*
+ * Copyright (c) 1988-1997 Sam Leffler
+ * Copyright (c) 1991-1997 Silicon Graphics, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that (i) the above copyright notices and this permission notice appear in
+ * all copies of the software and related documentation, and (ii) the names of
+ * Sam Leffler and Silicon Graphics may not be used in any advertising or
+ * publicity relating to the software without the specific, prior written
+ * permission of Sam Leffler and Silicon Graphics.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#ifndef _TIFFIO_
+#define _TIFFIO_
+
+/*
+ * TIFF I/O Library Definitions.
+ */
+#include "tiff.h"
+#include "tiffvers.h"
+
+/*
+ * TIFF is defined as an incomplete type to hide the
+ * library's internal data structures from clients.
+ */
+typedef struct tiff TIFF;
+
+/*
+ * The following typedefs define the intrinsic size of
+ * data types used in the *exported* interfaces. These
+ * definitions depend on the proper definition of types
+ * in tiff.h. Note also that the varargs interface used
+ * to pass tag types and values uses the types defined in
+ * tiff.h directly.
+ *
+ * NB: ttag_t is unsigned int and not unsigned short because
+ * ANSI C requires that the type before the ellipsis be a
+ * promoted type (i.e. one of int, unsigned int, pointer,
+ * or double) and because we defined pseudo-tags that are
+ * outside the range of legal Aldus-assigned tags.
+ * NB: tsize_t is signed and not unsigned because some functions
+ * return -1.
+ * NB: toff_t is not off_t for many reasons; TIFFs max out at
+ * 32-bit file offsets, and BigTIFF maxes out at 64-bit
+ * offsets being the most important, and to ensure use of
+ * a consistently unsigned type across architectures.
+ * Prior to libtiff 4.0, this was an unsigned 32 bit type.
+ */
+/*
+ * this is the machine addressing size type, only it's signed, so make it
+ * int32_t on 32bit machines, int64_t on 64bit machines
+ */
+typedef TIFF_SSIZE_T tmsize_t;
+#define TIFF_TMSIZE_T_MAX (tmsize_t)(SIZE_MAX >> 1)
+
+typedef uint64_t toff_t; /* file offset */
+/* the following are deprecated and should be replaced by their defining
+ counterparts */
+typedef uint32_t ttag_t; /* directory tag */
+typedef uint32_t tdir_t; /* directory index */
+typedef uint16_t tsample_t; /* sample number */
+typedef uint32_t tstrile_t; /* strip or tile number */
+typedef tstrile_t tstrip_t; /* strip number */
+typedef tstrile_t ttile_t; /* tile number */
+typedef tmsize_t tsize_t; /* i/o size in bytes */
+typedef void *tdata_t; /* image data ref */
+
+#if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32))
+#define __WIN32__
+#endif
+
+/*
+ * On windows you should define USE_WIN32_FILEIO if you are using tif_win32.c
+ * or AVOID_WIN32_FILEIO if you are using something else (like tif_unix.c).
+ *
+ * By default tif_unix.c is assumed.
+ */
+
+#if defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows)
+#if !defined(__CYGWIN) && !defined(AVOID_WIN32_FILEIO) && \
+ !defined(USE_WIN32_FILEIO)
+#define AVOID_WIN32_FILEIO
+#endif
+#endif
+
+#if defined(USE_WIN32_FILEIO)
+#define VC_EXTRALEAN
+#include
+#ifdef __WIN32__
+DECLARE_HANDLE(thandle_t); /* Win32 file handle */
+#else
+typedef HFILE thandle_t; /* client data handle */
+#endif /* __WIN32__ */
+#else
+typedef void *thandle_t; /* client data handle */
+#endif /* USE_WIN32_FILEIO */
+
+/*
+ * Flags to pass to TIFFPrintDirectory to control
+ * printing of data structures that are potentially
+ * very large. Bit-or these flags to enable printing
+ * multiple items.
+ */
+#define TIFFPRINT_NONE 0x0 /* no extra info */
+#define TIFFPRINT_STRIPS 0x1 /* strips/tiles info */
+#define TIFFPRINT_CURVES 0x2 /* color/gray response curves */
+#define TIFFPRINT_COLORMAP 0x4 /* colormap */
+#define TIFFPRINT_JPEGQTABLES 0x100 /* JPEG Q matrices */
+#define TIFFPRINT_JPEGACTABLES 0x200 /* JPEG AC tables */
+#define TIFFPRINT_JPEGDCTABLES 0x200 /* JPEG DC tables */
+
+/*
+ * Colour conversion stuff
+ */
+
+/* reference white */
+#define D65_X0 (95.0470F)
+#define D65_Y0 (100.0F)
+#define D65_Z0 (108.8827F)
+
+#define D50_X0 (96.4250F)
+#define D50_Y0 (100.0F)
+#define D50_Z0 (82.4680F)
+
+/* Structure for holding information about a display device. */
+
+typedef unsigned char TIFFRGBValue; /* 8-bit samples */
+
+typedef struct
+{
+ float d_mat[3][3]; /* XYZ -> luminance matrix */
+ float d_YCR; /* Light o/p for reference white */
+ float d_YCG;
+ float d_YCB;
+ uint32_t d_Vrwr; /* Pixel values for ref. white */
+ uint32_t d_Vrwg;
+ uint32_t d_Vrwb;
+ float d_Y0R; /* Residual light for black pixel */
+ float d_Y0G;
+ float d_Y0B;
+ float d_gammaR; /* Gamma values for the three guns */
+ float d_gammaG;
+ float d_gammaB;
+} TIFFDisplay;
+
+typedef struct
+{ /* YCbCr->RGB support */
+ TIFFRGBValue *clamptab; /* range clamping table */
+ int *Cr_r_tab;
+ int *Cb_b_tab;
+ int32_t *Cr_g_tab;
+ int32_t *Cb_g_tab;
+ int32_t *Y_tab;
+} TIFFYCbCrToRGB;
+
+typedef struct
+{ /* CIE Lab 1976->RGB support */
+ int range; /* Size of conversion table */
+#define CIELABTORGB_TABLE_RANGE 1500
+ float rstep, gstep, bstep;
+ float X0, Y0, Z0; /* Reference white point */
+ TIFFDisplay display;
+ float Yr2r[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yr to r */
+ float Yg2g[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yg to g */
+ float Yb2b[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yb to b */
+} TIFFCIELabToRGB;
+
+/*
+ * RGBA-style image support.
+ */
+typedef struct _TIFFRGBAImage TIFFRGBAImage;
+/*
+ * The image reading and conversion routines invoke
+ * ``put routines'' to copy/image/whatever tiles of
+ * raw image data. A default set of routines are
+ * provided to convert/copy raw image data to 8-bit
+ * packed ABGR format rasters. Applications can supply
+ * alternate routines that unpack the data into a
+ * different format or, for example, unpack the data
+ * and draw the unpacked raster on the display.
+ */
+typedef void (*tileContigRoutine)(TIFFRGBAImage *, uint32_t *, uint32_t,
+ uint32_t, uint32_t, uint32_t, int32_t,
+ int32_t, unsigned char *);
+typedef void (*tileSeparateRoutine)(TIFFRGBAImage *, uint32_t *, uint32_t,
+ uint32_t, uint32_t, uint32_t, int32_t,
+ int32_t, unsigned char *, unsigned char *,
+ unsigned char *, unsigned char *);
+/*
+ * RGBA-reader state.
+ */
+struct _TIFFRGBAImage
+{
+ TIFF *tif; /* image handle */
+ int stoponerr; /* stop on read error */
+ int isContig; /* data is packed/separate */
+ int alpha; /* type of alpha data present */
+ uint32_t width; /* image width */
+ uint32_t height; /* image height */
+ uint16_t bitspersample; /* image bits/sample */
+ uint16_t samplesperpixel; /* image samples/pixel */
+ uint16_t orientation; /* image orientation */
+ uint16_t req_orientation; /* requested orientation */
+ uint16_t photometric; /* image photometric interp */
+ uint16_t *redcmap; /* colormap palette */
+ uint16_t *greencmap;
+ uint16_t *bluecmap;
+ /* get image data routine */
+ int (*get)(TIFFRGBAImage *, uint32_t *, uint32_t, uint32_t);
+ /* put decoded strip/tile */
+ union
+ {
+ void (*any)(TIFFRGBAImage *);
+ tileContigRoutine contig;
+ tileSeparateRoutine separate;
+ } put;
+ TIFFRGBValue *Map; /* sample mapping array */
+ uint32_t **BWmap; /* black&white map */
+ uint32_t **PALmap; /* palette image map */
+ TIFFYCbCrToRGB *ycbcr; /* YCbCr conversion state */
+ TIFFCIELabToRGB *cielab; /* CIE L*a*b conversion state */
+
+ uint8_t *UaToAa; /* Unassociated alpha to associated alpha conversion LUT */
+ uint8_t *Bitdepth16To8; /* LUT for conversion from 16bit to 8bit values */
+
+ int row_offset;
+ int col_offset;
+};
+
+/*
+ * Macros for extracting components from the
+ * packed ABGR form returned by TIFFReadRGBAImage.
+ */
+#define TIFFGetR(abgr) ((abgr)&0xff)
+#define TIFFGetG(abgr) (((abgr) >> 8) & 0xff)
+#define TIFFGetB(abgr) (((abgr) >> 16) & 0xff)
+#define TIFFGetA(abgr) (((abgr) >> 24) & 0xff)
+
+/*
+ * A CODEC is a software package that implements decoding,
+ * encoding, or decoding+encoding of a compression algorithm.
+ * The library provides a collection of builtin codecs.
+ * More codecs may be registered through calls to the library
+ * and/or the builtin implementations may be overridden.
+ */
+typedef int (*TIFFInitMethod)(TIFF *, int);
+typedef struct
+{
+ char *name;
+ uint16_t scheme;
+ TIFFInitMethod init;
+} TIFFCodec;
+
+typedef struct
+{
+ uint32_t uNum;
+ uint32_t uDenom;
+} TIFFRational_t;
+
+#include
+#include
+
+/* share internal LogLuv conversion routines? */
+#ifndef LOGLUV_PUBLIC
+#define LOGLUV_PUBLIC 1
+#endif
+
+#if defined(__GNUC__) || defined(__clang__) || defined(__attribute__)
+#define TIFF_ATTRIBUTE(x) __attribute__(x)
+#else
+#define TIFF_ATTRIBUTE(x) /*nothing*/
+#endif
+
+#if defined(c_plusplus) || defined(__cplusplus)
+extern "C"
+{
+#endif
+ typedef void (*TIFFErrorHandler)(const char *, const char *, va_list);
+ typedef void (*TIFFErrorHandlerExt)(thandle_t, const char *, const char *,
+ va_list);
+ typedef int (*TIFFErrorHandlerExtR)(TIFF *, void *user_data, const char *,
+ const char *, va_list);
+ typedef tmsize_t (*TIFFReadWriteProc)(thandle_t, void *, tmsize_t);
+ typedef toff_t (*TIFFSeekProc)(thandle_t, toff_t, int);
+ typedef int (*TIFFCloseProc)(thandle_t);
+ typedef toff_t (*TIFFSizeProc)(thandle_t);
+ typedef int (*TIFFMapFileProc)(thandle_t, void **base, toff_t *size);
+ typedef void (*TIFFUnmapFileProc)(thandle_t, void *base, toff_t size);
+ typedef void (*TIFFExtendProc)(TIFF *);
+
+ extern const char *TIFFGetVersion(void);
+
+ extern const TIFFCodec *TIFFFindCODEC(uint16_t);
+ extern TIFFCodec *TIFFRegisterCODEC(uint16_t, const char *, TIFFInitMethod);
+ extern void TIFFUnRegisterCODEC(TIFFCodec *);
+ extern int TIFFIsCODECConfigured(uint16_t);
+ extern TIFFCodec *TIFFGetConfiguredCODECs(void);
+
+ /*
+ * Auxiliary functions.
+ */
+
+ extern void *_TIFFmalloc(tmsize_t s);
+ extern void *_TIFFcalloc(tmsize_t nmemb, tmsize_t siz);
+ extern void *_TIFFrealloc(void *p, tmsize_t s);
+ extern void _TIFFmemset(void *p, int v, tmsize_t c);
+ extern void _TIFFmemcpy(void *d, const void *s, tmsize_t c);
+ extern int _TIFFmemcmp(const void *p1, const void *p2, tmsize_t c);
+ extern void _TIFFfree(void *p);
+
+ /*
+ ** Stuff, related to tag handling and creating custom tags.
+ */
+ extern int TIFFGetTagListCount(TIFF *);
+ extern uint32_t TIFFGetTagListEntry(TIFF *, int tag_index);
+
+#define TIFF_ANY TIFF_NOTYPE /* for field descriptor searching */
+#define TIFF_VARIABLE -1 /* marker for variable length tags */
+#define TIFF_SPP -2 /* marker for SamplesPerPixel tags */
+#define TIFF_VARIABLE2 -3 /* marker for uint32_t var-length tags */
+
+#define FIELD_CUSTOM 65
+
+ typedef struct _TIFFField TIFFField;
+ typedef struct _TIFFFieldArray TIFFFieldArray;
+
+ extern const TIFFField *TIFFFindField(TIFF *, uint32_t, TIFFDataType);
+ extern const TIFFField *TIFFFieldWithTag(TIFF *, uint32_t);
+ extern const TIFFField *TIFFFieldWithName(TIFF *, const char *);
+
+ extern uint32_t TIFFFieldTag(const TIFFField *);
+ extern const char *TIFFFieldName(const TIFFField *);
+ extern TIFFDataType TIFFFieldDataType(const TIFFField *);
+ extern int TIFFFieldPassCount(const TIFFField *);
+ extern int TIFFFieldReadCount(const TIFFField *);
+ extern int TIFFFieldWriteCount(const TIFFField *);
+ extern int
+ TIFFFieldSetGetSize(const TIFFField *); /* returns internal storage size of
+ TIFFSetGetFieldType in bytes. */
+ extern int TIFFFieldSetGetCountSize(
+ const TIFFField *); /* returns size of count parameter 0=none,
+ 2=uint16_t, 4=uint32_t */
+ extern int TIFFFieldIsAnonymous(const TIFFField *);
+
+ typedef int (*TIFFVSetMethod)(TIFF *, uint32_t, va_list);
+ typedef int (*TIFFVGetMethod)(TIFF *, uint32_t, va_list);
+ typedef void (*TIFFPrintMethod)(TIFF *, FILE *, long);
+
+ typedef struct
+ {
+ TIFFVSetMethod vsetfield; /* tag set routine */
+ TIFFVGetMethod vgetfield; /* tag get routine */
+ TIFFPrintMethod printdir; /* directory print routine */
+ } TIFFTagMethods;
+
+ extern TIFFTagMethods *TIFFAccessTagMethods(TIFF *);
+ extern void *TIFFGetClientInfo(TIFF *, const char *);
+ extern void TIFFSetClientInfo(TIFF *, void *, const char *);
+
+ extern void TIFFCleanup(TIFF *tif);
+ extern void TIFFClose(TIFF *tif);
+ extern int TIFFFlush(TIFF *tif);
+ extern int TIFFFlushData(TIFF *tif);
+ extern int TIFFGetField(TIFF *tif, uint32_t tag, ...);
+ extern int TIFFVGetField(TIFF *tif, uint32_t tag, va_list ap);
+ extern int TIFFGetFieldDefaulted(TIFF *tif, uint32_t tag, ...);
+ extern int TIFFVGetFieldDefaulted(TIFF *tif, uint32_t tag, va_list ap);
+ extern int TIFFReadDirectory(TIFF *tif);
+ extern int TIFFReadCustomDirectory(TIFF *tif, toff_t diroff,
+ const TIFFFieldArray *infoarray);
+ extern int TIFFReadEXIFDirectory(TIFF *tif, toff_t diroff);
+ extern int TIFFReadGPSDirectory(TIFF *tif, toff_t diroff);
+ extern uint64_t TIFFScanlineSize64(TIFF *tif);
+ extern tmsize_t TIFFScanlineSize(TIFF *tif);
+ extern uint64_t TIFFRasterScanlineSize64(TIFF *tif);
+ extern tmsize_t TIFFRasterScanlineSize(TIFF *tif);
+ extern uint64_t TIFFStripSize64(TIFF *tif);
+ extern tmsize_t TIFFStripSize(TIFF *tif);
+ extern uint64_t TIFFRawStripSize64(TIFF *tif, uint32_t strip);
+ extern tmsize_t TIFFRawStripSize(TIFF *tif, uint32_t strip);
+ extern uint64_t TIFFVStripSize64(TIFF *tif, uint32_t nrows);
+ extern tmsize_t TIFFVStripSize(TIFF *tif, uint32_t nrows);
+ extern uint64_t TIFFTileRowSize64(TIFF *tif);
+ extern tmsize_t TIFFTileRowSize(TIFF *tif);
+ extern uint64_t TIFFTileSize64(TIFF *tif);
+ extern tmsize_t TIFFTileSize(TIFF *tif);
+ extern uint64_t TIFFVTileSize64(TIFF *tif, uint32_t nrows);
+ extern tmsize_t TIFFVTileSize(TIFF *tif, uint32_t nrows);
+ extern uint32_t TIFFDefaultStripSize(TIFF *tif, uint32_t request);
+ extern void TIFFDefaultTileSize(TIFF *, uint32_t *, uint32_t *);
+ extern int TIFFFileno(TIFF *);
+ extern int TIFFSetFileno(TIFF *, int);
+ extern thandle_t TIFFClientdata(TIFF *);
+ extern thandle_t TIFFSetClientdata(TIFF *, thandle_t);
+ extern int TIFFGetMode(TIFF *);
+ extern int TIFFSetMode(TIFF *, int);
+ extern int TIFFIsTiled(TIFF *);
+ extern int TIFFIsByteSwapped(TIFF *);
+ extern int TIFFIsUpSampled(TIFF *);
+ extern int TIFFIsMSB2LSB(TIFF *);
+ extern int TIFFIsBigEndian(TIFF *);
+ extern int TIFFIsBigTIFF(TIFF *);
+ extern TIFFReadWriteProc TIFFGetReadProc(TIFF *);
+ extern TIFFReadWriteProc TIFFGetWriteProc(TIFF *);
+ extern TIFFSeekProc TIFFGetSeekProc(TIFF *);
+ extern TIFFCloseProc TIFFGetCloseProc(TIFF *);
+ extern TIFFSizeProc TIFFGetSizeProc(TIFF *);
+ extern TIFFMapFileProc TIFFGetMapFileProc(TIFF *);
+ extern TIFFUnmapFileProc TIFFGetUnmapFileProc(TIFF *);
+ extern uint32_t TIFFCurrentRow(TIFF *);
+ extern tdir_t TIFFCurrentDirectory(TIFF *);
+ extern tdir_t TIFFNumberOfDirectories(TIFF *);
+ extern uint64_t TIFFCurrentDirOffset(TIFF *);
+ extern uint32_t TIFFCurrentStrip(TIFF *);
+ extern uint32_t TIFFCurrentTile(TIFF *tif);
+ extern int TIFFReadBufferSetup(TIFF *tif, void *bp, tmsize_t size);
+ extern int TIFFWriteBufferSetup(TIFF *tif, void *bp, tmsize_t size);
+ extern int TIFFSetupStrips(TIFF *);
+ extern int TIFFWriteCheck(TIFF *, int, const char *);
+ extern void TIFFFreeDirectory(TIFF *);
+ extern int TIFFCreateDirectory(TIFF *);
+ extern int TIFFCreateCustomDirectory(TIFF *, const TIFFFieldArray *);
+ extern int TIFFCreateEXIFDirectory(TIFF *);
+ extern int TIFFCreateGPSDirectory(TIFF *);
+ extern int TIFFLastDirectory(TIFF *);
+ extern int TIFFSetDirectory(TIFF *, tdir_t);
+ extern int TIFFSetSubDirectory(TIFF *, uint64_t);
+ extern int TIFFUnlinkDirectory(TIFF *, tdir_t);
+ extern int TIFFSetField(TIFF *, uint32_t, ...);
+ extern int TIFFVSetField(TIFF *, uint32_t, va_list);
+ extern int TIFFUnsetField(TIFF *, uint32_t);
+ extern int TIFFWriteDirectory(TIFF *);
+ extern int TIFFWriteCustomDirectory(TIFF *, uint64_t *);
+ extern int TIFFCheckpointDirectory(TIFF *);
+ extern int TIFFRewriteDirectory(TIFF *);
+ extern int TIFFDeferStrileArrayWriting(TIFF *);
+ extern int TIFFForceStrileArrayWriting(TIFF *);
+
+#if defined(c_plusplus) || defined(__cplusplus)
+ extern void TIFFPrintDirectory(TIFF *, FILE *, long = 0);
+ extern int TIFFReadScanline(TIFF *tif, void *buf, uint32_t row,
+ uint16_t sample = 0);
+ extern int TIFFWriteScanline(TIFF *tif, void *buf, uint32_t row,
+ uint16_t sample = 0);
+ extern int TIFFReadRGBAImage(TIFF *, uint32_t, uint32_t, uint32_t *,
+ int = 0);
+ extern int TIFFReadRGBAImageOriented(TIFF *, uint32_t, uint32_t, uint32_t *,
+ int = ORIENTATION_BOTLEFT, int = 0);
+#else
+extern void TIFFPrintDirectory(TIFF *, FILE *, long);
+extern int TIFFReadScanline(TIFF *tif, void *buf, uint32_t row,
+ uint16_t sample);
+extern int TIFFWriteScanline(TIFF *tif, void *buf, uint32_t row,
+ uint16_t sample);
+extern int TIFFReadRGBAImage(TIFF *, uint32_t, uint32_t, uint32_t *, int);
+extern int TIFFReadRGBAImageOriented(TIFF *, uint32_t, uint32_t, uint32_t *,
+ int, int);
+#endif
+
+ extern int TIFFReadRGBAStrip(TIFF *, uint32_t, uint32_t *);
+ extern int TIFFReadRGBATile(TIFF *, uint32_t, uint32_t, uint32_t *);
+ extern int TIFFReadRGBAStripExt(TIFF *, uint32_t, uint32_t *,
+ int stop_on_error);
+ extern int TIFFReadRGBATileExt(TIFF *, uint32_t, uint32_t, uint32_t *,
+ int stop_on_error);
+ extern int TIFFRGBAImageOK(TIFF *, char[1024]);
+ extern int TIFFRGBAImageBegin(TIFFRGBAImage *, TIFF *, int, char[1024]);
+ extern int TIFFRGBAImageGet(TIFFRGBAImage *, uint32_t *, uint32_t,
+ uint32_t);
+ extern void TIFFRGBAImageEnd(TIFFRGBAImage *);
+
+ extern const char *TIFFFileName(TIFF *);
+ extern const char *TIFFSetFileName(TIFF *, const char *);
+ extern void TIFFError(const char *, const char *, ...)
+ TIFF_ATTRIBUTE((__format__(__printf__, 2, 3)));
+ extern void TIFFErrorExt(thandle_t, const char *, const char *, ...)
+ TIFF_ATTRIBUTE((__format__(__printf__, 3, 4)));
+ extern void TIFFWarning(const char *, const char *, ...)
+ TIFF_ATTRIBUTE((__format__(__printf__, 2, 3)));
+ extern void TIFFWarningExt(thandle_t, const char *, const char *, ...)
+ TIFF_ATTRIBUTE((__format__(__printf__, 3, 4)));
+ extern TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler);
+ extern TIFFErrorHandlerExt TIFFSetErrorHandlerExt(TIFFErrorHandlerExt);
+ extern TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler);
+ extern TIFFErrorHandlerExt TIFFSetWarningHandlerExt(TIFFErrorHandlerExt);
+
+ extern void TIFFWarningExtR(TIFF *, const char *, const char *, ...)
+ TIFF_ATTRIBUTE((__format__(__printf__, 3, 4)));
+ extern void TIFFErrorExtR(TIFF *, const char *, const char *, ...)
+ TIFF_ATTRIBUTE((__format__(__printf__, 3, 4)));
+
+ typedef struct TIFFOpenOptions TIFFOpenOptions;
+ extern TIFFOpenOptions *TIFFOpenOptionsAlloc(void);
+ extern void TIFFOpenOptionsFree(TIFFOpenOptions *);
+ extern void
+ TIFFOpenOptionsSetMaxSingleMemAlloc(TIFFOpenOptions *opts,
+ tmsize_t max_single_mem_alloc);
+ extern void
+ TIFFOpenOptionsSetErrorHandlerExtR(TIFFOpenOptions *opts,
+ TIFFErrorHandlerExtR handler,
+ void *errorhandler_user_data);
+ extern void
+ TIFFOpenOptionsSetWarningHandlerExtR(TIFFOpenOptions *opts,
+ TIFFErrorHandlerExtR handler,
+ void *warnhandler_user_data);
+
+ extern TIFF *TIFFOpen(const char *, const char *);
+ extern TIFF *TIFFOpenExt(const char *, const char *, TIFFOpenOptions *opts);
+#ifdef __WIN32__
+ extern TIFF *TIFFOpenW(const wchar_t *, const char *);
+ extern TIFF *TIFFOpenWExt(const wchar_t *, const char *,
+ TIFFOpenOptions *opts);
+#endif /* __WIN32__ */
+ extern TIFF *TIFFFdOpen(int, const char *, const char *);
+ extern TIFF *TIFFFdOpenExt(int, const char *, const char *,
+ TIFFOpenOptions *opts);
+ extern TIFF *TIFFClientOpen(const char *, const char *, thandle_t,
+ TIFFReadWriteProc, TIFFReadWriteProc,
+ TIFFSeekProc, TIFFCloseProc, TIFFSizeProc,
+ TIFFMapFileProc, TIFFUnmapFileProc);
+ extern TIFF *TIFFClientOpenExt(const char *, const char *, thandle_t,
+ TIFFReadWriteProc, TIFFReadWriteProc,
+ TIFFSeekProc, TIFFCloseProc, TIFFSizeProc,
+ TIFFMapFileProc, TIFFUnmapFileProc,
+ TIFFOpenOptions *opts);
+ extern TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc);
+ extern uint32_t TIFFComputeTile(TIFF *tif, uint32_t x, uint32_t y,
+ uint32_t z, uint16_t s);
+ extern int TIFFCheckTile(TIFF *tif, uint32_t x, uint32_t y, uint32_t z,
+ uint16_t s);
+ extern uint32_t TIFFNumberOfTiles(TIFF *);
+ extern tmsize_t TIFFReadTile(TIFF *tif, void *buf, uint32_t x, uint32_t y,
+ uint32_t z, uint16_t s);
+ extern tmsize_t TIFFWriteTile(TIFF *tif, void *buf, uint32_t x, uint32_t y,
+ uint32_t z, uint16_t s);
+ extern uint32_t TIFFComputeStrip(TIFF *, uint32_t, uint16_t);
+ extern uint32_t TIFFNumberOfStrips(TIFF *);
+ extern tmsize_t TIFFReadEncodedStrip(TIFF *tif, uint32_t strip, void *buf,
+ tmsize_t size);
+ extern tmsize_t TIFFReadRawStrip(TIFF *tif, uint32_t strip, void *buf,
+ tmsize_t size);
+ extern tmsize_t TIFFReadEncodedTile(TIFF *tif, uint32_t tile, void *buf,
+ tmsize_t size);
+ extern tmsize_t TIFFReadRawTile(TIFF *tif, uint32_t tile, void *buf,
+ tmsize_t size);
+ extern int TIFFReadFromUserBuffer(TIFF *tif, uint32_t strile, void *inbuf,
+ tmsize_t insize, void *outbuf,
+ tmsize_t outsize);
+ extern tmsize_t TIFFWriteEncodedStrip(TIFF *tif, uint32_t strip, void *data,
+ tmsize_t cc);
+ extern tmsize_t TIFFWriteRawStrip(TIFF *tif, uint32_t strip, void *data,
+ tmsize_t cc);
+ extern tmsize_t TIFFWriteEncodedTile(TIFF *tif, uint32_t tile, void *data,
+ tmsize_t cc);
+ extern tmsize_t TIFFWriteRawTile(TIFF *tif, uint32_t tile, void *data,
+ tmsize_t cc);
+ extern int TIFFDataWidth(
+ TIFFDataType); /* table of tag datatype widths within TIFF file. */
+ extern void TIFFSetWriteOffset(TIFF *tif, toff_t off);
+ extern void TIFFSwabShort(uint16_t *);
+ extern void TIFFSwabLong(uint32_t *);
+ extern void TIFFSwabLong8(uint64_t *);
+ extern void TIFFSwabFloat(float *);
+ extern void TIFFSwabDouble(double *);
+ extern void TIFFSwabArrayOfShort(uint16_t *wp, tmsize_t n);
+ extern void TIFFSwabArrayOfTriples(uint8_t *tp, tmsize_t n);
+ extern void TIFFSwabArrayOfLong(uint32_t *lp, tmsize_t n);
+ extern void TIFFSwabArrayOfLong8(uint64_t *lp, tmsize_t n);
+ extern void TIFFSwabArrayOfFloat(float *fp, tmsize_t n);
+ extern void TIFFSwabArrayOfDouble(double *dp, tmsize_t n);
+ extern void TIFFReverseBits(uint8_t *cp, tmsize_t n);
+ extern const unsigned char *TIFFGetBitRevTable(int);
+
+ extern uint64_t TIFFGetStrileOffset(TIFF *tif, uint32_t strile);
+ extern uint64_t TIFFGetStrileByteCount(TIFF *tif, uint32_t strile);
+ extern uint64_t TIFFGetStrileOffsetWithErr(TIFF *tif, uint32_t strile,
+ int *pbErr);
+ extern uint64_t TIFFGetStrileByteCountWithErr(TIFF *tif, uint32_t strile,
+ int *pbErr);
+
+#ifdef LOGLUV_PUBLIC
+#define U_NEU 0.210526316
+#define V_NEU 0.473684211
+#define UVSCALE 410.
+ extern double LogL16toY(int);
+ extern double LogL10toY(int);
+ extern void XYZtoRGB24(float *, uint8_t *);
+ extern int uv_decode(double *, double *, int);
+ extern void LogLuv24toXYZ(uint32_t, float *);
+ extern void LogLuv32toXYZ(uint32_t, float *);
+#if defined(c_plusplus) || defined(__cplusplus)
+ extern int LogL16fromY(double, int = SGILOGENCODE_NODITHER);
+ extern int LogL10fromY(double, int = SGILOGENCODE_NODITHER);
+ extern int uv_encode(double, double, int = SGILOGENCODE_NODITHER);
+ extern uint32_t LogLuv24fromXYZ(float *, int = SGILOGENCODE_NODITHER);
+ extern uint32_t LogLuv32fromXYZ(float *, int = SGILOGENCODE_NODITHER);
+#else
+ extern int LogL16fromY(double, int);
+ extern int LogL10fromY(double, int);
+ extern int uv_encode(double, double, int);
+ extern uint32_t LogLuv24fromXYZ(float *, int);
+ extern uint32_t LogLuv32fromXYZ(float *, int);
+#endif
+#endif /* LOGLUV_PUBLIC */
+
+ extern int TIFFCIELabToRGBInit(TIFFCIELabToRGB *, const TIFFDisplay *,
+ float *);
+ extern void TIFFCIELabToXYZ(TIFFCIELabToRGB *, uint32_t, int32_t, int32_t,
+ float *, float *, float *);
+ extern void TIFFXYZToRGB(TIFFCIELabToRGB *, float, float, float, uint32_t *,
+ uint32_t *, uint32_t *);
+
+ extern int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB *, float *, float *);
+ extern void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *, uint32_t, int32_t, int32_t,
+ uint32_t *, uint32_t *, uint32_t *);
+
+ /****************************************************************************
+ * O B S O L E T E D I N T E R F A C E S
+ *
+ * Don't use this stuff in your applications, it may be removed in the
+ *future libtiff versions.
+ ****************************************************************************/
+ typedef struct
+ {
+ ttag_t field_tag; /* field's tag */
+ short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */
+ short field_writecount; /* write count/TIFF_VARIABLE */
+ TIFFDataType field_type; /* type of associated data */
+ unsigned short field_bit; /* bit in fieldsset bit vector */
+ unsigned char field_oktochange; /* if true, can change while writing */
+ unsigned char field_passcount; /* if true, pass dir count on set */
+ char *field_name; /* ASCII name */
+ } TIFFFieldInfo;
+
+ extern int TIFFMergeFieldInfo(TIFF *, const TIFFFieldInfo[], uint32_t);
+
+#if defined(c_plusplus) || defined(__cplusplus)
+}
+#endif
+
+#endif /* _TIFFIO_ */
diff --git a/vcpkg_installed/arm64-osx/include/tiffvers.h b/vcpkg_installed/arm64-osx/include/tiffvers.h
new file mode 100644
index 00000000..4630580d
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/tiffvers.h
@@ -0,0 +1,36 @@
+/* tiffvers.h version information is updated according to version information
+ * in configure.ac */
+
+/* clang-format off */
+
+/* clang-format disabled because FindTIFF.cmake is very sensitive to the
+ * formatting of below line being a single line.
+ * Furthermore, configure_file variables of type "" are
+ * modified by clang-format and won't be substituted by CMake.
+ */
+#define TIFFLIB_VERSION_STR "LIBTIFF, Version 4.6.0\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc."
+/*
+ * This define can be used in code that requires
+ * compilation-related definitions specific to a
+ * version or versions of the library. Runtime
+ * version checking should be done based on the
+ * string returned by TIFFGetVersion.
+ */
+#define TIFFLIB_VERSION 20230908
+
+/* The following defines have been added in 4.5.0 */
+#define TIFFLIB_MAJOR_VERSION 4
+#define TIFFLIB_MINOR_VERSION 6
+#define TIFFLIB_MICRO_VERSION 0
+#define TIFFLIB_VERSION_STR_MAJ_MIN_MIC "4.6.0"
+
+/* Macro added in 4.5.0. Returns TRUE if the current libtiff version is
+ * greater or equal to major.minor.micro
+ */
+#define TIFFLIB_AT_LEAST(major, minor, micro) \
+ (TIFFLIB_MAJOR_VERSION > (major) || \
+ (TIFFLIB_MAJOR_VERSION == (major) && TIFFLIB_MINOR_VERSION > (minor)) || \
+ (TIFFLIB_MAJOR_VERSION == (major) && TIFFLIB_MINOR_VERSION == (minor) && \
+ TIFFLIB_MICRO_VERSION >= (micro)))
+
+/* clang-format on */
diff --git a/vcpkg_installed/arm64-osx/include/turbojpeg.h b/vcpkg_installed/arm64-osx/include/turbojpeg.h
new file mode 100644
index 00000000..68b88a41
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/turbojpeg.h
@@ -0,0 +1,2328 @@
+/*
+ * Copyright (C)2009-2015, 2017, 2020-2023 D. R. Commander.
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the libjpeg-turbo Project nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __TURBOJPEG_H__
+#define __TURBOJPEG_H__
+
+#include
+
+#if defined(_WIN32) && defined(DLLDEFINE)
+#define DLLEXPORT __declspec(dllexport)
+#else
+#define DLLEXPORT
+#endif
+#define DLLCALL
+
+
+/**
+ * @addtogroup TurboJPEG
+ * TurboJPEG API. This API provides an interface for generating, decoding, and
+ * transforming planar YUV and JPEG images in memory.
+ *
+ * @anchor YUVnotes
+ * YUV Image Format Notes
+ * ----------------------
+ * Technically, the JPEG format uses the YCbCr colorspace (which is technically
+ * not a colorspace but a color transform), but per the convention of the
+ * digital video community, the TurboJPEG API uses "YUV" to refer to an image
+ * format consisting of Y, Cb, and Cr image planes.
+ *
+ * Each plane is simply a 2D array of bytes, each byte representing the value
+ * of one of the components (Y, Cb, or Cr) at a particular location in the
+ * image. The width and height of each plane are determined by the image
+ * width, height, and level of chrominance subsampling. The luminance plane
+ * width is the image width padded to the nearest multiple of the horizontal
+ * subsampling factor (1 in the case of 4:4:4, grayscale, 4:4:0, or 4:4:1; 2 in
+ * the case of 4:2:2 or 4:2:0; 4 in the case of 4:1:1.) Similarly, the
+ * luminance plane height is the image height padded to the nearest multiple of
+ * the vertical subsampling factor (1 in the case of 4:4:4, 4:2:2, grayscale,
+ * or 4:1:1; 2 in the case of 4:2:0 or 4:4:0; 4 in the case of 4:4:1.) This is
+ * irrespective of any additional padding that may be specified as an argument
+ * to the various YUV functions. The chrominance plane width is equal to the
+ * luminance plane width divided by the horizontal subsampling factor, and the
+ * chrominance plane height is equal to the luminance plane height divided by
+ * the vertical subsampling factor.
+ *
+ * For example, if the source image is 35 x 35 pixels and 4:2:2 subsampling is
+ * used, then the luminance plane would be 36 x 35 bytes, and each of the
+ * chrominance planes would be 18 x 35 bytes. If you specify a row alignment
+ * of 4 bytes on top of this, then the luminance plane would be 36 x 35 bytes,
+ * and each of the chrominance planes would be 20 x 35 bytes.
+ *
+ * @{
+ */
+
+
+/**
+ * The number of initialization options
+ */
+#define TJ_NUMINIT 3
+
+/**
+ * Initialization options.
+ */
+enum TJINIT {
+ /**
+ * Initialize the TurboJPEG instance for compression.
+ */
+ TJINIT_COMPRESS,
+ /**
+ * Initialize the TurboJPEG instance for decompression.
+ */
+ TJINIT_DECOMPRESS,
+ /**
+ * Initialize the TurboJPEG instance for lossless transformation (both
+ * compression and decompression.)
+ */
+ TJINIT_TRANSFORM
+};
+
+
+/**
+ * The number of chrominance subsampling options
+ */
+#define TJ_NUMSAMP 7
+
+/**
+ * Chrominance subsampling options.
+ * When pixels are converted from RGB to YCbCr (see #TJCS_YCbCr) or from CMYK
+ * to YCCK (see #TJCS_YCCK) as part of the JPEG compression process, some of
+ * the Cb and Cr (chrominance) components can be discarded or averaged together
+ * to produce a smaller image with little perceptible loss of image clarity.
+ * (The human eye is more sensitive to small changes in brightness than to
+ * small changes in color.) This is called "chrominance subsampling".
+ */
+enum TJSAMP {
+ /**
+ * 4:4:4 chrominance subsampling (no chrominance subsampling). The JPEG or
+ * YUV image will contain one chrominance component for every pixel in the
+ * source image.
+ */
+ TJSAMP_444,
+ /**
+ * 4:2:2 chrominance subsampling. The JPEG or YUV image will contain one
+ * chrominance component for every 2x1 block of pixels in the source image.
+ */
+ TJSAMP_422,
+ /**
+ * 4:2:0 chrominance subsampling. The JPEG or YUV image will contain one
+ * chrominance component for every 2x2 block of pixels in the source image.
+ */
+ TJSAMP_420,
+ /**
+ * Grayscale. The JPEG or YUV image will contain no chrominance components.
+ */
+ TJSAMP_GRAY,
+ /**
+ * 4:4:0 chrominance subsampling. The JPEG or YUV image will contain one
+ * chrominance component for every 1x2 block of pixels in the source image.
+ *
+ * @note 4:4:0 subsampling is not fully accelerated in libjpeg-turbo.
+ */
+ TJSAMP_440,
+ /**
+ * 4:1:1 chrominance subsampling. The JPEG or YUV image will contain one
+ * chrominance component for every 4x1 block of pixels in the source image.
+ * JPEG images compressed with 4:1:1 subsampling will be almost exactly the
+ * same size as those compressed with 4:2:0 subsampling, and in the
+ * aggregate, both subsampling methods produce approximately the same
+ * perceptual quality. However, 4:1:1 is better able to reproduce sharp
+ * horizontal features.
+ *
+ * @note 4:1:1 subsampling is not fully accelerated in libjpeg-turbo.
+ */
+ TJSAMP_411,
+ /**
+ * 4:4:1 chrominance subsampling. The JPEG or YUV image will contain one
+ * chrominance component for every 1x4 block of pixels in the source image.
+ * JPEG images compressed with 4:4:1 subsampling will be almost exactly the
+ * same size as those compressed with 4:2:0 subsampling, and in the
+ * aggregate, both subsampling methods produce approximately the same
+ * perceptual quality. However, 4:4:1 is better able to reproduce sharp
+ * vertical features.
+ *
+ * @note 4:4:1 subsampling is not fully accelerated in libjpeg-turbo.
+ */
+ TJSAMP_441,
+ /**
+ * Unknown subsampling. The JPEG image uses an unusual type of chrominance
+ * subsampling. Such images can be decompressed into packed-pixel images,
+ * but they cannot be
+ * - decompressed into planar YUV images,
+ * - losslessly transformed if #TJXOPT_CROP is specified, or
+ * - partially decompressed using a cropping region.
+ */
+ TJSAMP_UNKNOWN = -1
+};
+
+/**
+ * MCU block width (in pixels) for a given level of chrominance subsampling.
+ * MCU block sizes:
+ * - 8x8 for no subsampling or grayscale
+ * - 16x8 for 4:2:2
+ * - 8x16 for 4:4:0
+ * - 16x16 for 4:2:0
+ * - 32x8 for 4:1:1
+ * - 8x32 for 4:4:1
+ */
+static const int tjMCUWidth[TJ_NUMSAMP] = { 8, 16, 16, 8, 8, 32, 8 };
+
+/**
+ * MCU block height (in pixels) for a given level of chrominance subsampling.
+ * MCU block sizes:
+ * - 8x8 for no subsampling or grayscale
+ * - 16x8 for 4:2:2
+ * - 8x16 for 4:4:0
+ * - 16x16 for 4:2:0
+ * - 32x8 for 4:1:1
+ * - 8x32 for 4:4:1
+ */
+static const int tjMCUHeight[TJ_NUMSAMP] = { 8, 8, 16, 8, 16, 8, 32 };
+
+
+/**
+ * The number of pixel formats
+ */
+#define TJ_NUMPF 12
+
+/**
+ * Pixel formats
+ */
+enum TJPF {
+ /**
+ * RGB pixel format. The red, green, and blue components in the image are
+ * stored in 3-sample pixels in the order R, G, B from lowest to highest
+ * memory address within each pixel.
+ */
+ TJPF_RGB,
+ /**
+ * BGR pixel format. The red, green, and blue components in the image are
+ * stored in 3-sample pixels in the order B, G, R from lowest to highest
+ * memory address within each pixel.
+ */
+ TJPF_BGR,
+ /**
+ * RGBX pixel format. The red, green, and blue components in the image are
+ * stored in 4-sample pixels in the order R, G, B from lowest to highest
+ * memory address within each pixel. The X component is ignored when
+ * compressing and undefined when decompressing.
+ */
+ TJPF_RGBX,
+ /**
+ * BGRX pixel format. The red, green, and blue components in the image are
+ * stored in 4-sample pixels in the order B, G, R from lowest to highest
+ * memory address within each pixel. The X component is ignored when
+ * compressing and undefined when decompressing.
+ */
+ TJPF_BGRX,
+ /**
+ * XBGR pixel format. The red, green, and blue components in the image are
+ * stored in 4-sample pixels in the order R, G, B from highest to lowest
+ * memory address within each pixel. The X component is ignored when
+ * compressing and undefined when decompressing.
+ */
+ TJPF_XBGR,
+ /**
+ * XRGB pixel format. The red, green, and blue components in the image are
+ * stored in 4-sample pixels in the order B, G, R from highest to lowest
+ * memory address within each pixel. The X component is ignored when
+ * compressing and undefined when decompressing.
+ */
+ TJPF_XRGB,
+ /**
+ * Grayscale pixel format. Each 1-sample pixel represents a luminance
+ * (brightness) level from 0 to the maximum sample value (255 for 8-bit
+ * samples, 4095 for 12-bit samples, and 65535 for 16-bit samples.)
+ */
+ TJPF_GRAY,
+ /**
+ * RGBA pixel format. This is the same as @ref TJPF_RGBX, except that when
+ * decompressing, the X component is guaranteed to be equal to the maximum
+ * sample value, which can be interpreted as an opaque alpha channel.
+ */
+ TJPF_RGBA,
+ /**
+ * BGRA pixel format. This is the same as @ref TJPF_BGRX, except that when
+ * decompressing, the X component is guaranteed to be equal to the maximum
+ * sample value, which can be interpreted as an opaque alpha channel.
+ */
+ TJPF_BGRA,
+ /**
+ * ABGR pixel format. This is the same as @ref TJPF_XBGR, except that when
+ * decompressing, the X component is guaranteed to be equal to the maximum
+ * sample value, which can be interpreted as an opaque alpha channel.
+ */
+ TJPF_ABGR,
+ /**
+ * ARGB pixel format. This is the same as @ref TJPF_XRGB, except that when
+ * decompressing, the X component is guaranteed to be equal to the maximum
+ * sample value, which can be interpreted as an opaque alpha channel.
+ */
+ TJPF_ARGB,
+ /**
+ * CMYK pixel format. Unlike RGB, which is an additive color model used
+ * primarily for display, CMYK (Cyan/Magenta/Yellow/Key) is a subtractive
+ * color model used primarily for printing. In the CMYK color model, the
+ * value of each color component typically corresponds to an amount of cyan,
+ * magenta, yellow, or black ink that is applied to a white background. In
+ * order to convert between CMYK and RGB, it is necessary to use a color
+ * management system (CMS.) A CMS will attempt to map colors within the
+ * printer's gamut to perceptually similar colors in the display's gamut and
+ * vice versa, but the mapping is typically not 1:1 or reversible, nor can it
+ * be defined with a simple formula. Thus, such a conversion is out of scope
+ * for a codec library. However, the TurboJPEG API allows for compressing
+ * packed-pixel CMYK images into YCCK JPEG images (see #TJCS_YCCK) and
+ * decompressing YCCK JPEG images into packed-pixel CMYK images.
+ */
+ TJPF_CMYK,
+ /**
+ * Unknown pixel format. Currently this is only used by #tj3LoadImage8(),
+ * #tj3LoadImage12(), and #tj3LoadImage16().
+ */
+ TJPF_UNKNOWN = -1
+};
+
+/**
+ * Red offset (in samples) for a given pixel format. This specifies the number
+ * of samples that the red component is offset from the start of the pixel.
+ * For instance, if an 8-bit-per-component pixel of format TJPF_BGRX is stored
+ * in `unsigned char pixel[]`, then the red component will be
+ * `pixel[tjRedOffset[TJPF_BGRX]]`. This will be -1 if the pixel format does
+ * not have a red component.
+ */
+static const int tjRedOffset[TJ_NUMPF] = {
+ 0, 2, 0, 2, 3, 1, -1, 0, 2, 3, 1, -1
+};
+/**
+ * Green offset (in samples) for a given pixel format. This specifies the
+ * number of samples that the green component is offset from the start of the
+ * pixel. For instance, if an 8-bit-per-component pixel of format TJPF_BGRX is
+ * stored in `unsigned char pixel[]`, then the green component will be
+ * `pixel[tjGreenOffset[TJPF_BGRX]]`. This will be -1 if the pixel format does
+ * not have a green component.
+ */
+static const int tjGreenOffset[TJ_NUMPF] = {
+ 1, 1, 1, 1, 2, 2, -1, 1, 1, 2, 2, -1
+};
+/**
+ * Blue offset (in samples) for a given pixel format. This specifies the
+ * number of samples that the blue component is offset from the start of the
+ * pixel. For instance, if an 8-bit-per-component pixel of format TJPF_BGRX is
+ * stored in `unsigned char pixel[]`, then the blue component will be
+ * `pixel[tjBlueOffset[TJPF_BGRX]]`. This will be -1 if the pixel format does
+ * not have a blue component.
+ */
+static const int tjBlueOffset[TJ_NUMPF] = {
+ 2, 0, 2, 0, 1, 3, -1, 2, 0, 1, 3, -1
+};
+/**
+ * Alpha offset (in samples) for a given pixel format. This specifies the
+ * number of samples that the alpha component is offset from the start of the
+ * pixel. For instance, if an 8-bit-per-component pixel of format TJPF_BGRA is
+ * stored in `unsigned char pixel[]`, then the alpha component will be
+ * `pixel[tjAlphaOffset[TJPF_BGRA]]`. This will be -1 if the pixel format does
+ * not have an alpha component.
+ */
+static const int tjAlphaOffset[TJ_NUMPF] = {
+ -1, -1, -1, -1, -1, -1, -1, 3, 3, 0, 0, -1
+};
+/**
+ * Pixel size (in samples) for a given pixel format
+ */
+static const int tjPixelSize[TJ_NUMPF] = {
+ 3, 3, 4, 4, 4, 4, 1, 4, 4, 4, 4, 4
+};
+
+
+/**
+ * The number of JPEG colorspaces
+ */
+#define TJ_NUMCS 5
+
+/**
+ * JPEG colorspaces
+ */
+enum TJCS {
+ /**
+ * RGB colorspace. When compressing the JPEG image, the R, G, and B
+ * components in the source image are reordered into image planes, but no
+ * colorspace conversion or subsampling is performed. RGB JPEG images can be
+ * compressed from and decompressed to packed-pixel images with any of the
+ * extended RGB or grayscale pixel formats, but they cannot be compressed
+ * from or decompressed to planar YUV images.
+ */
+ TJCS_RGB,
+ /**
+ * YCbCr colorspace. YCbCr is not an absolute colorspace but rather a
+ * mathematical transformation of RGB designed solely for storage and
+ * transmission. YCbCr images must be converted to RGB before they can
+ * actually be displayed. In the YCbCr colorspace, the Y (luminance)
+ * component represents the black & white portion of the original image, and
+ * the Cb and Cr (chrominance) components represent the color portion of the
+ * original image. Originally, the analog equivalent of this transformation
+ * allowed the same signal to drive both black & white and color televisions,
+ * but JPEG images use YCbCr primarily because it allows the color data to be
+ * optionally subsampled for the purposes of reducing network or disk usage.
+ * YCbCr is the most common JPEG colorspace, and YCbCr JPEG images can be
+ * compressed from and decompressed to packed-pixel images with any of the
+ * extended RGB or grayscale pixel formats. YCbCr JPEG images can also be
+ * compressed from and decompressed to planar YUV images.
+ */
+ TJCS_YCbCr,
+ /**
+ * Grayscale colorspace. The JPEG image retains only the luminance data (Y
+ * component), and any color data from the source image is discarded.
+ * Grayscale JPEG images can be compressed from and decompressed to
+ * packed-pixel images with any of the extended RGB or grayscale pixel
+ * formats, or they can be compressed from and decompressed to planar YUV
+ * images.
+ */
+ TJCS_GRAY,
+ /**
+ * CMYK colorspace. When compressing the JPEG image, the C, M, Y, and K
+ * components in the source image are reordered into image planes, but no
+ * colorspace conversion or subsampling is performed. CMYK JPEG images can
+ * only be compressed from and decompressed to packed-pixel images with the
+ * CMYK pixel format.
+ */
+ TJCS_CMYK,
+ /**
+ * YCCK colorspace. YCCK (AKA "YCbCrK") is not an absolute colorspace but
+ * rather a mathematical transformation of CMYK designed solely for storage
+ * and transmission. It is to CMYK as YCbCr is to RGB. CMYK pixels can be
+ * reversibly transformed into YCCK, and as with YCbCr, the chrominance
+ * components in the YCCK pixels can be subsampled without incurring major
+ * perceptual loss. YCCK JPEG images can only be compressed from and
+ * decompressed to packed-pixel images with the CMYK pixel format.
+ */
+ TJCS_YCCK
+};
+
+
+/**
+ * Parameters
+ */
+enum TJPARAM {
+ /**
+ * Error handling behavior
+ *
+ * **Value**
+ * - `0` *[default]* Allow the current compression/decompression/transform
+ * operation to complete unless a fatal error is encountered.
+ * - `1` Immediately discontinue the current
+ * compression/decompression/transform operation if a warning (non-fatal
+ * error) occurs.
+ */
+ TJPARAM_STOPONWARNING,
+ /**
+ * Row order in packed-pixel source/destination images
+ *
+ * **Value**
+ * - `0` *[default]* top-down (X11) order
+ * - `1` bottom-up (Windows, OpenGL) order
+ */
+ TJPARAM_BOTTOMUP,
+ /**
+ * JPEG destination buffer (re)allocation [compression, lossless
+ * transformation]
+ *
+ * **Value**
+ * - `0` *[default]* Attempt to allocate or reallocate the JPEG destination
+ * buffer as needed.
+ * - `1` Generate an error if the JPEG destination buffer is invalid or too
+ * small.
+ */
+ TJPARAM_NOREALLOC,
+ /**
+ * Perceptual quality of lossy JPEG images [compression only]
+ *
+ * **Value**
+ * - `1`-`100` (`1` = worst quality but best compression, `100` = best
+ * quality but worst compression) *[no default; must be explicitly
+ * specified]*
+ */
+ TJPARAM_QUALITY,
+ /**
+ * Chrominance subsampling level
+ *
+ * The JPEG or YUV image uses (decompression, decoding) or will use (lossy
+ * compression, encoding) the specified level of chrominance subsampling.
+ *
+ * **Value**
+ * - One of the @ref TJSAMP "chrominance subsampling options" *[no default;
+ * must be explicitly specified for lossy compression, encoding, and
+ * decoding]*
+ */
+ TJPARAM_SUBSAMP,
+ /**
+ * JPEG width (in pixels) [decompression only, read-only]
+ */
+ TJPARAM_JPEGWIDTH,
+ /**
+ * JPEG height (in pixels) [decompression only, read-only]
+ */
+ TJPARAM_JPEGHEIGHT,
+ /**
+ * JPEG data precision (bits per sample) [decompression only, read-only]
+ *
+ * The JPEG image uses the specified number of bits per sample.
+ *
+ * **Value**
+ * - `8`, `12`, or `16`
+ *
+ * 12-bit data precision implies #TJPARAM_OPTIMIZE unless #TJPARAM_ARITHMETIC
+ * is set.
+ */
+ TJPARAM_PRECISION,
+ /**
+ * JPEG colorspace
+ *
+ * The JPEG image uses (decompression) or will use (lossy compression) the
+ * specified colorspace.
+ *
+ * **Value**
+ * - One of the @ref TJCS "JPEG colorspaces" *[default for lossy compression:
+ * automatically selected based on the subsampling level and pixel format]*
+ */
+ TJPARAM_COLORSPACE,
+ /**
+ * Chrominance upsampling algorithm [lossy decompression only]
+ *
+ * **Value**
+ * - `0` *[default]* Use smooth upsampling when decompressing a JPEG image
+ * that was compressed using chrominance subsampling. This creates a smooth
+ * transition between neighboring chrominance components in order to reduce
+ * upsampling artifacts in the decompressed image.
+ * - `1` Use the fastest chrominance upsampling algorithm available, which
+ * may combine upsampling with color conversion.
+ */
+ TJPARAM_FASTUPSAMPLE,
+ /**
+ * DCT/IDCT algorithm [lossy compression and decompression]
+ *
+ * **Value**
+ * - `0` *[default]* Use the most accurate DCT/IDCT algorithm available.
+ * - `1` Use the fastest DCT/IDCT algorithm available.
+ *
+ * This parameter is provided mainly for backward compatibility with libjpeg,
+ * which historically implemented several different DCT/IDCT algorithms
+ * because of performance limitations with 1990s CPUs. In the libjpeg-turbo
+ * implementation of the TurboJPEG API:
+ * - The "fast" and "accurate" DCT/IDCT algorithms perform similarly on
+ * modern x86/x86-64 CPUs that support AVX2 instructions.
+ * - The "fast" algorithm is generally only about 5-15% faster than the
+ * "accurate" algorithm on other types of CPUs.
+ * - The difference in accuracy between the "fast" and "accurate" algorithms
+ * is the most pronounced at JPEG quality levels above 90 and tends to be
+ * more pronounced with decompression than with compression.
+ * - The "fast" algorithm degrades and is not fully accelerated for JPEG
+ * quality levels above 97, so it will be slower than the "accurate"
+ * algorithm.
+ */
+ TJPARAM_FASTDCT,
+ /**
+ * Optimized baseline entropy coding [lossy compression only]
+ *
+ * **Value**
+ * - `0` *[default]* The JPEG image will use the default Huffman tables.
+ * - `1` Optimal Huffman tables will be computed for the JPEG image. For
+ * lossless transformation, this can also be specified using
+ * #TJXOPT_OPTIMIZE.
+ *
+ * Optimized baseline entropy coding will improve compression slightly
+ * (generally 5% or less), but it will reduce compression performance
+ * considerably.
+ */
+ TJPARAM_OPTIMIZE,
+ /**
+ * Progressive entropy coding
+ *
+ * **Value**
+ * - `0` *[default for compression, lossless transformation]* The lossy JPEG
+ * image uses (decompression) or will use (compression, lossless
+ * transformation) baseline entropy coding.
+ * - `1` The lossy JPEG image uses (decompression) or will use (compression,
+ * lossless transformation) progressive entropy coding. For lossless
+ * transformation, this can also be specified using #TJXOPT_PROGRESSIVE.
+ *
+ * Progressive entropy coding will generally improve compression relative to
+ * baseline entropy coding, but it will reduce compression and decompression
+ * performance considerably. Can be combined with #TJPARAM_ARITHMETIC.
+ * Implies #TJPARAM_OPTIMIZE unless #TJPARAM_ARITHMETIC is also set.
+ */
+ TJPARAM_PROGRESSIVE,
+ /**
+ * Progressive JPEG scan limit for lossy JPEG images [decompression, lossless
+ * transformation]
+ *
+ * Setting this parameter will cause the decompression and transform
+ * functions to return an error if the number of scans in a progressive JPEG
+ * image exceeds the specified limit. The primary purpose of this is to
+ * allow security-critical applications to guard against an exploit of the
+ * progressive JPEG format described in
+ * this report.
+ *
+ * **Value**
+ * - maximum number of progressive JPEG scans that the decompression and
+ * transform functions will process *[default: `0` (no limit)]*
+ *
+ * @see #TJPARAM_PROGRESSIVE
+ */
+ TJPARAM_SCANLIMIT,
+ /**
+ * Arithmetic entropy coding
+ *
+ * **Value**
+ * - `0` *[default for compression, lossless transformation]* The lossy JPEG
+ * image uses (decompression) or will use (compression, lossless
+ * transformation) Huffman entropy coding.
+ * - `1` The lossy JPEG image uses (decompression) or will use (compression,
+ * lossless transformation) arithmetic entropy coding. For lossless
+ * transformation, this can also be specified using #TJXOPT_ARITHMETIC.
+ *
+ * Arithmetic entropy coding will generally improve compression relative to
+ * Huffman entropy coding, but it will reduce compression and decompression
+ * performance considerably. Can be combined with #TJPARAM_PROGRESSIVE.
+ */
+ TJPARAM_ARITHMETIC,
+ /**
+ * Lossless JPEG
+ *
+ * **Value**
+ * - `0` *[default for compression]* The JPEG image is (decompression) or
+ * will be (compression) lossy/DCT-based.
+ * - `1` The JPEG image is (decompression) or will be (compression)
+ * lossless/predictive.
+ *
+ * In most cases, compressing and decompressing lossless JPEG images is
+ * considerably slower than compressing and decompressing lossy JPEG images,
+ * and lossless JPEG images are much larger than lossy JPEG images. Thus,
+ * lossless JPEG images are typically used only for applications that require
+ * mathematically lossless compression. Also note that the following
+ * features are not available with lossless JPEG images:
+ * - Colorspace conversion (lossless JPEG images always use #TJCS_RGB,
+ * #TJCS_GRAY, or #TJCS_CMYK, depending on the pixel format of the source
+ * image)
+ * - Chrominance subsampling (lossless JPEG images always use #TJSAMP_444)
+ * - JPEG quality selection
+ * - DCT/IDCT algorithm selection
+ * - Progressive entropy coding
+ * - Arithmetic entropy coding
+ * - Compression from/decompression to planar YUV images
+ * - Decompression scaling
+ * - Lossless transformation
+ *
+ * @see #TJPARAM_LOSSLESSPSV, #TJPARAM_LOSSLESSPT
+ */
+ TJPARAM_LOSSLESS,
+ /**
+ * Lossless JPEG predictor selection value (PSV)
+ *
+ * **Value**
+ * - `1`-`7` *[default for compression: `1`]*
+ *
+ * Lossless JPEG compression shares no algorithms with lossy JPEG
+ * compression. Instead, it uses differential pulse-code modulation (DPCM),
+ * an algorithm whereby each sample is encoded as the difference between the
+ * sample's value and a "predictor", which is based on the values of
+ * neighboring samples. If Ra is the sample immediately to the left of the
+ * current sample, Rb is the sample immediately above the current sample, and
+ * Rc is the sample diagonally to the left and above the current sample, then
+ * the relationship between the predictor selection value and the predictor
+ * is as follows:
+ *
+ * PSV | Predictor
+ * ----|----------
+ * 1 | Ra
+ * 2 | Rb
+ * 3 | Rc
+ * 4 | Ra + Rb – Rc
+ * 5 | Ra + (Rb – Rc) / 2
+ * 6 | Rb + (Ra – Rc) / 2
+ * 7 | (Ra + Rb) / 2
+ *
+ * Predictors 1-3 are 1-dimensional predictors, whereas Predictors 4-7 are
+ * 2-dimensional predictors. The best predictor for a particular image
+ * depends on the image.
+ *
+ * @see #TJPARAM_LOSSLESS
+ */
+ TJPARAM_LOSSLESSPSV,
+ /**
+ * Lossless JPEG point transform (Pt)
+ *
+ * **Value**
+ * - `0` through ***precision*** *- 1*, where ***precision*** is the JPEG
+ * data precision in bits *[default for compression: `0`]*
+ *
+ * A point transform value of `0` is necessary in order to generate a fully
+ * lossless JPEG image. (A non-zero point transform value right-shifts the
+ * input samples by the specified number of bits, which is effectively a form
+ * of lossy color quantization.)
+ *
+ * @see #TJPARAM_LOSSLESS, #TJPARAM_PRECISION
+ */
+ TJPARAM_LOSSLESSPT,
+ /**
+ * JPEG restart marker interval in MCU blocks (lossy) or samples (lossless)
+ * [compression only]
+ *
+ * The nature of entropy coding is such that a corrupt JPEG image cannot
+ * be decompressed beyond the point of corruption unless it contains restart
+ * markers. A restart marker stops and restarts the entropy coding algorithm
+ * so that, if a JPEG image is corrupted, decompression can resume at the
+ * next marker. Thus, adding more restart markers improves the fault
+ * tolerance of the JPEG image, but adding too many restart markers can
+ * adversely affect the compression ratio and performance.
+ *
+ * **Value**
+ * - the number of MCU blocks or samples between each restart marker
+ * *[default: `0` (no restart markers)]*
+ *
+ * Setting this parameter to a non-zero value sets #TJPARAM_RESTARTROWS to 0.
+ */
+ TJPARAM_RESTARTBLOCKS,
+ /**
+ * JPEG restart marker interval in MCU rows (lossy) or sample rows (lossless)
+ * [compression only]
+ *
+ * See #TJPARAM_RESTARTBLOCKS for a description of restart markers.
+ *
+ * **Value**
+ * - the number of MCU rows or sample rows between each restart marker
+ * *[default: `0` (no restart markers)]*
+ *
+ * Setting this parameter to a non-zero value sets #TJPARAM_RESTARTBLOCKS to
+ * 0.
+ */
+ TJPARAM_RESTARTROWS,
+ /**
+ * JPEG horizontal pixel density
+ *
+ * **Value**
+ * - The JPEG image has (decompression) or will have (compression) the
+ * specified horizontal pixel density *[default for compression: `1`]*.
+ *
+ * This value is stored in or read from the JPEG header. It does not affect
+ * the contents of the JPEG image. Note that this parameter is set by
+ * #tj3LoadImage8() when loading a Windows BMP file that contains pixel
+ * density information, and the value of this parameter is stored to a
+ * Windows BMP file by #tj3SaveImage8() if the value of #TJPARAM_DENSITYUNITS
+ * is `2`.
+ *
+ * @see TJPARAM_DENSITYUNITS
+ */
+ TJPARAM_XDENSITY,
+ /**
+ * JPEG vertical pixel density
+ *
+ * **Value**
+ * - The JPEG image has (decompression) or will have (compression) the
+ * specified vertical pixel density *[default for compression: `1`]*.
+ *
+ * This value is stored in or read from the JPEG header. It does not affect
+ * the contents of the JPEG image. Note that this parameter is set by
+ * #tj3LoadImage8() when loading a Windows BMP file that contains pixel
+ * density information, and the value of this parameter is stored to a
+ * Windows BMP file by #tj3SaveImage8() if the value of #TJPARAM_DENSITYUNITS
+ * is `2`.
+ *
+ * @see TJPARAM_DENSITYUNITS
+ */
+ TJPARAM_YDENSITY,
+ /**
+ * JPEG pixel density units
+ *
+ * **Value**
+ * - `0` *[default for compression]* The pixel density of the JPEG image is
+ * expressed (decompression) or will be expressed (compression) in unknown
+ * units.
+ * - `1` The pixel density of the JPEG image is expressed (decompression) or
+ * will be expressed (compression) in units of pixels/inch.
+ * - `2` The pixel density of the JPEG image is expressed (decompression) or
+ * will be expressed (compression) in units of pixels/cm.
+ *
+ * This value is stored in or read from the JPEG header. It does not affect
+ * the contents of the JPEG image. Note that this parameter is set by
+ * #tj3LoadImage8() when loading a Windows BMP file that contains pixel
+ * density information, and the value of this parameter is stored to a
+ * Windows BMP file by #tj3SaveImage8() if the value is `2`.
+ *
+ * @see TJPARAM_XDENSITY, TJPARAM_YDENSITY
+ */
+ TJPARAM_DENSITYUNITS,
+ /**
+ * Memory limit for intermediate buffers
+ *
+ * **Value**
+ * - the maximum amount of memory (in megabytes) that will be allocated for
+ * intermediate buffers, which are used with progressive JPEG compression and
+ * decompression, optimized baseline entropy coding, lossless JPEG
+ * compression, and lossless transformation *[default: `0` (no limit)]*
+ */
+ TJPARAM_MAXMEMORY,
+ /**
+ * Image size limit [decompression, lossless transformation, packed-pixel
+ * image loading]
+ *
+ * Setting this parameter will cause the decompression, transform, and image
+ * loading functions to return an error if the number of pixels in the source
+ * image exceeds the specified limit. This allows security-critical
+ * applications to guard against excessive memory consumption.
+ *
+ * **Value**
+ * - maximum number of pixels that the decompression, transform, and image
+ * loading functions will process *[default: `0` (no limit)]*
+ */
+ TJPARAM_MAXPIXELS
+};
+
+
+/**
+ * The number of error codes
+ */
+#define TJ_NUMERR 2
+
+/**
+ * Error codes
+ */
+enum TJERR {
+ /**
+ * The error was non-fatal and recoverable, but the destination image may
+ * still be corrupt.
+ */
+ TJERR_WARNING,
+ /**
+ * The error was fatal and non-recoverable.
+ */
+ TJERR_FATAL
+};
+
+
+/**
+ * The number of transform operations
+ */
+#define TJ_NUMXOP 8
+
+/**
+ * Transform operations for #tj3Transform()
+ */
+enum TJXOP {
+ /**
+ * Do not transform the position of the image pixels
+ */
+ TJXOP_NONE,
+ /**
+ * Flip (mirror) image horizontally. This transform is imperfect if there
+ * are any partial MCU blocks on the right edge (see #TJXOPT_PERFECT.)
+ */
+ TJXOP_HFLIP,
+ /**
+ * Flip (mirror) image vertically. This transform is imperfect if there are
+ * any partial MCU blocks on the bottom edge (see #TJXOPT_PERFECT.)
+ */
+ TJXOP_VFLIP,
+ /**
+ * Transpose image (flip/mirror along upper left to lower right axis.) This
+ * transform is always perfect.
+ */
+ TJXOP_TRANSPOSE,
+ /**
+ * Transverse transpose image (flip/mirror along upper right to lower left
+ * axis.) This transform is imperfect if there are any partial MCU blocks in
+ * the image (see #TJXOPT_PERFECT.)
+ */
+ TJXOP_TRANSVERSE,
+ /**
+ * Rotate image clockwise by 90 degrees. This transform is imperfect if
+ * there are any partial MCU blocks on the bottom edge (see
+ * #TJXOPT_PERFECT.)
+ */
+ TJXOP_ROT90,
+ /**
+ * Rotate image 180 degrees. This transform is imperfect if there are any
+ * partial MCU blocks in the image (see #TJXOPT_PERFECT.)
+ */
+ TJXOP_ROT180,
+ /**
+ * Rotate image counter-clockwise by 90 degrees. This transform is imperfect
+ * if there are any partial MCU blocks on the right edge (see
+ * #TJXOPT_PERFECT.)
+ */
+ TJXOP_ROT270
+};
+
+
+/**
+ * This option will cause #tj3Transform() to return an error if the transform
+ * is not perfect. Lossless transforms operate on MCU blocks, whose size
+ * depends on the level of chrominance subsampling used (see #tjMCUWidth and
+ * #tjMCUHeight.) If the image's width or height is not evenly divisible by
+ * the MCU block size, then there will be partial MCU blocks on the right
+ * and/or bottom edges. It is not possible to move these partial MCU blocks to
+ * the top or left of the image, so any transform that would require that is
+ * "imperfect." If this option is not specified, then any partial MCU blocks
+ * that cannot be transformed will be left in place, which will create
+ * odd-looking strips on the right or bottom edge of the image.
+ */
+#define TJXOPT_PERFECT (1 << 0)
+/**
+ * This option will cause #tj3Transform() to discard any partial MCU blocks
+ * that cannot be transformed.
+ */
+#define TJXOPT_TRIM (1 << 1)
+/**
+ * This option will enable lossless cropping. See #tj3Transform() for more
+ * information.
+ */
+#define TJXOPT_CROP (1 << 2)
+/**
+ * This option will discard the color data in the source image and produce a
+ * grayscale destination image.
+ */
+#define TJXOPT_GRAY (1 << 3)
+/**
+ * This option will prevent #tj3Transform() from outputting a JPEG image for
+ * this particular transform. (This can be used in conjunction with a custom
+ * filter to capture the transformed DCT coefficients without transcoding
+ * them.)
+ */
+#define TJXOPT_NOOUTPUT (1 << 4)
+/**
+ * This option will enable progressive entropy coding in the JPEG image
+ * generated by this particular transform. Progressive entropy coding will
+ * generally improve compression relative to baseline entropy coding (the
+ * default), but it will reduce decompression performance considerably.
+ * Can be combined with #TJXOPT_ARITHMETIC. Implies #TJXOPT_OPTIMIZE unless
+ * #TJXOPT_ARITHMETIC is also specified.
+ */
+#define TJXOPT_PROGRESSIVE (1 << 5)
+/**
+ * This option will prevent #tj3Transform() from copying any extra markers
+ * (including EXIF and ICC profile data) from the source image to the
+ * destination image.
+ */
+#define TJXOPT_COPYNONE (1 << 6)
+/**
+ * This option will enable arithmetic entropy coding in the JPEG image
+ * generated by this particular transform. Arithmetic entropy coding will
+ * generally improve compression relative to Huffman entropy coding (the
+ * default), but it will reduce decompression performance considerably. Can be
+ * combined with #TJXOPT_PROGRESSIVE.
+ */
+#define TJXOPT_ARITHMETIC (1 << 7)
+/**
+ * This option will enable optimized baseline entropy coding in the JPEG image
+ * generated by this particular transform. Optimized baseline entropy coding
+ * will improve compression slightly (generally 5% or less.)
+ */
+#define TJXOPT_OPTIMIZE (1 << 8)
+
+
+/**
+ * Scaling factor
+ */
+typedef struct {
+ /**
+ * Numerator
+ */
+ int num;
+ /**
+ * Denominator
+ */
+ int denom;
+} tjscalingfactor;
+
+/**
+ * Cropping region
+ */
+typedef struct {
+ /**
+ * The left boundary of the cropping region. This must be evenly divisible
+ * by the MCU block width (see #tjMCUWidth.)
+ */
+ int x;
+ /**
+ * The upper boundary of the cropping region. For lossless transformation,
+ * this must be evenly divisible by the MCU block height (see #tjMCUHeight.)
+ */
+ int y;
+ /**
+ * The width of the cropping region. Setting this to 0 is the equivalent of
+ * setting it to the width of the source JPEG image - x.
+ */
+ int w;
+ /**
+ * The height of the cropping region. Setting this to 0 is the equivalent of
+ * setting it to the height of the source JPEG image - y.
+ */
+ int h;
+} tjregion;
+
+/**
+ * A #tjregion structure that specifies no cropping
+ */
+static const tjregion TJUNCROPPED = { 0, 0, 0, 0 };
+
+/**
+ * Lossless transform
+ */
+typedef struct tjtransform {
+ /**
+ * Cropping region
+ */
+ tjregion r;
+ /**
+ * One of the @ref TJXOP "transform operations"
+ */
+ int op;
+ /**
+ * The bitwise OR of one of more of the @ref TJXOPT_ARITHMETIC
+ * "transform options"
+ */
+ int options;
+ /**
+ * Arbitrary data that can be accessed within the body of the callback
+ * function
+ */
+ void *data;
+ /**
+ * A callback function that can be used to modify the DCT coefficients after
+ * they are losslessly transformed but before they are transcoded to a new
+ * JPEG image. This allows for custom filters or other transformations to be
+ * applied in the frequency domain.
+ *
+ * @param coeffs pointer to an array of transformed DCT coefficients. (NOTE:
+ * this pointer is not guaranteed to be valid once the callback returns, so
+ * applications wishing to hand off the DCT coefficients to another function
+ * or library should make a copy of them within the body of the callback.)
+ *
+ * @param arrayRegion #tjregion structure containing the width and height of
+ * the array pointed to by `coeffs` as well as its offset relative to the
+ * component plane. TurboJPEG implementations may choose to split each
+ * component plane into multiple DCT coefficient arrays and call the callback
+ * function once for each array.
+ *
+ * @param planeRegion #tjregion structure containing the width and height of
+ * the component plane to which `coeffs` belongs
+ *
+ * @param componentID ID number of the component plane to which `coeffs`
+ * belongs. (Y, Cb, and Cr have, respectively, ID's of 0, 1, and 2 in
+ * typical JPEG images.)
+ *
+ * @param transformID ID number of the transformed image to which `coeffs`
+ * belongs. This is the same as the index of the transform in the
+ * `transforms` array that was passed to #tj3Transform().
+ *
+ * @param transform a pointer to a #tjtransform structure that specifies the
+ * parameters and/or cropping region for this transform
+ *
+ * @return 0 if the callback was successful, or -1 if an error occurred.
+ */
+ int (*customFilter) (short *coeffs, tjregion arrayRegion,
+ tjregion planeRegion, int componentID, int transformID,
+ struct tjtransform *transform);
+} tjtransform;
+
+/**
+ * TurboJPEG instance handle
+ */
+typedef void *tjhandle;
+
+
+/**
+ * Compute the scaled value of `dimension` using the given scaling factor.
+ * This macro performs the integer equivalent of `ceil(dimension *
+ * scalingFactor)`.
+ */
+#define TJSCALED(dimension, scalingFactor) \
+ (((dimension) * scalingFactor.num + scalingFactor.denom - 1) / \
+ scalingFactor.denom)
+
+/**
+ * A #tjscalingfactor structure that specifies a scaling factor of 1/1 (no
+ * scaling)
+ */
+static const tjscalingfactor TJUNSCALED = { 1, 1 };
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * Create a new TurboJPEG instance.
+ *
+ * @param initType one of the @ref TJINIT "initialization options"
+ *
+ * @return a handle to the newly-created instance, or NULL if an error occurred
+ * (see #tj3GetErrorStr().)
+ */
+DLLEXPORT tjhandle tj3Init(int initType);
+
+
+/**
+ * Set the value of a parameter.
+ *
+ * @param handle handle to a TurboJPEG instance
+ *
+ * @param param one of the @ref TJPARAM "parameters"
+ *
+ * @param value value of the parameter (refer to @ref TJPARAM
+ * "parameter documentation")
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr().)
+ */
+DLLEXPORT int tj3Set(tjhandle handle, int param, int value);
+
+
+/**
+ * Get the value of a parameter.
+ *
+ * @param handle handle to a TurboJPEG instance
+ *
+ * @param param one of the @ref TJPARAM "parameters"
+ *
+ * @return the value of the specified parameter, or -1 if the value is unknown.
+ */
+DLLEXPORT int tj3Get(tjhandle handle, int param);
+
+
+/**
+ * Compress an 8-bit-per-sample packed-pixel RGB, grayscale, or CMYK image into
+ * an 8-bit-per-sample JPEG image.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * compression
+ *
+ * @param srcBuf pointer to a buffer containing a packed-pixel RGB, grayscale,
+ * or CMYK source image to be compressed. This buffer should normally be
+ * `pitch * height` samples in size. However, you can also use this parameter
+ * to compress from a specific region of a larger buffer.
+ *
+ * @param width width (in pixels) of the source image
+ *
+ * @param pitch samples per row in the source image. Normally this should be
+ * width * #tjPixelSize[pixelFormat], if the image is unpadded.
+ * (Setting this parameter to 0 is the equivalent of setting it to
+ * width * #tjPixelSize[pixelFormat].) However, you can also use this
+ * parameter to specify the row alignment/padding of the source image, to skip
+ * rows, or to compress from a specific region of a larger buffer.
+ *
+ * @param height height (in pixels) of the source image
+ *
+ * @param pixelFormat pixel format of the source image (see @ref TJPF
+ * "Pixel formats".)
+ *
+ * @param jpegBuf address of a pointer to a byte buffer that will receive the
+ * JPEG image. TurboJPEG has the ability to reallocate the JPEG buffer to
+ * accommodate the size of the JPEG image. Thus, you can choose to:
+ * -# pre-allocate the JPEG buffer with an arbitrary size using #tj3Alloc() and
+ * let TurboJPEG grow the buffer as needed,
+ * -# set `*jpegBuf` to NULL to tell TurboJPEG to allocate the buffer for you,
+ * or
+ * -# pre-allocate the buffer to a "worst case" size determined by calling
+ * #tj3JPEGBufSize(). This should ensure that the buffer never has to be
+ * re-allocated. (Setting #TJPARAM_NOREALLOC guarantees that it won't be.)
+ * .
+ * If you choose option 1, then `*jpegSize` should be set to the size of your
+ * pre-allocated buffer. In any case, unless you have set #TJPARAM_NOREALLOC,
+ * you should always check `*jpegBuf` upon return from this function, as it may
+ * have changed.
+ *
+ * @param jpegSize pointer to a size_t variable that holds the size of the JPEG
+ * buffer. If `*jpegBuf` points to a pre-allocated buffer, then `*jpegSize`
+ * should be set to the size of the buffer. Upon return, `*jpegSize` will
+ * contain the size of the JPEG image (in bytes.) If `*jpegBuf` points to a
+ * JPEG buffer that is being reused from a previous call to one of the JPEG
+ * compression functions, then `*jpegSize` is ignored.
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr()
+ * and #tj3GetErrorCode().)
+ */
+DLLEXPORT int tj3Compress8(tjhandle handle, const unsigned char *srcBuf,
+ int width, int pitch, int height, int pixelFormat,
+ unsigned char **jpegBuf, size_t *jpegSize);
+
+/**
+ * Compress a 12-bit-per-sample packed-pixel RGB, grayscale, or CMYK image into
+ * a 12-bit-per-sample JPEG image.
+ *
+ * \details \copydetails tj3Compress8()
+ */
+DLLEXPORT int tj3Compress12(tjhandle handle, const short *srcBuf, int width,
+ int pitch, int height, int pixelFormat,
+ unsigned char **jpegBuf, size_t *jpegSize);
+
+/**
+ * Compress a 16-bit-per-sample packed-pixel RGB, grayscale, or CMYK image into
+ * a 16-bit-per-sample lossless JPEG image.
+ *
+ * \details \copydetails tj3Compress8()
+ */
+DLLEXPORT int tj3Compress16(tjhandle handle, const unsigned short *srcBuf,
+ int width, int pitch, int height, int pixelFormat,
+ unsigned char **jpegBuf, size_t *jpegSize);
+
+
+/**
+ * Compress an 8-bit-per-sample unified planar YUV image into an
+ * 8-bit-per-sample JPEG image.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * compression
+ *
+ * @param srcBuf pointer to a buffer containing a unified planar YUV source
+ * image to be compressed. The size of this buffer should match the value
+ * returned by #tj3YUVBufSize() for the given image width, height, row
+ * alignment, and level of chrominance subsampling (see #TJPARAM_SUBSAMP.) The
+ * Y, U (Cb), and V (Cr) image planes should be stored sequentially in the
+ * buffer. (Refer to @ref YUVnotes "YUV Image Format Notes".)
+ *
+ * @param width width (in pixels) of the source image. If the width is not an
+ * even multiple of the MCU block width (see #tjMCUWidth), then an intermediate
+ * buffer copy will be performed.
+ *
+ * @param align row alignment (in bytes) of the source image (must be a power
+ * of 2.) Setting this parameter to n indicates that each row in each plane of
+ * the source image is padded to the nearest multiple of n bytes
+ * (1 = unpadded.)
+ *
+ * @param height height (in pixels) of the source image. If the height is not
+ * an even multiple of the MCU block height (see #tjMCUHeight), then an
+ * intermediate buffer copy will be performed.
+ *
+ * @param jpegBuf address of a pointer to a byte buffer that will receive the
+ * JPEG image. TurboJPEG has the ability to reallocate the JPEG buffer to
+ * accommodate the size of the JPEG image. Thus, you can choose to:
+ * -# pre-allocate the JPEG buffer with an arbitrary size using #tj3Alloc() and
+ * let TurboJPEG grow the buffer as needed,
+ * -# set `*jpegBuf` to NULL to tell TurboJPEG to allocate the buffer for you,
+ * or
+ * -# pre-allocate the buffer to a "worst case" size determined by calling
+ * #tj3JPEGBufSize(). This should ensure that the buffer never has to be
+ * re-allocated. (Setting #TJPARAM_NOREALLOC guarantees that it won't be.)
+ * .
+ * If you choose option 1, then `*jpegSize` should be set to the size of your
+ * pre-allocated buffer. In any case, unless you have set #TJPARAM_NOREALLOC,
+ * you should always check `*jpegBuf` upon return from this function, as it may
+ * have changed.
+ *
+ * @param jpegSize pointer to a size_t variable that holds the size of the JPEG
+ * buffer. If `*jpegBuf` points to a pre-allocated buffer, then `*jpegSize`
+ * should be set to the size of the buffer. Upon return, `*jpegSize` will
+ * contain the size of the JPEG image (in bytes.) If `*jpegBuf` points to a
+ * JPEG buffer that is being reused from a previous call to one of the JPEG
+ * compression functions, then `*jpegSize` is ignored.
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr()
+ * and #tj3GetErrorCode().)
+ */
+DLLEXPORT int tj3CompressFromYUV8(tjhandle handle,
+ const unsigned char *srcBuf, int width,
+ int align, int height,
+ unsigned char **jpegBuf, size_t *jpegSize);
+
+
+/**
+ * Compress a set of 8-bit-per-sample Y, U (Cb), and V (Cr) image planes into
+ * an 8-bit-per-sample JPEG image.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * compression
+ *
+ * @param srcPlanes an array of pointers to Y, U (Cb), and V (Cr) image planes
+ * (or just a Y plane, if compressing a grayscale image) that contain a YUV
+ * source image to be compressed. These planes can be contiguous or
+ * non-contiguous in memory. The size of each plane should match the value
+ * returned by #tj3YUVPlaneSize() for the given image width, height, strides,
+ * and level of chrominance subsampling (see #TJPARAM_SUBSAMP.) Refer to
+ * @ref YUVnotes "YUV Image Format Notes" for more details.
+ *
+ * @param width width (in pixels) of the source image. If the width is not an
+ * even multiple of the MCU block width (see #tjMCUWidth), then an intermediate
+ * buffer copy will be performed.
+ *
+ * @param strides an array of integers, each specifying the number of bytes per
+ * row in the corresponding plane of the YUV source image. Setting the stride
+ * for any plane to 0 is the same as setting it to the plane width (see
+ * @ref YUVnotes "YUV Image Format Notes".) If `strides` is NULL, then the
+ * strides for all planes will be set to their respective plane widths. You
+ * can adjust the strides in order to specify an arbitrary amount of row
+ * padding in each plane or to create a JPEG image from a subregion of a larger
+ * planar YUV image.
+ *
+ * @param height height (in pixels) of the source image. If the height is not
+ * an even multiple of the MCU block height (see #tjMCUHeight), then an
+ * intermediate buffer copy will be performed.
+ *
+ * @param jpegBuf address of a pointer to a byte buffer that will receive the
+ * JPEG image. TurboJPEG has the ability to reallocate the JPEG buffer to
+ * accommodate the size of the JPEG image. Thus, you can choose to:
+ * -# pre-allocate the JPEG buffer with an arbitrary size using #tj3Alloc() and
+ * let TurboJPEG grow the buffer as needed,
+ * -# set `*jpegBuf` to NULL to tell TurboJPEG to allocate the buffer for you,
+ * or
+ * -# pre-allocate the buffer to a "worst case" size determined by calling
+ * #tj3JPEGBufSize(). This should ensure that the buffer never has to be
+ * re-allocated. (Setting #TJPARAM_NOREALLOC guarantees that it won't be.)
+ * .
+ * If you choose option 1, then `*jpegSize` should be set to the size of your
+ * pre-allocated buffer. In any case, unless you have set #TJPARAM_NOREALLOC,
+ * you should always check `*jpegBuf` upon return from this function, as it may
+ * have changed.
+ *
+ * @param jpegSize pointer to a size_t variable that holds the size of the JPEG
+ * buffer. If `*jpegBuf` points to a pre-allocated buffer, then `*jpegSize`
+ * should be set to the size of the buffer. Upon return, `*jpegSize` will
+ * contain the size of the JPEG image (in bytes.) If `*jpegBuf` points to a
+ * JPEG buffer that is being reused from a previous call to one of the JPEG
+ * compression functions, then `*jpegSize` is ignored.
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr()
+ * and #tj3GetErrorCode().)
+ */
+DLLEXPORT int tj3CompressFromYUVPlanes8(tjhandle handle,
+ const unsigned char * const *srcPlanes,
+ int width, const int *strides,
+ int height, unsigned char **jpegBuf,
+ size_t *jpegSize);
+
+
+/**
+ * The maximum size of the buffer (in bytes) required to hold a JPEG image with
+ * the given parameters. The number of bytes returned by this function is
+ * larger than the size of the uncompressed source image. The reason for this
+ * is that the JPEG format uses 16-bit coefficients, so it is possible for a
+ * very high-quality source image with very high-frequency content to expand
+ * rather than compress when converted to the JPEG format. Such images
+ * represent very rare corner cases, but since there is no way to predict the
+ * size of a JPEG image prior to compression, the corner cases have to be
+ * handled.
+ *
+ * @param width width (in pixels) of the image
+ *
+ * @param height height (in pixels) of the image
+ *
+ * @param jpegSubsamp the level of chrominance subsampling to be used when
+ * generating the JPEG image (see @ref TJSAMP
+ * "Chrominance subsampling options".) #TJSAMP_UNKNOWN is treated like
+ * #TJSAMP_444, since a buffer large enough to hold a JPEG image with no
+ * subsampling should also be large enough to hold a JPEG image with an
+ * arbitrary level of subsampling. Note that lossless JPEG images always
+ * use #TJSAMP_444.
+ *
+ * @return the maximum size of the buffer (in bytes) required to hold the
+ * image, or 0 if the arguments are out of bounds.
+ */
+DLLEXPORT size_t tj3JPEGBufSize(int width, int height, int jpegSubsamp);
+
+
+/**
+ * The size of the buffer (in bytes) required to hold a unified planar YUV
+ * image with the given parameters.
+ *
+ * @param width width (in pixels) of the image
+ *
+ * @param align row alignment (in bytes) of the image (must be a power of 2.)
+ * Setting this parameter to n specifies that each row in each plane of the
+ * image will be padded to the nearest multiple of n bytes (1 = unpadded.)
+ *
+ * @param height height (in pixels) of the image
+ *
+ * @param subsamp level of chrominance subsampling in the image (see
+ * @ref TJSAMP "Chrominance subsampling options".)
+ *
+ * @return the size of the buffer (in bytes) required to hold the image, or 0
+ * if the arguments are out of bounds.
+ */
+DLLEXPORT size_t tj3YUVBufSize(int width, int align, int height, int subsamp);
+
+
+/**
+ * The size of the buffer (in bytes) required to hold a YUV image plane with
+ * the given parameters.
+ *
+ * @param componentID ID number of the image plane (0 = Y, 1 = U/Cb, 2 = V/Cr)
+ *
+ * @param width width (in pixels) of the YUV image. NOTE: this is the width of
+ * the whole image, not the plane width.
+ *
+ * @param stride bytes per row in the image plane. Setting this to 0 is the
+ * equivalent of setting it to the plane width.
+ *
+ * @param height height (in pixels) of the YUV image. NOTE: this is the height
+ * of the whole image, not the plane height.
+ *
+ * @param subsamp level of chrominance subsampling in the image (see
+ * @ref TJSAMP "Chrominance subsampling options".)
+ *
+ * @return the size of the buffer (in bytes) required to hold the YUV image
+ * plane, or 0 if the arguments are out of bounds.
+ */
+DLLEXPORT size_t tj3YUVPlaneSize(int componentID, int width, int stride,
+ int height, int subsamp);
+
+
+/**
+ * The plane width of a YUV image plane with the given parameters. Refer to
+ * @ref YUVnotes "YUV Image Format Notes" for a description of plane width.
+ *
+ * @param componentID ID number of the image plane (0 = Y, 1 = U/Cb, 2 = V/Cr)
+ *
+ * @param width width (in pixels) of the YUV image
+ *
+ * @param subsamp level of chrominance subsampling in the image (see
+ * @ref TJSAMP "Chrominance subsampling options".)
+ *
+ * @return the plane width of a YUV image plane with the given parameters, or 0
+ * if the arguments are out of bounds.
+ */
+DLLEXPORT int tj3YUVPlaneWidth(int componentID, int width, int subsamp);
+
+
+/**
+ * The plane height of a YUV image plane with the given parameters. Refer to
+ * @ref YUVnotes "YUV Image Format Notes" for a description of plane height.
+ *
+ * @param componentID ID number of the image plane (0 = Y, 1 = U/Cb, 2 = V/Cr)
+ *
+ * @param height height (in pixels) of the YUV image
+ *
+ * @param subsamp level of chrominance subsampling in the image (see
+ * @ref TJSAMP "Chrominance subsampling options".)
+ *
+ * @return the plane height of a YUV image plane with the given parameters, or
+ * 0 if the arguments are out of bounds.
+ */
+DLLEXPORT int tj3YUVPlaneHeight(int componentID, int height, int subsamp);
+
+
+/**
+ * Encode an 8-bit-per-sample packed-pixel RGB or grayscale image into an
+ * 8-bit-per-sample unified planar YUV image. This function performs color
+ * conversion (which is accelerated in the libjpeg-turbo implementation) but
+ * does not execute any of the other steps in the JPEG compression process.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * compression
+ *
+ * @param srcBuf pointer to a buffer containing a packed-pixel RGB or grayscale
+ * source image to be encoded. This buffer should normally be `pitch * height`
+ * bytes in size. However, you can also use this parameter to encode from a
+ * specific region of a larger buffer.
+ *
+ * @param width width (in pixels) of the source image
+ *
+ * @param pitch bytes per row in the source image. Normally this should be
+ * width * #tjPixelSize[pixelFormat], if the image is unpadded.
+ * (Setting this parameter to 0 is the equivalent of setting it to
+ * width * #tjPixelSize[pixelFormat].) However, you can also use this
+ * parameter to specify the row alignment/padding of the source image, to skip
+ * rows, or to encode from a specific region of a larger packed-pixel image.
+ *
+ * @param height height (in pixels) of the source image
+ *
+ * @param pixelFormat pixel format of the source image (see @ref TJPF
+ * "Pixel formats".)
+ *
+ * @param dstBuf pointer to a buffer that will receive the unified planar YUV
+ * image. Use #tj3YUVBufSize() to determine the appropriate size for this
+ * buffer based on the image width, height, row alignment, and level of
+ * chrominance subsampling (see #TJPARAM_SUBSAMP.) The Y, U (Cb), and V (Cr)
+ * image planes will be stored sequentially in the buffer. (Refer to
+ * @ref YUVnotes "YUV Image Format Notes".)
+ *
+ * @param align row alignment (in bytes) of the YUV image (must be a power of
+ * 2.) Setting this parameter to n will cause each row in each plane of the
+ * YUV image to be padded to the nearest multiple of n bytes (1 = unpadded.)
+ * To generate images suitable for X Video, `align` should be set to 4.
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr()
+ * and #tj3GetErrorCode().)
+ */
+DLLEXPORT int tj3EncodeYUV8(tjhandle handle, const unsigned char *srcBuf,
+ int width, int pitch, int height, int pixelFormat,
+ unsigned char *dstBuf, int align);
+
+
+/**
+ * Encode an 8-bit-per-sample packed-pixel RGB or grayscale image into separate
+ * 8-bit-per-sample Y, U (Cb), and V (Cr) image planes. This function performs
+ * color conversion (which is accelerated in the libjpeg-turbo implementation)
+ * but does not execute any of the other steps in the JPEG compression process.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * compression
+ *
+ * @param srcBuf pointer to a buffer containing a packed-pixel RGB or grayscale
+ * source image to be encoded. This buffer should normally be `pitch * height`
+ * bytes in size. However, you can also use this parameter to encode from a
+ * specific region of a larger buffer.
+ *
+ *
+ * @param width width (in pixels) of the source image
+ *
+ * @param pitch bytes per row in the source image. Normally this should be
+ * width * #tjPixelSize[pixelFormat], if the image is unpadded.
+ * (Setting this parameter to 0 is the equivalent of setting it to
+ * width * #tjPixelSize[pixelFormat].) However, you can also use this
+ * parameter to specify the row alignment/padding of the source image, to skip
+ * rows, or to encode from a specific region of a larger packed-pixel image.
+ *
+ * @param height height (in pixels) of the source image
+ *
+ * @param pixelFormat pixel format of the source image (see @ref TJPF
+ * "Pixel formats".)
+ *
+ * @param dstPlanes an array of pointers to Y, U (Cb), and V (Cr) image planes
+ * (or just a Y plane, if generating a grayscale image) that will receive the
+ * encoded image. These planes can be contiguous or non-contiguous in memory.
+ * Use #tj3YUVPlaneSize() to determine the appropriate size for each plane
+ * based on the image width, height, strides, and level of chrominance
+ * subsampling (see #TJPARAM_SUBSAMP.) Refer to @ref YUVnotes
+ * "YUV Image Format Notes" for more details.
+ *
+ * @param strides an array of integers, each specifying the number of bytes per
+ * row in the corresponding plane of the YUV image. Setting the stride for any
+ * plane to 0 is the same as setting it to the plane width (see @ref YUVnotes
+ * "YUV Image Format Notes".) If `strides` is NULL, then the strides for all
+ * planes will be set to their respective plane widths. You can adjust the
+ * strides in order to add an arbitrary amount of row padding to each plane or
+ * to encode an RGB or grayscale image into a subregion of a larger planar YUV
+ * image.
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr()
+ * and #tj3GetErrorCode().)
+ */
+DLLEXPORT int tj3EncodeYUVPlanes8(tjhandle handle, const unsigned char *srcBuf,
+ int width, int pitch, int height,
+ int pixelFormat, unsigned char **dstPlanes,
+ int *strides);
+
+
+/**
+ * Retrieve information about a JPEG image without decompressing it, or prime
+ * the decompressor with quantization and Huffman tables. If a JPEG image is
+ * passed to this function, then the @ref TJPARAM "parameters" that describe
+ * the JPEG image will be set when the function returns.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * decompression
+ *
+ * @param jpegBuf pointer to a byte buffer containing a JPEG image or an
+ * "abbreviated table specification" (AKA "tables-only") datastream. Passing a
+ * tables-only datastream to this function primes the decompressor with
+ * quantization and Huffman tables that can be used when decompressing
+ * subsequent "abbreviated image" datastreams. This is useful, for instance,
+ * when decompressing video streams in which all frames share the same
+ * quantization and Huffman tables.
+ *
+ * @param jpegSize size of the JPEG image or tables-only datastream (in bytes)
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr()
+ * and #tj3GetErrorCode().)
+ */
+DLLEXPORT int tj3DecompressHeader(tjhandle handle,
+ const unsigned char *jpegBuf,
+ size_t jpegSize);
+
+
+/**
+ * Returns a list of fractional scaling factors that the JPEG decompressor
+ * supports.
+ *
+ * @param numScalingFactors pointer to an integer variable that will receive
+ * the number of elements in the list
+ *
+ * @return a pointer to a list of fractional scaling factors, or NULL if an
+ * error is encountered (see #tj3GetErrorStr().)
+ */
+DLLEXPORT tjscalingfactor *tj3GetScalingFactors(int *numScalingFactors);
+
+
+/**
+ * Set the scaling factor for subsequent lossy decompression operations.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * decompression
+ *
+ * @param scalingFactor #tjscalingfactor structure that specifies a fractional
+ * scaling factor that the decompressor supports (see #tj3GetScalingFactors()),
+ * or #TJUNSCALED for no scaling. Decompression scaling is a function
+ * of the IDCT algorithm, so scaling factors are generally limited to multiples
+ * of 1/8. If the entire JPEG image will be decompressed, then the width and
+ * height of the scaled destination image can be determined by calling
+ * #TJSCALED() with the JPEG width and height (see #TJPARAM_JPEGWIDTH and
+ * #TJPARAM_JPEGHEIGHT) and the specified scaling factor. When decompressing
+ * into a planar YUV image, an intermediate buffer copy will be performed if
+ * the width or height of the scaled destination image is not an even multiple
+ * of the MCU block size (see #tjMCUWidth and #tjMCUHeight.) Note that
+ * decompression scaling is not available (and the specified scaling factor is
+ * ignored) when decompressing lossless JPEG images (see #TJPARAM_LOSSLESS),
+ * since the IDCT algorithm is not used with those images. Note also that
+ * #TJPARAM_FASTDCT is ignored when decompression scaling is enabled.
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr().)
+ */
+DLLEXPORT int tj3SetScalingFactor(tjhandle handle,
+ tjscalingfactor scalingFactor);
+
+
+/**
+ * Set the cropping region for partially decompressing a lossy JPEG image into
+ * a packed-pixel image
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * decompression
+ *
+ * @param croppingRegion #tjregion structure that specifies a subregion of the
+ * JPEG image to decompress, or #TJUNCROPPED for no cropping. The
+ * left boundary of the cropping region must be evenly divisible by the scaled
+ * MCU block width (#TJSCALED(#tjMCUWidth[subsamp], scalingFactor),
+ * where `subsamp` is the level of chrominance subsampling in the JPEG image
+ * (see #TJPARAM_SUBSAMP) and `scalingFactor` is the decompression scaling
+ * factor (see #tj3SetScalingFactor().) The cropping region should be
+ * specified relative to the scaled image dimensions. Unless `croppingRegion`
+ * is #TJUNCROPPED, the JPEG header must be read (see
+ * #tj3DecompressHeader()) prior to calling this function.
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr().)
+ */
+DLLEXPORT int tj3SetCroppingRegion(tjhandle handle, tjregion croppingRegion);
+
+
+/**
+ * Decompress an 8-bit-per-sample JPEG image into an 8-bit-per-sample
+ * packed-pixel RGB, grayscale, or CMYK image. The @ref TJPARAM "parameters"
+ * that describe the JPEG image will be set when this function returns.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * decompression
+ *
+ * @param jpegBuf pointer to a byte buffer containing the JPEG image to
+ * decompress
+ *
+ * @param jpegSize size of the JPEG image (in bytes)
+ *
+ * @param dstBuf pointer to a buffer that will receive the packed-pixel
+ * decompressed image. This buffer should normally be
+ * `pitch * destinationHeight` samples in size. However, you can also use this
+ * parameter to decompress into a specific region of a larger buffer. NOTE:
+ * If the JPEG image is lossy, then `destinationHeight` is either the scaled
+ * JPEG height (see #TJSCALED(), #TJPARAM_JPEGHEIGHT, and
+ * #tj3SetScalingFactor()) or the height of the cropping region (see
+ * #tj3SetCroppingRegion().) If the JPEG image is lossless, then
+ * `destinationHeight` is the JPEG height.
+ *
+ * @param pitch samples per row in the destination image. Normally this should
+ * be set to destinationWidth * #tjPixelSize[pixelFormat], if the
+ * destination image should be unpadded. (Setting this parameter to 0 is the
+ * equivalent of setting it to
+ * destinationWidth * #tjPixelSize[pixelFormat].) However, you can
+ * also use this parameter to specify the row alignment/padding of the
+ * destination image, to skip rows, or to decompress into a specific region of
+ * a larger buffer. NOTE: If the JPEG image is lossy, then `destinationWidth`
+ * is either the scaled JPEG width (see #TJSCALED(), #TJPARAM_JPEGWIDTH, and
+ * #tj3SetScalingFactor()) or the width of the cropping region (see
+ * #tj3SetCroppingRegion().) If the JPEG image is lossless, then
+ * `destinationWidth` is the JPEG width.
+ *
+ * @param pixelFormat pixel format of the destination image (see @ref
+ * TJPF "Pixel formats".)
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr()
+ * and #tj3GetErrorCode().)
+ */
+DLLEXPORT int tj3Decompress8(tjhandle handle, const unsigned char *jpegBuf,
+ size_t jpegSize, unsigned char *dstBuf, int pitch,
+ int pixelFormat);
+
+/**
+ * Decompress a 12-bit-per-sample JPEG image into a 12-bit-per-sample
+ * packed-pixel RGB, grayscale, or CMYK image.
+ *
+ * \details \copydetails tj3Decompress8()
+ */
+DLLEXPORT int tj3Decompress12(tjhandle handle, const unsigned char *jpegBuf,
+ size_t jpegSize, short *dstBuf, int pitch,
+ int pixelFormat);
+
+/**
+ * Decompress a 16-bit-per-sample lossless JPEG image into a 16-bit-per-sample
+ * packed-pixel RGB, grayscale, or CMYK image.
+ *
+ * \details \copydetails tj3Decompress8()
+ */
+DLLEXPORT int tj3Decompress16(tjhandle handle, const unsigned char *jpegBuf,
+ size_t jpegSize, unsigned short *dstBuf,
+ int pitch, int pixelFormat);
+
+
+/**
+ * Decompress an 8-bit-per-sample JPEG image into an 8-bit-per-sample unified
+ * planar YUV image. This function performs JPEG decompression but leaves out
+ * the color conversion step, so a planar YUV image is generated instead of a
+ * packed-pixel image. The @ref TJPARAM "parameters" that describe the JPEG
+ * image will be set when this function returns.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * decompression
+ *
+ * @param jpegBuf pointer to a byte buffer containing the JPEG image to
+ * decompress
+ *
+ * @param jpegSize size of the JPEG image (in bytes)
+ *
+ * @param dstBuf pointer to a buffer that will receive the unified planar YUV
+ * decompressed image. Use #tj3YUVBufSize() to determine the appropriate size
+ * for this buffer based on the scaled JPEG width and height (see #TJSCALED(),
+ * #TJPARAM_JPEGWIDTH, #TJPARAM_JPEGHEIGHT, and #tj3SetScalingFactor()), row
+ * alignment, and level of chrominance subsampling (see #TJPARAM_SUBSAMP.) The
+ * Y, U (Cb), and V (Cr) image planes will be stored sequentially in the
+ * buffer. (Refer to @ref YUVnotes "YUV Image Format Notes".)
+ *
+ * @param align row alignment (in bytes) of the YUV image (must be a power of
+ * 2.) Setting this parameter to n will cause each row in each plane of the
+ * YUV image to be padded to the nearest multiple of n bytes (1 = unpadded.)
+ * To generate images suitable for X Video, `align` should be set to 4.
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr()
+ * and #tj3GetErrorCode().)
+ */
+DLLEXPORT int tj3DecompressToYUV8(tjhandle handle,
+ const unsigned char *jpegBuf,
+ size_t jpegSize,
+ unsigned char *dstBuf, int align);
+
+
+/**
+ * Decompress an 8-bit-per-sample JPEG image into separate 8-bit-per-sample Y,
+ * U (Cb), and V (Cr) image planes. This function performs JPEG decompression
+ * but leaves out the color conversion step, so a planar YUV image is generated
+ * instead of a packed-pixel image. The @ref TJPARAM "parameters" that
+ * describe the JPEG image will be set when this function returns.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * decompression
+ *
+ * @param jpegBuf pointer to a byte buffer containing the JPEG image to
+ * decompress
+ *
+ * @param jpegSize size of the JPEG image (in bytes)
+ *
+ * @param dstPlanes an array of pointers to Y, U (Cb), and V (Cr) image planes
+ * (or just a Y plane, if decompressing a grayscale image) that will receive
+ * the decompressed image. These planes can be contiguous or non-contiguous in
+ * memory. Use #tj3YUVPlaneSize() to determine the appropriate size for each
+ * plane based on the scaled JPEG width and height (see #TJSCALED(),
+ * #TJPARAM_JPEGWIDTH, #TJPARAM_JPEGHEIGHT, and #tj3SetScalingFactor()),
+ * strides, and level of chrominance subsampling (see #TJPARAM_SUBSAMP.) Refer
+ * to @ref YUVnotes "YUV Image Format Notes" for more details.
+ *
+ * @param strides an array of integers, each specifying the number of bytes per
+ * row in the corresponding plane of the YUV image. Setting the stride for any
+ * plane to 0 is the same as setting it to the scaled plane width (see
+ * @ref YUVnotes "YUV Image Format Notes".) If `strides` is NULL, then the
+ * strides for all planes will be set to their respective scaled plane widths.
+ * You can adjust the strides in order to add an arbitrary amount of row
+ * padding to each plane or to decompress the JPEG image into a subregion of a
+ * larger planar YUV image.
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr()
+ * and #tj3GetErrorCode().)
+ */
+DLLEXPORT int tj3DecompressToYUVPlanes8(tjhandle handle,
+ const unsigned char *jpegBuf,
+ size_t jpegSize,
+ unsigned char **dstPlanes,
+ int *strides);
+
+
+/**
+ * Decode an 8-bit-per-sample unified planar YUV image into an 8-bit-per-sample
+ * packed-pixel RGB or grayscale image. This function performs color
+ * conversion (which is accelerated in the libjpeg-turbo implementation) but
+ * does not execute any of the other steps in the JPEG decompression process.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * decompression
+ *
+ * @param srcBuf pointer to a buffer containing a unified planar YUV source
+ * image to be decoded. The size of this buffer should match the value
+ * returned by #tj3YUVBufSize() for the given image width, height, row
+ * alignment, and level of chrominance subsampling (see #TJPARAM_SUBSAMP.) The
+ * Y, U (Cb), and V (Cr) image planes should be stored sequentially in the
+ * source buffer. (Refer to @ref YUVnotes "YUV Image Format Notes".)
+ *
+ * @param align row alignment (in bytes) of the YUV source image (must be a
+ * power of 2.) Setting this parameter to n indicates that each row in each
+ * plane of the YUV source image is padded to the nearest multiple of n bytes
+ * (1 = unpadded.)
+ *
+ * @param dstBuf pointer to a buffer that will receive the packed-pixel decoded
+ * image. This buffer should normally be `pitch * height` bytes in size.
+ * However, you can also use this parameter to decode into a specific region of
+ * a larger buffer.
+ *
+ * @param width width (in pixels) of the source and destination images
+ *
+ * @param pitch bytes per row in the destination image. Normally this should
+ * be set to width * #tjPixelSize[pixelFormat], if the destination
+ * image should be unpadded. (Setting this parameter to 0 is the equivalent of
+ * setting it to width * #tjPixelSize[pixelFormat].) However, you can
+ * also use this parameter to specify the row alignment/padding of the
+ * destination image, to skip rows, or to decode into a specific region of a
+ * larger buffer.
+ *
+ * @param height height (in pixels) of the source and destination images
+ *
+ * @param pixelFormat pixel format of the destination image (see @ref TJPF
+ * "Pixel formats".)
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr()
+ * and #tj3GetErrorCode().)
+ */
+DLLEXPORT int tj3DecodeYUV8(tjhandle handle, const unsigned char *srcBuf,
+ int align, unsigned char *dstBuf, int width,
+ int pitch, int height, int pixelFormat);
+
+
+/**
+ * Decode a set of 8-bit-per-sample Y, U (Cb), and V (Cr) image planes into an
+ * 8-bit-per-sample packed-pixel RGB or grayscale image. This function
+ * performs color conversion (which is accelerated in the libjpeg-turbo
+ * implementation) but does not execute any of the other steps in the JPEG
+ * decompression process.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * decompression
+ *
+ * @param srcPlanes an array of pointers to Y, U (Cb), and V (Cr) image planes
+ * (or just a Y plane, if decoding a grayscale image) that contain a YUV image
+ * to be decoded. These planes can be contiguous or non-contiguous in memory.
+ * The size of each plane should match the value returned by #tj3YUVPlaneSize()
+ * for the given image width, height, strides, and level of chrominance
+ * subsampling (see #TJPARAM_SUBSAMP.) Refer to @ref YUVnotes
+ * "YUV Image Format Notes" for more details.
+ *
+ * @param strides an array of integers, each specifying the number of bytes per
+ * row in the corresponding plane of the YUV source image. Setting the stride
+ * for any plane to 0 is the same as setting it to the plane width (see
+ * @ref YUVnotes "YUV Image Format Notes".) If `strides` is NULL, then the
+ * strides for all planes will be set to their respective plane widths. You
+ * can adjust the strides in order to specify an arbitrary amount of row
+ * padding in each plane or to decode a subregion of a larger planar YUV image.
+ *
+ * @param dstBuf pointer to a buffer that will receive the packed-pixel decoded
+ * image. This buffer should normally be `pitch * height` bytes in size.
+ * However, you can also use this parameter to decode into a specific region of
+ * a larger buffer.
+ *
+ * @param width width (in pixels) of the source and destination images
+ *
+ * @param pitch bytes per row in the destination image. Normally this should
+ * be set to width * #tjPixelSize[pixelFormat], if the destination
+ * image should be unpadded. (Setting this parameter to 0 is the equivalent of
+ * setting it to width * #tjPixelSize[pixelFormat].) However, you can
+ * also use this parameter to specify the row alignment/padding of the
+ * destination image, to skip rows, or to decode into a specific region of a
+ * larger buffer.
+ *
+ * @param height height (in pixels) of the source and destination images
+ *
+ * @param pixelFormat pixel format of the destination image (see @ref TJPF
+ * "Pixel formats".)
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr()
+ * and #tj3GetErrorCode().)
+ */
+DLLEXPORT int tj3DecodeYUVPlanes8(tjhandle handle,
+ const unsigned char * const *srcPlanes,
+ const int *strides, unsigned char *dstBuf,
+ int width, int pitch, int height,
+ int pixelFormat);
+
+
+/**
+ * Losslessly transform a JPEG image into another JPEG image. Lossless
+ * transforms work by moving the raw DCT coefficients from one JPEG image
+ * structure to another without altering the values of the coefficients. While
+ * this is typically faster than decompressing the image, transforming it, and
+ * re-compressing it, lossless transforms are not free. Each lossless
+ * transform requires reading and performing entropy decoding on all of the
+ * coefficients in the source image, regardless of the size of the destination
+ * image. Thus, this function provides a means of generating multiple
+ * transformed images from the same source or applying multiple transformations
+ * simultaneously, in order to eliminate the need to read the source
+ * coefficients multiple times.
+ *
+ * @param handle handle to a TurboJPEG instance that has been initialized for
+ * lossless transformation
+ *
+ * @param jpegBuf pointer to a byte buffer containing the JPEG source image to
+ * transform
+ *
+ * @param jpegSize size of the JPEG source image (in bytes)
+ *
+ * @param n the number of transformed JPEG images to generate
+ *
+ * @param dstBufs pointer to an array of n byte buffers. `dstBufs[i]` will
+ * receive a JPEG image that has been transformed using the parameters in
+ * `transforms[i]`. TurboJPEG has the ability to reallocate the JPEG
+ * destination buffer to accommodate the size of the transformed JPEG image.
+ * Thus, you can choose to:
+ * -# pre-allocate the JPEG destination buffer with an arbitrary size using
+ * #tj3Alloc() and let TurboJPEG grow the buffer as needed,
+ * -# set `dstBufs[i]` to NULL to tell TurboJPEG to allocate the buffer for
+ * you, or
+ * -# pre-allocate the buffer to a "worst case" size determined by calling
+ * #tj3JPEGBufSize() with the transformed or cropped width and height and the
+ * level of subsampling used in the source image. Under normal circumstances,
+ * this should ensure that the buffer never has to be re-allocated. (Setting
+ * #TJPARAM_NOREALLOC guarantees that it won't be.) Note, however, that there
+ * are some rare cases (such as transforming images with a large amount of
+ * embedded EXIF or ICC profile data) in which the transformed JPEG image will
+ * be larger than the worst-case size, and #TJPARAM_NOREALLOC cannot be used in
+ * those cases.
+ * .
+ * If you choose option 1, then `dstSizes[i]` should be set to the size of your
+ * pre-allocated buffer. In any case, unless you have set #TJPARAM_NOREALLOC,
+ * you should always check `dstBufs[i]` upon return from this function, as it
+ * may have changed.
+ *
+ * @param dstSizes pointer to an array of n size_t variables that will receive
+ * the actual sizes (in bytes) of each transformed JPEG image. If `dstBufs[i]`
+ * points to a pre-allocated buffer, then `dstSizes[i]` should be set to the
+ * size of the buffer. Upon return, `dstSizes[i]` will contain the size of the
+ * transformed JPEG image (in bytes.)
+ *
+ * @param transforms pointer to an array of n #tjtransform structures, each of
+ * which specifies the transform parameters and/or cropping region for the
+ * corresponding transformed JPEG image.
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr()
+ * and #tj3GetErrorCode().)
+ */
+DLLEXPORT int tj3Transform(tjhandle handle, const unsigned char *jpegBuf,
+ size_t jpegSize, int n, unsigned char **dstBufs,
+ size_t *dstSizes, const tjtransform *transforms);
+
+
+/**
+ * Destroy a TurboJPEG instance.
+ *
+ * @param handle handle to a TurboJPEG instance. If the handle is NULL, then
+ * this function has no effect.
+ */
+DLLEXPORT void tj3Destroy(tjhandle handle);
+
+
+/**
+ * Allocate a byte buffer for use with TurboJPEG. You should always use this
+ * function to allocate the JPEG destination buffer(s) for the compression and
+ * transform functions unless you are disabling automatic buffer (re)allocation
+ * (by setting #TJPARAM_NOREALLOC.)
+ *
+ * @param bytes the number of bytes to allocate
+ *
+ * @return a pointer to a newly-allocated buffer with the specified number of
+ * bytes.
+ *
+ * @see tj3Free()
+ */
+DLLEXPORT void *tj3Alloc(size_t bytes);
+
+
+/**
+ * Load an 8-bit-per-sample packed-pixel image from disk into memory.
+ *
+ * @param handle handle to a TurboJPEG instance
+ *
+ * @param filename name of a file containing a packed-pixel image in Windows
+ * BMP or PBMPLUS (PPM/PGM) format. Windows BMP files require 8-bit-per-sample
+ * data precision. If the data precision of the PBMPLUS file does not match
+ * the target data precision, then upconverting or downconverting will be
+ * performed.
+ *
+ * @param width pointer to an integer variable that will receive the width (in
+ * pixels) of the packed-pixel image
+ *
+ * @param align row alignment (in samples) of the packed-pixel buffer to be
+ * returned (must be a power of 2.) Setting this parameter to n will cause all
+ * rows in the buffer to be padded to the nearest multiple of n samples
+ * (1 = unpadded.)
+ *
+ * @param height pointer to an integer variable that will receive the height
+ * (in pixels) of the packed-pixel image
+ *
+ * @param pixelFormat pointer to an integer variable that specifies or will
+ * receive the pixel format of the packed-pixel buffer. The behavior of this
+ * function will vary depending on the value of `*pixelFormat` passed to the
+ * function:
+ * - @ref TJPF_UNKNOWN : The packed-pixel buffer returned by this function will
+ * use the most optimal pixel format for the file type, and `*pixelFormat` will
+ * contain the ID of that pixel format upon successful return from this
+ * function.
+ * - @ref TJPF_GRAY : Only PGM files and 8-bit-per-pixel BMP files with a
+ * grayscale colormap can be loaded.
+ * - @ref TJPF_CMYK : The RGB or grayscale pixels stored in the file will be
+ * converted using a quick & dirty algorithm that is suitable only for testing
+ * purposes. (Proper conversion between CMYK and other formats requires a
+ * color management system.)
+ * - Other @ref TJPF "pixel formats" : The packed-pixel buffer will use the
+ * specified pixel format, and pixel format conversion will be performed if
+ * necessary.
+ *
+ * @return a pointer to a newly-allocated buffer containing the packed-pixel
+ * image, converted to the chosen pixel format and with the chosen row
+ * alignment, or NULL if an error occurred (see #tj3GetErrorStr().) This
+ * buffer should be freed using #tj3Free().
+ */
+DLLEXPORT unsigned char *tj3LoadImage8(tjhandle handle, const char *filename,
+ int *width, int align, int *height,
+ int *pixelFormat);
+
+/**
+ * Load a 12-bit-per-sample packed-pixel image from disk into memory.
+ *
+ * \details \copydetails tj3LoadImage8()
+ */
+DLLEXPORT short *tj3LoadImage12(tjhandle handle, const char *filename,
+ int *width, int align, int *height,
+ int *pixelFormat);
+
+/**
+ * Load a 16-bit-per-sample packed-pixel image from disk into memory.
+ *
+ * \details \copydetails tj3LoadImage8()
+ */
+DLLEXPORT unsigned short *tj3LoadImage16(tjhandle handle, const char *filename,
+ int *width, int align, int *height,
+ int *pixelFormat);
+
+
+/**
+ * Save an 8-bit-per-sample packed-pixel image from memory to disk.
+ *
+ * @param handle handle to a TurboJPEG instance
+ *
+ * @param filename name of a file to which to save the packed-pixel image. The
+ * image will be stored in Windows BMP or PBMPLUS (PPM/PGM) format, depending
+ * on the file extension. Windows BMP files require 8-bit-per-sample data
+ * precision.
+ *
+ * @param buffer pointer to a buffer containing a packed-pixel RGB, grayscale,
+ * or CMYK image to be saved
+ *
+ * @param width width (in pixels) of the packed-pixel image
+ *
+ * @param pitch samples per row in the packed-pixel image. Setting this
+ * parameter to 0 is the equivalent of setting it to
+ * width * #tjPixelSize[pixelFormat].
+ *
+ * @param height height (in pixels) of the packed-pixel image
+ *
+ * @param pixelFormat pixel format of the packed-pixel image (see @ref TJPF
+ * "Pixel formats".) If this parameter is set to @ref TJPF_GRAY, then the
+ * image will be stored in PGM or 8-bit-per-pixel (indexed color) BMP format.
+ * Otherwise, the image will be stored in PPM or 24-bit-per-pixel BMP format.
+ * If this parameter is set to @ref TJPF_CMYK, then the CMYK pixels will be
+ * converted to RGB using a quick & dirty algorithm that is suitable only for
+ * testing purposes. (Proper conversion between CMYK and other formats
+ * requires a color management system.)
+ *
+ * @return 0 if successful, or -1 if an error occurred (see #tj3GetErrorStr().)
+ */
+DLLEXPORT int tj3SaveImage8(tjhandle handle, const char *filename,
+ const unsigned char *buffer, int width, int pitch,
+ int height, int pixelFormat);
+
+/**
+ * Save a 12-bit-per-sample packed-pixel image from memory to disk.
+ *
+ * \details \copydetails tj3SaveImage8()
+ */
+DLLEXPORT int tj3SaveImage12(tjhandle handle, const char *filename,
+ const short *buffer, int width, int pitch,
+ int height, int pixelFormat);
+
+/**
+ * Save a 16-bit-per-sample packed-pixel image from memory to disk.
+ *
+ * \details \copydetails tj3SaveImage8()
+ */
+DLLEXPORT int tj3SaveImage16(tjhandle handle, const char *filename,
+ const unsigned short *buffer, int width,
+ int pitch, int height, int pixelFormat);
+
+
+/**
+ * Free a byte buffer previously allocated by TurboJPEG. You should always use
+ * this function to free JPEG destination buffer(s) that were automatically
+ * (re)allocated by the compression and transform functions or that were
+ * manually allocated using #tj3Alloc().
+ *
+ * @param buffer address of the buffer to free. If the address is NULL, then
+ * this function has no effect.
+ *
+ * @see tj3Alloc()
+ */
+DLLEXPORT void tj3Free(void *buffer);
+
+
+/**
+ * Returns a descriptive error message explaining why the last command failed.
+ *
+ * @param handle handle to a TurboJPEG instance, or NULL if the error was
+ * generated by a global function (but note that retrieving the error message
+ * for a global function is thread-safe only on platforms that support
+ * thread-local storage.)
+ *
+ * @return a descriptive error message explaining why the last command failed.
+ */
+DLLEXPORT char *tj3GetErrorStr(tjhandle handle);
+
+
+/**
+ * Returns a code indicating the severity of the last error. See
+ * @ref TJERR "Error codes".
+ *
+ * @param handle handle to a TurboJPEG instance
+ *
+ * @return a code indicating the severity of the last error. See
+ * @ref TJERR "Error codes".
+ */
+DLLEXPORT int tj3GetErrorCode(tjhandle handle);
+
+
+/* Backward compatibility functions and macros (nothing to see here) */
+
+/* TurboJPEG 1.0+ */
+
+#define NUMSUBOPT TJ_NUMSAMP
+#define TJ_444 TJSAMP_444
+#define TJ_422 TJSAMP_422
+#define TJ_420 TJSAMP_420
+#define TJ_411 TJSAMP_420
+#define TJ_GRAYSCALE TJSAMP_GRAY
+
+#define TJ_BGR 1
+#define TJ_BOTTOMUP TJFLAG_BOTTOMUP
+#define TJ_FORCEMMX TJFLAG_FORCEMMX
+#define TJ_FORCESSE TJFLAG_FORCESSE
+#define TJ_FORCESSE2 TJFLAG_FORCESSE2
+#define TJ_ALPHAFIRST 64
+#define TJ_FORCESSE3 TJFLAG_FORCESSE3
+#define TJ_FASTUPSAMPLE TJFLAG_FASTUPSAMPLE
+
+#define TJPAD(width) (((width) + 3) & (~3))
+
+DLLEXPORT unsigned long TJBUFSIZE(int width, int height);
+
+DLLEXPORT int tjCompress(tjhandle handle, unsigned char *srcBuf, int width,
+ int pitch, int height, int pixelSize,
+ unsigned char *dstBuf, unsigned long *compressedSize,
+ int jpegSubsamp, int jpegQual, int flags);
+
+DLLEXPORT int tjDecompress(tjhandle handle, unsigned char *jpegBuf,
+ unsigned long jpegSize, unsigned char *dstBuf,
+ int width, int pitch, int height, int pixelSize,
+ int flags);
+
+DLLEXPORT int tjDecompressHeader(tjhandle handle, unsigned char *jpegBuf,
+ unsigned long jpegSize, int *width,
+ int *height);
+
+DLLEXPORT int tjDestroy(tjhandle handle);
+
+DLLEXPORT char *tjGetErrorStr(void);
+
+DLLEXPORT tjhandle tjInitCompress(void);
+
+DLLEXPORT tjhandle tjInitDecompress(void);
+
+/* TurboJPEG 1.1+ */
+
+#define TJ_YUV 512
+
+DLLEXPORT unsigned long TJBUFSIZEYUV(int width, int height, int jpegSubsamp);
+
+DLLEXPORT int tjDecompressHeader2(tjhandle handle, unsigned char *jpegBuf,
+ unsigned long jpegSize, int *width,
+ int *height, int *jpegSubsamp);
+
+DLLEXPORT int tjDecompressToYUV(tjhandle handle, unsigned char *jpegBuf,
+ unsigned long jpegSize, unsigned char *dstBuf,
+ int flags);
+
+DLLEXPORT int tjEncodeYUV(tjhandle handle, unsigned char *srcBuf, int width,
+ int pitch, int height, int pixelSize,
+ unsigned char *dstBuf, int subsamp, int flags);
+
+/* TurboJPEG 1.2+ */
+
+#define TJFLAG_BOTTOMUP 2
+#define TJFLAG_FORCEMMX 8
+#define TJFLAG_FORCESSE 16
+#define TJFLAG_FORCESSE2 32
+#define TJFLAG_FORCESSE3 128
+#define TJFLAG_FASTUPSAMPLE 256
+#define TJFLAG_NOREALLOC 1024
+
+DLLEXPORT unsigned char *tjAlloc(int bytes);
+
+DLLEXPORT unsigned long tjBufSize(int width, int height, int jpegSubsamp);
+
+DLLEXPORT unsigned long tjBufSizeYUV(int width, int height, int subsamp);
+
+DLLEXPORT int tjCompress2(tjhandle handle, const unsigned char *srcBuf,
+ int width, int pitch, int height, int pixelFormat,
+ unsigned char **jpegBuf, unsigned long *jpegSize,
+ int jpegSubsamp, int jpegQual, int flags);
+
+DLLEXPORT int tjDecompress2(tjhandle handle, const unsigned char *jpegBuf,
+ unsigned long jpegSize, unsigned char *dstBuf,
+ int width, int pitch, int height, int pixelFormat,
+ int flags);
+
+DLLEXPORT int tjEncodeYUV2(tjhandle handle, unsigned char *srcBuf, int width,
+ int pitch, int height, int pixelFormat,
+ unsigned char *dstBuf, int subsamp, int flags);
+
+DLLEXPORT void tjFree(unsigned char *buffer);
+
+DLLEXPORT tjscalingfactor *tjGetScalingFactors(int *numscalingfactors);
+
+DLLEXPORT tjhandle tjInitTransform(void);
+
+DLLEXPORT int tjTransform(tjhandle handle, const unsigned char *jpegBuf,
+ unsigned long jpegSize, int n,
+ unsigned char **dstBufs, unsigned long *dstSizes,
+ tjtransform *transforms, int flags);
+
+/* TurboJPEG 1.2.1+ */
+
+#define TJFLAG_FASTDCT 2048
+#define TJFLAG_ACCURATEDCT 4096
+
+/* TurboJPEG 1.4+ */
+
+DLLEXPORT unsigned long tjBufSizeYUV2(int width, int align, int height,
+ int subsamp);
+
+DLLEXPORT int tjCompressFromYUV(tjhandle handle, const unsigned char *srcBuf,
+ int width, int align, int height, int subsamp,
+ unsigned char **jpegBuf,
+ unsigned long *jpegSize, int jpegQual,
+ int flags);
+
+DLLEXPORT int tjCompressFromYUVPlanes(tjhandle handle,
+ const unsigned char **srcPlanes,
+ int width, const int *strides,
+ int height, int subsamp,
+ unsigned char **jpegBuf,
+ unsigned long *jpegSize, int jpegQual,
+ int flags);
+
+DLLEXPORT int tjDecodeYUV(tjhandle handle, const unsigned char *srcBuf,
+ int align, int subsamp, unsigned char *dstBuf,
+ int width, int pitch, int height, int pixelFormat,
+ int flags);
+
+DLLEXPORT int tjDecodeYUVPlanes(tjhandle handle,
+ const unsigned char **srcPlanes,
+ const int *strides, int subsamp,
+ unsigned char *dstBuf, int width, int pitch,
+ int height, int pixelFormat, int flags);
+
+DLLEXPORT int tjDecompressHeader3(tjhandle handle,
+ const unsigned char *jpegBuf,
+ unsigned long jpegSize, int *width,
+ int *height, int *jpegSubsamp,
+ int *jpegColorspace);
+
+DLLEXPORT int tjDecompressToYUV2(tjhandle handle, const unsigned char *jpegBuf,
+ unsigned long jpegSize, unsigned char *dstBuf,
+ int width, int align, int height, int flags);
+
+DLLEXPORT int tjDecompressToYUVPlanes(tjhandle handle,
+ const unsigned char *jpegBuf,
+ unsigned long jpegSize,
+ unsigned char **dstPlanes, int width,
+ int *strides, int height, int flags);
+
+DLLEXPORT int tjEncodeYUV3(tjhandle handle, const unsigned char *srcBuf,
+ int width, int pitch, int height, int pixelFormat,
+ unsigned char *dstBuf, int align, int subsamp,
+ int flags);
+
+DLLEXPORT int tjEncodeYUVPlanes(tjhandle handle, const unsigned char *srcBuf,
+ int width, int pitch, int height,
+ int pixelFormat, unsigned char **dstPlanes,
+ int *strides, int subsamp, int flags);
+
+DLLEXPORT int tjPlaneHeight(int componentID, int height, int subsamp);
+
+DLLEXPORT unsigned long tjPlaneSizeYUV(int componentID, int width, int stride,
+ int height, int subsamp);
+
+DLLEXPORT int tjPlaneWidth(int componentID, int width, int subsamp);
+
+/* TurboJPEG 2.0+ */
+
+#define TJFLAG_STOPONWARNING 8192
+#define TJFLAG_PROGRESSIVE 16384
+
+DLLEXPORT int tjGetErrorCode(tjhandle handle);
+
+DLLEXPORT char *tjGetErrorStr2(tjhandle handle);
+
+DLLEXPORT unsigned char *tjLoadImage(const char *filename, int *width,
+ int align, int *height, int *pixelFormat,
+ int flags);
+
+DLLEXPORT int tjSaveImage(const char *filename, unsigned char *buffer,
+ int width, int pitch, int height, int pixelFormat,
+ int flags);
+
+/* TurboJPEG 2.1+ */
+
+#define TJFLAG_LIMITSCANS 32768
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/vcpkg_installed/arm64-osx/include/zconf.h b/vcpkg_installed/arm64-osx/include/zconf.h
new file mode 100644
index 00000000..7e9c73f0
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/zconf.h
@@ -0,0 +1,553 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+/* #undef Z_PREFIX */
+#define Z_HAVE_UNISTD_H
+
+/*
+ * If you *really* need a unique prefix for all types and library functions,
+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+ * Even better than compiling with -DZ_PREFIX would be to use configure to set
+ * this permanently in zconf.h using "./configure --zprefix".
+ */
+#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
+# define Z_PREFIX_SET
+
+/* all linked symbols and init macros */
+# define _dist_code z__dist_code
+# define _length_code z__length_code
+# define _tr_align z__tr_align
+# define _tr_flush_bits z__tr_flush_bits
+# define _tr_flush_block z__tr_flush_block
+# define _tr_init z__tr_init
+# define _tr_stored_block z__tr_stored_block
+# define _tr_tally z__tr_tally
+# define adler32 z_adler32
+# define adler32_combine z_adler32_combine
+# define adler32_combine64 z_adler32_combine64
+# define adler32_z z_adler32_z
+# ifndef Z_SOLO
+# define compress z_compress
+# define compress2 z_compress2
+# define compressBound z_compressBound
+# endif
+# define crc32 z_crc32
+# define crc32_combine z_crc32_combine
+# define crc32_combine64 z_crc32_combine64
+# define crc32_combine_gen z_crc32_combine_gen
+# define crc32_combine_gen64 z_crc32_combine_gen64
+# define crc32_combine_op z_crc32_combine_op
+# define crc32_z z_crc32_z
+# define deflate z_deflate
+# define deflateBound z_deflateBound
+# define deflateCopy z_deflateCopy
+# define deflateEnd z_deflateEnd
+# define deflateGetDictionary z_deflateGetDictionary
+# define deflateInit z_deflateInit
+# define deflateInit2 z_deflateInit2
+# define deflateInit2_ z_deflateInit2_
+# define deflateInit_ z_deflateInit_
+# define deflateParams z_deflateParams
+# define deflatePending z_deflatePending
+# define deflatePrime z_deflatePrime
+# define deflateReset z_deflateReset
+# define deflateResetKeep z_deflateResetKeep
+# define deflateSetDictionary z_deflateSetDictionary
+# define deflateSetHeader z_deflateSetHeader
+# define deflateTune z_deflateTune
+# define deflate_copyright z_deflate_copyright
+# define get_crc_table z_get_crc_table
+# ifndef Z_SOLO
+# define gz_error z_gz_error
+# define gz_intmax z_gz_intmax
+# define gz_strwinerror z_gz_strwinerror
+# define gzbuffer z_gzbuffer
+# define gzclearerr z_gzclearerr
+# define gzclose z_gzclose
+# define gzclose_r z_gzclose_r
+# define gzclose_w z_gzclose_w
+# define gzdirect z_gzdirect
+# define gzdopen z_gzdopen
+# define gzeof z_gzeof
+# define gzerror z_gzerror
+# define gzflush z_gzflush
+# define gzfread z_gzfread
+# define gzfwrite z_gzfwrite
+# define gzgetc z_gzgetc
+# define gzgetc_ z_gzgetc_
+# define gzgets z_gzgets
+# define gzoffset z_gzoffset
+# define gzoffset64 z_gzoffset64
+# define gzopen z_gzopen
+# define gzopen64 z_gzopen64
+# ifdef _WIN32
+# define gzopen_w z_gzopen_w
+# endif
+# define gzprintf z_gzprintf
+# define gzputc z_gzputc
+# define gzputs z_gzputs
+# define gzread z_gzread
+# define gzrewind z_gzrewind
+# define gzseek z_gzseek
+# define gzseek64 z_gzseek64
+# define gzsetparams z_gzsetparams
+# define gztell z_gztell
+# define gztell64 z_gztell64
+# define gzungetc z_gzungetc
+# define gzvprintf z_gzvprintf
+# define gzwrite z_gzwrite
+# endif
+# define inflate z_inflate
+# define inflateBack z_inflateBack
+# define inflateBackEnd z_inflateBackEnd
+# define inflateBackInit z_inflateBackInit
+# define inflateBackInit_ z_inflateBackInit_
+# define inflateCodesUsed z_inflateCodesUsed
+# define inflateCopy z_inflateCopy
+# define inflateEnd z_inflateEnd
+# define inflateGetDictionary z_inflateGetDictionary
+# define inflateGetHeader z_inflateGetHeader
+# define inflateInit z_inflateInit
+# define inflateInit2 z_inflateInit2
+# define inflateInit2_ z_inflateInit2_
+# define inflateInit_ z_inflateInit_
+# define inflateMark z_inflateMark
+# define inflatePrime z_inflatePrime
+# define inflateReset z_inflateReset
+# define inflateReset2 z_inflateReset2
+# define inflateResetKeep z_inflateResetKeep
+# define inflateSetDictionary z_inflateSetDictionary
+# define inflateSync z_inflateSync
+# define inflateSyncPoint z_inflateSyncPoint
+# define inflateUndermine z_inflateUndermine
+# define inflateValidate z_inflateValidate
+# define inflate_copyright z_inflate_copyright
+# define inflate_fast z_inflate_fast
+# define inflate_table z_inflate_table
+# ifndef Z_SOLO
+# define uncompress z_uncompress
+# define uncompress2 z_uncompress2
+# endif
+# define zError z_zError
+# ifndef Z_SOLO
+# define zcalloc z_zcalloc
+# define zcfree z_zcfree
+# endif
+# define zlibCompileFlags z_zlibCompileFlags
+# define zlibVersion z_zlibVersion
+
+/* all zlib typedefs in zlib.h and zconf.h */
+# define Byte z_Byte
+# define Bytef z_Bytef
+# define alloc_func z_alloc_func
+# define charf z_charf
+# define free_func z_free_func
+# ifndef Z_SOLO
+# define gzFile z_gzFile
+# endif
+# define gz_header z_gz_header
+# define gz_headerp z_gz_headerp
+# define in_func z_in_func
+# define intf z_intf
+# define out_func z_out_func
+# define uInt z_uInt
+# define uIntf z_uIntf
+# define uLong z_uLong
+# define uLongf z_uLongf
+# define voidp z_voidp
+# define voidpc z_voidpc
+# define voidpf z_voidpf
+
+/* all zlib structs in zlib.h and zconf.h */
+# define gz_header_s z_gz_header_s
+# define internal_state z_internal_state
+
+#endif
+
+#if defined(__MSDOS__) && !defined(MSDOS)
+# define MSDOS
+#endif
+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+# define OS2
+#endif
+#if defined(_WINDOWS) && !defined(WINDOWS)
+# define WINDOWS
+#endif
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
+# ifndef WIN32
+# define WIN32
+# endif
+#endif
+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+# ifndef SYS16BIT
+# define SYS16BIT
+# endif
+# endif
+#endif
+
+/*
+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
+ * than 64k bytes at a time (needed on systems with 16-bit int).
+ */
+#ifdef SYS16BIT
+# define MAXSEG_64K
+#endif
+#ifdef MSDOS
+# define UNALIGNED_OK
+#endif
+
+#ifdef __STDC_VERSION__
+# ifndef STDC
+# define STDC
+# endif
+# if __STDC_VERSION__ >= 199901L
+# ifndef STDC99
+# define STDC99
+# endif
+# endif
+#endif
+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+# define STDC
+#endif
+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+# define STDC
+#endif
+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+# define STDC
+#endif
+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+# define STDC
+#endif
+
+#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */
+# define STDC
+#endif
+
+#ifndef STDC
+# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
+# define const /* note: need a more gentle solution here */
+# endif
+#endif
+
+#if defined(ZLIB_CONST) && !defined(z_const)
+# define z_const const
+#else
+# define z_const
+#endif
+
+#ifdef Z_SOLO
+# ifdef _WIN64
+ typedef unsigned long long z_size_t;
+# else
+ typedef unsigned long z_size_t;
+# endif
+#else
+# define z_longlong long long
+# if defined(NO_SIZE_T)
+ typedef unsigned NO_SIZE_T z_size_t;
+# elif defined(STDC)
+# include
+ typedef size_t z_size_t;
+# else
+ typedef unsigned long z_size_t;
+# endif
+# undef z_longlong
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+# ifdef MAXSEG_64K
+# define MAX_MEM_LEVEL 8
+# else
+# define MAX_MEM_LEVEL 9
+# endif
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MAX_WBITS
+# define MAX_WBITS 15 /* 32K LZ77 window */
+#endif
+
+/* The memory requirements for deflate are (in bytes):
+ (1 << (windowBits+2)) + (1 << (memLevel+9))
+ that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+ make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+ The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus about 7 kilobytes
+ for small objects.
+*/
+
+ /* Type declarations */
+
+#ifndef OF /* function prototypes */
+# ifdef STDC
+# define OF(args) args
+# else
+# define OF(args) ()
+# endif
+#endif
+
+/* The following definitions for FAR are needed only for MSDOS mixed
+ * model programming (small or medium model with some far allocations).
+ * This was tested only with MSC; for other MSDOS compilers you may have
+ * to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
+ * just define FAR to be empty.
+ */
+#ifdef SYS16BIT
+# if defined(M_I86SM) || defined(M_I86MM)
+ /* MSC small or medium model */
+# define SMALL_MEDIUM
+# ifdef _MSC_VER
+# define FAR _far
+# else
+# define FAR far
+# endif
+# endif
+# if (defined(__SMALL__) || defined(__MEDIUM__))
+ /* Turbo C small or medium model */
+# define SMALL_MEDIUM
+# ifdef __BORLANDC__
+# define FAR _far
+# else
+# define FAR far
+# endif
+# endif
+#endif
+
+#if defined(WINDOWS) || defined(WIN32)
+ /* If building or using zlib as a DLL, define ZLIB_DLL.
+ * This is not mandatory, but it offers a little performance increase.
+ */
+# if 0
+# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+# ifdef ZLIB_INTERNAL
+# define ZEXTERN extern __declspec(dllexport)
+# else
+# define ZEXTERN extern __declspec(dllimport)
+# endif
+# endif
+# endif /* ZLIB_DLL */
+ /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+ * define ZLIB_WINAPI.
+ * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+ */
+# ifdef ZLIB_WINAPI
+# ifdef FAR
+# undef FAR
+# endif
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
+# include
+ /* No need for _export, use ZLIB.DEF instead. */
+ /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+# define ZEXPORT WINAPI
+# ifdef WIN32
+# define ZEXPORTVA WINAPIV
+# else
+# define ZEXPORTVA FAR CDECL
+# endif
+# endif
+#endif
+
+#if defined (__BEOS__)
+# if 0
+# ifdef ZLIB_INTERNAL
+# define ZEXPORT __declspec(dllexport)
+# define ZEXPORTVA __declspec(dllexport)
+# else
+# define ZEXPORT __declspec(dllimport)
+# define ZEXPORTVA __declspec(dllimport)
+# endif
+# endif
+#endif
+
+#ifndef ZEXTERN
+# define ZEXTERN extern
+#endif
+#ifndef ZEXPORT
+# define ZEXPORT
+#endif
+#ifndef ZEXPORTVA
+# define ZEXPORTVA
+#endif
+
+#ifndef FAR
+# define FAR
+#endif
+
+#if !defined(__MACTYPES__)
+typedef unsigned char Byte; /* 8 bits */
+#endif
+typedef unsigned int uInt; /* 16 bits or more */
+typedef unsigned long uLong; /* 32 bits or more */
+
+#ifdef SMALL_MEDIUM
+ /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
+# define Bytef Byte FAR
+#else
+ typedef Byte FAR Bytef;
+#endif
+typedef char FAR charf;
+typedef int FAR intf;
+typedef uInt FAR uIntf;
+typedef uLong FAR uLongf;
+
+#ifdef STDC
+ typedef void const *voidpc;
+ typedef void FAR *voidpf;
+ typedef void *voidp;
+#else
+ typedef Byte const *voidpc;
+ typedef Byte FAR *voidpf;
+ typedef Byte *voidp;
+#endif
+
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+# include
+# if (UINT_MAX == 0xffffffffUL)
+# define Z_U4 unsigned
+# elif (ULONG_MAX == 0xffffffffUL)
+# define Z_U4 unsigned long
+# elif (USHRT_MAX == 0xffffffffUL)
+# define Z_U4 unsigned short
+# endif
+#endif
+
+#ifdef Z_U4
+ typedef Z_U4 z_crc_t;
+#else
+ typedef unsigned long z_crc_t;
+#endif
+
+#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */
+# if ~(~HAVE_UNISTD_H + 0) == 0 && ~(~HAVE_UNISTD_H + 1) == 1
+# define Z_HAVE_UNISTD_H
+# elif HAVE_UNISTD_H != 0
+# define Z_HAVE_UNISTD_H
+# endif
+#endif
+
+#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */
+# if ~(~HAVE_STDARG_H + 0) == 0 && ~(~HAVE_STDARG_H + 1) == 1
+# define Z_HAVE_STDARG_H
+# elif HAVE_STDARG_H != 0
+# define Z_HAVE_STDARG_H
+# endif
+#endif
+
+#ifdef STDC
+# ifndef Z_SOLO
+# include /* for off_t */
+# endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# ifndef Z_SOLO
+# include /* for va_list */
+# endif
+#endif
+
+#ifdef _WIN32
+# ifndef Z_SOLO
+# include /* for wchar_t */
+# endif
+#endif
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+# undef _LARGEFILE64_SOURCE
+#endif
+
+#ifndef Z_HAVE_UNISTD_H
+# ifdef __WATCOMC__
+# define Z_HAVE_UNISTD_H
+# endif
+#endif
+#ifndef Z_HAVE_UNISTD_H
+# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32)
+# define Z_HAVE_UNISTD_H
+# endif
+#endif
+#ifndef Z_SOLO
+# if defined(Z_HAVE_UNISTD_H)
+# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+# ifdef VMS
+# include /* for off_t */
+# endif
+# ifndef z_off_t
+# define z_off_t off_t
+# endif
+# endif
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+# define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+# define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+# define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
+# define SEEK_SET 0 /* Seek from beginning of file. */
+# define SEEK_CUR 1 /* Seek from current position. */
+# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
+#endif
+
+#ifndef z_off_t
+# define z_off_t long
+#endif
+
+#if !defined(_WIN32) && defined(Z_LARGE64)
+# define z_off64_t off64_t
+#else
+# if defined(_WIN32) && !defined(__GNUC__)
+# define z_off64_t __int64
+# else
+# define z_off64_t z_off_t
+# endif
+#endif
+
+/* MVS linker does not support external names larger than 8 bytes */
+#if defined(__MVS__)
+ #pragma map(deflateInit_,"DEIN")
+ #pragma map(deflateInit2_,"DEIN2")
+ #pragma map(deflateEnd,"DEEND")
+ #pragma map(deflateBound,"DEBND")
+ #pragma map(inflateInit_,"ININ")
+ #pragma map(inflateInit2_,"ININ2")
+ #pragma map(inflateEnd,"INEND")
+ #pragma map(inflateSync,"INSY")
+ #pragma map(inflateSetDictionary,"INSEDI")
+ #pragma map(compressBound,"CMBND")
+ #pragma map(inflate_table,"INTABL")
+ #pragma map(inflate_fast,"INFA")
+ #pragma map(inflate_copyright,"INCOPY")
+#endif
+
+#endif /* ZCONF_H */
diff --git a/vcpkg_installed/arm64-osx/include/zlib.h b/vcpkg_installed/arm64-osx/include/zlib.h
new file mode 100644
index 00000000..8d4b932e
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/include/zlib.h
@@ -0,0 +1,1938 @@
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+ version 1.3.1, January 22nd, 2024
+
+ Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+
+
+ The data format used by the zlib library is described by RFCs (Request for
+ Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
+ (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
+*/
+
+#ifndef ZLIB_H
+#define ZLIB_H
+
+#include "zconf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ZLIB_VERSION "1.3.1"
+#define ZLIB_VERNUM 0x1310
+#define ZLIB_VER_MAJOR 1
+#define ZLIB_VER_MINOR 3
+#define ZLIB_VER_REVISION 1
+#define ZLIB_VER_SUBREVISION 0
+
+/*
+ The 'zlib' compression library provides in-memory compression and
+ decompression functions, including integrity checks of the uncompressed data.
+ This version of the library supports only one compression method (deflation)
+ but other algorithms will be added later and will have the same stream
+ interface.
+
+ Compression can be done in a single step if the buffers are large enough,
+ or can be done by repeated calls of the compression function. In the latter
+ case, the application must provide more input and/or consume the output
+ (providing more output space) before each call.
+
+ The compressed data format used by default by the in-memory functions is
+ the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
+ around a deflate stream, which is itself documented in RFC 1951.
+
+ The library also supports reading and writing files in gzip (.gz) format
+ with an interface similar to that of stdio using the functions that start
+ with "gz". The gzip format is different from the zlib format. gzip is a
+ gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
+
+ This library can optionally read and write gzip and raw deflate streams in
+ memory as well.
+
+ The zlib format was designed to be compact and fast for use in memory
+ and on communications channels. The gzip format was designed for single-
+ file compression on file systems, has a larger header than zlib to maintain
+ directory information, and uses a different, slower check method than zlib.
+
+ The library does not install any signal handler. The decoder checks
+ the consistency of the compressed data, so the library should never crash
+ even in the case of corrupted input.
+*/
+
+typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size);
+typedef void (*free_func)(voidpf opaque, voidpf address);
+
+struct internal_state;
+
+typedef struct z_stream_s {
+ z_const Bytef *next_in; /* next input byte */
+ uInt avail_in; /* number of bytes available at next_in */
+ uLong total_in; /* total number of input bytes read so far */
+
+ Bytef *next_out; /* next output byte will go here */
+ uInt avail_out; /* remaining free space at next_out */
+ uLong total_out; /* total number of bytes output so far */
+
+ z_const char *msg; /* last error message, NULL if no error */
+ struct internal_state FAR *state; /* not visible by applications */
+
+ alloc_func zalloc; /* used to allocate the internal state */
+ free_func zfree; /* used to free the internal state */
+ voidpf opaque; /* private data object passed to zalloc and zfree */
+
+ int data_type; /* best guess about the data type: binary or text
+ for deflate, or the decoding state for inflate */
+ uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */
+ uLong reserved; /* reserved for future use */
+} z_stream;
+
+typedef z_stream FAR *z_streamp;
+
+/*
+ gzip header information passed to and from zlib routines. See RFC 1952
+ for more details on the meanings of these fields.
+*/
+typedef struct gz_header_s {
+ int text; /* true if compressed data believed to be text */
+ uLong time; /* modification time */
+ int xflags; /* extra flags (not used when writing a gzip file) */
+ int os; /* operating system */
+ Bytef *extra; /* pointer to extra field or Z_NULL if none */
+ uInt extra_len; /* extra field length (valid if extra != Z_NULL) */
+ uInt extra_max; /* space at extra (only when reading header) */
+ Bytef *name; /* pointer to zero-terminated file name or Z_NULL */
+ uInt name_max; /* space at name (only when reading header) */
+ Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */
+ uInt comm_max; /* space at comment (only when reading header) */
+ int hcrc; /* true if there was or will be a header crc */
+ int done; /* true when done reading gzip header (not used
+ when writing a gzip file) */
+} gz_header;
+
+typedef gz_header FAR *gz_headerp;
+
+/*
+ The application must update next_in and avail_in when avail_in has dropped
+ to zero. It must update next_out and avail_out when avail_out has dropped
+ to zero. The application must initialize zalloc, zfree and opaque before
+ calling the init function. All other fields are set by the compression
+ library and must not be updated by the application.
+
+ The opaque value provided by the application will be passed as the first
+ parameter for calls of zalloc and zfree. This can be useful for custom
+ memory management. The compression library attaches no meaning to the
+ opaque value.
+
+ zalloc must return Z_NULL if there is not enough memory for the object.
+ If zlib is used in a multi-threaded application, zalloc and zfree must be
+ thread safe. In that case, zlib is thread-safe. When zalloc and zfree are
+ Z_NULL on entry to the initialization function, they are set to internal
+ routines that use the standard library functions malloc() and free().
+
+ On 16-bit systems, the functions zalloc and zfree must be able to allocate
+ exactly 65536 bytes, but will not be required to allocate more than this if
+ the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers
+ returned by zalloc for objects of exactly 65536 bytes *must* have their
+ offset normalized to zero. The default allocation function provided by this
+ library ensures this (see zutil.c). To reduce memory requirements and avoid
+ any allocation of 64K objects, at the expense of compression ratio, compile
+ the library with -DMAX_WBITS=14 (see zconf.h).
+
+ The fields total_in and total_out can be used for statistics or progress
+ reports. After compression, total_in holds the total size of the
+ uncompressed data and may be saved for use by the decompressor (particularly
+ if the decompressor wants to decompress everything in a single step).
+*/
+
+ /* constants */
+
+#define Z_NO_FLUSH 0
+#define Z_PARTIAL_FLUSH 1
+#define Z_SYNC_FLUSH 2
+#define Z_FULL_FLUSH 3
+#define Z_FINISH 4
+#define Z_BLOCK 5
+#define Z_TREES 6
+/* Allowed flush values; see deflate() and inflate() below for details */
+
+#define Z_OK 0
+#define Z_STREAM_END 1
+#define Z_NEED_DICT 2
+#define Z_ERRNO (-1)
+#define Z_STREAM_ERROR (-2)
+#define Z_DATA_ERROR (-3)
+#define Z_MEM_ERROR (-4)
+#define Z_BUF_ERROR (-5)
+#define Z_VERSION_ERROR (-6)
+/* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
+ */
+
+#define Z_NO_COMPRESSION 0
+#define Z_BEST_SPEED 1
+#define Z_BEST_COMPRESSION 9
+#define Z_DEFAULT_COMPRESSION (-1)
+/* compression levels */
+
+#define Z_FILTERED 1
+#define Z_HUFFMAN_ONLY 2
+#define Z_RLE 3
+#define Z_FIXED 4
+#define Z_DEFAULT_STRATEGY 0
+/* compression strategy; see deflateInit2() below for details */
+
+#define Z_BINARY 0
+#define Z_TEXT 1
+#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */
+#define Z_UNKNOWN 2
+/* Possible values of the data_type field for deflate() */
+
+#define Z_DEFLATED 8
+/* The deflate compression method (the only one supported in this version) */
+
+#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */
+
+#define zlib_version zlibVersion()
+/* for compatibility with versions < 1.0.2 */
+
+
+ /* basic functions */
+
+ZEXTERN const char * ZEXPORT zlibVersion(void);
+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
+ If the first character differs, the library code actually used is not
+ compatible with the zlib.h header file used by the application. This check
+ is automatically made by deflateInit and inflateInit.
+ */
+
+/*
+ZEXTERN int ZEXPORT deflateInit(z_streamp strm, int level);
+
+ Initializes the internal stream state for compression. The fields
+ zalloc, zfree and opaque must be initialized before by the caller. If
+ zalloc and zfree are set to Z_NULL, deflateInit updates them to use default
+ allocation functions. total_in, total_out, adler, and msg are initialized.
+
+ The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
+ 1 gives best speed, 9 gives best compression, 0 gives no compression at all
+ (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION
+ requests a default compromise between speed and compression (currently
+ equivalent to level 6).
+
+ deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_STREAM_ERROR if level is not a valid compression level, or
+ Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
+ with the version assumed by the caller (ZLIB_VERSION). msg is set to null
+ if there is no error message. deflateInit does not perform any compression:
+ this will be done by deflate().
+*/
+
+
+ZEXTERN int ZEXPORT deflate(z_streamp strm, int flush);
+/*
+ deflate compresses as much data as possible, and stops when the input
+ buffer becomes empty or the output buffer becomes full. It may introduce
+ some output latency (reading input without producing any output) except when
+ forced to flush.
+
+ The detailed semantics are as follows. deflate performs one or both of the
+ following actions:
+
+ - Compress more input starting at next_in and update next_in and avail_in
+ accordingly. If not all input can be processed (because there is not
+ enough room in the output buffer), next_in and avail_in are updated and
+ processing will resume at this point for the next call of deflate().
+
+ - Generate more output starting at next_out and update next_out and avail_out
+ accordingly. This action is forced if the parameter flush is non zero.
+ Forcing flush frequently degrades the compression ratio, so this parameter
+ should be set only when necessary. Some output may be provided even if
+ flush is zero.
+
+ Before the call of deflate(), the application should ensure that at least
+ one of the actions is possible, by providing more input and/or consuming more
+ output, and updating avail_in or avail_out accordingly; avail_out should
+ never be zero before the call. The application can consume the compressed
+ output when it wants, for example when the output buffer is full (avail_out
+ == 0), or after each call of deflate(). If deflate returns Z_OK and with
+ zero avail_out, it must be called again after making room in the output
+ buffer because there might be more output pending. See deflatePending(),
+ which can be used if desired to determine whether or not there is more output
+ in that case.
+
+ Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
+ decide how much data to accumulate before producing output, in order to
+ maximize compression.
+
+ If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
+ flushed to the output buffer and the output is aligned on a byte boundary, so
+ that the decompressor can get all input data available so far. (In
+ particular avail_in is zero after the call if enough output space has been
+ provided before the call.) Flushing may degrade compression for some
+ compression algorithms and so it should be used only when necessary. This
+ completes the current deflate block and follows it with an empty stored block
+ that is three bits plus filler bits to the next byte, followed by four bytes
+ (00 00 ff ff).
+
+ If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the
+ output buffer, but the output is not aligned to a byte boundary. All of the
+ input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
+ This completes the current deflate block and follows it with an empty fixed
+ codes block that is 10 bits long. This assures that enough bytes are output
+ in order for the decompressor to finish the block before the empty fixed
+ codes block.
+
+ If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
+ for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
+ seven bits of the current block are held to be written as the next byte after
+ the next deflate block is completed. In this case, the decompressor may not
+ be provided enough bits at this point in order to complete decompression of
+ the data provided so far to the compressor. It may need to wait for the next
+ block to be emitted. This is for advanced applications that need to control
+ the emission of deflate blocks.
+
+ If flush is set to Z_FULL_FLUSH, all output is flushed as with
+ Z_SYNC_FLUSH, and the compression state is reset so that decompression can
+ restart from this point if previous compressed data has been damaged or if
+ random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
+ compression.
+
+ If deflate returns with avail_out == 0, this function must be called again
+ with the same value of the flush parameter and more output space (updated
+ avail_out), until the flush is complete (deflate returns with non-zero
+ avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
+ avail_out is greater than six when the flush marker begins, in order to avoid
+ repeated flush markers upon calling deflate() again when avail_out == 0.
+
+ If the parameter flush is set to Z_FINISH, pending input is processed,
+ pending output is flushed and deflate returns with Z_STREAM_END if there was
+ enough output space. If deflate returns with Z_OK or Z_BUF_ERROR, this
+ function must be called again with Z_FINISH and more output space (updated
+ avail_out) but no more input data, until it returns with Z_STREAM_END or an
+ error. After deflate has returned Z_STREAM_END, the only possible operations
+ on the stream are deflateReset or deflateEnd.
+
+ Z_FINISH can be used in the first deflate call after deflateInit if all the
+ compression is to be done in a single step. In order to complete in one
+ call, avail_out must be at least the value returned by deflateBound (see
+ below). Then deflate is guaranteed to return Z_STREAM_END. If not enough
+ output space is provided, deflate will not return Z_STREAM_END, and it must
+ be called again as described above.
+
+ deflate() sets strm->adler to the Adler-32 checksum of all input read
+ so far (that is, total_in bytes). If a gzip stream is being generated, then
+ strm->adler will be the CRC-32 checksum of the input read so far. (See
+ deflateInit2 below.)
+
+ deflate() may update strm->data_type if it can make a good guess about
+ the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is
+ considered binary. This field is only for information purposes and does not
+ affect the compression algorithm in any manner.
+
+ deflate() returns Z_OK if some progress has been made (more input
+ processed or more output produced), Z_STREAM_END if all input has been
+ consumed and all output has been produced (only when flush is set to
+ Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
+ if next_in or next_out was Z_NULL or the state was inadvertently written over
+ by the application), or Z_BUF_ERROR if no progress is possible (for example
+ avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and
+ deflate() can be called again with more input and more output space to
+ continue compressing.
+*/
+
+
+ZEXTERN int ZEXPORT deflateEnd(z_streamp strm);
+/*
+ All dynamically allocated data structures for this stream are freed.
+ This function discards any unprocessed input and does not flush any pending
+ output.
+
+ deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
+ stream state was inconsistent, Z_DATA_ERROR if the stream was freed
+ prematurely (some input or output was discarded). In the error case, msg
+ may be set but then points to a static string (which must not be
+ deallocated).
+*/
+
+
+/*
+ZEXTERN int ZEXPORT inflateInit(z_streamp strm);
+
+ Initializes the internal stream state for decompression. The fields
+ next_in, avail_in, zalloc, zfree and opaque must be initialized before by
+ the caller. In the current version of inflate, the provided input is not
+ read or consumed. The allocation of a sliding window will be deferred to
+ the first call of inflate (if the decompression does not complete on the
+ first call). If zalloc and zfree are set to Z_NULL, inflateInit updates
+ them to use default allocation functions. total_in, total_out, adler, and
+ msg are initialized.
+
+ inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+ version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+ invalid, such as a null pointer to the structure. msg is set to null if
+ there is no error message. inflateInit does not perform any decompression.
+ Actual decompression will be done by inflate(). So next_in, and avail_in,
+ next_out, and avail_out are unused and unchanged. The current
+ implementation of inflateInit() does not process any header information --
+ that is deferred until inflate() is called.
+*/
+
+
+ZEXTERN int ZEXPORT inflate(z_streamp strm, int flush);
+/*
+ inflate decompresses as much data as possible, and stops when the input
+ buffer becomes empty or the output buffer becomes full. It may introduce
+ some output latency (reading input without producing any output) except when
+ forced to flush.
+
+ The detailed semantics are as follows. inflate performs one or both of the
+ following actions:
+
+ - Decompress more input starting at next_in and update next_in and avail_in
+ accordingly. If not all input can be processed (because there is not
+ enough room in the output buffer), then next_in and avail_in are updated
+ accordingly, and processing will resume at this point for the next call of
+ inflate().
+
+ - Generate more output starting at next_out and update next_out and avail_out
+ accordingly. inflate() provides as much output as possible, until there is
+ no more input data or no more space in the output buffer (see below about
+ the flush parameter).
+
+ Before the call of inflate(), the application should ensure that at least
+ one of the actions is possible, by providing more input and/or consuming more
+ output, and updating the next_* and avail_* values accordingly. If the
+ caller of inflate() does not provide both available input and available
+ output space, it is possible that there will be no progress made. The
+ application can consume the uncompressed output when it wants, for example
+ when the output buffer is full (avail_out == 0), or after each call of
+ inflate(). If inflate returns Z_OK and with zero avail_out, it must be
+ called again after making room in the output buffer because there might be
+ more output pending.
+
+ The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH,
+ Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much
+ output as possible to the output buffer. Z_BLOCK requests that inflate()
+ stop if and when it gets to the next deflate block boundary. When decoding
+ the zlib or gzip format, this will cause inflate() to return immediately
+ after the header and before the first block. When doing a raw inflate,
+ inflate() will go ahead and process the first block, and will return when it
+ gets to the end of that block, or when it runs out of data.
+
+ The Z_BLOCK option assists in appending to or combining deflate streams.
+ To assist in this, on return inflate() always sets strm->data_type to the
+ number of unused bits in the last byte taken from strm->next_in, plus 64 if
+ inflate() is currently decoding the last block in the deflate stream, plus
+ 128 if inflate() returned immediately after decoding an end-of-block code or
+ decoding the complete header up to just before the first byte of the deflate
+ stream. The end-of-block will not be indicated until all of the uncompressed
+ data from that block has been written to strm->next_out. The number of
+ unused bits may in general be greater than seven, except when bit 7 of
+ data_type is set, in which case the number of unused bits will be less than
+ eight. data_type is set as noted here every time inflate() returns for all
+ flush options, and so can be used to determine the amount of currently
+ consumed input in bits.
+
+ The Z_TREES option behaves as Z_BLOCK does, but it also returns when the
+ end of each deflate block header is reached, before any actual data in that
+ block is decoded. This allows the caller to determine the length of the
+ deflate block header for later use in random access within a deflate block.
+ 256 is added to the value of strm->data_type when inflate() returns
+ immediately after reaching the end of the deflate block header.
+
+ inflate() should normally be called until it returns Z_STREAM_END or an
+ error. However if all decompression is to be performed in a single step (a
+ single call of inflate), the parameter flush should be set to Z_FINISH. In
+ this case all pending input is processed and all pending output is flushed;
+ avail_out must be large enough to hold all of the uncompressed data for the
+ operation to complete. (The size of the uncompressed data may have been
+ saved by the compressor for this purpose.) The use of Z_FINISH is not
+ required to perform an inflation in one step. However it may be used to
+ inform inflate that a faster approach can be used for the single inflate()
+ call. Z_FINISH also informs inflate to not maintain a sliding window if the
+ stream completes, which reduces inflate's memory footprint. If the stream
+ does not complete, either because not all of the stream is provided or not
+ enough output space is provided, then a sliding window will be allocated and
+ inflate() can be called again to continue the operation as if Z_NO_FLUSH had
+ been used.
+
+ In this implementation, inflate() always flushes as much output as
+ possible to the output buffer, and always uses the faster approach on the
+ first call. So the effects of the flush parameter in this implementation are
+ on the return value of inflate() as noted below, when inflate() returns early
+ when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of
+ memory for a sliding window when Z_FINISH is used.
+
+ If a preset dictionary is needed after this call (see inflateSetDictionary
+ below), inflate sets strm->adler to the Adler-32 checksum of the dictionary
+ chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
+ strm->adler to the Adler-32 checksum of all output produced so far (that is,
+ total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
+ below. At the end of the stream, inflate() checks that its computed Adler-32
+ checksum is equal to that saved by the compressor and returns Z_STREAM_END
+ only if the checksum is correct.
+
+ inflate() can decompress and check either zlib-wrapped or gzip-wrapped
+ deflate data. The header type is detected automatically, if requested when
+ initializing with inflateInit2(). Any information contained in the gzip
+ header is not retained unless inflateGetHeader() is used. When processing
+ gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
+ produced so far. The CRC-32 is checked against the gzip trailer, as is the
+ uncompressed length, modulo 2^32.
+
+ inflate() returns Z_OK if some progress has been made (more input processed
+ or more output produced), Z_STREAM_END if the end of the compressed data has
+ been reached and all uncompressed output has been produced, Z_NEED_DICT if a
+ preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
+ corrupted (input stream not conforming to the zlib format or incorrect check
+ value, in which case strm->msg points to a string with a more specific
+ error), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+ next_in or next_out was Z_NULL, or the state was inadvertently written over
+ by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR
+ if no progress was possible or if there was not enough room in the output
+ buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
+ inflate() can be called again with more input and more output space to
+ continue decompressing. If Z_DATA_ERROR is returned, the application may
+ then call inflateSync() to look for a good compression block if a partial
+ recovery of the data is to be attempted.
+*/
+
+
+ZEXTERN int ZEXPORT inflateEnd(z_streamp strm);
+/*
+ All dynamically allocated data structures for this stream are freed.
+ This function discards any unprocessed input and does not flush any pending
+ output.
+
+ inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state
+ was inconsistent.
+*/
+
+
+ /* Advanced functions */
+
+/*
+ The following functions are needed only in some special applications.
+*/
+
+/*
+ZEXTERN int ZEXPORT deflateInit2(z_streamp strm,
+ int level,
+ int method,
+ int windowBits,
+ int memLevel,
+ int strategy);
+
+ This is another version of deflateInit with more compression options. The
+ fields zalloc, zfree and opaque must be initialized before by the caller.
+
+ The method parameter is the compression method. It must be Z_DEFLATED in
+ this version of the library.
+
+ The windowBits parameter is the base two logarithm of the window size
+ (the size of the history buffer). It should be in the range 8..15 for this
+ version of the library. Larger values of this parameter result in better
+ compression at the expense of memory usage. The default value is 15 if
+ deflateInit is used instead.
+
+ For the current implementation of deflate(), a windowBits value of 8 (a
+ window size of 256 bytes) is not supported. As a result, a request for 8
+ will result in 9 (a 512-byte window). In that case, providing 8 to
+ inflateInit2() will result in an error when the zlib header with 9 is
+ checked against the initialization of inflate(). The remedy is to not use 8
+ with deflateInit2() with this initialization, or at least in that case use 9
+ with inflateInit2().
+
+ windowBits can also be -8..-15 for raw deflate. In this case, -windowBits
+ determines the window size. deflate() will then generate raw deflate data
+ with no zlib header or trailer, and will not compute a check value.
+
+ windowBits can also be greater than 15 for optional gzip encoding. Add
+ 16 to windowBits to write a simple gzip header and trailer around the
+ compressed data instead of a zlib wrapper. The gzip header will have no
+ file name, no extra data, no comment, no modification time (set to zero), no
+ header crc, and the operating system will be set to the appropriate value,
+ if the operating system was determined at compile time. If a gzip stream is
+ being written, strm->adler is a CRC-32 instead of an Adler-32.
+
+ For raw deflate or gzip encoding, a request for a 256-byte window is
+ rejected as invalid, since only the zlib header provides a means of
+ transmitting the window size to the decompressor.
+
+ The memLevel parameter specifies how much memory should be allocated
+ for the internal compression state. memLevel=1 uses minimum memory but is
+ slow and reduces compression ratio; memLevel=9 uses maximum memory for
+ optimal speed. The default value is 8. See zconf.h for total memory usage
+ as a function of windowBits and memLevel.
+
+ The strategy parameter is used to tune the compression algorithm. Use the
+ value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
+ filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
+ string match), or Z_RLE to limit match distances to one (run-length
+ encoding). Filtered data consists mostly of small values with a somewhat
+ random distribution. In this case, the compression algorithm is tuned to
+ compress them better. The effect of Z_FILTERED is to force more Huffman
+ coding and less string matching; it is somewhat intermediate between
+ Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as
+ fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The
+ strategy parameter only affects the compression ratio but not the
+ correctness of the compressed output even if it is not set appropriately.
+ Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler
+ decoder for special applications.
+
+ deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid
+ method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is
+ incompatible with the version assumed by the caller (ZLIB_VERSION). msg is
+ set to null if there is no error message. deflateInit2 does not perform any
+ compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm,
+ const Bytef *dictionary,
+ uInt dictLength);
+/*
+ Initializes the compression dictionary from the given byte sequence
+ without producing any compressed output. When using the zlib format, this
+ function must be called immediately after deflateInit, deflateInit2 or
+ deflateReset, and before any call of deflate. When doing raw deflate, this
+ function must be called either before any call of deflate, or immediately
+ after the completion of a deflate block, i.e. after all input has been
+ consumed and all output has been delivered when using any of the flush
+ options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The
+ compressor and decompressor must use exactly the same dictionary (see
+ inflateSetDictionary).
+
+ The dictionary should consist of strings (byte sequences) that are likely
+ to be encountered later in the data to be compressed, with the most commonly
+ used strings preferably put towards the end of the dictionary. Using a
+ dictionary is most useful when the data to be compressed is short and can be
+ predicted with good accuracy; the data can then be compressed better than
+ with the default empty dictionary.
+
+ Depending on the size of the compression data structures selected by
+ deflateInit or deflateInit2, a part of the dictionary may in effect be
+ discarded, for example if the dictionary is larger than the window size
+ provided in deflateInit or deflateInit2. Thus the strings most likely to be
+ useful should be put at the end of the dictionary, not at the front. In
+ addition, the current implementation of deflate will use at most the window
+ size minus 262 bytes of the provided dictionary.
+
+ Upon return of this function, strm->adler is set to the Adler-32 value
+ of the dictionary; the decompressor may later use this value to determine
+ which dictionary has been used by the compressor. (The Adler-32 value
+ applies to the whole dictionary even if only a subset of the dictionary is
+ actually used by the compressor.) If a raw deflate was requested, then the
+ Adler-32 value is not computed and strm->adler is not set.
+
+ deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
+ parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
+ inconsistent (for example if deflate has already been called for this stream
+ or if not at a block boundary for raw deflate). deflateSetDictionary does
+ not perform any compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm,
+ Bytef *dictionary,
+ uInt *dictLength);
+/*
+ Returns the sliding dictionary being maintained by deflate. dictLength is
+ set to the number of bytes in the dictionary, and that many bytes are copied
+ to dictionary. dictionary must have enough space, where 32768 bytes is
+ always enough. If deflateGetDictionary() is called with dictionary equal to
+ Z_NULL, then only the dictionary length is returned, and nothing is copied.
+ Similarly, if dictLength is Z_NULL, then it is not set.
+
+ deflateGetDictionary() may return a length less than the window size, even
+ when more than the window size in input has been provided. It may return up
+ to 258 bytes less in that case, due to how zlib's implementation of deflate
+ manages the sliding window and lookahead for matches, where matches can be
+ up to 258 bytes long. If the application needs the last window-size bytes of
+ input, then that would need to be saved by the application outside of zlib.
+
+ deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+ stream state is inconsistent.
+*/
+
+ZEXTERN int ZEXPORT deflateCopy(z_streamp dest,
+ z_streamp source);
+/*
+ Sets the destination stream as a complete copy of the source stream.
+
+ This function can be useful when several compression strategies will be
+ tried, for example when there are several ways of pre-processing the input
+ data with a filter. The streams that will be discarded should then be freed
+ by calling deflateEnd. Note that deflateCopy duplicates the internal
+ compression state which can be quite large, so this strategy is slow and can
+ consume lots of memory.
+
+ deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+ (such as zalloc being Z_NULL). msg is left unchanged in both source and
+ destination.
+*/
+
+ZEXTERN int ZEXPORT deflateReset(z_streamp strm);
+/*
+ This function is equivalent to deflateEnd followed by deflateInit, but
+ does not free and reallocate the internal compression state. The stream
+ will leave the compression level and any other attributes that may have been
+ set unchanged. total_in, total_out, adler, and msg are initialized.
+
+ deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT deflateParams(z_streamp strm,
+ int level,
+ int strategy);
+/*
+ Dynamically update the compression level and compression strategy. The
+ interpretation of level and strategy is as in deflateInit2(). This can be
+ used to switch between compression and straight copy of the input data, or
+ to switch to a different kind of input data requiring a different strategy.
+ If the compression approach (which is a function of the level) or the
+ strategy is changed, and if there have been any deflate() calls since the
+ state was initialized or reset, then the input available so far is
+ compressed with the old level and strategy using deflate(strm, Z_BLOCK).
+ There are three approaches for the compression levels 0, 1..3, and 4..9
+ respectively. The new level and strategy will take effect at the next call
+ of deflate().
+
+ If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does
+ not have enough output space to complete, then the parameter change will not
+ take effect. In this case, deflateParams() can be called again with the
+ same parameters and more output space to try again.
+
+ In order to assure a change in the parameters on the first try, the
+ deflate stream should be flushed using deflate() with Z_BLOCK or other flush
+ request until strm.avail_out is not zero, before calling deflateParams().
+ Then no more input data should be provided before the deflateParams() call.
+ If this is done, the old level and strategy will be applied to the data
+ compressed before deflateParams(), and the new level and strategy will be
+ applied to the data compressed after deflateParams().
+
+ deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream
+ state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if
+ there was not enough output space to complete the compression of the
+ available input data before a change in the strategy or approach. Note that
+ in the case of a Z_BUF_ERROR, the parameters are not changed. A return
+ value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be
+ retried with more output space.
+*/
+
+ZEXTERN int ZEXPORT deflateTune(z_streamp strm,
+ int good_length,
+ int max_lazy,
+ int nice_length,
+ int max_chain);
+/*
+ Fine tune deflate's internal compression parameters. This should only be
+ used by someone who understands the algorithm used by zlib's deflate for
+ searching for the best matching string, and even then only by the most
+ fanatic optimizer trying to squeeze out the last compressed bit for their
+ specific input data. Read the deflate.c source code for the meaning of the
+ max_lazy, good_length, nice_length, and max_chain parameters.
+
+ deflateTune() can be called after deflateInit() or deflateInit2(), and
+ returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
+ */
+
+ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm,
+ uLong sourceLen);
+/*
+ deflateBound() returns an upper bound on the compressed size after
+ deflation of sourceLen bytes. It must be called after deflateInit() or
+ deflateInit2(), and after deflateSetHeader(), if used. This would be used
+ to allocate an output buffer for deflation in a single pass, and so would be
+ called before deflate(). If that first deflate() call is provided the
+ sourceLen input bytes, an output buffer allocated to the size returned by
+ deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed
+ to return Z_STREAM_END. Note that it is possible for the compressed size to
+ be larger than the value returned by deflateBound() if flush options other
+ than Z_FINISH or Z_NO_FLUSH are used.
+*/
+
+ZEXTERN int ZEXPORT deflatePending(z_streamp strm,
+ unsigned *pending,
+ int *bits);
+/*
+ deflatePending() returns the number of bytes and bits of output that have
+ been generated, but not yet provided in the available output. The bytes not
+ provided would be due to the available output space having being consumed.
+ The number of bits of output not provided are between 0 and 7, where they
+ await more bits to join them in order to fill out a full byte. If pending
+ or bits are Z_NULL, then those values are not set.
+
+ deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+ */
+
+ZEXTERN int ZEXPORT deflatePrime(z_streamp strm,
+ int bits,
+ int value);
+/*
+ deflatePrime() inserts bits in the deflate output stream. The intent
+ is that this function is used to start off the deflate output with the bits
+ leftover from a previous deflate stream when appending to it. As such, this
+ function can only be used for raw deflate, and must be used before the first
+ deflate() call after a deflateInit2() or deflateReset(). bits must be less
+ than or equal to 16, and that many of the least significant bits of value
+ will be inserted in the output.
+
+ deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough
+ room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the
+ source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT deflateSetHeader(z_streamp strm,
+ gz_headerp head);
+/*
+ deflateSetHeader() provides gzip header information for when a gzip
+ stream is requested by deflateInit2(). deflateSetHeader() may be called
+ after deflateInit2() or deflateReset() and before the first call of
+ deflate(). The text, time, os, extra field, name, and comment information
+ in the provided gz_header structure are written to the gzip header (xflag is
+ ignored -- the extra flags are set according to the compression level). The
+ caller must assure that, if not Z_NULL, name and comment are terminated with
+ a zero byte, and that if extra is not Z_NULL, that extra_len bytes are
+ available there. If hcrc is true, a gzip header crc is included. Note that
+ the current versions of the command-line version of gzip (up through version
+ 1.3.x) do not support header crc's, and will report that it is a "multi-part
+ gzip file" and give up.
+
+ If deflateSetHeader is not used, the default gzip header has text false,
+ the time set to zero, and os set to the current operating system, with no
+ extra, name, or comment fields. The gzip header is returned to the default
+ state by deflateReset().
+
+ deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateInit2(z_streamp strm,
+ int windowBits);
+
+ This is another version of inflateInit with an extra parameter. The
+ fields next_in, avail_in, zalloc, zfree and opaque must be initialized
+ before by the caller.
+
+ The windowBits parameter is the base two logarithm of the maximum window
+ size (the size of the history buffer). It should be in the range 8..15 for
+ this version of the library. The default value is 15 if inflateInit is used
+ instead. windowBits must be greater than or equal to the windowBits value
+ provided to deflateInit2() while compressing, or it must be equal to 15 if
+ deflateInit2() was not used. If a compressed stream with a larger window
+ size is given as input, inflate() will return with the error code
+ Z_DATA_ERROR instead of trying to allocate a larger window.
+
+ windowBits can also be zero to request that inflate use the window size in
+ the zlib header of the compressed stream.
+
+ windowBits can also be -8..-15 for raw inflate. In this case, -windowBits
+ determines the window size. inflate() will then process raw deflate data,
+ not looking for a zlib or gzip header, not generating a check value, and not
+ looking for any check values for comparison at the end of the stream. This
+ is for use with other formats that use the deflate compressed data format
+ such as zip. Those formats provide their own check values. If a custom
+ format is developed using the raw deflate format for compressed data, it is
+ recommended that a check value such as an Adler-32 or a CRC-32 be applied to
+ the uncompressed data as is done in the zlib, gzip, and zip formats. For
+ most applications, the zlib format should be used as is. Note that comments
+ above on the use in deflateInit2() applies to the magnitude of windowBits.
+
+ windowBits can also be greater than 15 for optional gzip decoding. Add
+ 32 to windowBits to enable zlib and gzip decoding with automatic header
+ detection, or add 16 to decode only the gzip format (the zlib format will
+ return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a
+ CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see
+ below), inflate() will *not* automatically decode concatenated gzip members.
+ inflate() will return Z_STREAM_END at the end of the gzip member. The state
+ would need to be reset to continue decoding a subsequent gzip member. This
+ *must* be done if there is more data after a gzip member, in order for the
+ decompression to be compliant with the gzip standard (RFC 1952).
+
+ inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+ version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+ invalid, such as a null pointer to the structure. msg is set to null if
+ there is no error message. inflateInit2 does not perform any decompression
+ apart from possibly reading the zlib header if present: actual decompression
+ will be done by inflate(). (So next_in and avail_in may be modified, but
+ next_out and avail_out are unused and unchanged.) The current implementation
+ of inflateInit2() does not process any header information -- that is
+ deferred until inflate() is called.
+*/
+
+ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm,
+ const Bytef *dictionary,
+ uInt dictLength);
+/*
+ Initializes the decompression dictionary from the given uncompressed byte
+ sequence. This function must be called immediately after a call of inflate,
+ if that call returned Z_NEED_DICT. The dictionary chosen by the compressor
+ can be determined from the Adler-32 value returned by that call of inflate.
+ The compressor and decompressor must use exactly the same dictionary (see
+ deflateSetDictionary). For raw inflate, this function can be called at any
+ time to set the dictionary. If the provided dictionary is smaller than the
+ window and there is already data in the window, then the provided dictionary
+ will amend what's there. The application must insure that the dictionary
+ that was used for compression is provided.
+
+ inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
+ parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
+ inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
+ expected one (incorrect Adler-32 value). inflateSetDictionary does not
+ perform any decompression: this will be done by subsequent calls of
+ inflate().
+*/
+
+ZEXTERN int ZEXPORT inflateGetDictionary(z_streamp strm,
+ Bytef *dictionary,
+ uInt *dictLength);
+/*
+ Returns the sliding dictionary being maintained by inflate. dictLength is
+ set to the number of bytes in the dictionary, and that many bytes are copied
+ to dictionary. dictionary must have enough space, where 32768 bytes is
+ always enough. If inflateGetDictionary() is called with dictionary equal to
+ Z_NULL, then only the dictionary length is returned, and nothing is copied.
+ Similarly, if dictLength is Z_NULL, then it is not set.
+
+ inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+ stream state is inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateSync(z_streamp strm);
+/*
+ Skips invalid compressed data until a possible full flush point (see above
+ for the description of deflate with Z_FULL_FLUSH) can be found, or until all
+ available input is skipped. No output is provided.
+
+ inflateSync searches for a 00 00 FF FF pattern in the compressed data.
+ All full flush points have this pattern, but not all occurrences of this
+ pattern are full flush points.
+
+ inflateSync returns Z_OK if a possible full flush point has been found,
+ Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point
+ has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.
+ In the success case, the application may save the current value of total_in
+ which indicates where valid compressed data was found. In the error case,
+ the application may repeatedly call inflateSync, providing more input each
+ time, until success or end of the input data.
+*/
+
+ZEXTERN int ZEXPORT inflateCopy(z_streamp dest,
+ z_streamp source);
+/*
+ Sets the destination stream as a complete copy of the source stream.
+
+ This function can be useful when randomly accessing a large stream. The
+ first pass through the stream can periodically record the inflate state,
+ allowing restarting inflate at those points when randomly accessing the
+ stream.
+
+ inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+ (such as zalloc being Z_NULL). msg is left unchanged in both source and
+ destination.
+*/
+
+ZEXTERN int ZEXPORT inflateReset(z_streamp strm);
+/*
+ This function is equivalent to inflateEnd followed by inflateInit,
+ but does not free and reallocate the internal decompression state. The
+ stream will keep attributes that may have been set by inflateInit2.
+ total_in, total_out, adler, and msg are initialized.
+
+ inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT inflateReset2(z_streamp strm,
+ int windowBits);
+/*
+ This function is the same as inflateReset, but it also permits changing
+ the wrap and window size requests. The windowBits parameter is interpreted
+ the same as it is for inflateInit2. If the window size is changed, then the
+ memory allocated for the window is freed, and the window will be reallocated
+ by inflate() if needed.
+
+ inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent (such as zalloc or state being Z_NULL), or if
+ the windowBits parameter is invalid.
+*/
+
+ZEXTERN int ZEXPORT inflatePrime(z_streamp strm,
+ int bits,
+ int value);
+/*
+ This function inserts bits in the inflate input stream. The intent is
+ that this function is used to start inflating at a bit position in the
+ middle of a byte. The provided bits will be used before any bytes are used
+ from next_in. This function should only be used with raw inflate, and
+ should be used before the first inflate() call after inflateInit2() or
+ inflateReset(). bits must be less than or equal to 16, and that many of the
+ least significant bits of value will be inserted in the input.
+
+ If bits is negative, then the input stream bit buffer is emptied. Then
+ inflatePrime() can be called again to put bits in the buffer. This is used
+ to clear out bits leftover after feeding inflate a block description prior
+ to feeding inflate codes.
+
+ inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+*/
+
+ZEXTERN long ZEXPORT inflateMark(z_streamp strm);
+/*
+ This function returns two values, one in the lower 16 bits of the return
+ value, and the other in the remaining upper bits, obtained by shifting the
+ return value down 16 bits. If the upper value is -1 and the lower value is
+ zero, then inflate() is currently decoding information outside of a block.
+ If the upper value is -1 and the lower value is non-zero, then inflate is in
+ the middle of a stored block, with the lower value equaling the number of
+ bytes from the input remaining to copy. If the upper value is not -1, then
+ it is the number of bits back from the current bit position in the input of
+ the code (literal or length/distance pair) currently being processed. In
+ that case the lower value is the number of bytes already emitted for that
+ code.
+
+ A code is being processed if inflate is waiting for more input to complete
+ decoding of the code, or if it has completed decoding but is waiting for
+ more output space to write the literal or match data.
+
+ inflateMark() is used to mark locations in the input data for random
+ access, which may be at bit positions, and to note those cases where the
+ output of a code may span boundaries of random access blocks. The current
+ location in the input stream can be determined from avail_in and data_type
+ as noted in the description for the Z_BLOCK flush parameter for inflate.
+
+ inflateMark returns the value noted above, or -65536 if the provided
+ source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateGetHeader(z_streamp strm,
+ gz_headerp head);
+/*
+ inflateGetHeader() requests that gzip header information be stored in the
+ provided gz_header structure. inflateGetHeader() may be called after
+ inflateInit2() or inflateReset(), and before the first call of inflate().
+ As inflate() processes the gzip stream, head->done is zero until the header
+ is completed, at which time head->done is set to one. If a zlib stream is
+ being decoded, then head->done is set to -1 to indicate that there will be
+ no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be
+ used to force inflate() to return immediately after header processing is
+ complete and before any actual data is decompressed.
+
+ The text, time, xflags, and os fields are filled in with the gzip header
+ contents. hcrc is set to true if there is a header CRC. (The header CRC
+ was valid if done is set to one.) If extra is not Z_NULL, then extra_max
+ contains the maximum number of bytes to write to extra. Once done is true,
+ extra_len contains the actual extra field length, and extra contains the
+ extra field, or that field truncated if extra_max is less than extra_len.
+ If name is not Z_NULL, then up to name_max characters are written there,
+ terminated with a zero unless the length is greater than name_max. If
+ comment is not Z_NULL, then up to comm_max characters are written there,
+ terminated with a zero unless the length is greater than comm_max. When any
+ of extra, name, or comment are not Z_NULL and the respective field is not
+ present in the header, then that field is set to Z_NULL to signal its
+ absence. This allows the use of deflateSetHeader() with the returned
+ structure to duplicate the header. However if those fields are set to
+ allocated memory, then the application will need to save those pointers
+ elsewhere so that they can be eventually freed.
+
+ If inflateGetHeader is not used, then the header information is simply
+ discarded. The header is always checked for validity, including the header
+ CRC if present. inflateReset() will reset the process to discard the header
+ information. The application would need to call inflateGetHeader() again to
+ retrieve the header from the next gzip stream.
+
+ inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateBackInit(z_streamp strm, int windowBits,
+ unsigned char FAR *window);
+
+ Initialize the internal stream state for decompression using inflateBack()
+ calls. The fields zalloc, zfree and opaque in strm must be initialized
+ before the call. If zalloc and zfree are Z_NULL, then the default library-
+ derived memory allocation routines are used. windowBits is the base two
+ logarithm of the window size, in the range 8..15. window is a caller
+ supplied buffer of that size. Except for special applications where it is
+ assured that deflate was used with small window sizes, windowBits must be 15
+ and a 32K byte window must be supplied to be able to decompress general
+ deflate streams.
+
+ See inflateBack() for the usage of these routines.
+
+ inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
+ the parameters are invalid, Z_MEM_ERROR if the internal state could not be
+ allocated, or Z_VERSION_ERROR if the version of the library does not match
+ the version of the header file.
+*/
+
+typedef unsigned (*in_func)(void FAR *,
+ z_const unsigned char FAR * FAR *);
+typedef int (*out_func)(void FAR *, unsigned char FAR *, unsigned);
+
+ZEXTERN int ZEXPORT inflateBack(z_streamp strm,
+ in_func in, void FAR *in_desc,
+ out_func out, void FAR *out_desc);
+/*
+ inflateBack() does a raw inflate with a single call using a call-back
+ interface for input and output. This is potentially more efficient than
+ inflate() for file i/o applications, in that it avoids copying between the
+ output and the sliding window by simply making the window itself the output
+ buffer. inflate() can be faster on modern CPUs when used with large
+ buffers. inflateBack() trusts the application to not change the output
+ buffer passed by the output function, at least until inflateBack() returns.
+
+ inflateBackInit() must be called first to allocate the internal state
+ and to initialize the state with the user-provided window buffer.
+ inflateBack() may then be used multiple times to inflate a complete, raw
+ deflate stream with each call. inflateBackEnd() is then called to free the
+ allocated state.
+
+ A raw deflate stream is one with no zlib or gzip header or trailer.
+ This routine would normally be used in a utility that reads zip or gzip
+ files and writes out uncompressed files. The utility would decode the
+ header and process the trailer on its own, hence this routine expects only
+ the raw deflate stream to decompress. This is different from the default
+ behavior of inflate(), which expects a zlib header and trailer around the
+ deflate stream.
+
+ inflateBack() uses two subroutines supplied by the caller that are then
+ called by inflateBack() for input and output. inflateBack() calls those
+ routines until it reads a complete deflate stream and writes out all of the
+ uncompressed data, or until it encounters an error. The function's
+ parameters and return types are defined above in the in_func and out_func
+ typedefs. inflateBack() will call in(in_desc, &buf) which should return the
+ number of bytes of provided input, and a pointer to that input in buf. If
+ there is no input available, in() must return zero -- buf is ignored in that
+ case -- and inflateBack() will return a buffer error. inflateBack() will
+ call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].
+ out() should return zero on success, or non-zero on failure. If out()
+ returns non-zero, inflateBack() will return with an error. Neither in() nor
+ out() are permitted to change the contents of the window provided to
+ inflateBackInit(), which is also the buffer that out() uses to write from.
+ The length written by out() will be at most the window size. Any non-zero
+ amount of input may be provided by in().
+
+ For convenience, inflateBack() can be provided input on the first call by
+ setting strm->next_in and strm->avail_in. If that input is exhausted, then
+ in() will be called. Therefore strm->next_in must be initialized before
+ calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called
+ immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in
+ must also be initialized, and then if strm->avail_in is not zero, input will
+ initially be taken from strm->next_in[0 .. strm->avail_in - 1].
+
+ The in_desc and out_desc parameters of inflateBack() is passed as the
+ first parameter of in() and out() respectively when they are called. These
+ descriptors can be optionally used to pass any information that the caller-
+ supplied in() and out() functions need to do their job.
+
+ On return, inflateBack() will set strm->next_in and strm->avail_in to
+ pass back any unused input that was provided by the last in() call. The
+ return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
+ if in() or out() returned an error, Z_DATA_ERROR if there was a format error
+ in the deflate stream (in which case strm->msg is set to indicate the nature
+ of the error), or Z_STREAM_ERROR if the stream was not properly initialized.
+ In the case of Z_BUF_ERROR, an input or output error can be distinguished
+ using strm->next_in which will be Z_NULL only if in() returned an error. If
+ strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
+ non-zero. (in() will always be called before out(), so strm->next_in is
+ assured to be defined if out() returns non-zero.) Note that inflateBack()
+ cannot return Z_OK.
+*/
+
+ZEXTERN int ZEXPORT inflateBackEnd(z_streamp strm);
+/*
+ All memory allocated by inflateBackInit() is freed.
+
+ inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
+ state was inconsistent.
+*/
+
+ZEXTERN uLong ZEXPORT zlibCompileFlags(void);
+/* Return flags indicating compile-time options.
+
+ Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
+ 1.0: size of uInt
+ 3.2: size of uLong
+ 5.4: size of voidpf (pointer)
+ 7.6: size of z_off_t
+
+ Compiler, assembler, and debug options:
+ 8: ZLIB_DEBUG
+ 9: ASMV or ASMINF -- use ASM code
+ 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
+ 11: 0 (reserved)
+
+ One-time table building (smaller code, but not thread-safe if true):
+ 12: BUILDFIXED -- build static block decoding tables when needed
+ 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
+ 14,15: 0 (reserved)
+
+ Library content (indicates missing functionality):
+ 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
+ deflate code when not needed)
+ 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
+ and decode gzip streams (to avoid linking crc code)
+ 18-19: 0 (reserved)
+
+ Operation variations (changes in library functionality):
+ 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
+ 21: FASTEST -- deflate algorithm with only one, lowest compression level
+ 22,23: 0 (reserved)
+
+ The sprintf variant used by gzprintf (zero is best):
+ 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
+ 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
+ 26: 0 = returns value, 1 = void -- 1 means inferred string length returned
+
+ Remainder:
+ 27-31: 0 (reserved)
+ */
+
+#ifndef Z_SOLO
+
+ /* utility functions */
+
+/*
+ The following utility functions are implemented on top of the basic
+ stream-oriented functions. To simplify the interface, some default options
+ are assumed (compression level and memory usage, standard memory allocation
+ functions). The source code of these utility functions can be modified if
+ you need special options.
+*/
+
+ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong sourceLen);
+/*
+ Compresses the source buffer into the destination buffer. sourceLen is
+ the byte length of the source buffer. Upon entry, destLen is the total size
+ of the destination buffer, which must be at least the value returned by
+ compressBound(sourceLen). Upon exit, destLen is the actual size of the
+ compressed data. compress() is equivalent to compress2() with a level
+ parameter of Z_DEFAULT_COMPRESSION.
+
+ compress returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_BUF_ERROR if there was not enough room in the output
+ buffer.
+*/
+
+ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong sourceLen,
+ int level);
+/*
+ Compresses the source buffer into the destination buffer. The level
+ parameter has the same meaning as in deflateInit. sourceLen is the byte
+ length of the source buffer. Upon entry, destLen is the total size of the
+ destination buffer, which must be at least the value returned by
+ compressBound(sourceLen). Upon exit, destLen is the actual size of the
+ compressed data.
+
+ compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_BUF_ERROR if there was not enough room in the output buffer,
+ Z_STREAM_ERROR if the level parameter is invalid.
+*/
+
+ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen);
+/*
+ compressBound() returns an upper bound on the compressed size after
+ compress() or compress2() on sourceLen bytes. It would be used before a
+ compress() or compress2() call to allocate the destination buffer.
+*/
+
+ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong sourceLen);
+/*
+ Decompresses the source buffer into the destination buffer. sourceLen is
+ the byte length of the source buffer. Upon entry, destLen is the total size
+ of the destination buffer, which must be large enough to hold the entire
+ uncompressed data. (The size of the uncompressed data must have been saved
+ previously by the compressor and transmitted to the decompressor by some
+ mechanism outside the scope of this compression library.) Upon exit, destLen
+ is the actual size of the uncompressed data.
+
+ uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_BUF_ERROR if there was not enough room in the output
+ buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In
+ the case where there is not enough room, uncompress() will fill the output
+ buffer with the uncompressed data up to that point.
+*/
+
+ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong *sourceLen);
+/*
+ Same as uncompress, except that sourceLen is a pointer, where the
+ length of the source is *sourceLen. On return, *sourceLen is the number of
+ source bytes consumed.
+*/
+
+ /* gzip file access functions */
+
+/*
+ This library supports reading and writing files in gzip (.gz) format with
+ an interface similar to that of stdio, using the functions that start with
+ "gz". The gzip format is different from the zlib format. gzip is a gzip
+ wrapper, documented in RFC 1952, wrapped around a deflate stream.
+*/
+
+typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */
+
+/*
+ZEXTERN gzFile ZEXPORT gzopen(const char *path, const char *mode);
+
+ Open the gzip (.gz) file at path for reading and decompressing, or
+ compressing and writing. The mode parameter is as in fopen ("rb" or "wb")
+ but can also include a compression level ("wb9") or a strategy: 'f' for
+ filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h",
+ 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression
+ as in "wb9F". (See the description of deflateInit2 for more information
+ about the strategy parameter.) 'T' will request transparent writing or
+ appending with no compression and not using the gzip format.
+
+ "a" can be used instead of "w" to request that the gzip stream that will
+ be written be appended to the file. "+" will result in an error, since
+ reading and writing to the same gzip file is not supported. The addition of
+ "x" when writing will create the file exclusively, which fails if the file
+ already exists. On systems that support it, the addition of "e" when
+ reading or writing will set the flag to close the file on an execve() call.
+
+ These functions, as well as gzip, will read and decode a sequence of gzip
+ streams in a file. The append function of gzopen() can be used to create
+ such a file. (Also see gzflush() for another way to do this.) When
+ appending, gzopen does not test whether the file begins with a gzip stream,
+ nor does it look for the end of the gzip streams to begin appending. gzopen
+ will simply append a gzip stream to the existing file.
+
+ gzopen can be used to read a file which is not in gzip format; in this
+ case gzread will directly read from the file without decompression. When
+ reading, this will be detected automatically by looking for the magic two-
+ byte gzip header.
+
+ gzopen returns NULL if the file could not be opened, if there was
+ insufficient memory to allocate the gzFile state, or if an invalid mode was
+ specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).
+ errno can be checked to determine if the reason gzopen failed was that the
+ file could not be opened.
+*/
+
+ZEXTERN gzFile ZEXPORT gzdopen(int fd, const char *mode);
+/*
+ Associate a gzFile with the file descriptor fd. File descriptors are
+ obtained from calls like open, dup, creat, pipe or fileno (if the file has
+ been previously opened with fopen). The mode parameter is as in gzopen.
+
+ The next call of gzclose on the returned gzFile will also close the file
+ descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
+ fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
+ mode);. The duplicated descriptor should be saved to avoid a leak, since
+ gzdopen does not close fd if it fails. If you are using fileno() to get the
+ file descriptor from a FILE *, then you will have to use dup() to avoid
+ double-close()ing the file descriptor. Both gzclose() and fclose() will
+ close the associated file descriptor, so they need to have different file
+ descriptors.
+
+ gzdopen returns NULL if there was insufficient memory to allocate the
+ gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
+ provided, or '+' was provided), or if fd is -1. The file descriptor is not
+ used until the next gz* read, write, seek, or close operation, so gzdopen
+ will not detect if fd is invalid (unless fd is -1).
+*/
+
+ZEXTERN int ZEXPORT gzbuffer(gzFile file, unsigned size);
+/*
+ Set the internal buffer size used by this library's functions for file to
+ size. The default buffer size is 8192 bytes. This function must be called
+ after gzopen() or gzdopen(), and before any other calls that read or write
+ the file. The buffer memory allocation is always deferred to the first read
+ or write. Three times that size in buffer space is allocated. A larger
+ buffer size of, for example, 64K or 128K bytes will noticeably increase the
+ speed of decompression (reading).
+
+ The new buffer size also affects the maximum length for gzprintf().
+
+ gzbuffer() returns 0 on success, or -1 on failure, such as being called
+ too late.
+*/
+
+ZEXTERN int ZEXPORT gzsetparams(gzFile file, int level, int strategy);
+/*
+ Dynamically update the compression level and strategy for file. See the
+ description of deflateInit2 for the meaning of these parameters. Previously
+ provided data is flushed before applying the parameter changes.
+
+ gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not
+ opened for writing, Z_ERRNO if there is an error writing the flushed data,
+ or Z_MEM_ERROR if there is a memory allocation error.
+*/
+
+ZEXTERN int ZEXPORT gzread(gzFile file, voidp buf, unsigned len);
+/*
+ Read and decompress up to len uncompressed bytes from file into buf. If
+ the input file is not in gzip format, gzread copies the given number of
+ bytes into the buffer directly from the file.
+
+ After reaching the end of a gzip stream in the input, gzread will continue
+ to read, looking for another gzip stream. Any number of gzip streams may be
+ concatenated in the input file, and will all be decompressed by gzread().
+ If something other than a gzip stream is encountered after a gzip stream,
+ that remaining trailing garbage is ignored (and no error is returned).
+
+ gzread can be used to read a gzip file that is being concurrently written.
+ Upon reaching the end of the input, gzread will return with the available
+ data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then
+ gzclearerr can be used to clear the end of file indicator in order to permit
+ gzread to be tried again. Z_OK indicates that a gzip stream was completed
+ on the last gzread. Z_BUF_ERROR indicates that the input file ended in the
+ middle of a gzip stream. Note that gzread does not return -1 in the event
+ of an incomplete gzip stream. This error is deferred until gzclose(), which
+ will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip
+ stream. Alternatively, gzerror can be used before gzclose to detect this
+ case.
+
+ gzread returns the number of uncompressed bytes actually read, less than
+ len for end of file, or -1 for error. If len is too large to fit in an int,
+ then nothing is read, -1 is returned, and the error state is set to
+ Z_STREAM_ERROR.
+*/
+
+ZEXTERN z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems,
+ gzFile file);
+/*
+ Read and decompress up to nitems items of size size from file into buf,
+ otherwise operating as gzread() does. This duplicates the interface of
+ stdio's fread(), with size_t request and return types. If the library
+ defines size_t, then z_size_t is identical to size_t. If not, then z_size_t
+ is an unsigned integer type that can contain a pointer.
+
+ gzfread() returns the number of full items read of size size, or zero if
+ the end of the file was reached and a full item could not be read, or if
+ there was an error. gzerror() must be consulted if zero is returned in
+ order to determine if there was an error. If the multiplication of size and
+ nitems overflows, i.e. the product does not fit in a z_size_t, then nothing
+ is read, zero is returned, and the error state is set to Z_STREAM_ERROR.
+
+ In the event that the end of file is reached and only a partial item is
+ available at the end, i.e. the remaining uncompressed data length is not a
+ multiple of size, then the final partial item is nevertheless read into buf
+ and the end-of-file flag is set. The length of the partial item read is not
+ provided, but could be inferred from the result of gztell(). This behavior
+ is the same as the behavior of fread() implementations in common libraries,
+ but it prevents the direct use of gzfread() to read a concurrently written
+ file, resetting and retrying on end-of-file, when size is not 1.
+*/
+
+ZEXTERN int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len);
+/*
+ Compress and write the len uncompressed bytes at buf to file. gzwrite
+ returns the number of uncompressed bytes written or 0 in case of error.
+*/
+
+ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size,
+ z_size_t nitems, gzFile file);
+/*
+ Compress and write nitems items of size size from buf to file, duplicating
+ the interface of stdio's fwrite(), with size_t request and return types. If
+ the library defines size_t, then z_size_t is identical to size_t. If not,
+ then z_size_t is an unsigned integer type that can contain a pointer.
+
+ gzfwrite() returns the number of full items written of size size, or zero
+ if there was an error. If the multiplication of size and nitems overflows,
+ i.e. the product does not fit in a z_size_t, then nothing is written, zero
+ is returned, and the error state is set to Z_STREAM_ERROR.
+*/
+
+ZEXTERN int ZEXPORTVA gzprintf(gzFile file, const char *format, ...);
+/*
+ Convert, format, compress, and write the arguments (...) to file under
+ control of the string format, as in fprintf. gzprintf returns the number of
+ uncompressed bytes actually written, or a negative zlib error code in case
+ of error. The number of uncompressed bytes written is limited to 8191, or
+ one less than the buffer size given to gzbuffer(). The caller should assure
+ that this limit is not exceeded. If it is exceeded, then gzprintf() will
+ return an error (0) with nothing written. In this case, there may also be a
+ buffer overflow with unpredictable consequences, which is possible only if
+ zlib was compiled with the insecure functions sprintf() or vsprintf(),
+ because the secure snprintf() or vsnprintf() functions were not available.
+ This can be determined using zlibCompileFlags().
+*/
+
+ZEXTERN int ZEXPORT gzputs(gzFile file, const char *s);
+/*
+ Compress and write the given null-terminated string s to file, excluding
+ the terminating null character.
+
+ gzputs returns the number of characters written, or -1 in case of error.
+*/
+
+ZEXTERN char * ZEXPORT gzgets(gzFile file, char *buf, int len);
+/*
+ Read and decompress bytes from file into buf, until len-1 characters are
+ read, or until a newline character is read and transferred to buf, or an
+ end-of-file condition is encountered. If any characters are read or if len
+ is one, the string is terminated with a null character. If no characters
+ are read due to an end-of-file or len is less than one, then the buffer is
+ left untouched.
+
+ gzgets returns buf which is a null-terminated string, or it returns NULL
+ for end-of-file or in case of error. If there was an error, the contents at
+ buf are indeterminate.
+*/
+
+ZEXTERN int ZEXPORT gzputc(gzFile file, int c);
+/*
+ Compress and write c, converted to an unsigned char, into file. gzputc
+ returns the value that was written, or -1 in case of error.
+*/
+
+ZEXTERN int ZEXPORT gzgetc(gzFile file);
+/*
+ Read and decompress one byte from file. gzgetc returns this byte or -1
+ in case of end of file or error. This is implemented as a macro for speed.
+ As such, it does not do all of the checking the other functions do. I.e.
+ it does not check to see if file is NULL, nor whether the structure file
+ points to has been clobbered or not.
+*/
+
+ZEXTERN int ZEXPORT gzungetc(int c, gzFile file);
+/*
+ Push c back onto the stream for file to be read as the first character on
+ the next read. At least one character of push-back is always allowed.
+ gzungetc() returns the character pushed, or -1 on failure. gzungetc() will
+ fail if c is -1, and may fail if a character has been pushed but not read
+ yet. If gzungetc is used immediately after gzopen or gzdopen, at least the
+ output buffer size of pushed characters is allowed. (See gzbuffer above.)
+ The pushed character will be discarded if the stream is repositioned with
+ gzseek() or gzrewind().
+*/
+
+ZEXTERN int ZEXPORT gzflush(gzFile file, int flush);
+/*
+ Flush all pending output to file. The parameter flush is as in the
+ deflate() function. The return value is the zlib error number (see function
+ gzerror below). gzflush is only permitted when writing.
+
+ If the flush parameter is Z_FINISH, the remaining data is written and the
+ gzip stream is completed in the output. If gzwrite() is called again, a new
+ gzip stream will be started in the output. gzread() is able to read such
+ concatenated gzip streams.
+
+ gzflush should be called only when strictly necessary because it will
+ degrade compression if called too often.
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzseek(gzFile file,
+ z_off_t offset, int whence);
+
+ Set the starting position to offset relative to whence for the next gzread
+ or gzwrite on file. The offset represents a number of bytes in the
+ uncompressed data stream. The whence parameter is defined as in lseek(2);
+ the value SEEK_END is not supported.
+
+ If the file is opened for reading, this function is emulated but can be
+ extremely slow. If the file is opened for writing, only forward seeks are
+ supported; gzseek then compresses a sequence of zeroes up to the new
+ starting position.
+
+ gzseek returns the resulting offset location as measured in bytes from
+ the beginning of the uncompressed stream, or -1 in case of error, in
+ particular if the file is opened for writing and the new starting position
+ would be before the current position.
+*/
+
+ZEXTERN int ZEXPORT gzrewind(gzFile file);
+/*
+ Rewind file. This function is supported only for reading.
+
+ gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET).
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gztell(gzFile file);
+
+ Return the starting position for the next gzread or gzwrite on file.
+ This position represents a number of bytes in the uncompressed data stream,
+ and is zero when starting, even if appending or reading a gzip stream from
+ the middle of a file using gzdopen().
+
+ gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzoffset(gzFile file);
+
+ Return the current compressed (actual) read or write offset of file. This
+ offset includes the count of bytes that precede the gzip stream, for example
+ when appending or when using gzdopen() for reading. When reading, the
+ offset does not include as yet unused buffered input. This information can
+ be used for a progress indicator. On error, gzoffset() returns -1.
+*/
+
+ZEXTERN int ZEXPORT gzeof(gzFile file);
+/*
+ Return true (1) if the end-of-file indicator for file has been set while
+ reading, false (0) otherwise. Note that the end-of-file indicator is set
+ only if the read tried to go past the end of the input, but came up short.
+ Therefore, just like feof(), gzeof() may return false even if there is no
+ more data to read, in the event that the last read request was for the exact
+ number of bytes remaining in the input file. This will happen if the input
+ file size is an exact multiple of the buffer size.
+
+ If gzeof() returns true, then the read functions will return no more data,
+ unless the end-of-file indicator is reset by gzclearerr() and the input file
+ has grown since the previous end of file was detected.
+*/
+
+ZEXTERN int ZEXPORT gzdirect(gzFile file);
+/*
+ Return true (1) if file is being copied directly while reading, or false
+ (0) if file is a gzip stream being decompressed.
+
+ If the input file is empty, gzdirect() will return true, since the input
+ does not contain a gzip stream.
+
+ If gzdirect() is used immediately after gzopen() or gzdopen() it will
+ cause buffers to be allocated to allow reading the file to determine if it
+ is a gzip file. Therefore if gzbuffer() is used, it should be called before
+ gzdirect().
+
+ When writing, gzdirect() returns true (1) if transparent writing was
+ requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note:
+ gzdirect() is not needed when writing. Transparent writing must be
+ explicitly requested, so the application already knows the answer. When
+ linking statically, using gzdirect() will include all of the zlib code for
+ gzip file reading and decompression, which may not be desired.)
+*/
+
+ZEXTERN int ZEXPORT gzclose(gzFile file);
+/*
+ Flush all pending output for file, if necessary, close file and
+ deallocate the (de)compression state. Note that once file is closed, you
+ cannot call gzerror with file, since its structures have been deallocated.
+ gzclose must not be called more than once on the same file, just as free
+ must not be called more than once on the same allocation.
+
+ gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
+ file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the
+ last read ended in the middle of a gzip stream, or Z_OK on success.
+*/
+
+ZEXTERN int ZEXPORT gzclose_r(gzFile file);
+ZEXTERN int ZEXPORT gzclose_w(gzFile file);
+/*
+ Same as gzclose(), but gzclose_r() is only for use when reading, and
+ gzclose_w() is only for use when writing or appending. The advantage to
+ using these instead of gzclose() is that they avoid linking in zlib
+ compression or decompression code that is not used when only reading or only
+ writing respectively. If gzclose() is used, then both compression and
+ decompression code will be included the application when linking to a static
+ zlib library.
+*/
+
+ZEXTERN const char * ZEXPORT gzerror(gzFile file, int *errnum);
+/*
+ Return the error message for the last error which occurred on file.
+ errnum is set to zlib error number. If an error occurred in the file system
+ and not in the compression library, errnum is set to Z_ERRNO and the
+ application may consult errno to get the exact error code.
+
+ The application must not modify the returned string. Future calls to
+ this function may invalidate the previously returned string. If file is
+ closed, then the string previously returned by gzerror will no longer be
+ available.
+
+ gzerror() should be used to distinguish errors from end-of-file for those
+ functions above that do not distinguish those cases in their return values.
+*/
+
+ZEXTERN void ZEXPORT gzclearerr(gzFile file);
+/*
+ Clear the error and end-of-file flags for file. This is analogous to the
+ clearerr() function in stdio. This is useful for continuing to read a gzip
+ file that is being written concurrently.
+*/
+
+#endif /* !Z_SOLO */
+
+ /* checksum functions */
+
+/*
+ These functions are not related to compression but are exported
+ anyway because they might be useful in applications using the compression
+ library.
+*/
+
+ZEXTERN uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len);
+/*
+ Update a running Adler-32 checksum with the bytes buf[0..len-1] and
+ return the updated checksum. An Adler-32 value is in the range of a 32-bit
+ unsigned integer. If buf is Z_NULL, this function returns the required
+ initial value for the checksum.
+
+ An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed
+ much faster.
+
+ Usage example:
+
+ uLong adler = adler32(0L, Z_NULL, 0);
+
+ while (read_buffer(buffer, length) != EOF) {
+ adler = adler32(adler, buffer, length);
+ }
+ if (adler != original_adler) error();
+*/
+
+ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf,
+ z_size_t len);
+/*
+ Same as adler32(), but with a size_t length.
+*/
+
+/*
+ZEXTERN uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2,
+ z_off_t len2);
+
+ Combine two Adler-32 checksums into one. For two sequences of bytes, seq1
+ and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
+ each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of
+ seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note
+ that the z_off_t type (like off_t) is a signed integer. If len2 is
+ negative, the result has no meaning or utility.
+*/
+
+ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len);
+/*
+ Update a running CRC-32 with the bytes buf[0..len-1] and return the
+ updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer.
+ If buf is Z_NULL, this function returns the required initial value for the
+ crc. Pre- and post-conditioning (one's complement) is performed within this
+ function so it shouldn't be done by the application.
+
+ Usage example:
+
+ uLong crc = crc32(0L, Z_NULL, 0);
+
+ while (read_buffer(buffer, length) != EOF) {
+ crc = crc32(crc, buffer, length);
+ }
+ if (crc != original_crc) error();
+*/
+
+ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf,
+ z_size_t len);
+/*
+ Same as crc32(), but with a size_t length.
+*/
+
+/*
+ZEXTERN uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2);
+
+ Combine two CRC-32 check values into one. For two sequences of bytes,
+ seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
+ calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32
+ check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
+ len2. len2 must be non-negative.
+*/
+
+/*
+ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2);
+
+ Return the operator corresponding to length len2, to be used with
+ crc32_combine_op(). len2 must be non-negative.
+*/
+
+ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op);
+/*
+ Give the same result as crc32_combine(), using op in place of len2. op is
+ is generated from len2 by crc32_combine_gen(). This will be faster than
+ crc32_combine() if the generated op is used more than once.
+*/
+
+
+ /* various hacks, don't look :) */
+
+/* deflateInit and inflateInit are macros to allow checking the zlib version
+ * and the compiler's view of z_stream:
+ */
+ZEXTERN int ZEXPORT deflateInit_(z_streamp strm, int level,
+ const char *version, int stream_size);
+ZEXTERN int ZEXPORT inflateInit_(z_streamp strm,
+ const char *version, int stream_size);
+ZEXTERN int ZEXPORT deflateInit2_(z_streamp strm, int level, int method,
+ int windowBits, int memLevel,
+ int strategy, const char *version,
+ int stream_size);
+ZEXTERN int ZEXPORT inflateInit2_(z_streamp strm, int windowBits,
+ const char *version, int stream_size);
+ZEXTERN int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits,
+ unsigned char FAR *window,
+ const char *version,
+ int stream_size);
+#ifdef Z_PREFIX_SET
+# define z_deflateInit(strm, level) \
+ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+# define z_inflateInit(strm) \
+ inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+ (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+# define z_inflateInit2(strm, windowBits) \
+ inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+ (int)sizeof(z_stream))
+# define z_inflateBackInit(strm, windowBits, window) \
+ inflateBackInit_((strm), (windowBits), (window), \
+ ZLIB_VERSION, (int)sizeof(z_stream))
+#else
+# define deflateInit(strm, level) \
+ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+# define inflateInit(strm) \
+ inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+ (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+# define inflateInit2(strm, windowBits) \
+ inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+ (int)sizeof(z_stream))
+# define inflateBackInit(strm, windowBits, window) \
+ inflateBackInit_((strm), (windowBits), (window), \
+ ZLIB_VERSION, (int)sizeof(z_stream))
+#endif
+
+#ifndef Z_SOLO
+
+/* gzgetc() macro and its supporting function and exposed data structure. Note
+ * that the real internal state is much larger than the exposed structure.
+ * This abbreviated structure exposes just enough for the gzgetc() macro. The
+ * user should not mess with these exposed elements, since their names or
+ * behavior could change in the future, perhaps even capriciously. They can
+ * only be used by the gzgetc() macro. You have been warned.
+ */
+struct gzFile_s {
+ unsigned have;
+ unsigned char *next;
+ z_off64_t pos;
+};
+ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */
+#ifdef Z_PREFIX_SET
+# undef z_gzgetc
+# define z_gzgetc(g) \
+ ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
+#else
+# define gzgetc(g) \
+ ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
+#endif
+
+/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
+ * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
+ * both are true, the application gets the *64 functions, and the regular
+ * functions are changed to 64 bits) -- in case these are set on systems
+ * without large file support, _LFS64_LARGEFILE must also be true
+ */
+#ifdef Z_LARGE64
+ ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *);
+ ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int);
+ ZEXTERN z_off64_t ZEXPORT gztell64(gzFile);
+ ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile);
+ ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t);
+ ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t);
+ ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t);
+#endif
+
+#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
+# ifdef Z_PREFIX_SET
+# define z_gzopen z_gzopen64
+# define z_gzseek z_gzseek64
+# define z_gztell z_gztell64
+# define z_gzoffset z_gzoffset64
+# define z_adler32_combine z_adler32_combine64
+# define z_crc32_combine z_crc32_combine64
+# define z_crc32_combine_gen z_crc32_combine_gen64
+# else
+# define gzopen gzopen64
+# define gzseek gzseek64
+# define gztell gztell64
+# define gzoffset gzoffset64
+# define adler32_combine adler32_combine64
+# define crc32_combine crc32_combine64
+# define crc32_combine_gen crc32_combine_gen64
+# endif
+# ifndef Z_LARGE64
+ ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *);
+ ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int);
+ ZEXTERN z_off_t ZEXPORT gztell64(gzFile);
+ ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile);
+ ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t);
+ ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t);
+ ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t);
+# endif
+#else
+ ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *);
+ ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int);
+ ZEXTERN z_off_t ZEXPORT gztell(gzFile);
+ ZEXTERN z_off_t ZEXPORT gzoffset(gzFile);
+ ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t);
+ ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t);
+ ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t);
+#endif
+
+#else /* Z_SOLO */
+
+ ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t);
+ ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t);
+ ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t);
+
+#endif /* !Z_SOLO */
+
+/* undocumented functions */
+ZEXTERN const char * ZEXPORT zError(int);
+ZEXTERN int ZEXPORT inflateSyncPoint(z_streamp);
+ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table(void);
+ZEXTERN int ZEXPORT inflateUndermine(z_streamp, int);
+ZEXTERN int ZEXPORT inflateValidate(z_streamp, int);
+ZEXTERN unsigned long ZEXPORT inflateCodesUsed(z_streamp);
+ZEXTERN int ZEXPORT inflateResetKeep(z_streamp);
+ZEXTERN int ZEXPORT deflateResetKeep(z_streamp);
+#if defined(_WIN32) && !defined(Z_SOLO)
+ZEXTERN gzFile ZEXPORT gzopen_w(const wchar_t *path,
+ const char *mode);
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# ifndef Z_SOLO
+ZEXTERN int ZEXPORTVA gzvprintf(gzFile file,
+ const char *format,
+ va_list va);
+# endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ZLIB_H */
diff --git a/vcpkg_installed/arm64-osx/lib/libjpeg.a b/vcpkg_installed/arm64-osx/lib/libjpeg.a
new file mode 100644
index 00000000..3cf3fe04
Binary files /dev/null and b/vcpkg_installed/arm64-osx/lib/libjpeg.a differ
diff --git a/vcpkg_installed/arm64-osx/lib/liblzma.a b/vcpkg_installed/arm64-osx/lib/liblzma.a
new file mode 100644
index 00000000..6e9a4fb6
Binary files /dev/null and b/vcpkg_installed/arm64-osx/lib/liblzma.a differ
diff --git a/vcpkg_installed/arm64-osx/lib/libspng_static.a b/vcpkg_installed/arm64-osx/lib/libspng_static.a
new file mode 100644
index 00000000..221669d1
Binary files /dev/null and b/vcpkg_installed/arm64-osx/lib/libspng_static.a differ
diff --git a/vcpkg_installed/arm64-osx/lib/libtiff.a b/vcpkg_installed/arm64-osx/lib/libtiff.a
new file mode 100644
index 00000000..5e680fd0
Binary files /dev/null and b/vcpkg_installed/arm64-osx/lib/libtiff.a differ
diff --git a/vcpkg_installed/arm64-osx/lib/libturbojpeg.a b/vcpkg_installed/arm64-osx/lib/libturbojpeg.a
new file mode 100644
index 00000000..5afea9c5
Binary files /dev/null and b/vcpkg_installed/arm64-osx/lib/libturbojpeg.a differ
diff --git a/vcpkg_installed/arm64-osx/lib/libz.a b/vcpkg_installed/arm64-osx/lib/libz.a
new file mode 100644
index 00000000..02617ac2
Binary files /dev/null and b/vcpkg_installed/arm64-osx/lib/libz.a differ
diff --git a/vcpkg_installed/arm64-osx/lib/pkgconfig/libjpeg.pc b/vcpkg_installed/arm64-osx/lib/pkgconfig/libjpeg.pc
new file mode 100644
index 00000000..7b82d032
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/lib/pkgconfig/libjpeg.pc
@@ -0,0 +1,11 @@
+prefix=${pcfiledir}/../..
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: libjpeg
+Description: A SIMD-accelerated JPEG codec that provides the libjpeg API
+Version: 3.0.3
+
+Libs: "-L${libdir}" -ljpeg
+Cflags: "-I${includedir}"
diff --git a/vcpkg_installed/arm64-osx/lib/pkgconfig/liblzma.pc b/vcpkg_installed/arm64-osx/lib/pkgconfig/liblzma.pc
new file mode 100644
index 00000000..cdc48152
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/lib/pkgconfig/liblzma.pc
@@ -0,0 +1,15 @@
+prefix=${pcfiledir}/../..
+# SPDX-License-Identifier: 0BSD
+# Author: Lasse Collin
+
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: liblzma
+Description: General purpose data compression library
+URL: https://tukaani.org/xz/
+Version: 5.6.2
+
+Libs: "-L${libdir}" -llzma -pthread
+Cflags: "-I${includedir}" -DLZMA_API_STATIC
diff --git a/vcpkg_installed/arm64-osx/lib/pkgconfig/libspng_static.pc b/vcpkg_installed/arm64-osx/lib/pkgconfig/libspng_static.pc
new file mode 100644
index 00000000..3c908ad3
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/lib/pkgconfig/libspng_static.pc
@@ -0,0 +1,12 @@
+prefix=${pcfiledir}/../..
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/include/
+
+Name: libspng_static
+Description: PNG decoding and encoding library
+Version: 0.7.4
+
+Libs: "-L${libdir}" -lspng_static -lm
+Requires: zlib
+Cflags: "-I${includedir}"
diff --git a/vcpkg_installed/arm64-osx/lib/pkgconfig/libtiff-4.pc b/vcpkg_installed/arm64-osx/lib/pkgconfig/libtiff-4.pc
new file mode 100644
index 00000000..57810f2f
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/lib/pkgconfig/libtiff-4.pc
@@ -0,0 +1,12 @@
+prefix=${pcfiledir}/../..
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: libtiff
+Description: Tag Image File Format (TIFF) library.
+Version: 4.6.0
+
+Libs: "-L${libdir}" -ltiff -lm
+Requires: zlib libjpeg liblzma
+Cflags: "-I${includedir}"
diff --git a/vcpkg_installed/arm64-osx/lib/pkgconfig/libturbojpeg.pc b/vcpkg_installed/arm64-osx/lib/pkgconfig/libturbojpeg.pc
new file mode 100644
index 00000000..e3bad267
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/lib/pkgconfig/libturbojpeg.pc
@@ -0,0 +1,11 @@
+prefix=${pcfiledir}/../..
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: libturbojpeg
+Description: A SIMD-accelerated JPEG codec that provides the TurboJPEG API
+Version: 3.0.3
+
+Libs: "-L${libdir}" -lturbojpeg
+Cflags: "-I${includedir}"
diff --git a/vcpkg_installed/arm64-osx/lib/pkgconfig/zlib.pc b/vcpkg_installed/arm64-osx/lib/pkgconfig/zlib.pc
new file mode 100644
index 00000000..17a7e07c
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/lib/pkgconfig/zlib.pc
@@ -0,0 +1,14 @@
+prefix=${pcfiledir}/../..
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+sharedlibdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: zlib
+Description: zlib compression library
+Version: 1.3.1
+
+
+Libs: "-L${libdir}" "-L${sharedlibdir}" -lz
+Requires:
+Cflags: "-I${includedir}"
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/AUTHORS b/vcpkg_installed/arm64-osx/share/doc/xz/AUTHORS
new file mode 100644
index 00000000..5eff238a
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/AUTHORS
@@ -0,0 +1,58 @@
+
+Authors of XZ Utils
+===================
+
+ XZ Utils is developed and maintained by
+ Lasse Collin .
+
+ Major parts of liblzma are based on code written by Igor Pavlov,
+ specifically the LZMA SDK . Without
+ this code, XZ Utils wouldn't exist.
+
+ The SHA-256 implementation in liblzma is based on code written by
+ Wei Dai in Crypto++ Library .
+
+ A few scripts have been adapted from GNU gzip. The original
+ versions were written by Jean-loup Gailly, Charles Levert, and
+ Paul Eggert. Andrew Dudman helped adapting the scripts and their
+ man pages for XZ Utils.
+
+ The initial version of the threaded .xz decompressor was written
+ by Sebastian Andrzej Siewior.
+
+ The initial version of the .lz (lzip) decoder was written
+ by Michał Górny.
+
+ Architecture-specific CRC optimizations were contributed by
+ Ilya Kurdyukov, Hans Jansen, and Chenxi Mao.
+
+ Other authors:
+ - Jonathan Nieder
+ - Joachim Henke
+
+ Special author: Jia Tan was a co-maintainer in 2022-2024. He and
+ the team behind him inserted a backdoor (CVE-2024-3094) into
+ XZ Utils 5.6.0 and 5.6.1 releases. He suddenly disappeared when
+ this was discovered.
+
+ Many people have contributed improvements or reported bugs.
+ Most of these people are mentioned in the file THANKS.
+
+ The translations of the command line tools and man pages have been
+ contributed by many people via the Translation Project:
+
+ - https://translationproject.org/domain/xz.html
+ - https://translationproject.org/domain/xz-man.html
+
+ The authors of the translated man pages are in the header comments
+ of the man page files. In the source package, the authors of the
+ translations are in po/*.po and po4a/*.po files.
+
+ Third-party code whose authors aren't listed here:
+
+ - GNU getopt_long() in the 'lib' directory is included for
+ platforms that don't have a usable getopt_long().
+
+ - The build system files from GNU Autoconf, GNU Automake,
+ GNU Libtool, GNU Gettext, Autoconf Archive, and related files.
+
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/COPYING b/vcpkg_installed/arm64-osx/share/doc/xz/COPYING
new file mode 100644
index 00000000..aed21531
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/COPYING
@@ -0,0 +1,83 @@
+
+XZ Utils Licensing
+==================
+
+ Different licenses apply to different files in this package. Here
+ is a summary of which licenses apply to which parts of this package:
+
+ - liblzma is under the BSD Zero Clause License (0BSD).
+
+ - The command line tools xz, xzdec, lzmadec, and lzmainfo are
+ under 0BSD except that, on systems that don't have a usable
+ getopt_long, GNU getopt_long is compiled and linked in from the
+ 'lib' directory. The getopt_long code is under GNU LGPLv2.1+.
+
+ - The scripts to grep, diff, and view compressed files have been
+ adapted from GNU gzip. These scripts (xzgrep, xzdiff, xzless,
+ and xzmore) are under GNU GPLv2+. The man pages of the scripts
+ are under 0BSD; they aren't based on the man pages of GNU gzip.
+
+ - Most of the XZ Utils specific documentation that is in
+ plain text files (like README, INSTALL, PACKAGERS, NEWS,
+ and ChangeLog) are under 0BSD unless stated otherwise in
+ the file itself. The files xz-file-format.txt and
+ lzma-file-format.xt are in the public domain but may
+ be distributed under the terms of 0BSD too.
+
+ - Translated messages and man pages are under 0BSD except that
+ some old translations are in the public domain.
+
+ - Test files and test code in the 'tests' directory, and
+ debugging utilities in the 'debug' directory are under
+ the BSD Zero Clause License (0BSD).
+
+ - The GNU Autotools based build system contains files that are
+ under GNU GPLv2+, GNU GPLv3+, and a few permissive licenses.
+ These files don't affect the licensing of the binaries being
+ built.
+
+ - The 'extra' directory contains files that are under various
+ free software licenses. These aren't built or installed as
+ part of XZ Utils.
+
+ For the files under the BSD Zero Clause License (0BSD), if
+ a copyright notice is needed, the following is sufficient:
+
+ Copyright (C) The XZ Utils authors and contributors
+
+ If you copy significant amounts of 0BSD-licensed code from XZ Utils
+ into your project, acknowledging this somewhere in your software is
+ polite (especially if it is proprietary, non-free software), but
+ it is not legally required by the license terms. Here is an example
+ of a good notice to put into "about box" or into documentation:
+
+ This software includes code from XZ Utils .
+
+ The following license texts are included in the following files:
+ - COPYING.0BSD: BSD Zero Clause License
+ - COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1
+ - COPYING.GPLv2: GNU General Public License version 2
+ - COPYING.GPLv3: GNU General Public License version 3
+
+ A note about old XZ Utils releases:
+
+ XZ Utils releases 5.4.6 and older and 5.5.1alpha have a
+ significant amount of code put into the public domain and
+ that obviously remains so. The switch from public domain to
+ 0BSD for newer releases was made in Febrary 2024 because
+ public domain has (real or perceived) legal ambiguities in
+ some jurisdictions.
+
+ There is very little *practical* difference between public
+ domain and 0BSD. The main difference likely is that one
+ shouldn't claim that 0BSD-licensed code is in the public
+ domain; 0BSD-licensed code is copyrighted but available under
+ an extremely permissive license. Neither 0BSD nor public domain
+ require retaining or reproducing author, copyright holder, or
+ license notices when distributing the software. (Compare to,
+ for example, BSD 2-Clause "Simplified" License which does have
+ such requirements.)
+
+ If you have questions, don't hesitate to ask for more information.
+ The contact information is in the README file.
+
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/COPYING.0BSD b/vcpkg_installed/arm64-osx/share/doc/xz/COPYING.0BSD
new file mode 100644
index 00000000..4322122a
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/COPYING.0BSD
@@ -0,0 +1,11 @@
+Permission to use, copy, modify, and/or distribute this
+software for any purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
+THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/COPYING.GPLv2 b/vcpkg_installed/arm64-osx/share/doc/xz/COPYING.GPLv2
new file mode 100644
index 00000000..d159169d
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/COPYING.GPLv2
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ 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 2 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, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/NEWS b/vcpkg_installed/arm64-osx/share/doc/xz/NEWS
new file mode 100644
index 00000000..77eab744
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/NEWS
@@ -0,0 +1,2514 @@
+
+XZ Utils Release Notes
+======================
+
+5.6.2 (2024-05-29)
+
+ * Remove the backdoor (CVE-2024-3094).
+
+ * Not changed: Memory sanitizer (MSAN) has a false positive
+ in the CRC CLMUL code which also makes OSS Fuzz unhappy.
+ Valgrind is smarter and doesn't complain.
+
+ A revision to the CLMUL code is coming anyway and this issue
+ will be cleaned up as part of it. It won't be backported to
+ 5.6.x or 5.4.x because the old code isn't wrong. There is
+ no reason to risk introducing regressions in old branches
+ just to silence a false positive.
+
+ * liblzma:
+
+ - lzma_index_decoder() and lzma_index_buffer_decode(): Fix
+ a missing output pointer initialization (*i = NULL) if the
+ functions are called with invalid arguments. The API docs
+ say that such an initialization is always done. In practice
+ this matters very little because the problem can only occur
+ if the calling application has a bug and these functions
+ return LZMA_PROG_ERROR.
+
+ - lzma_str_to_filters(): Fix a missing output pointer
+ initialization (*error_pos = 0). This is very similar
+ to the fix above.
+
+ - Fix C standard conformance with function pointer types.
+
+ - Remove GNU indirect function (IFUNC) support. This is *NOT*
+ done for security reasons even though the backdoor relied on
+ this code. The performance benefits of IFUNC are too tiny in
+ this project to make the extra complexity worth it.
+
+ - FreeBSD on ARM64: Add error checking to CRC32 instruction
+ support detection.
+
+ - Fix building with NVIDIA HPC SDK.
+
+ * xz:
+
+ - Fix a C standard conformance issue in --block-list parsing
+ (arithmetic on a null pointer).
+
+ - Fix a warning from GNU groff when processing the man page:
+ "warning: cannot select font 'CW'"
+
+ * xzdec: Add support for Linux Landlock ABI version 4. xz already
+ had the v3-to-v4 change but it had been forgotten from xzdec.
+
+ * Autotools-based build system (configure):
+
+ - Symbol versioning variant can now be overridden with
+ --enable-symbol-versions. Documentation in INSTALL was
+ updated to match.
+
+ - Add new configure option --enable-doxygen to enable
+ generation and installation of the liblzma API documentation
+ using Doxygen. Documentation in INSTALL and PACKAGERS was
+ updated to match.
+
+ CMake:
+
+ - Fix detection of Linux Landlock support. The detection code
+ in CMakeLists.txt had been sabotaged.
+
+ - Disable symbol versioning on non-glibc Linux to match what
+ the Autotools build does. For example, symbol versioning
+ isn't enabled with musl.
+
+ - Symbol versioning variant can now be overridden by setting
+ SYMBOL_VERSIONING to "OFF", "generic", or "linux".
+
+ - Add support for all tests in typical build configurations.
+ Now the only difference to the tests coverage to Autotools
+ is that CMake-based build will skip more tests if features
+ are disabled. Such builds are only for special cases like
+ embedded systems.
+
+ - Separate the CMake code for the tests into tests/tests.cmake.
+ It is used conditionally, thus it is possible to
+
+ rm -rf tests
+
+ and the CMake-based build will still work normally except
+ that no tests are then available.
+
+ - Add a option ENABLE_DOXYGEN to enable generation and
+ installation of the liblzma API documentation using Doxygen.
+
+ * Documentation:
+
+ - Omit the Doxygen-generated liblzma API documentation from the
+ package. Instead, the generation and installation of the API
+ docs can be enabled with a configure or CMake option if
+ Doxygen is available.
+
+ - Remove the XZ logo which was used in the API documentation.
+ The logo has been retired and isn't used by the project
+ anymore. However, it's OK to use it in contexts that refer
+ to the backdoor incident.
+
+ - Remove the PDF versions of the man pages from the source
+ package. These existed primarily for users of operating
+ systems which don't come with tools to render man page
+ source files. The plain text versions are still included
+ in doc/man/txt. PDF files can still be generated to doc/man,
+ if the required tools are available, using "make pdf" after
+ running "configure".
+
+ - Update home page URLs back to their old locations on
+ tukaani.org.
+
+ - Update maintainer info.
+
+ * Tests:
+
+ - In tests/files/README, explain how to recreate the ARM64
+ test files.
+
+ - Remove two tests that used tiny x86 and SPARC object files
+ as the input files. The matching .c file was included but
+ the object files aren't easy to reproduce. The test cases
+ weren't great anyway; they were from the early days (2009)
+ of the project when the test suite had very few tests.
+
+ - Improve a few tests.
+
+
+5.6.1 (2024-03-09)
+
+ IMPORTANT: This fixed bugs in the backdoor (CVE-2024-3094) (someone
+ had forgot to run Valgrind).
+
+ * liblzma: Fixed two bugs relating to GNU indirect function (IFUNC)
+ with GCC. The more serious bug caused a program linked with
+ liblzma to crash on start up if the flag -fprofile-generate was
+ used to build liblzma. The second bug caused liblzma to falsely
+ report an invalid write to Valgrind when loading liblzma.
+
+ * xz: Changed the messages for thread reduction due to memory
+ constraints to only appear under the highest verbosity level.
+
+ * Build:
+
+ - Fixed a build issue when the header file
+ was present on the system but the Landlock system calls were
+ not defined in .
+
+ - The CMake build now warns and disables NLS if both gettext
+ tools and pre-created .gmo files are missing. Previously,
+ this caused the CMake build to fail.
+
+ * Minor improvements to man pages.
+
+ * Minor improvements to tests.
+
+
+5.6.0 (2024-02-24)
+
+ IMPORTANT: This added a backdoor (CVE-2024-3094). It's enabled only
+ in the release tarballs.
+
+ This bumps the minor version of liblzma because new features were
+ added. The API and ABI are still backward compatible with liblzma
+ 5.4.x and 5.2.x and 5.0.x.
+
+ NOTE: As described in the NEWS for 5.5.2beta, the core components
+ are now under the BSD Zero Clause License (0BSD).
+
+ Since 5.5.2beta:
+
+ * liblzma:
+
+ - Disabled the branchless C variant in the LZMA decoder based
+ on the benchmark results from the community.
+
+ - Disabled x86-64 inline assembly on x32 to fix the build.
+
+ * Sandboxing support in xz:
+
+ - Landlock is now used even when xz needs to create files.
+ In this case the sandbox has to be more permissive than
+ when no files need to be created. A similar thing was
+ already in use with pledge(2) since 5.3.4alpha.
+
+ - Landlock and pledge(2) are now stricter when reading from
+ more than one input file and only writing to standard output.
+
+ - Added support for Landlock ABI version 4.
+
+ * CMake:
+
+ - Default to -O2 instead of -O3 with CMAKE_BUILD_TYPE=Release.
+ -O3 is not useful for speed and makes the code larger.
+
+ - Now builds lzmainfo and lzmadec.
+
+ - xzdiff, xzgrep, xzless, xzmore, and their symlinks are now
+ installed. The scripts are also tested during "make test".
+
+ - Added translation support for xz, lzmainfo, and the
+ man pages.
+
+ - Applied the symbol versioning workaround for MicroBlaze that
+ is used in the Autotools build.
+
+ - The general XZ Utils and liblzma API documentation is now
+ installed.
+
+ - The CMake component names were changed a little and several
+ were added. liblzma_Runtime and liblzma_Development are
+ unchanged.
+
+ - Minimum required CMake version is now 3.14. However,
+ translation support is disabled with CMake versions
+ older than 3.20.
+
+ - The CMake-based build is now close to feature parity with the
+ Autotools-based build. Most importantly a few tests aren't
+ run yet. Testing the CMake-based build on different operating
+ systems would be welcome now. See the comment at the top of
+ CMakeLists.txt.
+
+ * Fixed a bug in the Autotools feature test for ARM64 CRC32
+ instruction support for old versions of Clang. This did not
+ affect the CMake build.
+
+ * Windows:
+
+ - The build instructions in INSTALL and windows/INSTALL*.txt
+ were revised completely.
+
+ - windows/build-with-cmake.bat along with the instructions
+ in windows/INSTALL-MinGW-w64_with_CMake.txt should make
+ it very easy to build liblzma.dll and xz.exe on Windows
+ using CMake and MinGW-w64 with either GCC or Clang/LLVM.
+
+ - windows/build.bash was updated. It now works on MSYS2 and
+ on GNU/Linux (cross-compiling) to create a .zip and .7z
+ package for 32-bit and 64-bit x86 using GCC + MinGW-w64.
+
+ * The TODO file is no longer installed as part of the
+ documentation. The file is out of date and does not reflect
+ the actual tasks that will be completed in the future.
+
+ * Translations:
+
+ - Translated lzmainfo man pages are now installed. These
+ had been forgotten in earlier versions.
+
+ - Updated Croatian, Esperanto, German, Hungarian, Korean,
+ Polish, Romanian, Spanish, Swedish, Vietnamese, and Ukrainian
+ translations.
+
+ - Updated German, Korean, Romanian, and Ukrainian man page
+ translations.
+
+ * Added a few tests.
+
+ Summary of new features added in the 5.5.x development releases:
+
+ * liblzma:
+
+ - LZMA decoder: Speed optimizations to the C code and
+ added GCC & Clang compatible inline assembly for x86-64.
+
+ - Added lzma_mt_block_size() to recommend a Block size for
+ multithreaded encoding.
+
+ - Added CLMUL-based CRC32 on x86-64 and E2K with runtime
+ processor detection. Similar to CRC64, on 32-bit x86 it
+ isn't available unless --disable-assembler is used.
+
+ - Optimized the CRC32 calculation on ARM64 platforms using the
+ CRC32 instructions. Runtime detection for the instruction is
+ used on GNU/Linux, FreeBSD, Windows, and macOS. If the
+ compiler flags indicate unconditional CRC32 instruction
+ support (+crc) then the generic version is not built.
+
+ - Added definitions of mask values like
+ LZMA_INDEX_CHECK_MASK_CRC32 to .
+
+ * xz:
+
+ - Multithreaded mode is now the default. This improves
+ compression speed and creates .xz files that can be
+ decompressed in multithreaded mode. The downsides are
+ increased memory usage and slightly worse compression ratio.
+
+ - Added a new command line option --filters to set the filter
+ chain using the liblzma filter string syntax.
+
+ - Added new command line options --filters1 ... --filters9 to
+ set additional filter chains using the liblzma filter string
+ syntax. The --block-list option now allows specifying filter
+ chains that were set using these new options.
+
+ - Ported the command line tools to Windows MSVC.
+ Visual Studio 2015 or later is required.
+
+ * Added lz4 support to xzdiff/xzcmp and xzgrep.
+
+
+5.5.2beta (2024-02-14)
+
+ * Licensing change: The core components are now under the
+ BSD Zero Clause License (0BSD). In XZ Utils 5.4.6 and older
+ and 5.5.1alpha these components are in the public domain and
+ obviously remain so; the change affects the new releases only.
+
+ 0BSD is an extremely permissive license which doesn't require
+ retaining or reproducing copyright or license notices when
+ distributing the code, thus in practice there is extremely
+ little difference to public domain.
+
+ * liblzma
+
+ - Significant speed optimizations to the LZMA decoder were
+ made. There are now three variants that can be chosen at
+ build time:
+
+ * Basic C version: This is a few percent faster than
+ 5.4.x due to some new optimizations.
+
+ * Branchless C: This is currently the default on platforms
+ for which there is no assembly code. This should be a few
+ percent faster than the basic C version.
+
+ * x86-64 inline assembly. This works with GCC and Clang.
+
+ The default choice can currently be overridden by setting
+ LZMA_RANGE_DECODER_CONFIG in CPPFLAGS: 0 means the basic
+ version and 3 means that branchless C version.
+
+ - Optimized the CRC32 calculation on ARM64 platforms using the
+ CRC32 instructions. The instructions are optional in ARMv8.0
+ and are required in ARMv8.1 and later. Runtime detection for
+ the instruction is used on GNU/Linux, FreeBSD, Windows, and
+ macOS. If the compiler flags indicate unconditional CRC32
+ instruction support (+crc) then the generic version is not
+ built.
+
+ * Added lz4 support to xzdiff/xzcmp and xzgrep.
+
+ * Man pages of xzdiff/xzcmp, xzgrep, and xzmore were rewritten
+ to simplify licensing of the man page translations.
+
+ * Translations:
+
+ - Updated Chinese (simplified), German, Korean, Polish,
+ Romanian, Spanish, Swedish, and Ukrainian translations.
+
+ - Updated German, Korean, Romanian, and Ukrainian man page
+ translations.
+
+ * Small improvements to the tests.
+
+ * Added doc/examples/11_file_info.c. It was added to the Git
+ repository in 2017 but forgotten to be added into distribution
+ tarballs.
+
+ * Removed doc/examples_old. These were from 2012.
+
+ * Removed the macos/build.sh script. It had not been updated
+ since 2013.
+
+
+5.5.1alpha (2024-01-26)
+
+ * Added a new filter for RISC-V binaries. The filter can be used
+ for 32-bit and 64-bit binaries with either little or big
+ endianness. In liblzma, the Filter ID is LZMA_FILTER_RISCV (0x0B)
+ and the xz option is --riscv. liblzma filter string syntax
+ recognizes this filter as "riscv".
+
+ * liblzma:
+
+ - Added lzma_mt_block_size() to recommend a Block size for
+ multithreaded encoding
+
+ - Added CLMUL-based CRC32 on x86-64 and E2K with runtime
+ processor detection. Similar to CRC64, on 32-bit x86 it
+ isn't available unless --disable-assembler is used.
+
+ - Implemented GNU indirect function (IFUNC) as a runtime
+ function dispatching method for CRC32 and CRC64 fast
+ implementations on x86. Only GNU/Linux (glibc) and FreeBSD
+ builds will use IFUNC, unless --enable-ifunc is specified to
+ configure.
+
+ - Added definitions of mask values like
+ LZMA_INDEX_CHECK_MASK_CRC32 to .
+
+ - The XZ logo is now included in the Doxygen generated
+ documentation. It is licensed under Creative Commons
+ Attribution-ShareAlike 4.0.
+
+ * xz:
+
+ - Multithreaded mode is now the default. This improves
+ compression speed and creates .xz files that can be
+ decompressed multithreaded at the cost of increased memory
+ usage and slightly worse compression ratio.
+
+ - Added new command line option --filters to set the filter
+ chain using liblzma filter string syntax.
+
+ - Added new command line options --filters1 ... --filters9 to
+ set additional filter chains using liblzma filter string
+ syntax. The --block-list option now allows specifying filter
+ chains that were set using these new options.
+
+ - Added support for Linux Landlock as a sandboxing method.
+
+ - xzdec now supports pledge(2), Capsicum, and Linux Landlock as
+ sandboxing methods.
+
+ - Progress indicator time stats remain accurate after pausing
+ xz with SIGTSTP.
+
+ - Ported xz and xzdec to Windows MSVC. Visual Studio 2015 or
+ later is required.
+
+ * CMake Build:
+
+ - Supports pledge(2), Capsicum, and Linux Landlock sandboxing
+ methods.
+
+ - Replacement functions for getopt_long() are used on platforms
+ that do not have it.
+
+ * Enabled unaligned access by default on PowerPC64LE and on RISC-V
+ targets that define __riscv_misaligned_fast.
+
+ * Tests:
+
+ - Added two new fuzz targets to OSS-Fuzz.
+
+ - Implemented Continuous Integration (CI) testing using
+ GitHub Actions.
+
+ * Changed quoting style from `...' to '...' in all messages,
+ scripts, and documentation.
+
+ * Added basic Codespell support to help catch typo errors.
+
+
+5.4.7 (2024-05-29)
+
+ * Not changed: Memory sanitizer (MSAN) has a false positive
+ in the CRC CLMUL code which also makes OSS Fuzz unhappy.
+ Valgrind is smarter and doesn't complain.
+
+ A revision to the CLMUL code is coming anyway and this issue
+ will be cleaned up as part of it. It won't be backported to
+ 5.6.x or 5.4.x because the old code isn't wrong. There is
+ no reason to risk introducing regressions in old branches
+ just to silence a false positive.
+
+ * liblzma:
+
+ - lzma_index_decoder() and lzma_index_buffer_decode(): Fix
+ a missing output pointer initialization (*i = NULL) if the
+ functions are called with invalid arguments. The API docs
+ say that such an initialization is always done. In practice
+ this matters very little because the problem can only occur
+ if the calling application has a bug and these functions
+ return LZMA_PROG_ERROR.
+
+ - lzma_str_to_filters(): Fix a missing output pointer
+ initialization (*error_pos = 0). This is very similar
+ to the fix above.
+
+ - Fix C standard conformance with function pointer types.
+ This newly showed up with Clang 17 with -fsanitize=undefined.
+ There are no bug reports about this.
+
+ - Fix building with NVIDIA HPC SDK.
+
+ * xz:
+
+ - Fix a C standard conformance issue in --block-list parsing
+ (arithmetic on a null pointer).
+
+ - Fix a warning from GNU groff when processing the man page:
+ "warning: cannot select font 'CW'"
+
+ - Fix outdated threading related information on the man page.
+
+ * xzless:
+
+ - With "less" version 451 and later, use "||-" instead of "|-"
+ in the environment variable LESSOPEN. This way compressed
+ files that contain no uncompressed data are shown correctly
+ as empty.
+
+ - With "less" version 632 and later, use --show-preproc-errors
+ to make "less" show a warning on decompression errors.
+
+ * Autotools-based build system (configure):
+
+ - Symbol versioning variant can now be overridden with
+ --enable-symbol-versions. Documentation in INSTALL was
+ updated to match.
+
+ CMake:
+
+ - Linux on MicroBlaze is handled specially now. This matches
+ the changes made to the Autotools-based build in XZ Utils
+ 5.4.2 and 5.2.11.
+
+ - Disable symbol versioning on non-glibc Linux to match what
+ the Autotools build does. For example, symbol versioning
+ isn't enabled with musl.
+
+ - Symbol versioning variant can now be overridden by setting
+ SYMBOL_VERSIONING to "OFF", "generic", or "linux".
+
+ * Documentation:
+
+ - Clarify the description of --disable-assembler in INSTALL.
+ The option only affects 32-bit x86 assembly usage.
+
+ - Add doc/examples/11_file_info.c. It was added to the
+ Git repository in 2017 but forgotten to be added into
+ distribution tarballs.
+
+ - Don't install the TODO file as part of the documentation.
+ The file is out of date.
+
+ - Update home page URLs back to their old locations on
+ tukaani.org.
+
+ - Update maintainer info.
+
+
+5.4.6 (2024-01-26)
+
+ * Fixed a bug involving internal function pointers in liblzma not
+ being initialized to NULL. The bug can only be triggered if
+ lzma_filters_update() is called on a LZMA1 encoder, so it does
+ not affect xz or any application known to us that uses liblzma.
+
+ * xz:
+
+ - Fixed a regression introduced in 5.4.2 that caused encoding
+ in the raw format to unnecessarily fail if --suffix was not
+ used. For instance, the following command no longer reports
+ that --suffix must be used:
+
+ echo foo | xz --format=raw --lzma2 | wc -c
+
+ - Fixed an issue on MinGW-w64 builds that prevented reading
+ from or writing to non-terminal character devices like NUL.
+
+ * Added a new test.
+
+
+5.4.5 (2023-11-01)
+
+ * liblzma:
+
+ - Use __attribute__((__no_sanitize_address__)) to avoid address
+ sanitization with CRC64 CLMUL. It uses 16-byte-aligned reads
+ which can extend past the bounds of the input buffer and
+ inherently trigger address sanitization errors. This isn't
+ a bug.
+
+ - Fixed an assertion failure that could be triggered by a large
+ unpadded_size argument. It was verified that there was no
+ other bug than the assertion failure.
+
+ - Fixed a bug that prevented building with Windows Vista
+ threading when __attribute__((__constructor__)) is not
+ supported.
+
+ * xz now properly handles special files such as "con" or "nul" on
+ Windows. Before this fix, the following wrote "foo" to the
+ console and deleted the input file "con_xz":
+
+ echo foo | xz > con_xz
+ xz --suffix=_xz --decompress con_xz
+
+ * Build systems:
+
+ - Allow builds with Windows win95 threading and small mode when
+ __attribute__((__constructor__)) is supported.
+
+ - Added a new line to liblzma.pc for MSYS2 (Windows):
+
+ Cflags.private: -DLZMA_API_STATIC
+
+ When compiling code that will link against static liblzma,
+ the LZMA_API_STATIC macro needs to be defined on Windows.
+
+ - CMake specific changes:
+
+ * Fixed a bug that allowed CLOCK_MONOTONIC to be used even
+ if the check for it failed.
+
+ * Fixed a bug where configuring CMake multiple times
+ resulted in HAVE_CLOCK_GETTIME and HAVE_CLOCK_MONOTONIC
+ not being set.
+
+ * Fixed the build with MinGW-w64-based Clang/LLVM 17.
+ llvm-windres now has more accurate GNU windres emulation
+ so the GNU windres workaround from 5.4.1 is needed with
+ llvm-windres version 17 too.
+
+ * The import library on Windows is now properly named
+ "liblzma.dll.a" instead of "libliblzma.dll.a"
+
+ * Fixed a bug causing the Ninja Generator to fail on
+ UNIX-like systems. This bug was introduced in 5.4.0.
+
+ * Added a new option to disable CLMUL CRC64.
+
+ * A module-definition (.def) file is now created when
+ building liblzma.dll with MinGW-w64.
+
+ * The pkg-config liblzma.pc file is now installed on all
+ builds except when using MSVC on Windows.
+
+ * Added large file support by default for platforms that
+ need it to handle files larger than 2 GiB. This includes
+ MinGW-w64, even 64-bit builds.
+
+ * Small fixes and improvements to the tests.
+
+ * Updated translations: Chinese (simplified) and Esperanto.
+
+
+5.4.4 (2023-08-02)
+
+ * liblzma and xzdec can now build against WASI SDK when threading
+ support is disabled. xz and tests don't build yet.
+
+ * CMake:
+
+ - Fixed a bug preventing other projects from including liblzma
+ multiple times using find_package().
+
+ - Don't create broken symlinks in Cygwin and MSYS2 unless
+ supported by the environment. This prevented building for the
+ default MSYS2 environment. The problem was introduced in
+ xz 5.4.0.
+
+ * Documentation:
+
+ - Small improvements to man pages.
+
+ - Small improvements and typo fixes for liblzma API
+ documentation.
+
+ * Tests:
+
+ - Added a new section to INSTALL to describe basic test usage
+ and address recent questions about building the tests when
+ cross compiling.
+
+ - Small fixes and improvements to the tests.
+
+ * Translations:
+
+ - Fixed a mistake that caused one of the error messages to not
+ be translated. This only affected versions 5.4.2 and 5.4.3.
+
+ - Updated the Chinese (simplified), Croatian, Esperanto, German,
+ Korean, Polish, Romanian, Spanish, Swedish, Ukrainian, and
+ Vietnamese translations.
+
+ - Updated the German, Korean, Romanian, and Ukrainian man page
+ translations.
+
+
+5.4.3 (2023-05-04)
+
+ * All fixes from 5.2.12
+
+ * Features in the CMake build can now be disabled as CMake cache
+ variables, similar to the Autotools build.
+
+ * Minor update to the Croatian translation.
+
+
+5.4.2 (2023-03-18)
+
+ * All fixes from 5.2.11 that were not included in 5.4.1.
+
+ * If xz is built with support for the Capsicum sandbox but running
+ in an environment that doesn't support Capsicum, xz now runs
+ normally without sandboxing instead of exiting with an error.
+
+ * liblzma:
+
+ - Documentation was updated to improve the style, consistency,
+ and completeness of the liblzma API headers.
+
+ - The Doxygen-generated HTML documentation for the liblzma API
+ header files is now included in the source release and is
+ installed as part of "make install". All JavaScript is
+ removed to simplify license compliance and to reduce the
+ install size.
+
+ - Fixed a minor bug in lzma_str_from_filters() that produced
+ too many filters in the output string instead of reporting
+ an error if the input array had more than four filters. This
+ bug did not affect xz.
+
+ * Build systems:
+
+ - autogen.sh now invokes the doxygen tool via the new wrapper
+ script doxygen/update-doxygen, unless the command line option
+ --no-doxygen is used.
+
+ - Added microlzma_encoder.c and microlzma_decoder.c to the
+ VS project files for Windows and to the CMake build. These
+ should have been included in 5.3.2alpha.
+
+ * Tests:
+
+ - Added a test to the CMake build that was forgotten in the
+ previous release.
+
+ - Added and refactored a few tests.
+
+ * Translations:
+
+ - Updated the Brazilian Portuguese translation.
+
+ - Added Brazilian Portuguese man page translation.
+
+
+5.4.1 (2023-01-11)
+
+ * liblzma:
+
+ - Fixed the return value of lzma_microlzma_encoder() if the
+ LZMA options lc/lp/pb are invalid. Invalid lc/lp/pb options
+ made the function return LZMA_STREAM_END without encoding
+ anything instead of returning LZMA_OPTIONS_ERROR.
+
+ - Windows / Visual Studio: Workaround a possible compiler bug
+ when targeting 32-bit x86 and compiling the CLMUL version of
+ the CRC64 code. The CLMUL code isn't enabled by the Windows
+ project files but it is in the CMake-based builds.
+
+ * Build systems:
+
+ - Windows-specific CMake changes:
+
+ * Don't try to enable CLMUL CRC64 code if _mm_set_epi64x()
+ isn't available. This fixes CMake-based build with Visual
+ Studio 2013.
+
+ * Created a workaround for a build failure with windres
+ from GNU binutils. It is used only when the C compiler
+ is GCC (not Clang). The workaround is incompatible
+ with llvm-windres, resulting in "XZx20Utils" instead
+ of "XZ Utils" in the resource file, but without the
+ workaround llvm-windres works correctly. See the
+ comment in CMakeLists.txt for details.
+
+ * Included the resource files in the xz and xzdec build
+ rules. Building the command line tools is still
+ experimental but possible with MinGW-w64.
+
+ - Visual Studio: Added stream_decoder_mt.c to the project
+ files. Now the threaded decompressor lzma_stream_decoder_mt()
+ gets built. CMake-based build wasn't affected.
+
+ - Updated windows/INSTALL-MSVC.txt to mention that CMake-based
+ build is now the preferred method with Visual Studio. The
+ project files will probably be removed after 5.4.x releases.
+
+ - Changes to #defines in config.h:
+
+ * HAVE_DECL_CLOCK_MONOTONIC was replaced by
+ HAVE_CLOCK_MONOTONIC. The old macro was always defined
+ in configure-generated config.h to either 0 or 1. The
+ new macro is defined (to 1) only if the declaration of
+ CLOCK_MONOTONIC is available. This matches the way most
+ other config.h macros work and makes things simpler with
+ other build systems.
+
+ * HAVE_DECL_PROGRAM_INVOCATION_NAME was replaced by
+ HAVE_PROGRAM_INVOCATION_NAME for the same reason.
+
+ * Tests:
+
+ - Fixed test script compatibility with ancient /bin/sh
+ versions. Now the five test_compress_* tests should
+ no longer fail on Solaris 10.
+
+ - Added and refactored a few tests.
+
+ * Translations:
+
+ - Updated the Catalan and Esperanto translations.
+
+ - Added Korean and Ukrainian man page translations.
+
+
+5.4.0 (2022-12-13)
+
+ This bumps the minor version of liblzma because new features were
+ added. The API and ABI are still backward compatible with liblzma
+ 5.2.x and 5.0.x.
+
+ Since 5.3.5beta:
+
+ * All fixes from 5.2.10.
+
+ * The ARM64 filter is now stable. The xz option is now --arm64.
+ Decompression requires XZ Utils 5.4.0. In the future the ARM64
+ filter will be supported by XZ for Java, XZ Embedded (including
+ the version in Linux), LZMA SDK, and 7-Zip.
+
+ * Translations:
+
+ - Updated Catalan, Croatian, German, Romanian, and Turkish
+ translations.
+
+ - Updated German man page translations.
+
+ - Added Romanian man page translations.
+
+ Summary of new features added in the 5.3.x development releases:
+
+ * liblzma:
+
+ - Added threaded .xz decompressor lzma_stream_decoder_mt().
+ It can use multiple threads with .xz files that have multiple
+ Blocks with size information in Block Headers. The threaded
+ encoder in xz has always created such files.
+
+ Single-threaded encoder cannot store the size information in
+ Block Headers even if one used LZMA_FULL_FLUSH to create
+ multiple Blocks, so this threaded decoder cannot use multiple
+ threads with such files.
+
+ If there are multiple Streams (concatenated .xz files), one
+ Stream will be decompressed completely before starting the
+ next Stream.
+
+ - A new decoder flag LZMA_FAIL_FAST was added. It makes the
+ threaded decompressor report errors soon instead of first
+ flushing all pending data before the error location.
+
+ - New Filter IDs:
+ * LZMA_FILTER_ARM64 is for ARM64 binaries.
+ * LZMA_FILTER_LZMA1EXT is for raw LZMA1 streams that don't
+ necessarily use the end marker.
+
+ - Added lzma_str_to_filters(), lzma_str_from_filters(), and
+ lzma_str_list_filters() to convert a preset or a filter chain
+ string to a lzma_filter[] and vice versa. These should make
+ it easier to write applications that allow users to specify
+ custom compression options.
+
+ - Added lzma_filters_free() which can be convenient for freeing
+ the filter options in a filter chain (an array of lzma_filter
+ structures).
+
+ - lzma_file_info_decoder() to makes it a little easier to get
+ the Index field from .xz files. This helps in getting the
+ uncompressed file size but an easy-to-use random access
+ API is still missing which has existed in XZ for Java for
+ a long time.
+
+ - Added lzma_microlzma_encoder() and lzma_microlzma_decoder().
+ It is used by erofs-utils and may be used by others too.
+
+ The MicroLZMA format is a raw LZMA stream (without end marker)
+ whose first byte (always 0x00) has been replaced with
+ bitwise-negation of the LZMA properties (lc/lp/pb). It was
+ created for use in EROFS but may be used in other contexts
+ as well where it is important to avoid wasting bytes for
+ stream headers or footers. The format is also supported by
+ XZ Embedded (the XZ Embedded version in Linux got MicroLZMA
+ support in Linux 5.16).
+
+ The MicroLZMA encoder API in liblzma can compress into a
+ fixed-sized output buffer so that as much data is compressed
+ as can be fit into the buffer while still creating a valid
+ MicroLZMA stream. This is needed for EROFS.
+
+ - Added lzma_lzip_decoder() to decompress the .lz (lzip) file
+ format version 0 and the original unextended version 1 files.
+ Also lzma_auto_decoder() supports .lz files.
+
+ - lzma_filters_update() can now be used with the multi-threaded
+ encoder (lzma_stream_encoder_mt()) to change the filter chain
+ after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH.
+
+ - In lzma_options_lzma, allow nice_len = 2 and 3 with the match
+ finders that require at least 3 or 4. Now it is internally
+ rounded up if needed.
+
+ - CLMUL-based CRC64 on x86-64 and E2K with runtime processor
+ detection. On 32-bit x86 it currently isn't available unless
+ --disable-assembler is used which can make the non-CLMUL
+ CRC64 slower; this might be fixed in the future.
+
+ - Building with --disable-threads --enable-small
+ is now thread-safe if the compiler supports
+ __attribute__((__constructor__)).
+
+ * xz:
+
+ - Using -T0 (--threads=0) will now use multi-threaded encoder
+ even on a single-core system. This is to ensure that output
+ from the same xz binary is identical on both single-core and
+ multi-core systems.
+
+ - --threads=+1 or -T+1 is now a way to put xz into
+ multi-threaded mode while using only one worker thread.
+ The + is ignored if the number is not 1.
+
+ - A default soft memory usage limit is now used for compression
+ when -T0 is used and no explicit limit has been specified.
+ This soft limit is used to restrict the number of threads
+ but if the limit is exceeded with even one thread then xz
+ will continue with one thread using the multi-threaded
+ encoder and this limit is ignored. If the number of threads
+ is specified manually then no default limit will be used;
+ this affects only -T0.
+
+ This change helps on systems that have very many cores and
+ using all of them for xz makes no sense. Previously xz -T0
+ could run out of memory on such systems because it attempted
+ to reserve memory for too many threads.
+
+ This also helps with 32-bit builds which don't have a large
+ amount of address space that would be required for many
+ threads. The default soft limit for -T0 is at most 1400 MiB
+ on all 32-bit platforms.
+
+ - Previously a low value in --memlimit-compress wouldn't cause
+ xz to switch from multi-threaded mode to single-threaded mode
+ if the limit cannot otherwise be met; xz failed instead. Now
+ xz can switch to single-threaded mode and then, if needed,
+ scale down the LZMA2 dictionary size too just like it already
+ did when it was started in single-threaded mode.
+
+ - The option --no-adjust no longer prevents xz from scaling down
+ the number of threads as that doesn't affect the compressed
+ output (only performance). Now --no-adjust only prevents
+ adjustments that affect compressed output, that is, with
+ --no-adjust xz won't switch from multi-threaded mode to
+ single-threaded mode and won't scale down the LZMA2
+ dictionary size.
+
+ - Added a new option --memlimit-mt-decompress=LIMIT. This is
+ used to limit the number of decompressor threads (possibly
+ falling back to single-threaded mode) but it will never make
+ xz refuse to decompress a file. This has a system-specific
+ default value because without any limit xz could end up
+ allocating memory for the whole compressed input file, the
+ whole uncompressed output file, multiple thread-specific
+ decompressor instances and so on. Basically xz could
+ attempt to use an insane amount of memory even with fairly
+ common files. The system-specific default value is currently
+ the same as the one used for compression with -T0.
+
+ The new option works together with the existing option
+ --memlimit-decompress=LIMIT. The old option sets a hard limit
+ that must not be exceeded (xz will refuse to decompress)
+ while the new option only restricts the number of threads.
+ If the limit set with --memlimit-mt-decompress is greater
+ than the limit set with --memlimit-compress, then the latter
+ value is used also for --memlimit-mt-decompress.
+
+ - Added new information to the output of xz --info-memory and
+ new fields to the output of xz --robot --info-memory.
+
+ - In --lzma2=nice=NUMBER allow 2 and 3 with all match finders
+ now that liblzma handles it.
+
+ - Don't mention endianness for ARM and ARM-Thumb filters in
+ --long-help. The filters only work for little endian
+ instruction encoding but modern ARM processors using
+ big endian data access still use little endian
+ instruction encoding. So the help text was misleading.
+ In contrast, the PowerPC filter is only for big endian
+ 32/64-bit PowerPC code. Little endian PowerPC would need
+ a separate filter.
+
+ - Added decompression support for the .lz (lzip) file format
+ version 0 and the original unextended version 1. It is
+ autodetected by default. See also the option --format on
+ the xz man page.
+
+ - Sandboxing enabled by default:
+ * Capsicum (FreeBSD)
+ * pledge(2) (OpenBSD)
+
+ * Scripts now support the .lz format using xz.
+
+ * A few new tests were added.
+
+ * The liblzma-specific tests are now supported in CMake-based
+ builds too ("make test").
+
+
+5.3.5beta (2022-12-01)
+
+ * All fixes from 5.2.9.
+
+ * liblzma:
+
+ - Added new LZMA_FILTER_LZMA1EXT for raw encoder and decoder to
+ handle raw LZMA1 streams that don't have end of payload marker
+ (EOPM) alias end of stream (EOS) marker. It can be used in
+ filter chains, for example, with the x86 BCJ filter.
+
+ - Added lzma_str_to_filters(), lzma_str_from_filters(), and
+ lzma_str_list_filters() to make it easier for applications
+ to get custom compression options from a user and convert
+ it to an array of lzma_filter structures.
+
+ - Added lzma_filters_free().
+
+ - lzma_filters_update() can now be used with the multi-threaded
+ encoder (lzma_stream_encoder_mt()) to change the filter chain
+ after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH.
+
+ - In lzma_options_lzma, allow nice_len = 2 and 3 with the match
+ finders that require at least 3 or 4. Now it is internally
+ rounded up if needed.
+
+ - ARM64 filter was modified. It is still experimental.
+
+ - Fixed LTO build with Clang if -fgnuc-version=10 or similar
+ was used to make Clang look like GCC >= 10. Now it uses
+ __has_attribute(__symver__) which should be reliable.
+
+ * xz:
+
+ - --threads=+1 or -T+1 is now a way to put xz into multi-threaded
+ mode while using only one worker thread.
+
+ - In --lzma2=nice=NUMBER allow 2 and 3 with all match finders
+ now that liblzma handles it.
+
+ * Updated translations: Chinese (simplified), Korean, and Turkish.
+
+
+5.3.4alpha (2022-11-15)
+
+ * All fixes from 5.2.7 and 5.2.8.
+
+ * liblzma:
+
+ - Minor improvements to the threaded decoder.
+
+ - Added CRC64 implementation that uses SSSE3, SSE4.1, and CLMUL
+ instructions on 32/64-bit x86 and E2K. On 32-bit x86 it's
+ not enabled unless --disable-assembler is used but then
+ the non-CLMUL code might be slower. Processor support is
+ detected at runtime so this is built by default on x86-64
+ and E2K. On these platforms, if compiler flags indicate
+ unconditional CLMUL support (-msse4.1 -mpclmul) then the
+ generic version is not built, making liblzma 8-9 KiB smaller
+ compared to having both versions included.
+
+ With extremely compressible files this can make decompression
+ up to twice as fast but with typical files 5 % improvement
+ is a more realistic expectation.
+
+ The CLMUL version is slower than the generic version with
+ tiny inputs (especially at 1-8 bytes per call, but up to
+ 16 bytes). In normal use in xz this doesn't matter at all.
+
+ - Added an experimental ARM64 filter. This is *not* the final
+ version! Files created with this experimental version won't
+ be supported in the future versions! The filter design is
+ a compromise where improving one use case makes some other
+ cases worse.
+
+ - Added decompression support for the .lz (lzip) file format
+ version 0 and the original unextended version 1. See the
+ API docs of lzma_lzip_decoder() for details. Also
+ lzma_auto_decoder() supports .lz files.
+
+ - Building with --disable-threads --enable-small
+ is now thread-safe if the compiler supports
+ __attribute__((__constructor__))
+
+ * xz:
+
+ - Added support for OpenBSD's pledge(2) as a sandboxing method.
+
+ - Don't mention endianness for ARM and ARM-Thumb filters in
+ --long-help. The filters only work for little endian
+ instruction encoding but modern ARM processors using
+ big endian data access still use little endian
+ instruction encoding. So the help text was misleading.
+ In contrast, the PowerPC filter is only for big endian
+ 32/64-bit PowerPC code. Little endian PowerPC would need
+ a separate filter.
+
+ - Added --experimental-arm64. This will be renamed once the
+ filter is finished. Files created with this experimental
+ filter will not be supported in the future!
+
+ - Added new fields to the output of xz --robot --info-memory.
+
+ - Added decompression support for the .lz (lzip) file format
+ version 0 and the original unextended version 1. It is
+ autodetected by default. See also the option --format on
+ the xz man page.
+
+ * Scripts now support the .lz format using xz.
+
+ * Build systems:
+
+ - New #defines in config.h: HAVE_ENCODER_ARM64,
+ HAVE_DECODER_ARM64, HAVE_LZIP_DECODER, HAVE_CPUID_H,
+ HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR, HAVE_USABLE_CLMUL
+
+ - New configure options: --disable-clmul-crc,
+ --disable-microlzma, --disable-lzip-decoder, and
+ 'pledge' is now an option in --enable-sandbox (but
+ it's autodetected by default anyway).
+
+ - INSTALL was updated to document the new configure options.
+
+ - PACKAGERS now lists also --disable-microlzma and
+ --disable-lzip-decoder as configure options that must
+ not be used in builds for non-embedded use.
+
+ * Tests:
+
+ - Fix some of the tests so that they skip instead of fail if
+ certain features have been disabled with configure options.
+ It's still not perfect.
+
+ - Other improvements to tests.
+
+ * Updated translations: Croatian, Finnish, Hungarian, Polish,
+ Romanian, Spanish, Swedish, and Ukrainian.
+
+
+5.3.3alpha (2022-08-22)
+
+ * All fixes from 5.2.6.
+
+ * liblzma:
+
+ - Fixed 32-bit build.
+
+ - Added threaded .xz decompressor lzma_stream_decoder_mt().
+ It can use multiple threads with .xz files that have multiple
+ Blocks with size information in Block Headers. The threaded
+ encoder in xz has always created such files.
+
+ Single-threaded encoder cannot store the size information in
+ Block Headers even if one used LZMA_FULL_FLUSH to create
+ multiple Blocks, so this threaded decoder cannot use multiple
+ threads with such files.
+
+ If there are multiple Streams (concatenated .xz files), one
+ Stream will be decompressed completely before starting the
+ next Stream.
+
+ - A new decoder flag LZMA_FAIL_FAST was added. It makes the
+ threaded decompressor report errors soon instead of first
+ flushing all pending data before the error location.
+
+ * xz:
+
+ - Using -T0 (--threads=0) will now use multi-threaded encoder
+ even on a single-core system. This is to ensure that output
+ from the same xz binary is identical on both single-core and
+ multi-core systems.
+
+ - A default soft memory usage limit is now used for compression
+ when -T0 is used and no explicit limit has been specified.
+ This soft limit is used to restrict the number of threads
+ but if the limit is exceeded with even one thread then xz
+ will continue with one thread using the multi-threaded
+ encoder and this limit is ignored. If the number of threads
+ is specified manually then no default limit will be used;
+ this affects only -T0.
+
+ This change helps on systems that have very many cores and
+ using all of them for xz makes no sense. Previously xz -T0
+ could run out of memory on such systems because it attempted
+ to reserve memory for too many threads.
+
+ This also helps with 32-bit builds which don't have a large
+ amount of address space that would be required for many
+ threads. The default limit is 1400 MiB on all 32-bit
+ platforms with -T0.
+
+ Now xz -T0 should just work. It might use too few threads
+ in some cases but at least it shouldn't easily run out of
+ memory. It's possible that this will be tweaked before 5.4.0.
+
+ - Changes to --memlimit-compress and --no-adjust:
+
+ In single-threaded mode, --memlimit-compress can make xz
+ scale down the LZMA2 dictionary size to meet the memory usage
+ limit. This obviously affects the compressed output. However,
+ if xz was in threaded mode, --memlimit-compress could make xz
+ reduce the number of threads but it wouldn't make xz switch
+ from multi-threaded mode to single-threaded mode or scale
+ down the LZMA2 dictionary size. This seemed illogical.
+
+ Now --memlimit-compress can make xz switch to single-threaded
+ mode if one thread in multi-threaded mode uses too much
+ memory. If memory usage is still too high, then the LZMA2
+ dictionary size can be scaled down too.
+
+ The option --no-adjust was also changed so that it no longer
+ prevents xz from scaling down the number of threads as that
+ doesn't affect compressed output (only performance). After
+ this commit --no-adjust only prevents adjustments that affect
+ compressed output, that is, with --no-adjust xz won't switch
+ from multithreaded mode to single-threaded mode and won't
+ scale down the LZMA2 dictionary size.
+
+ - Added a new option --memlimit-mt-decompress=LIMIT. This is
+ used to limit the number of decompressor threads (possibly
+ falling back to single-threaded mode) but it will never make
+ xz refuse to decompress a file. This has a system-specific
+ default value because without any limit xz could end up
+ allocating memory for the whole compressed input file, the
+ whole uncompressed output file, multiple thread-specific
+ decompressor instances and so on. Basically xz could
+ attempt to use an insane amount of memory even with fairly
+ common files.
+
+ The new option works together with the existing option
+ --memlimit-decompress=LIMIT. The old option sets a hard limit
+ that must not be exceeded (xz will refuse to decompress)
+ while the new option only restricts the number of threads.
+ If the limit set with --memlimit-mt-decompress is greater
+ than the limit set with --memlimit-compress, then the latter
+ value is used also for --memlimit-mt-decompress.
+
+ * Tests:
+
+ - Added a few more tests.
+
+ - Added tests/code_coverage.sh to create a code coverage report
+ of the tests.
+
+ * Build systems:
+
+ - Automake's parallel test harness is now used to make tests
+ finish faster.
+
+ - Added the CMake files to the distribution tarball. These were
+ supposed to be in 5.2.5 already.
+
+ - Added liblzma tests to the CMake build.
+
+ - Windows: Fix building of liblzma.dll with the included
+ Visual Studio project files.
+
+
+5.3.2alpha (2021-10-28)
+
+ This release was made on short notice so that recent erofs-utils can
+ be built with LZMA support without needing a snapshot from xz.git.
+ Thus many pending things were not included, not even updated
+ translations (which would need to be updated for the new --list
+ strings anyway).
+
+ * All fixes from 5.2.5.
+
+ * xz:
+
+ - When copying metadata from the source file to the destination
+ file, don't try to set the group (GID) if it is already set
+ correctly. This avoids a failure on OpenBSD (and possibly on
+ a few other OSes) where files may get created so that their
+ group doesn't belong to the user, and fchown(2) can fail even
+ if it needs to do nothing.
+
+ - The --keep option now accepts symlinks, hardlinks, and
+ setuid, setgid, and sticky files. Previously this required
+ using --force.
+
+ - Split the long strings used in --list and --info-memory modes
+ to make them much easier for translators.
+
+ - If built with sandbox support and enabling the sandbox fails,
+ xz will now immediately exit with exit status of 1. Previously
+ it would only display a warning if -vv was used.
+
+ - Cap --memlimit-compress to 2000 MiB on MIPS32 because on
+ MIPS32 userspace processes are limited to 2 GiB of address
+ space.
+
+ * liblzma:
+
+ - Added lzma_microlzma_encoder() and lzma_microlzma_decoder().
+ The API is in lzma/container.h.
+
+ The MicroLZMA format is a raw LZMA stream (without end marker)
+ whose first byte (always 0x00) has been replaced with
+ bitwise-negation of the LZMA properties (lc/lp/pb). It was
+ created for use in EROFS but may be used in other contexts
+ as well where it is important to avoid wasting bytes for
+ stream headers or footers. The format is also supported by
+ XZ Embedded.
+
+ The MicroLZMA encoder API in liblzma can compress into a
+ fixed-sized output buffer so that as much data is compressed
+ as can be fit into the buffer while still creating a valid
+ MicroLZMA stream. This is needed for EROFS.
+
+ - Added fuzzing support.
+
+ - Support Intel Control-flow Enforcement Technology (CET) in
+ 32-bit x86 assembly files.
+
+ - Visual Studio: Use non-standard _MSVC_LANG to detect C++
+ standard version in the lzma.h API header. It's used to
+ detect when "noexcept" can be used.
+
+ * Scripts:
+
+ - Fix exit status of xzdiff/xzcmp. Exit status could be 2 when
+ the correct value is 1.
+
+ - Fix exit status of xzgrep.
+
+ - Detect corrupt .bz2 files in xzgrep.
+
+ - Add zstd support to xzgrep and xzdiff/xzcmp.
+
+ - Fix less(1) version detection in xzless. It failed if the
+ version number from "less -V" contained a dot.
+
+ * Fix typos and technical issues in man pages.
+
+ * Build systems:
+
+ - Windows: Fix building of resource files when config.h isn't
+ used. CMake + Visual Studio can now build liblzma.dll.
+
+ - Various fixes to the CMake support. It might still need a few
+ more fixes even for liblzma-only builds.
+
+
+5.3.1alpha (2018-04-29)
+
+ * All fixes from 5.2.4.
+
+ * Add lzma_file_info_decoder() into liblzma and use it in xz to
+ implement the --list feature.
+
+ * Capsicum sandbox support is enabled by default where available
+ (FreeBSD >= 10).
+
+
+5.2.13 (2024-05-29)
+
+ * liblzma:
+
+ - lzma_index_append(): Fix an assertion failure that could be
+ triggered by a large unpadded_size argument. It was verified
+ that there was no other bug than the assertion failure.
+
+ - lzma_index_decoder() and lzma_index_buffer_decode(): Fix
+ a missing output pointer initialization (*i = NULL) if the
+ functions are called with invalid arguments. The API docs
+ say that such an initialization is always done. In practice
+ this matters very little because the problem can only occur
+ if the calling application has a bug and these functions
+ return LZMA_PROG_ERROR.
+
+ - Fix C standard conformance with function pointer types.
+ This newly showed up with Clang 17 with -fsanitize=undefined.
+ There are no bug reports about this.
+
+ - Fix building with NVIDIA HPC SDK.
+
+ - Fix building with Windows Vista threads and --enable-small.
+ (CMake build doesn't support ENABLE_SMALL in XZ Utils 5.2.x.)
+
+ * xz:
+
+ - Fix a C standard conformance issue in --block-list parsing
+ (arithmetic on a null pointer).
+
+ - Fix a warning from GNU groff when processing the man page:
+ "warning: cannot select font 'CW'"
+
+ - Windows: Handle special files such as "con" or "nul". Earlier
+ the following wrote "foo" to the console and deleted the input
+ file "con_xz":
+
+ echo foo | xz > con_xz
+ xz --suffix=_xz --decompress con_xz
+
+ - Windows: Fix an issue that prevented reading from or writing
+ to non-terminal character devices like NUL.
+
+ * xzless:
+
+ - With "less" version 451 and later, use "||-" instead of "|-"
+ in the environment variable LESSOPEN. This way compressed
+ files that contain no uncompressed data are shown correctly
+ as empty.
+
+ - With "less" version 632 and later, use --show-preproc-errors
+ to make "less" show a warning on decompression errors.
+
+ * Build systems:
+
+ - Add a new line to liblzma.pc for MSYS2 (Windows):
+
+ Cflags.private: -DLZMA_API_STATIC
+
+ When compiling code that will link against static liblzma,
+ the LZMA_API_STATIC macro needs to be defined on Windows.
+
+ - Autotools (configure):
+
+ * Symbol versioning variant can now be overridden with
+ --enable-symbol-versions. Documentation in INSTALL was
+ updated to match.
+
+ - CMake:
+
+ * Fix a bug that prevented other projects from including
+ liblzma multiple times using find_package().
+
+ * Fix a bug where configuring CMake multiple times resulted
+ in HAVE_CLOCK_GETTIME and HAVE_CLOCK_MONOTONIC not being
+ defined.
+
+ * Fix the build with MinGW-w64-based Clang/LLVM 17.
+ llvm-windres now has more accurate GNU windres emulation
+ so the GNU windres workaround from 5.4.1 is needed with
+ llvm-windres version 17 too.
+
+ * The import library on Windows is now properly named
+ "liblzma.dll.a" instead of "libliblzma.dll.a"
+
+ * Add large file support by default for platforms that
+ need it to handle files larger than 2 GiB. This includes
+ MinGW-w64, even 64-bit builds.
+
+ * Linux on MicroBlaze is handled specially now. This
+ matches the changes made to the Autotools-based build
+ in XZ Utils 5.4.2 and 5.2.11.
+
+ * Disable symbol versioning on non-glibc Linux to match
+ what the Autotools build does. For example, symbol
+ versioning isn't enabled with musl.
+
+ * Symbol versioning variant can now be overridden by
+ setting SYMBOL_VERSIONING to "OFF", "generic", or
+ "linux".
+
+ * Documentation:
+
+ - Clarify the description of --disable-assembler in INSTALL.
+ The option only affects 32-bit x86 assembly usage.
+
+ - Don't install the TODO file as part of the documentation.
+ The file is out of date.
+
+ - Update home page URLs back to their old locations on
+ tukaani.org.
+
+ - Update maintainer info.
+
+
+5.2.12 (2023-05-04)
+
+ * Fixed a build system bug that prevented building liblzma as a
+ shared library when configured with --disable-threads. This bug
+ affected releases 5.2.6 to 5.2.11 and 5.4.0 to 5.4.2.
+
+ * Include for Windows intrinsic functions where they are
+ needed. This fixed a bug that prevented building liblzma using
+ clang-cl on Windows.
+
+ * Minor update to the Croatian translation. The small change
+ applies to a string in both 5.2 and 5.4 branches.
+
+
+5.2.11 (2023-03-18)
+
+ * Removed all possible cases of null pointer + 0. It is undefined
+ behavior in C99 and C17. This was detected by a sanitizer and had
+ not caused any known issues.
+
+ * Build systems:
+
+ - Added a workaround for building with GCC on MicroBlaze Linux.
+ GCC 12 on MicroBlaze doesn't support the __symver__ attribute
+ even though __has_attribute(__symver__) returns true. The
+ build is now done without the extra RHEL/CentOS 7 symbols
+ that were added in XZ Utils 5.2.7. The workaround only
+ applies to the Autotools build (not CMake).
+
+ - CMake: Ensure that the C compiler language is set to C99 or
+ a newer standard.
+
+ - CMake changes from XZ Utils 5.4.1:
+
+ * Added a workaround for a build failure with
+ windres from GNU binutils.
+
+ * Included the Windows resource files in the xz
+ and xzdec build rules.
+
+
+5.2.10 (2022-12-13)
+
+ * xz: Don't modify argv[] when parsing the --memlimit* and
+ --block-list command line options. This fixes confusing
+ arguments in process listing (like "ps auxf").
+
+ * GNU/Linux only: Use __has_attribute(__symver__) to detect if
+ that attribute is supported. This fixes build on Mandriva where
+ Clang is patched to define __GNUC__ to 11 by default (instead
+ of 4 as used by Clang upstream).
+
+
+5.2.9 (2022-11-30)
+
+ * liblzma:
+
+ - Fixed an infinite loop in LZMA encoder initialization
+ if dict_size >= 2 GiB. (The encoder only supports up
+ to 1536 MiB.)
+
+ - Fixed two cases of invalid free() that can happen if
+ a tiny allocation fails in encoder re-initialization
+ or in lzma_filters_update(). These bugs had some
+ similarities with the bug fixed in 5.2.7.
+
+ - Fixed lzma_block_encoder() not allowing the use of
+ LZMA_SYNC_FLUSH with lzma_code() even though it was
+ documented to be supported. The sync-flush code in
+ the Block encoder was already used internally via
+ lzma_stream_encoder(), so this was just a missing flag
+ in the lzma_block_encoder() API function.
+
+ - GNU/Linux only: Don't put symbol versions into static
+ liblzma as it breaks things in some cases (and even if
+ it didn't break anything, symbol versions in static
+ libraries are useless anyway). The downside of the fix
+ is that if the configure options --with-pic or --without-pic
+ are used then it's not possible to build both shared and
+ static liblzma at the same time on GNU/Linux anymore;
+ with those options --disable-static or --disable-shared
+ must be used too.
+
+ * New email address for bug reports is which
+ forwards messages to Lasse Collin and Jia Tan.
+
+
+5.2.8 (2022-11-13)
+
+ * xz:
+
+ - If xz cannot remove an input file when it should, this
+ is now treated as a warning (exit status 2) instead of
+ an error (exit status 1). This matches GNU gzip and it
+ is more logical as at that point the output file has
+ already been successfully closed.
+
+ - Fix handling of .xz files with an unsupported check type.
+ Previously such printed a warning message but then xz
+ behaved as if an error had occurred (didn't decompress,
+ exit status 1). Now a warning is printed, decompression
+ is done anyway, and exit status is 2. This used to work
+ slightly before 5.0.0. In practice this bug matters only
+ if xz has been built with some check types disabled. As
+ instructed in PACKAGERS, such builds should be done in
+ special situations only.
+
+ - Fix "xz -dc --single-stream tests/files/good-0-empty.xz"
+ which failed with "Internal error (bug)". That is,
+ --single-stream was broken if the first .xz stream in
+ the input file didn't contain any uncompressed data.
+
+ - Fix displaying file sizes in the progress indicator when
+ working in passthru mode and there are multiple input files.
+ Just like "gzip -cdf", "xz -cdf" works like "cat" when the
+ input file isn't a supported compressed file format. In
+ this case the file size counters weren't reset between
+ files so with multiple input files the progress indicator
+ displayed an incorrect (too large) value.
+
+ * liblzma:
+
+ - API docs in lzma/container.h:
+ * Update the list of decoder flags in the decoder
+ function docs.
+ * Explain LZMA_CONCATENATED behavior with .lzma files
+ in lzma_auto_decoder() docs.
+
+ - OpenBSD: Use HW_NCPUONLINE to detect the number of
+ available hardware threads in lzma_physmem().
+
+ - Fix use of wrong macro to detect x86 SSE2 support.
+ __SSE2_MATH__ was used with GCC/Clang but the correct
+ one is __SSE2__. The first one means that SSE2 is used
+ for floating point math which is irrelevant here.
+ The affected SSE2 code isn't used on x86-64 so this affects
+ only 32-bit x86 builds that use -msse2 without -mfpmath=sse
+ (there is no runtime detection for SSE2). It improves LZMA
+ compression speed (not decompression).
+
+ - Fix the build with Intel C compiler 2021 (ICC, not ICX)
+ on Linux. It defines __GNUC__ to 10 but doesn't support
+ the __symver__ attribute introduced in GCC 10.
+
+ * Scripts: Ignore warnings from xz by using --quiet --no-warn.
+ This is needed if the input .xz files use an unsupported
+ check type.
+
+ * Translations:
+
+ - Updated Croatian and Turkish translations.
+
+ - One new translations wasn't included because it needed
+ technical fixes. It will be in upcoming 5.4.0. No new
+ translations will be added to the 5.2.x branch anymore.
+
+ - Renamed the French man page translation file from
+ fr_FR.po to fr.po and thus also its install directory
+ (like /usr/share/man/fr_FR -> .../fr).
+
+ - Man page translations for upcoming 5.4.0 are now handled
+ in the Translation Project.
+
+ * Update doc/faq.txt a little so it's less out-of-date.
+
+
+5.2.7 (2022-09-30)
+
+ * liblzma:
+
+ - Made lzma_filters_copy() to never modify the destination
+ array if an error occurs. lzma_stream_encoder() and
+ lzma_stream_encoder_mt() already assumed this. Before this
+ change, if a tiny memory allocation in lzma_filters_copy()
+ failed it would lead to a crash (invalid free() or invalid
+ memory reads) in the cleanup paths of these two encoder
+ initialization functions.
+
+ - Added missing integer overflow check to lzma_index_append().
+ This affects xz --list and other applications that decode
+ the Index field from .xz files using lzma_index_decoder().
+ Normal decompression of .xz files doesn't call this code
+ and thus most applications using liblzma aren't affected
+ by this bug.
+
+ - Single-threaded .xz decoder (lzma_stream_decoder()): If
+ lzma_code() returns LZMA_MEMLIMIT_ERROR it is now possible
+ to use lzma_memlimit_set() to increase the limit and continue
+ decoding. This was supposed to work from the beginning
+ but there was a bug. With other decoders (.lzma or
+ threaded .xz decoder) this already worked correctly.
+
+ - Fixed accumulation of integrity check type statistics in
+ lzma_index_cat(). This bug made lzma_index_checks() return
+ only the type of the integrity check of the last Stream
+ when multiple lzma_indexes were concatenated. Most
+ applications don't use these APIs but in xz it made
+ xz --list not list all check types from concatenated .xz
+ files. In xz --list --verbose only the per-file "Check:"
+ lines were affected and in xz --robot --list only the "file"
+ line was affected.
+
+ - Added ABI compatibility with executables that were linked
+ against liblzma in RHEL/CentOS 7 or other liblzma builds
+ that had copied the problematic patch from RHEL/CentOS 7
+ (xz-5.2.2-compat-libs.patch). For the details, see the
+ comment at the top of src/liblzma/validate_map.sh.
+
+ WARNING: This uses __symver__ attribute with GCC >= 10.
+ In other cases the traditional __asm__(".symver ...")
+ is used. Using link-time optimization (LTO, -flto) with
+ GCC versions older than 10 can silently result in
+ broken liblzma.so.5 (incorrect symbol versions)! If you
+ want to use -flto with GCC, you must use GCC >= 10.
+ LTO with Clang seems to work even with the traditional
+ __asm__(".symver ...") method.
+
+ * xzgrep: Fixed compatibility with old shells that break if
+ comments inside command substitutions have apostrophes (').
+ This problem was introduced in 5.2.6.
+
+ * Build systems:
+
+ - New #define in config.h: HAVE_SYMBOL_VERSIONS_LINUX
+
+ - Windows: Fixed liblzma.dll build with Visual Studio project
+ files. It broke in 5.2.6 due to a change that was made to
+ improve CMake support.
+
+ - Windows: Building liblzma with UNICODE defined should now
+ work.
+
+ - CMake files are now actually included in the release tarball.
+ They should have been in 5.2.5 already.
+
+ - Minor CMake fixes and improvements.
+
+ * Added a new translation: Turkish
+
+
+5.2.6 (2022-08-12)
+
+ * xz:
+
+ - The --keep option now accepts symlinks, hardlinks, and
+ setuid, setgid, and sticky files. Previously this required
+ using --force.
+
+ - When copying metadata from the source file to the destination
+ file, don't try to set the group (GID) if it is already set
+ correctly. This avoids a failure on OpenBSD (and possibly on
+ a few other OSes) where files may get created so that their
+ group doesn't belong to the user, and fchown(2) can fail even
+ if it needs to do nothing.
+
+ - Cap --memlimit-compress to 2000 MiB instead of 4020 MiB on
+ MIPS32 because on MIPS32 userspace processes are limited
+ to 2 GiB of address space.
+
+ * liblzma:
+
+ - Fixed a missing error-check in the threaded encoder. If a
+ small memory allocation fails, a .xz file with an invalid
+ Index field would be created. Decompressing such a file would
+ produce the correct output but result in an error at the end.
+ Thus this is a "mild" data corruption bug. Note that while
+ a failed memory allocation can trigger the bug, it cannot
+ cause invalid memory access.
+
+ - The decoder for .lzma files now supports files that have
+ uncompressed size stored in the header and still use the
+ end of payload marker (end of stream marker) at the end
+ of the LZMA stream. Such files are rare but, according to
+ the documentation in LZMA SDK, they are valid.
+ doc/lzma-file-format.txt was updated too.
+
+ - Improved 32-bit x86 assembly files:
+ * Support Intel Control-flow Enforcement Technology (CET)
+ * Use non-executable stack on FreeBSD.
+
+ - Visual Studio: Use non-standard _MSVC_LANG to detect C++
+ standard version in the lzma.h API header. It's used to
+ detect when "noexcept" can be used.
+
+ * xzgrep:
+
+ - Fixed arbitrary command injection via a malicious filename
+ (CVE-2022-1271, ZDI-CAN-16587). A standalone patch for
+ this was released to the public on 2022-04-07. A slight
+ robustness improvement has been made since then and, if
+ using GNU or *BSD grep, a new faster method is now used
+ that doesn't use the old sed-based construct at all. This
+ also fixes bad output with GNU grep >= 3.5 (2020-09-27)
+ when xzgrepping binary files.
+
+ This vulnerability was discovered by:
+ cleemy desu wayo working with Trend Micro Zero Day Initiative
+
+ - Fixed detection of corrupt .bz2 files.
+
+ - Improved error handling to fix exit status in some situations
+ and to fix handling of signals: in some situations a signal
+ didn't make xzgrep exit when it clearly should have. It's
+ possible that the signal handling still isn't quite perfect
+ but hopefully it's good enough.
+
+ - Documented exit statuses on the man page.
+
+ - xzegrep and xzfgrep now use "grep -E" and "grep -F" instead
+ of the deprecated egrep and fgrep commands.
+
+ - Fixed parsing of the options -E, -F, -G, -P, and -X. The
+ problem occurred when multiple options were specified in
+ a single argument, for example,
+
+ echo foo | xzgrep -Fe foo
+
+ treated foo as a filename because -Fe wasn't correctly
+ split into -F -e.
+
+ - Added zstd support.
+
+ * xzdiff/xzcmp:
+
+ - Fixed wrong exit status. Exit status could be 2 when the
+ correct value is 1.
+
+ - Documented on the man page that exit status of 2 is used
+ for decompression errors.
+
+ - Added zstd support.
+
+ * xzless:
+
+ - Fix less(1) version detection. It failed if the version number
+ from "less -V" contained a dot.
+
+ * Translations:
+
+ - Added new translations: Catalan, Croatian, Esperanto,
+ Korean, Portuguese, Romanian, Serbian, Spanish, Swedish,
+ and Ukrainian
+
+ - Updated the Brazilian Portuguese translation.
+
+ - Added French man page translation. This and the existing
+ German translation aren't complete anymore because the
+ English man pages got a few updates and the translators
+ weren't reached so that they could update their work.
+
+ * Build systems:
+
+ - Windows: Fix building of resource files when config.h isn't
+ used. CMake + Visual Studio can now build liblzma.dll.
+
+ - Various fixes to the CMake support. Building static or shared
+ liblzma should work fine in most cases. In contrast, building
+ the command line tools with CMake is still clearly incomplete
+ and experimental and should be used for testing only.
+
+
+5.2.5 (2020-03-17)
+
+ * liblzma:
+
+ - Fixed several C99/C11 conformance bugs. Now the code is clean
+ under gcc/clang -fsanitize=undefined. Some of these changes
+ might have a negative effect on performance with old GCC
+ versions or compilers other than GCC and Clang. The configure
+ option --enable-unsafe-type-punning can be used to (mostly)
+ restore the old behavior but it shouldn't normally be used.
+
+ - Improved API documentation of lzma_properties_decode().
+
+ - Added a very minor encoder speed optimization.
+
+ * xz:
+
+ - Fixed a crash in "xz -dcfv not_an_xz_file". All four options
+ were required to trigger it. The crash occurred in the
+ progress indicator code when xz was in passthru mode where
+ xz works like "cat".
+
+ - Fixed an integer overflow with 32-bit off_t. It could happen
+ when decompressing a file that has a long run of zero bytes
+ which xz would try to write as a sparse file. Since the build
+ system enables large file support by default, off_t is
+ normally 64-bit even on 32-bit systems.
+
+ - Fixes for --flush-timeout:
+ * Fix semi-busy-waiting.
+ * Avoid unneeded flushes when no new input has arrived
+ since the previous flush was completed.
+
+ - Added a special case for 32-bit xz: If --memlimit-compress is
+ used to specify a limit that exceeds 4020 MiB, the limit will
+ be set to 4020 MiB. The values "0" and "max" aren't affected
+ by this and neither is decompression. This hack can be
+ helpful when a 32-bit xz has access to 4 GiB address space
+ but the specified memlimit exceeds 4 GiB. This can happen
+ e.g. with some scripts.
+
+ - Capsicum sandbox is now enabled by default where available
+ (FreeBSD >= 10). The sandbox debug messages (xz -vv) were
+ removed since they seemed to be more annoying than useful.
+
+ - DOS build now requires DJGPP 2.05 instead of 2.04beta.
+ A workaround for a locale problem with DJGPP 2.05 was added.
+
+ * xzgrep and other scripts:
+
+ - Added a configure option --enable-path-for-scripts=PREFIX.
+ It is disabled by default except on Solaris where the default
+ is /usr/xpg4/bin. See INSTALL for details.
+
+ - Added a workaround for a POSIX shell detection problem on
+ Solaris.
+
+ * Build systems:
+
+ - Added preliminary build instructions for z/OS. See INSTALL
+ section 1.2.9.
+
+ - Experimental CMake support was added. It should work to build
+ static liblzma on a few operating systems. It may or may not
+ work to build shared liblzma. On some platforms it can build
+ xz and xzdec too but those are only for testing. See the
+ comment in the beginning of CMakeLists.txt for details.
+
+ - Visual Studio project files were updated.
+ WindowsTargetPlatformVersion was removed from VS2017 files
+ and set to "10.0" in the added VS2019 files. In the future
+ the VS project files will be removed when CMake support is
+ good enough.
+
+ - New #defines in config.h: HAVE___BUILTIN_ASSUME_ALIGNED,
+ HAVE___BUILTIN_BSWAPXX, and TUKLIB_USE_UNSAFE_TYPE_PUNNING.
+
+ - autogen.sh has a new optional dependency on po4a and a new
+ option --no-po4a to skip that step. This matters only if one
+ wants to remake the build files. po4a is used to update the
+ translated man pages but as long as the man pages haven't
+ been modified, there's nothing to update and one can use
+ --no-po4a to avoid the dependency on po4a.
+
+ * Translations:
+
+ - XZ Utils translations are now handled by the Translation
+ Project: https://translationproject.org/domain/xz.html
+
+ - All man pages are now included in German too.
+
+ - New xz translations: Brazilian Portuguese, Finnish,
+ Hungarian, Chinese (simplified), Chinese (traditional),
+ and Danish (partial translation)
+
+ - Updated xz translations: French, German, Italian, and Polish
+
+ - Unfortunately a few new xz translations weren't included due
+ to technical problems like too long lines in --help output or
+ misaligned column headings in tables. In the future, many of
+ these strings will be split and e.g. the table column
+ alignment will be handled in software. This should make the
+ strings easier to translate.
+
+
+5.2.4 (2018-04-29)
+
+ * liblzma:
+
+ - Allow 0 as memory usage limit instead of returning
+ LZMA_PROG_ERROR. Now 0 is treated as if 1 byte was specified,
+ which effectively is the same as 0.
+
+ - Use "noexcept" keyword instead of "throw()" in the public
+ headers when a C++11 (or newer standard) compiler is used.
+
+ - Added a portability fix for recent Intel C Compilers.
+
+ - Microsoft Visual Studio build files have been moved under
+ windows/vs2013 and windows/vs2017.
+
+ * xz:
+
+ - Fix "xz --list --robot missing_or_bad_file.xz" which would
+ try to print an uninitialized string and thus produce garbage
+ output. Since the exit status is non-zero, most uses of such
+ a command won't try to interpret the garbage output.
+
+ - "xz --list foo.xz" could print "Internal error (bug)" in a
+ corner case where a specific memory usage limit had been set.
+
+
+5.2.3 (2016-12-30)
+
+ * xz:
+
+ - Always close a file before trying to delete it to avoid
+ problems on some operating system and file system combinations.
+
+ - Fixed copying of file timestamps on Windows.
+
+ - Added experimental (disabled by default) sandbox support using
+ Capsicum (FreeBSD >= 10). See --enable-sandbox in INSTALL.
+
+ * C99/C11 conformance fixes to liblzma. The issues affected at least
+ some builds using link-time optimizations.
+
+ * Fixed bugs in the rarely-used function lzma_index_dup().
+
+ * Use of external SHA-256 code is now disabled by default.
+ It can still be enabled by passing --enable-external-sha256
+ to configure. The reasons to disable it by default (see INSTALL
+ for more details):
+
+ - Some OS-specific SHA-256 implementations conflict with
+ OpenSSL and cause problems in programs that link against both
+ liblzma and libcrypto. At least FreeBSD 10 and MINIX 3.3.0
+ are affected.
+
+ - The internal SHA-256 is faster than the SHA-256 code in
+ some operating systems.
+
+ * Changed CPU core count detection to use sched_getaffinity() on
+ GNU/Linux and GNU/kFreeBSD.
+
+ * Fixes to the build-system and xz to make xz buildable even when
+ encoders, decoders, or threading have been disabled from libilzma
+ using configure options. These fixes added two new #defines to
+ config.h: HAVE_ENCODERS and HAVE_DECODERS.
+
+
+5.2.2 (2015-09-29)
+
+ * Fixed bugs in QNX-specific code.
+
+ * Omitted the use of pipe2() even if it is available to avoid
+ portability issues with some old Linux and glibc combinations.
+
+ * Updated German translation.
+
+ * Added project files to build static and shared liblzma (not the
+ whole XZ Utils) with Visual Studio 2013 update 2 or later.
+
+ * Documented that threaded decompression hasn't been implemented
+ yet. A 5.2.0 NEWS entry describing multi-threading support had
+ incorrectly said "decompression" when it should have said
+ "compression".
+
+
+5.2.1 (2015-02-26)
+
+ * Fixed a compression-ratio regression in fast mode of LZMA1 and
+ LZMA2. The bug is present in 5.1.4beta and 5.2.0 releases.
+
+ * Fixed a portability problem in xz that affected at least OpenBSD.
+
+ * Fixed xzdiff to be compatible with FreeBSD's mktemp which differs
+ from most other mktemp implementations.
+
+ * Changed CPU core count detection to use cpuset_getaffinity() on
+ FreeBSD.
+
+
+5.2.0 (2014-12-21)
+
+ Since 5.1.4beta:
+
+ * All fixes from 5.0.8
+
+ * liblzma: Fixed lzma_stream_encoder_mt_memusage() when a preset
+ was used.
+
+ * xzdiff: If mktemp isn't installed, mkdir will be used as
+ a fallback to create a temporary directory. Installing mktemp
+ is still recommended.
+
+ * Updated French, German, Italian, Polish, and Vietnamese
+ translations.
+
+ Summary of fixes and new features added in the 5.1.x development
+ releases:
+
+ * liblzma:
+
+ - Added support for multi-threaded compression. See the
+ lzma_mt structure, lzma_stream_encoder_mt(), and
+ lzma_stream_encoder_mt_memusage() in ,
+ lzma_get_progress() in , and lzma_cputhreads()
+ in for details.
+
+ - Made the uses of lzma_allocator const correct.
+
+ - Added lzma_block_uncomp_encode() to create uncompressed
+ .xz Blocks using LZMA2 uncompressed chunks.
+
+ - Added support for LZMA_IGNORE_CHECK.
+
+ - A few speed optimizations were made.
+
+ - Added support for symbol versioning. It is enabled by default
+ on GNU/Linux, other GNU-based systems, and FreeBSD.
+
+ - liblzma (not the whole XZ Utils) should now be buildable
+ with MSVC 2013 update 2 or later using windows/config.h.
+
+ * xz:
+
+ - Fixed a race condition in the signal handling. It was
+ possible that e.g. the first SIGINT didn't make xz exit
+ if reading or writing blocked and one had bad luck. The fix
+ is non-trivial, so as of writing it is unknown if it will be
+ backported to the v5.0 branch.
+
+ - Multi-threaded compression can be enabled with the
+ --threads (-T) option.
+ [Fixed: This originally said "decompression".]
+
+ - New command line options in xz: --single-stream,
+ --block-size=SIZE, --block-list=SIZES,
+ --flush-timeout=TIMEOUT, and --ignore-check.
+
+ - xz -lvv now shows the minimum xz version that is required to
+ decompress the file. Currently it is 5.0.0 for all supported
+ .xz files except files with empty LZMA2 streams require 5.0.2.
+
+ * xzdiff and xzgrep now support .lzo files if lzop is installed.
+ The .tzo suffix is also recognized as a shorthand for .tar.lzo.
+
+
+5.1.4beta (2014-09-14)
+
+ * All fixes from 5.0.6
+
+ * liblzma: Fixed the use of presets in threaded encoder
+ initialization.
+
+ * xz --block-list and --block-size can now be used together
+ in single-threaded mode. Previously the combination only
+ worked in multi-threaded mode.
+
+ * Added support for LZMA_IGNORE_CHECK to liblzma and made it
+ available in xz as --ignore-check.
+
+ * liblzma speed optimizations:
+
+ - Initialization of a new LZMA1 or LZMA2 encoder has been
+ optimized. (The speed of reinitializing an already-allocated
+ encoder isn't affected.) This helps when compressing many
+ small buffers with lzma_stream_buffer_encode() and other
+ similar situations where an already-allocated encoder state
+ isn't reused. This speed-up is visible in xz too if one
+ compresses many small files one at a time instead running xz
+ once and giving all files as command-line arguments.
+
+ - Buffer comparisons are now much faster when unaligned access
+ is allowed (configured with --enable-unaligned-access). This
+ speeds up encoding significantly. There is arch-specific code
+ for 32-bit and 64-bit x86 (32-bit needs SSE2 for the best
+ results and there's no run-time CPU detection for now).
+ For other archs there is only generic code which probably
+ isn't as optimal as arch-specific solutions could be.
+
+ - A few speed optimizations were made to the SHA-256 code.
+ (Note that the builtin SHA-256 code isn't used on all
+ operating systems.)
+
+ * liblzma can now be built with MSVC 2013 update 2 or later
+ using windows/config.h.
+
+ * Vietnamese translation was added.
+
+
+5.1.3alpha (2013-10-26)
+
+ * All fixes from 5.0.5
+
+ * liblzma:
+
+ - Fixed a deadlock in the threaded encoder.
+
+ - Made the uses of lzma_allocator const correct.
+
+ - Added lzma_block_uncomp_encode() to create uncompressed
+ .xz Blocks using LZMA2 uncompressed chunks.
+
+ - Added support for native threads on Windows and the ability
+ to detect the number of CPU cores.
+
+ * xz:
+
+ - Fixed a race condition in the signal handling. It was
+ possible that e.g. the first SIGINT didn't make xz exit
+ if reading or writing blocked and one had bad luck. The fix
+ is non-trivial, so as of writing it is unknown if it will be
+ backported to the v5.0 branch.
+
+ - Made the progress indicator work correctly in threaded mode.
+
+ - Threaded encoder now works together with --block-list=SIZES.
+
+ - Added preliminary support for --flush-timeout=TIMEOUT.
+ It can be useful for (somewhat) real-time streaming. For
+ now the decompression side has to be done with something
+ else than the xz tool due to how xz does buffering, but this
+ should be fixed.
+
+
+5.1.2alpha (2012-07-04)
+
+ * All fixes from 5.0.3 and 5.0.4
+
+ * liblzma:
+
+ - Fixed a deadlock and an invalid free() in the threaded encoder.
+
+ - Added support for symbol versioning. It is enabled by default
+ on GNU/Linux, other GNU-based systems, and FreeBSD.
+
+ - Use SHA-256 implementation from the operating system if one is
+ available in libc, libmd, or libutil. liblzma won't use e.g.
+ OpenSSL or libgcrypt to avoid introducing new dependencies.
+
+ - Fixed liblzma.pc for static linking.
+
+ - Fixed a few portability bugs.
+
+ * xz --decompress --single-stream now fixes the input position after
+ successful decompression. Now the following works:
+
+ echo foo | xz > foo.xz
+ echo bar | xz >> foo.xz
+ ( xz -dc --single-stream ; xz -dc --single-stream ) < foo.xz
+
+ Note that it doesn't work if the input is not seekable
+ or if there is Stream Padding between the concatenated
+ .xz Streams.
+
+ * xz -lvv now shows the minimum xz version that is required to
+ decompress the file. Currently it is 5.0.0 for all supported .xz
+ files except files with empty LZMA2 streams require 5.0.2.
+
+ * Added an *incomplete* implementation of --block-list=SIZES to xz.
+ It only works correctly in single-threaded mode and when
+ --block-size isn't used at the same time. --block-list allows
+ specifying the sizes of Blocks which can be useful e.g. when
+ creating files for random-access reading.
+
+
+5.1.1alpha (2011-04-12)
+
+ * All fixes from 5.0.2
+
+ * liblzma fixes that will also be included in 5.0.3:
+
+ - A memory leak was fixed.
+
+ - lzma_stream_buffer_encode() no longer creates an empty .xz
+ Block if encoding an empty buffer. Such an empty Block with
+ LZMA2 data would trigger a bug in 5.0.1 and older (see the
+ first bullet point in 5.0.2 notes). When releasing 5.0.2,
+ I thought that no encoder creates this kind of files but
+ I was wrong.
+
+ - Validate function arguments better in a few functions. Most
+ importantly, specifying an unsupported integrity check to
+ lzma_stream_buffer_encode() no longer creates a corrupt .xz
+ file. Probably no application tries to do that, so this
+ shouldn't be a big problem in practice.
+
+ - Document that lzma_block_buffer_encode(),
+ lzma_easy_buffer_encode(), lzma_stream_encoder(), and
+ lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK.
+
+ - The return values of the _memusage() functions are now
+ documented better.
+
+ * Support for multithreaded compression was added using the simplest
+ method, which splits the input data into blocks and compresses
+ them independently. Other methods will be added in the future.
+ The current method has room for improvement, e.g. it is possible
+ to reduce the memory usage.
+
+ * Added the options --single-stream and --block-size=SIZE to xz.
+
+ * xzdiff and xzgrep now support .lzo files if lzop is installed.
+ The .tzo suffix is also recognized as a shorthand for .tar.lzo.
+
+ * Support for short 8.3 filenames under DOS was added to xz. It is
+ experimental and may change before it gets into a stable release.
+
+
+5.0.8 (2014-12-21)
+
+ * Fixed an old bug in xzgrep that affected OpenBSD and probably
+ a few other operating systems too.
+
+ * Updated French and German translations.
+
+ * Added support for detecting the amount of RAM on AmigaOS/AROS.
+
+ * Minor build system updates.
+
+
+5.0.7 (2014-09-20)
+
+ * Fix regressions introduced in 5.0.6:
+
+ - Fix building with non-GNU make.
+
+ - Fix invalid Libs.private value in liblzma.pc which broke
+ static linking against liblzma if the linker flags were
+ taken from pkg-config.
+
+
+5.0.6 (2014-09-14)
+
+ * xzgrep now exits with status 0 if at least one file matched.
+
+ * A few minor portability and build system fixes
+
+
+5.0.5 (2013-06-30)
+
+ * lzmadec and liblzma's lzma_alone_decoder(): Support decompressing
+ .lzma files that have less common settings in the headers
+ (dictionary size other than 2^n or 2^n + 2^(n-1), or uncompressed
+ size greater than 256 GiB). The limitations existed to avoid false
+ positives when detecting .lzma files. The lc + lp <= 4 limitation
+ still remains since liblzma's LZMA decoder has that limitation.
+
+ NOTE: xz's .lzma support or liblzma's lzma_auto_decoder() are NOT
+ affected by this change. They still consider uncommon .lzma headers
+ as not being in the .lzma format. Changing this would give way too
+ many false positives.
+
+ * xz:
+
+ - Interaction of preset and custom filter chain options was
+ made less illogical. This affects only certain less typical
+ uses cases so few people are expected to notice this change.
+
+ Now when a custom filter chain option (e.g. --lzma2) is
+ specified, all preset options (-0 ... -9, -e) earlier are on
+ the command line are completely forgotten. Similarly, when
+ a preset option is specified, all custom filter chain options
+ earlier on the command line are completely forgotten.
+
+ Example 1: "xz -9 --lzma2=preset=5 -e" is equivalent to "xz -e"
+ which is equivalent to "xz -6e". Earlier -e didn't put xz back
+ into preset mode and thus the example command was equivalent
+ to "xz --lzma2=preset=5".
+
+ Example 2: "xz -9e --lzma2=preset=5 -7" is equivalent to
+ "xz -7". Earlier a custom filter chain option didn't make
+ xz forget the -e option so the example was equivalent to
+ "xz -7e".
+
+ - Fixes and improvements to error handling.
+
+ - Various fixes to the man page.
+
+ * xzless: Fixed to work with "less" versions 448 and later.
+
+ * xzgrep: Made -h an alias for --no-filename.
+
+ * Include the previously missing debug/translation.bash which can
+ be useful for translators.
+
+ * Include a build script for Mac OS X. This has been in the Git
+ repository since 2010 but due to a mistake in Makefile.am the
+ script hasn't been included in a release tarball before.
+
+
+5.0.4 (2012-06-22)
+
+ * liblzma:
+
+ - Fix lzma_index_init(). It could crash if memory allocation
+ failed.
+
+ - Fix the possibility of an incorrect LZMA_BUF_ERROR when a BCJ
+ filter is used and the application only provides exactly as
+ much output space as is the uncompressed size of the file.
+
+ - Fix a bug in doc/examples_old/xz_pipe_decompress.c. It didn't
+ check if the last call to lzma_code() really returned
+ LZMA_STREAM_END, which made the program think that truncated
+ files are valid.
+
+ - New example programs in doc/examples (old programs are now in
+ doc/examples_old). These have more comments and more detailed
+ error handling.
+
+ * Fix "xz -lvv foo.xz". It could crash on some corrupted files.
+
+ * Fix output of "xz --robot -lv" and "xz --robot -lvv" which
+ incorrectly printed the filename also in the "foo (x/x)" format.
+
+ * Fix exit status of "xzdiff foo.xz bar.xz".
+
+ * Fix exit status of "xzgrep foo binary_file".
+
+ * Fix portability to EBCDIC systems.
+
+ * Fix a configure issue on AIX with the XL C compiler. See INSTALL
+ for details.
+
+ * Update French, German, Italian, and Polish translations.
+
+
+5.0.3 (2011-05-21)
+
+ * liblzma fixes:
+
+ - A memory leak was fixed.
+
+ - lzma_stream_buffer_encode() no longer creates an empty .xz
+ Block if encoding an empty buffer. Such an empty Block with
+ LZMA2 data would trigger a bug in 5.0.1 and older (see the
+ first bullet point in 5.0.2 notes). When releasing 5.0.2,
+ I thought that no encoder creates this kind of files but
+ I was wrong.
+
+ - Validate function arguments better in a few functions. Most
+ importantly, specifying an unsupported integrity check to
+ lzma_stream_buffer_encode() no longer creates a corrupt .xz
+ file. Probably no application tries to do that, so this
+ shouldn't be a big problem in practice.
+
+ - Document that lzma_block_buffer_encode(),
+ lzma_easy_buffer_encode(), lzma_stream_encoder(), and
+ lzma_stream_buffer_encode() may return LZMA_UNSUPPORTED_CHECK.
+
+ - The return values of the _memusage() functions are now
+ documented better.
+
+ * Fix command name detection in xzgrep. xzegrep and xzfgrep now
+ correctly use egrep and fgrep instead of grep.
+
+ * French translation was added.
+
+
+5.0.2 (2011-04-01)
+
+ * LZMA2 decompressor now correctly accepts LZMA2 streams with no
+ uncompressed data. Previously it considered them corrupt. The
+ bug can affect applications that use raw LZMA2 streams. It is
+ very unlikely to affect .xz files because no compressor creates
+ .xz files with empty LZMA2 streams. (Empty .xz files are a
+ different thing than empty LZMA2 streams.)
+
+ * "xz --suffix=.foo filename.foo" now refuses to compress the
+ file due to it already having the suffix .foo. It was already
+ documented on the man page, but the code lacked the test.
+
+ * "xzgrep -l foo bar.xz" works now.
+
+ * Polish translation was added.
+
+
+5.0.1 (2011-01-29)
+
+ * xz --force now (de)compresses files that have setuid, setgid,
+ or sticky bit set and files that have multiple hard links.
+ The man page had it documented this way already, but the code
+ had a bug.
+
+ * gzip and bzip2 support in xzdiff was fixed.
+
+ * Portability fixes
+
+ * Minor fix to Czech translation
+
+
+5.0.0 (2010-10-23)
+
+ Only the most important changes compared to 4.999.9beta are listed
+ here. One change is especially important:
+
+ * The memory usage limit is now disabled by default. Some scripts
+ written before this change may have used --memory=max on xz command
+ line or in XZ_OPT. THESE USES OF --memory=max SHOULD BE REMOVED
+ NOW, because they interfere with user's ability to set the memory
+ usage limit himself. If user-specified limit causes problems to
+ your script, blame the user.
+
+ Other significant changes:
+
+ * Added support for XZ_DEFAULTS environment variable. This variable
+ allows users to set default options for xz, e.g. default memory
+ usage limit or default compression level. Scripts that use xz
+ must never set or unset XZ_DEFAULTS. Scripts should use XZ_OPT
+ instead if they need a way to pass options to xz via an
+ environment variable.
+
+ * The compression settings associated with the preset levels
+ -0 ... -9 have been changed. --extreme was changed a little too.
+ It is now less likely to make compression worse, but with some
+ files the new --extreme may compress slightly worse than the old
+ --extreme.
+
+ * If a preset level (-0 ... -9) is specified after a custom filter
+ chain options have been used (e.g. --lzma2), the custom filter
+ chain will be forgotten. Earlier the preset options were
+ completely ignored after custom filter chain options had been
+ seen.
+
+ * xz will create sparse files when decompressing if the uncompressed
+ data contains long sequences of binary zeros. This is done even
+ when writing to standard output that is connected to a regular
+ file and certain additional conditions are met to make it safe.
+
+ * Support for "xz --list" was added. Combine with --verbose or
+ --verbose --verbose (-vv) for detailed output.
+
+ * I had hoped that liblzma API would have been stable after
+ 4.999.9beta, but there have been a couple of changes in the
+ advanced features, which don't affect most applications:
+
+ - Index handling code was revised. If you were using the old
+ API, you will get a compiler error (so it's easy to notice).
+
+ - A subtle but important change was made to the Block handling
+ API. lzma_block.version has to be initialized even for
+ lzma_block_header_decode(). Code that doesn't do it will work
+ for now, but might break in the future, which makes this API
+ change easy to miss.
+
+ * The major soname has been bumped to 5.0.0. liblzma API and ABI
+ are now stable, so the need to recompile programs linking against
+ liblzma shouldn't arise soon.
+
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/README b/vcpkg_installed/arm64-osx/share/doc/xz/README
new file mode 100644
index 00000000..9d097def
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/README
@@ -0,0 +1,310 @@
+
+XZ Utils
+========
+
+ 0. Overview
+ 1. Documentation
+ 1.1. Overall documentation
+ 1.2. Documentation for command-line tools
+ 1.3. Documentation for liblzma
+ 2. Version numbering
+ 3. Reporting bugs
+ 4. Translations
+ 5. Other implementations of the .xz format
+ 6. Contact information
+
+
+0. Overview
+-----------
+
+ XZ Utils provide a general-purpose data-compression library plus
+ command-line tools. The native file format is the .xz format, but
+ also the legacy .lzma format is supported. The .xz format supports
+ multiple compression algorithms, which are called "filters" in the
+ context of XZ Utils. The primary filter is currently LZMA2. With
+ typical files, XZ Utils create about 30 % smaller files than gzip.
+
+ To ease adapting support for the .xz format into existing applications
+ and scripts, the API of liblzma is somewhat similar to the API of the
+ popular zlib library. For the same reason, the command-line tool xz
+ has a command-line syntax similar to that of gzip.
+
+ When aiming for the highest compression ratio, the LZMA2 encoder uses
+ a lot of CPU time and may use, depending on the settings, even
+ hundreds of megabytes of RAM. However, in fast modes, the LZMA2 encoder
+ competes with bzip2 in compression speed, RAM usage, and compression
+ ratio.
+
+ LZMA2 is reasonably fast to decompress. It is a little slower than
+ gzip, but a lot faster than bzip2. Being fast to decompress means
+ that the .xz format is especially nice when the same file will be
+ decompressed very many times (usually on different computers), which
+ is the case e.g. when distributing software packages. In such
+ situations, it's not too bad if the compression takes some time,
+ since that needs to be done only once to benefit many people.
+
+ With some file types, combining (or "chaining") LZMA2 with an
+ additional filter can improve the compression ratio. A filter chain may
+ contain up to four filters, although usually only one or two are used.
+ For example, putting a BCJ (Branch/Call/Jump) filter before LZMA2
+ in the filter chain can improve compression ratio of executable files.
+
+ Since the .xz format allows adding new filter IDs, it is possible that
+ some day there will be a filter that is, for example, much faster to
+ compress than LZMA2 (but probably with worse compression ratio).
+ Similarly, it is possible that some day there is a filter that will
+ compress better than LZMA2.
+
+ XZ Utils supports multithreaded compression. XZ Utils doesn't support
+ multithreaded decompression yet. It has been planned though and taken
+ into account when designing the .xz file format. In the future, files
+ that were created in threaded mode can be decompressed in threaded
+ mode too.
+
+
+1. Documentation
+----------------
+
+1.1. Overall documentation
+
+ README This file
+
+ INSTALL.generic Generic install instructions for those not
+ familiar with packages using GNU Autotools
+ INSTALL Installation instructions specific to XZ Utils
+ PACKAGERS Information to packagers of XZ Utils
+
+ COPYING XZ Utils copyright and license information
+ COPYING.0BSD BSD Zero Clause License
+ COPYING.GPLv2 GNU General Public License version 2
+ COPYING.GPLv3 GNU General Public License version 3
+ COPYING.LGPLv2.1 GNU Lesser General Public License version 2.1
+
+ AUTHORS The main authors of XZ Utils
+ THANKS Incomplete list of people who have helped making
+ this software
+ NEWS User-visible changes between XZ Utils releases
+ ChangeLog Detailed list of changes (commit log)
+ TODO Known bugs and some sort of to-do list
+
+ Note that only some of the above files are included in binary
+ packages.
+
+
+1.2. Documentation for command-line tools
+
+ The command-line tools are documented as man pages. In source code
+ releases (and possibly also in some binary packages), the man pages
+ are also provided in plain text (ASCII only) format in the directory
+ "doc/man" to make the man pages more accessible to those whose
+ operating system doesn't provide an easy way to view man pages.
+
+
+1.3. Documentation for liblzma
+
+ The liblzma API headers include short docs about each function
+ and data type as Doxygen tags. These docs should be quite OK as
+ a quick reference.
+
+ There are a few example/tutorial programs that should help in
+ getting started with liblzma. In the source package the examples
+ are in "doc/examples" and in binary packages they may be under
+ "examples" in the same directory as this README.
+
+ Since the liblzma API has similarities to the zlib API, some people
+ may find it useful to read the zlib docs and tutorial too:
+
+ https://zlib.net/manual.html
+ https://zlib.net/zlib_how.html
+
+
+2. Version numbering
+--------------------
+
+ The version number format of XZ Utils is X.Y.ZS:
+
+ - X is the major version. When this is incremented, the library
+ API and ABI break.
+
+ - Y is the minor version. It is incremented when new features
+ are added without breaking the existing API or ABI. An even Y
+ indicates a stable release and an odd Y indicates unstable
+ (alpha or beta version).
+
+ - Z is the revision. This has a different meaning for stable and
+ unstable releases:
+
+ * Stable: Z is incremented when bugs get fixed without adding
+ any new features. This is intended to be convenient for
+ downstream distributors that want bug fixes but don't want
+ any new features to minimize the risk of introducing new bugs.
+
+ * Unstable: Z is just a counter. API or ABI of features added
+ in earlier unstable releases having the same X.Y may break.
+
+ - S indicates stability of the release. It is missing from the
+ stable releases, where Y is an even number. When Y is odd, S
+ is either "alpha" or "beta" to make it very clear that such
+ versions are not stable releases. The same X.Y.Z combination is
+ not used for more than one stability level, i.e. after X.Y.Zalpha,
+ the next version can be X.Y.(Z+1)beta but not X.Y.Zbeta.
+
+
+3. Reporting bugs
+-----------------
+
+ Naturally it is easiest for me if you already know what causes the
+ unexpected behavior. Even better if you have a patch to propose.
+ However, quite often the reason for unexpected behavior is unknown,
+ so here are a few things to do before sending a bug report:
+
+ 1. Try to create a small example how to reproduce the issue.
+
+ 2. Compile XZ Utils with debugging code using configure switches
+ --enable-debug and, if possible, --disable-shared. If you are
+ using GCC, use CFLAGS='-O0 -ggdb3'. Don't strip the resulting
+ binaries.
+
+ 3. Turn on core dumps. The exact command depends on your shell;
+ for example in GNU bash it is done with "ulimit -c unlimited",
+ and in tcsh with "limit coredumpsize unlimited".
+
+ 4. Try to reproduce the suspected bug. If you get "assertion failed"
+ message, be sure to include the complete message in your bug
+ report. If the application leaves a coredump, get a backtrace
+ using gdb:
+ $ gdb /path/to/app-binary # Load the app to the debugger.
+ (gdb) core core # Open the coredump.
+ (gdb) bt # Print the backtrace. Copy & paste to bug report.
+ (gdb) quit # Quit gdb.
+
+ Report your bug via email or IRC (see Contact information below).
+ Don't send core dump files or any executables. If you have a small
+ example file(s) (total size less than 256 KiB), please include
+ it/them as an attachment. If you have bigger test files, put them
+ online somewhere and include a URL to the file(s) in the bug report.
+
+ Always include the exact version number of XZ Utils in the bug report.
+ If you are using a snapshot from the git repository, use "git describe"
+ to get the exact snapshot version. If you are using XZ Utils shipped
+ in an operating system distribution, mention the distribution name,
+ distribution version, and exact xz package version; if you cannot
+ repeat the bug with the code compiled from unpatched source code,
+ you probably need to report a bug to your distribution's bug tracking
+ system.
+
+
+4. Translations
+---------------
+
+ The xz command line tool and all man pages can be translated.
+ The translations are handled via the Translation Project. If you
+ wish to help translating xz, please join the Translation Project:
+
+ https://translationproject.org/html/translators.html
+
+ Below are notes and testing instructions specific to xz
+ translations.
+
+ Testing can be done by installing xz into a temporary directory:
+
+ ./configure --disable-shared --prefix=/tmp/xz-test
+ #
+ make -C po update-po
+ make install
+ bash debug/translation.bash | less
+ bash debug/translation.bash | less -S # For --list outputs
+
+ Repeat the above as needed (no need to re-run configure though).
+
+ Note especially the following:
+
+ - The output of --help and --long-help must look nice on
+ an 80-column terminal. It's OK to add extra lines if needed.
+
+ - In contrast, don't add extra lines to error messages and such.
+ They are often preceded with e.g. a filename on the same line,
+ so you have no way to predict where to put a \n. Let the terminal
+ do the wrapping even if it looks ugly. Adding new lines will be
+ even uglier in the generic case even if it looks nice in a few
+ limited examples.
+
+ - Be careful with column alignment in tables and table-like output
+ (--list, --list --verbose --verbose, --info-memory, --help, and
+ --long-help):
+
+ * All descriptions of options in --help should start in the
+ same column (but it doesn't need to be the same column as
+ in the English messages; just be consistent if you change it).
+ Check that both --help and --long-help look OK, since they
+ share several strings.
+
+ * --list --verbose and --info-memory print lines that have
+ the format "Description: %s". If you need a longer
+ description, you can put extra space between the colon
+ and %s. Then you may need to add extra space to other
+ strings too so that the result as a whole looks good (all
+ values start at the same column).
+
+ * The columns of the actual tables in --list --verbose --verbose
+ should be aligned properly. Abbreviate if necessary. It might
+ be good to keep at least 2 or 3 spaces between column headings
+ and avoid spaces in the headings so that the columns stand out
+ better, but this is a matter of opinion. Do what you think
+ looks best.
+
+ - Be careful to put a period at the end of a sentence when the
+ original version has it, and don't put it when the original
+ doesn't have it. Similarly, be careful with \n characters
+ at the beginning and end of the strings.
+
+ - Read the TRANSLATORS comments that have been extracted from the
+ source code and included in xz.pot. Some comments suggest
+ testing with a specific command which needs an .xz file. You
+ may use e.g. any tests/files/good-*.xz. However, these test
+ commands are included in translations.bash output, so reading
+ translations.bash output carefully can be enough.
+
+ - If you find language problems in the original English strings,
+ feel free to suggest improvements. Ask if something is unclear.
+
+ - The translated messages should be understandable (sometimes this
+ may be a problem with the original English messages too). Don't
+ make a direct word-by-word translation from English especially if
+ the result doesn't sound good in your language.
+
+ Thanks for your help!
+
+
+5. Other implementations of the .xz format
+------------------------------------------
+
+ 7-Zip and the p7zip port of 7-Zip support the .xz format starting
+ from the version 9.00alpha.
+
+ https://7-zip.org/
+ https://p7zip.sourceforge.net/
+
+ XZ Embedded is a limited implementation written for use in the Linux
+ kernel, but it is also suitable for other embedded use.
+
+ https://tukaani.org/xz/embedded.html
+
+ XZ for Java is a complete implementation written in pure Java.
+
+ https://tukaani.org/xz/java.html
+
+
+6. Contact information
+----------------------
+
+ XZ Utils in general:
+ - Home page: https://tukaani.org/xz/
+ - Email to maintainer(s): xz@tukaani.org
+ - IRC: #tukaani on Libera Chat
+ - GitHub: https://github.com/tukaani-project/xz
+
+ Lead maintainer:
+ - Email: Lasse Collin
+ - IRC: Larhzu on Libera Chat
+
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/THANKS b/vcpkg_installed/arm64-osx/share/doc/xz/THANKS
new file mode 100644
index 00000000..7d2d4fe8
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/THANKS
@@ -0,0 +1,183 @@
+
+Thanks
+======
+
+Some people have helped more, some less, but nevertheless everyone's help
+has been important. :-) In alphabetical order:
+ - Mark Adler
+ - Kian-Meng Ang
+ - H. Peter Anvin
+ - Jeff Bastian
+ - Nelson H. F. Beebe
+ - Karl Beldan
+ - Karl Berry
+ - Anders F. Björklund
+ - Emmanuel Blot
+ - Melanie Blower
+ - Alexander Bluhm
+ - Martin Blumenstingl
+ - Ben Boeckel
+ - Jakub Bogusz
+ - Adam Borowski
+ - Maarten Bosmans
+ - Lukas Braune
+ - Benjamin Buch
+ - Trent W. Buck
+ - Kevin R. Bulgrien
+ - James Buren
+ - David Burklund
+ - Frank Busse
+ - Daniel Mealha Cabrita
+ - Milo Casagrande
+ - Marek Černocký
+ - Tomer Chachamu
+ - Vitaly Chikunov
+ - Antoine Cœur
+ - Gabi Davar
+ - İhsan Doğan
+ - Chris Donawa
+ - Andrew Dudman
+ - Markus Duft
+ - İsmail Dönmez
+ - Paul Eggert
+ - Robert Elz
+ - Gilles Espinasse
+ - Denis Excoffier
+ - Vincent Fazio
+ - Michael Felt
+ - Michael Fox
+ - Andres Freund
+ - Mike Frysinger
+ - Daniel Richard G.
+ - Tomasz Gajc
+ - Bjarni Ingi Gislason
+ - John Paul Adrian Glaubitz
+ - Bill Glessner
+ - Matthew Good
+ - Michał Górny
+ - Jason Gorski
+ - Juan Manuel Guerrero
+ - Gabriela Gutierrez
+ - Diederik de Haas
+ - Joachim Henke
+ - Christian Hesse
+ - Vincenzo Innocente
+ - Peter Ivanov
+ - Nicholas Jackson
+ - Sam James
+ - Hajin Jang
+ - Hans Jansen
+ - Jouk Jansen
+ - Jun I Jin
+ - Kiyoshi Kanazawa
+ - Joona Kannisto
+ - Per Øyvind Karlsen
+ - Iouri Kharon
+ - Thomas Klausner
+ - Richard Koch
+ - Anton Kochkov
+ - Ville Koskinen
+ - Sergey Kosukhin
+ - Marcin Kowalczyk
+ - Jan Kratochvil
+ - Christian Kujau
+ - Stephan Kulow
+ - Ilya Kurdyukov
+ - Peter Lawler
+ - James M Leddy
+ - Kelvin Lee
+ - Vincent Lefevre
+ - Hin-Tak Leung
+ - Andraž 'ruskie' Levstik
+ - Cary Lewis
+ - Wim Lewis
+ - Xin Li
+ - Eric Lindblad
+ - Lorenzo De Liso
+ - H.J. Lu
+ - Bela Lubkin
+ - Chenxi Mao
+ - Gregory Margo
+ - Julien Marrec
+ - Ed Maste
+ - Martin Matuška
+ - Ivan A. Melnikov
+ - Jim Meyering
+ - Arkadiusz Miskiewicz
+ - Nathan Moinvaziri
+ - Étienne Mollier
+ - Conley Moorhous
+ - Rafał Mużyło
+ - Adrien Nader
+ - Evan Nemerson
+ - Hongbo Ni
+ - Jonathan Nieder
+ - Andre Noll
+ - Peter O'Gorman
+ - Dimitri Papadopoulos Orfanos
+ - Daniel Packard
+ - Filip Palian
+ - Peter Pallinger
+ - Rui Paulo
+ - Igor Pavlov
+ - Diego Elio Pettenò
+ - Elbert Pol
+ - Mikko Pouru
+ - Rich Prohaska
+ - Trần Ngọc Quân
+ - Pavel Raiskup
+ - Ole André Vadla Ravnås
+ - Eric S. Raymond
+ - Robert Readman
+ - Bernhard Reutner-Fischer
+ - Markus Rickert
+ - Cristian Rodríguez
+ - Christian von Roques
+ - Boud Roukema
+ - Torsten Rupp
+ - Stephen Sachs
+ - Jukka Salmi
+ - Agostino Sarubbo
+ - Alexandre Sauvé
+ - Benno Schulenberg
+ - Andreas Schwab
+ - Bhargava Shastry
+ - Dan Shechter
+ - Stuart Shelton
+ - Sebastian Andrzej Siewior
+ - Ville Skyttä
+ - Brad Smith
+ - Bruce Stark
+ - Pippijn van Steenhoven
+ - Martin Storsjö
+ - Jonathan Stott
+ - Dan Stromberg
+ - Vincent Torri
+ - Alexey Tourbin
+ - Paul Townsend
+ - Mohammed Adnène Trojette
+ - Taiki Tsunekawa
+ - Maksym Vatsyk
+ - Loganaden Velvindron
+ - Patrick J. Volkerding
+ - Martin Väth
+ - Adam Walling
+ - Jeffrey Walton
+ - Christian Weisgerber
+ - Dan Weiss
+ - Bert Wesarg
+ - Fredrik Wikstrom
+ - Jim Wilcoxson
+ - Ralf Wildenhues
+ - Charles Wilson
+ - Lars Wirzenius
+ - Pilorz Wojciech
+ - Chien Wong
+ - Ryan Young
+ - Andreas Zieringer
+
+Also thanks to all the people who have participated in the Tukaani project.
+
+I have probably forgot to add some names to the above list. Sorry about
+that and thanks for your help.
+
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/examples/00_README.txt b/vcpkg_installed/arm64-osx/share/doc/xz/examples/00_README.txt
new file mode 100644
index 00000000..120e1eb7
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/examples/00_README.txt
@@ -0,0 +1,31 @@
+
+liblzma example programs
+========================
+
+Introduction
+
+ The examples are written so that the same comments aren't
+ repeated (much) in later files.
+
+ On POSIX systems, the examples should build by just typing "make".
+
+ The examples that use stdin or stdout don't set stdin and stdout
+ to binary mode. On systems where it matters (e.g. Windows) it is
+ possible that the examples won't work without modification.
+
+
+List of examples
+
+ 01_compress_easy.c Multi-call compression using
+ a compression preset
+
+ 02_decompress.c Multi-call decompression
+
+ 03_compress_custom.c Like 01_compress_easy.c but using
+ a custom filter chain
+ (x86 BCJ + LZMA2)
+
+ 04_compress_easy_mt.c Multi-threaded multi-call
+ compression using a compression
+ preset
+
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/examples/01_compress_easy.c b/vcpkg_installed/arm64-osx/share/doc/xz/examples/01_compress_easy.c
new file mode 100644
index 00000000..31bcf928
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/examples/01_compress_easy.c
@@ -0,0 +1,296 @@
+// SPDX-License-Identifier: 0BSD
+
+///////////////////////////////////////////////////////////////////////////////
+//
+/// \file 01_compress_easy.c
+/// \brief Compress from stdin to stdout in multi-call mode
+///
+/// Usage: ./01_compress_easy PRESET < INFILE > OUTFILE
+///
+/// Example: ./01_compress_easy 6 < foo > foo.xz
+//
+// Author: Lasse Collin
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+static void
+show_usage_and_exit(const char *argv0)
+{
+ fprintf(stderr, "Usage: %s PRESET < INFILE > OUTFILE\n"
+ "PRESET is a number 0-9 and can optionally be "
+ "followed by 'e' to indicate extreme preset\n",
+ argv0);
+ exit(EXIT_FAILURE);
+}
+
+
+static uint32_t
+get_preset(int argc, char **argv)
+{
+ // One argument whose first char must be 0-9.
+ if (argc != 2 || argv[1][0] < '0' || argv[1][0] > '9')
+ show_usage_and_exit(argv[0]);
+
+ // Calculate the preste level 0-9.
+ uint32_t preset = argv[1][0] - '0';
+
+ // If there is a second char, it must be 'e'. It will set
+ // the LZMA_PRESET_EXTREME flag.
+ if (argv[1][1] != '\0') {
+ if (argv[1][1] != 'e' || argv[1][2] != '\0')
+ show_usage_and_exit(argv[0]);
+
+ preset |= LZMA_PRESET_EXTREME;
+ }
+
+ return preset;
+}
+
+
+static bool
+init_encoder(lzma_stream *strm, uint32_t preset)
+{
+ // Initialize the encoder using a preset. Set the integrity to check
+ // to CRC64, which is the default in the xz command line tool. If
+ // the .xz file needs to be decompressed with XZ Embedded, use
+ // LZMA_CHECK_CRC32 instead.
+ lzma_ret ret = lzma_easy_encoder(strm, preset, LZMA_CHECK_CRC64);
+
+ // Return successfully if the initialization went fine.
+ if (ret == LZMA_OK)
+ return true;
+
+ // Something went wrong. The possible errors are documented in
+ // lzma/container.h (src/liblzma/api/lzma/container.h in the source
+ // package or e.g. /usr/include/lzma/container.h depending on the
+ // install prefix).
+ const char *msg;
+ switch (ret) {
+ case LZMA_MEM_ERROR:
+ msg = "Memory allocation failed";
+ break;
+
+ case LZMA_OPTIONS_ERROR:
+ msg = "Specified preset is not supported";
+ break;
+
+ case LZMA_UNSUPPORTED_CHECK:
+ msg = "Specified integrity check is not supported";
+ break;
+
+ default:
+ // This is most likely LZMA_PROG_ERROR indicating a bug in
+ // this program or in liblzma. It is inconvenient to have a
+ // separate error message for errors that should be impossible
+ // to occur, but knowing the error code is important for
+ // debugging. That's why it is good to print the error code
+ // at least when there is no good error message to show.
+ msg = "Unknown error, possibly a bug";
+ break;
+ }
+
+ fprintf(stderr, "Error initializing the encoder: %s (error code %u)\n",
+ msg, ret);
+ return false;
+}
+
+
+static bool
+compress(lzma_stream *strm, FILE *infile, FILE *outfile)
+{
+ // This will be LZMA_RUN until the end of the input file is reached.
+ // This tells lzma_code() when there will be no more input.
+ lzma_action action = LZMA_RUN;
+
+ // Buffers to temporarily hold uncompressed input
+ // and compressed output.
+ uint8_t inbuf[BUFSIZ];
+ uint8_t outbuf[BUFSIZ];
+
+ // Initialize the input and output pointers. Initializing next_in
+ // and avail_in isn't really necessary when we are going to encode
+ // just one file since LZMA_STREAM_INIT takes care of initializing
+ // those already. But it doesn't hurt much and it will be needed
+ // if encoding more than one file like we will in 02_decompress.c.
+ //
+ // While we don't care about strm->total_in or strm->total_out in this
+ // example, it is worth noting that initializing the encoder will
+ // always reset total_in and total_out to zero. But the encoder
+ // initialization doesn't touch next_in, avail_in, next_out, or
+ // avail_out.
+ strm->next_in = NULL;
+ strm->avail_in = 0;
+ strm->next_out = outbuf;
+ strm->avail_out = sizeof(outbuf);
+
+ // Loop until the file has been successfully compressed or until
+ // an error occurs.
+ while (true) {
+ // Fill the input buffer if it is empty.
+ if (strm->avail_in == 0 && !feof(infile)) {
+ strm->next_in = inbuf;
+ strm->avail_in = fread(inbuf, 1, sizeof(inbuf),
+ infile);
+
+ if (ferror(infile)) {
+ fprintf(stderr, "Read error: %s\n",
+ strerror(errno));
+ return false;
+ }
+
+ // Once the end of the input file has been reached,
+ // we need to tell lzma_code() that no more input
+ // will be coming and that it should finish the
+ // encoding.
+ if (feof(infile))
+ action = LZMA_FINISH;
+ }
+
+ // Tell liblzma do the actual encoding.
+ //
+ // This reads up to strm->avail_in bytes of input starting
+ // from strm->next_in. avail_in will be decremented and
+ // next_in incremented by an equal amount to match the
+ // number of input bytes consumed.
+ //
+ // Up to strm->avail_out bytes of compressed output will be
+ // written starting from strm->next_out. avail_out and next_out
+ // will be incremented by an equal amount to match the number
+ // of output bytes written.
+ //
+ // The encoder has to do internal buffering, which means that
+ // it may take quite a bit of input before the same data is
+ // available in compressed form in the output buffer.
+ lzma_ret ret = lzma_code(strm, action);
+
+ // If the output buffer is full or if the compression finished
+ // successfully, write the data from the output buffer to
+ // the output file.
+ if (strm->avail_out == 0 || ret == LZMA_STREAM_END) {
+ // When lzma_code() has returned LZMA_STREAM_END,
+ // the output buffer is likely to be only partially
+ // full. Calculate how much new data there is to
+ // be written to the output file.
+ size_t write_size = sizeof(outbuf) - strm->avail_out;
+
+ if (fwrite(outbuf, 1, write_size, outfile)
+ != write_size) {
+ fprintf(stderr, "Write error: %s\n",
+ strerror(errno));
+ return false;
+ }
+
+ // Reset next_out and avail_out.
+ strm->next_out = outbuf;
+ strm->avail_out = sizeof(outbuf);
+ }
+
+ // Normally the return value of lzma_code() will be LZMA_OK
+ // until everything has been encoded.
+ if (ret != LZMA_OK) {
+ // Once everything has been encoded successfully, the
+ // return value of lzma_code() will be LZMA_STREAM_END.
+ //
+ // It is important to check for LZMA_STREAM_END. Do not
+ // assume that getting ret != LZMA_OK would mean that
+ // everything has gone well.
+ if (ret == LZMA_STREAM_END)
+ return true;
+
+ // It's not LZMA_OK nor LZMA_STREAM_END,
+ // so it must be an error code. See lzma/base.h
+ // (src/liblzma/api/lzma/base.h in the source package
+ // or e.g. /usr/include/lzma/base.h depending on the
+ // install prefix) for the list and documentation of
+ // possible values. Most values listen in lzma_ret
+ // enumeration aren't possible in this example.
+ const char *msg;
+ switch (ret) {
+ case LZMA_MEM_ERROR:
+ msg = "Memory allocation failed";
+ break;
+
+ case LZMA_DATA_ERROR:
+ // This error is returned if the compressed
+ // or uncompressed size get near 8 EiB
+ // (2^63 bytes) because that's where the .xz
+ // file format size limits currently are.
+ // That is, the possibility of this error
+ // is mostly theoretical unless you are doing
+ // something very unusual.
+ //
+ // Note that strm->total_in and strm->total_out
+ // have nothing to do with this error. Changing
+ // those variables won't increase or decrease
+ // the chance of getting this error.
+ msg = "File size limits exceeded";
+ break;
+
+ default:
+ // This is most likely LZMA_PROG_ERROR, but
+ // if this program is buggy (or liblzma has
+ // a bug), it may be e.g. LZMA_BUF_ERROR or
+ // LZMA_OPTIONS_ERROR too.
+ //
+ // It is inconvenient to have a separate
+ // error message for errors that should be
+ // impossible to occur, but knowing the error
+ // code is important for debugging. That's why
+ // it is good to print the error code at least
+ // when there is no good error message to show.
+ msg = "Unknown error, possibly a bug";
+ break;
+ }
+
+ fprintf(stderr, "Encoder error: %s (error code %u)\n",
+ msg, ret);
+ return false;
+ }
+ }
+}
+
+
+extern int
+main(int argc, char **argv)
+{
+ // Get the preset number from the command line.
+ uint32_t preset = get_preset(argc, argv);
+
+ // Initialize a lzma_stream structure. When it is allocated on stack,
+ // it is simplest to use LZMA_STREAM_INIT macro like below. When it
+ // is allocated on heap, using memset(strmptr, 0, sizeof(*strmptr))
+ // works (as long as NULL pointers are represented with zero bits
+ // as they are on practically all computers today).
+ lzma_stream strm = LZMA_STREAM_INIT;
+
+ // Initialize the encoder. If it succeeds, compress from
+ // stdin to stdout.
+ bool success = init_encoder(&strm, preset);
+ if (success)
+ success = compress(&strm, stdin, stdout);
+
+ // Free the memory allocated for the encoder. If we were encoding
+ // multiple files, this would only need to be done after the last
+ // file. See 02_decompress.c for handling of multiple files.
+ //
+ // It is OK to call lzma_end() multiple times or when it hasn't been
+ // actually used except initialized with LZMA_STREAM_INIT.
+ lzma_end(&strm);
+
+ // Close stdout to catch possible write errors that can occur
+ // when pending data is flushed from the stdio buffers.
+ if (fclose(stdout)) {
+ fprintf(stderr, "Write error: %s\n", strerror(errno));
+ success = false;
+ }
+
+ return success ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/examples/02_decompress.c b/vcpkg_installed/arm64-osx/share/doc/xz/examples/02_decompress.c
new file mode 100644
index 00000000..a87a5d3e
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/examples/02_decompress.c
@@ -0,0 +1,286 @@
+// SPDX-License-Identifier: 0BSD
+
+///////////////////////////////////////////////////////////////////////////////
+//
+/// \file 02_decompress.c
+/// \brief Decompress .xz files to stdout
+///
+/// Usage: ./02_decompress INPUT_FILES... > OUTFILE
+///
+/// Example: ./02_decompress foo.xz bar.xz > foobar
+//
+// Author: Lasse Collin
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+static bool
+init_decoder(lzma_stream *strm)
+{
+ // Initialize a .xz decoder. The decoder supports a memory usage limit
+ // and a set of flags.
+ //
+ // The memory usage of the decompressor depends on the settings used
+ // to compress a .xz file. It can vary from less than a megabyte to
+ // a few gigabytes, but in practice (at least for now) it rarely
+ // exceeds 65 MiB because that's how much memory is required to
+ // decompress files created with "xz -9". Settings requiring more
+ // memory take extra effort to use and don't (at least for now)
+ // provide significantly better compression in most cases.
+ //
+ // Memory usage limit is useful if it is important that the
+ // decompressor won't consume gigabytes of memory. The need
+ // for limiting depends on the application. In this example,
+ // no memory usage limiting is used. This is done by setting
+ // the limit to UINT64_MAX.
+ //
+ // The .xz format allows concatenating compressed files as is:
+ //
+ // echo foo | xz > foobar.xz
+ // echo bar | xz >> foobar.xz
+ //
+ // When decompressing normal standalone .xz files, LZMA_CONCATENATED
+ // should always be used to support decompression of concatenated
+ // .xz files. If LZMA_CONCATENATED isn't used, the decoder will stop
+ // after the first .xz stream. This can be useful when .xz data has
+ // been embedded inside another file format.
+ //
+ // Flags other than LZMA_CONCATENATED are supported too, and can
+ // be combined with bitwise-or. See lzma/container.h
+ // (src/liblzma/api/lzma/container.h in the source package or e.g.
+ // /usr/include/lzma/container.h depending on the install prefix)
+ // for details.
+ lzma_ret ret = lzma_stream_decoder(
+ strm, UINT64_MAX, LZMA_CONCATENATED);
+
+ // Return successfully if the initialization went fine.
+ if (ret == LZMA_OK)
+ return true;
+
+ // Something went wrong. The possible errors are documented in
+ // lzma/container.h (src/liblzma/api/lzma/container.h in the source
+ // package or e.g. /usr/include/lzma/container.h depending on the
+ // install prefix).
+ //
+ // Note that LZMA_MEMLIMIT_ERROR is never possible here. If you
+ // specify a very tiny limit, the error will be delayed until
+ // the first headers have been parsed by a call to lzma_code().
+ const char *msg;
+ switch (ret) {
+ case LZMA_MEM_ERROR:
+ msg = "Memory allocation failed";
+ break;
+
+ case LZMA_OPTIONS_ERROR:
+ msg = "Unsupported decompressor flags";
+ break;
+
+ default:
+ // This is most likely LZMA_PROG_ERROR indicating a bug in
+ // this program or in liblzma. It is inconvenient to have a
+ // separate error message for errors that should be impossible
+ // to occur, but knowing the error code is important for
+ // debugging. That's why it is good to print the error code
+ // at least when there is no good error message to show.
+ msg = "Unknown error, possibly a bug";
+ break;
+ }
+
+ fprintf(stderr, "Error initializing the decoder: %s (error code %u)\n",
+ msg, ret);
+ return false;
+}
+
+
+static bool
+decompress(lzma_stream *strm, const char *inname, FILE *infile, FILE *outfile)
+{
+ // When LZMA_CONCATENATED flag was used when initializing the decoder,
+ // we need to tell lzma_code() when there will be no more input.
+ // This is done by setting action to LZMA_FINISH instead of LZMA_RUN
+ // in the same way as it is done when encoding.
+ //
+ // When LZMA_CONCATENATED isn't used, there is no need to use
+ // LZMA_FINISH to tell when all the input has been read, but it
+ // is still OK to use it if you want. When LZMA_CONCATENATED isn't
+ // used, the decoder will stop after the first .xz stream. In that
+ // case some unused data may be left in strm->next_in.
+ lzma_action action = LZMA_RUN;
+
+ uint8_t inbuf[BUFSIZ];
+ uint8_t outbuf[BUFSIZ];
+
+ strm->next_in = NULL;
+ strm->avail_in = 0;
+ strm->next_out = outbuf;
+ strm->avail_out = sizeof(outbuf);
+
+ while (true) {
+ if (strm->avail_in == 0 && !feof(infile)) {
+ strm->next_in = inbuf;
+ strm->avail_in = fread(inbuf, 1, sizeof(inbuf),
+ infile);
+
+ if (ferror(infile)) {
+ fprintf(stderr, "%s: Read error: %s\n",
+ inname, strerror(errno));
+ return false;
+ }
+
+ // Once the end of the input file has been reached,
+ // we need to tell lzma_code() that no more input
+ // will be coming. As said before, this isn't required
+ // if the LZMA_CONCATENATED flag isn't used when
+ // initializing the decoder.
+ if (feof(infile))
+ action = LZMA_FINISH;
+ }
+
+ lzma_ret ret = lzma_code(strm, action);
+
+ if (strm->avail_out == 0 || ret == LZMA_STREAM_END) {
+ size_t write_size = sizeof(outbuf) - strm->avail_out;
+
+ if (fwrite(outbuf, 1, write_size, outfile)
+ != write_size) {
+ fprintf(stderr, "Write error: %s\n",
+ strerror(errno));
+ return false;
+ }
+
+ strm->next_out = outbuf;
+ strm->avail_out = sizeof(outbuf);
+ }
+
+ if (ret != LZMA_OK) {
+ // Once everything has been decoded successfully, the
+ // return value of lzma_code() will be LZMA_STREAM_END.
+ //
+ // It is important to check for LZMA_STREAM_END. Do not
+ // assume that getting ret != LZMA_OK would mean that
+ // everything has gone well or that when you aren't
+ // getting more output it must have successfully
+ // decoded everything.
+ if (ret == LZMA_STREAM_END)
+ return true;
+
+ // It's not LZMA_OK nor LZMA_STREAM_END,
+ // so it must be an error code. See lzma/base.h
+ // (src/liblzma/api/lzma/base.h in the source package
+ // or e.g. /usr/include/lzma/base.h depending on the
+ // install prefix) for the list and documentation of
+ // possible values. Many values listen in lzma_ret
+ // enumeration aren't possible in this example, but
+ // can be made possible by enabling memory usage limit
+ // or adding flags to the decoder initialization.
+ const char *msg;
+ switch (ret) {
+ case LZMA_MEM_ERROR:
+ msg = "Memory allocation failed";
+ break;
+
+ case LZMA_FORMAT_ERROR:
+ // .xz magic bytes weren't found.
+ msg = "The input is not in the .xz format";
+ break;
+
+ case LZMA_OPTIONS_ERROR:
+ // For example, the headers specify a filter
+ // that isn't supported by this liblzma
+ // version (or it hasn't been enabled when
+ // building liblzma, but no-one sane does
+ // that unless building liblzma for an
+ // embedded system). Upgrading to a newer
+ // liblzma might help.
+ //
+ // Note that it is unlikely that the file has
+ // accidentally became corrupt if you get this
+ // error. The integrity of the .xz headers is
+ // always verified with a CRC32, so
+ // unintentionally corrupt files can be
+ // distinguished from unsupported files.
+ msg = "Unsupported compression options";
+ break;
+
+ case LZMA_DATA_ERROR:
+ msg = "Compressed file is corrupt";
+ break;
+
+ case LZMA_BUF_ERROR:
+ // Typically this error means that a valid
+ // file has got truncated, but it might also
+ // be a damaged part in the file that makes
+ // the decoder think the file is truncated.
+ // If you prefer, you can use the same error
+ // message for this as for LZMA_DATA_ERROR.
+ msg = "Compressed file is truncated or "
+ "otherwise corrupt";
+ break;
+
+ default:
+ // This is most likely LZMA_PROG_ERROR.
+ msg = "Unknown error, possibly a bug";
+ break;
+ }
+
+ fprintf(stderr, "%s: Decoder error: "
+ "%s (error code %u)\n",
+ inname, msg, ret);
+ return false;
+ }
+ }
+}
+
+
+extern int
+main(int argc, char **argv)
+{
+ if (argc <= 1) {
+ fprintf(stderr, "Usage: %s FILES...\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ lzma_stream strm = LZMA_STREAM_INIT;
+
+ bool success = true;
+
+ // Try to decompress all files.
+ for (int i = 1; i < argc; ++i) {
+ if (!init_decoder(&strm)) {
+ // Decoder initialization failed. There's no point
+ // to retry it so we need to exit.
+ success = false;
+ break;
+ }
+
+ FILE *infile = fopen(argv[i], "rb");
+
+ if (infile == NULL) {
+ fprintf(stderr, "%s: Error opening the "
+ "input file: %s\n",
+ argv[i], strerror(errno));
+ success = false;
+ } else {
+ success &= decompress(&strm, argv[i], infile, stdout);
+ fclose(infile);
+ }
+ }
+
+ // Free the memory allocated for the decoder. This only needs to be
+ // done after the last file.
+ lzma_end(&strm);
+
+ if (fclose(stdout)) {
+ fprintf(stderr, "Write error: %s\n", strerror(errno));
+ success = false;
+ }
+
+ return success ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/examples/03_compress_custom.c b/vcpkg_installed/arm64-osx/share/doc/xz/examples/03_compress_custom.c
new file mode 100644
index 00000000..57797b87
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/examples/03_compress_custom.c
@@ -0,0 +1,192 @@
+// SPDX-License-Identifier: 0BSD
+
+///////////////////////////////////////////////////////////////////////////////
+//
+/// \file 03_compress_custom.c
+/// \brief Compress in multi-call mode using x86 BCJ and LZMA2
+///
+/// Usage: ./03_compress_custom < INFILE > OUTFILE
+///
+/// Example: ./03_compress_custom < foo > foo.xz
+//
+// Author: Lasse Collin
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+static bool
+init_encoder(lzma_stream *strm)
+{
+ // Use the default preset (6) for LZMA2.
+ //
+ // The lzma_options_lzma structure and the lzma_lzma_preset() function
+ // are declared in lzma/lzma12.h (src/liblzma/api/lzma/lzma12.h in the
+ // source package or e.g. /usr/include/lzma/lzma12.h depending on
+ // the install prefix).
+ lzma_options_lzma opt_lzma2;
+ if (lzma_lzma_preset(&opt_lzma2, LZMA_PRESET_DEFAULT)) {
+ // It should never fail because the default preset
+ // (and presets 0-9 optionally with LZMA_PRESET_EXTREME)
+ // are supported by all stable liblzma versions.
+ //
+ // (The encoder initialization later in this function may
+ // still fail due to unsupported preset *if* the features
+ // required by the preset have been disabled at build time,
+ // but no-one does such things except on embedded systems.)
+ fprintf(stderr, "Unsupported preset, possibly a bug\n");
+ return false;
+ }
+
+ // Now we could customize the LZMA2 options if we wanted. For example,
+ // we could set the the dictionary size (opt_lzma2.dict_size) to
+ // something else than the default (8 MiB) of the default preset.
+ // See lzma/lzma12.h for details of all LZMA2 options.
+ //
+ // The x86 BCJ filter will try to modify the x86 instruction stream so
+ // that LZMA2 can compress it better. The x86 BCJ filter doesn't need
+ // any options so it will be set to NULL below.
+ //
+ // Construct the filter chain. The uncompressed data goes first to
+ // the first filter in the array, in this case the x86 BCJ filter.
+ // The array is always terminated by setting .id = LZMA_VLI_UNKNOWN.
+ //
+ // See lzma/filter.h for more information about the lzma_filter
+ // structure.
+ lzma_filter filters[] = {
+ { .id = LZMA_FILTER_X86, .options = NULL },
+ { .id = LZMA_FILTER_LZMA2, .options = &opt_lzma2 },
+ { .id = LZMA_VLI_UNKNOWN, .options = NULL },
+ };
+
+ // Initialize the encoder using the custom filter chain.
+ lzma_ret ret = lzma_stream_encoder(strm, filters, LZMA_CHECK_CRC64);
+
+ if (ret == LZMA_OK)
+ return true;
+
+ const char *msg;
+ switch (ret) {
+ case LZMA_MEM_ERROR:
+ msg = "Memory allocation failed";
+ break;
+
+ case LZMA_OPTIONS_ERROR:
+ // We are no longer using a plain preset so this error
+ // message has been edited accordingly compared to
+ // 01_compress_easy.c.
+ msg = "Specified filter chain is not supported";
+ break;
+
+ case LZMA_UNSUPPORTED_CHECK:
+ msg = "Specified integrity check is not supported";
+ break;
+
+ default:
+ msg = "Unknown error, possibly a bug";
+ break;
+ }
+
+ fprintf(stderr, "Error initializing the encoder: %s (error code %u)\n",
+ msg, ret);
+ return false;
+}
+
+
+// This function is identical to the one in 01_compress_easy.c.
+static bool
+compress(lzma_stream *strm, FILE *infile, FILE *outfile)
+{
+ lzma_action action = LZMA_RUN;
+
+ uint8_t inbuf[BUFSIZ];
+ uint8_t outbuf[BUFSIZ];
+
+ strm->next_in = NULL;
+ strm->avail_in = 0;
+ strm->next_out = outbuf;
+ strm->avail_out = sizeof(outbuf);
+
+ while (true) {
+ if (strm->avail_in == 0 && !feof(infile)) {
+ strm->next_in = inbuf;
+ strm->avail_in = fread(inbuf, 1, sizeof(inbuf),
+ infile);
+
+ if (ferror(infile)) {
+ fprintf(stderr, "Read error: %s\n",
+ strerror(errno));
+ return false;
+ }
+
+ if (feof(infile))
+ action = LZMA_FINISH;
+ }
+
+ lzma_ret ret = lzma_code(strm, action);
+
+ if (strm->avail_out == 0 || ret == LZMA_STREAM_END) {
+ size_t write_size = sizeof(outbuf) - strm->avail_out;
+
+ if (fwrite(outbuf, 1, write_size, outfile)
+ != write_size) {
+ fprintf(stderr, "Write error: %s\n",
+ strerror(errno));
+ return false;
+ }
+
+ strm->next_out = outbuf;
+ strm->avail_out = sizeof(outbuf);
+ }
+
+ if (ret != LZMA_OK) {
+ if (ret == LZMA_STREAM_END)
+ return true;
+
+ const char *msg;
+ switch (ret) {
+ case LZMA_MEM_ERROR:
+ msg = "Memory allocation failed";
+ break;
+
+ case LZMA_DATA_ERROR:
+ msg = "File size limits exceeded";
+ break;
+
+ default:
+ msg = "Unknown error, possibly a bug";
+ break;
+ }
+
+ fprintf(stderr, "Encoder error: %s (error code %u)\n",
+ msg, ret);
+ return false;
+ }
+ }
+}
+
+
+extern int
+main(void)
+{
+ lzma_stream strm = LZMA_STREAM_INIT;
+
+ bool success = init_encoder(&strm);
+ if (success)
+ success = compress(&strm, stdin, stdout);
+
+ lzma_end(&strm);
+
+ if (fclose(stdout)) {
+ fprintf(stderr, "Write error: %s\n", strerror(errno));
+ success = false;
+ }
+
+ return success ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/examples/04_compress_easy_mt.c b/vcpkg_installed/arm64-osx/share/doc/xz/examples/04_compress_easy_mt.c
new file mode 100644
index 00000000..c721a661
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/examples/04_compress_easy_mt.c
@@ -0,0 +1,205 @@
+// SPDX-License-Identifier: 0BSD
+
+///////////////////////////////////////////////////////////////////////////////
+//
+/// \file 04_compress_easy_mt.c
+/// \brief Compress in multi-call mode using LZMA2 in multi-threaded mode
+///
+/// Usage: ./04_compress_easy_mt < INFILE > OUTFILE
+///
+/// Example: ./04_compress_easy_mt < foo > foo.xz
+//
+// Author: Lasse Collin
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+static bool
+init_encoder(lzma_stream *strm)
+{
+ // The threaded encoder takes the options as pointer to
+ // a lzma_mt structure.
+ lzma_mt mt = {
+ // No flags are needed.
+ .flags = 0,
+
+ // Let liblzma determine a sane block size.
+ .block_size = 0,
+
+ // Use no timeout for lzma_code() calls by setting timeout
+ // to zero. That is, sometimes lzma_code() might block for
+ // a long time (from several seconds to even minutes).
+ // If this is not OK, for example due to progress indicator
+ // needing updates, specify a timeout in milliseconds here.
+ // See the documentation of lzma_mt in lzma/container.h for
+ // information how to choose a reasonable timeout.
+ .timeout = 0,
+
+ // Use the default preset (6) for LZMA2.
+ // To use a preset, filters must be set to NULL.
+ .preset = LZMA_PRESET_DEFAULT,
+ .filters = NULL,
+
+ // Use CRC64 for integrity checking. See also
+ // 01_compress_easy.c about choosing the integrity check.
+ .check = LZMA_CHECK_CRC64,
+ };
+
+ // Detect how many threads the CPU supports.
+ mt.threads = lzma_cputhreads();
+
+ // If the number of CPU cores/threads cannot be detected,
+ // use one thread. Note that this isn't the same as the normal
+ // single-threaded mode as this will still split the data into
+ // blocks and use more RAM than the normal single-threaded mode.
+ // You may want to consider using lzma_easy_encoder() or
+ // lzma_stream_encoder() instead of lzma_stream_encoder_mt() if
+ // lzma_cputhreads() returns 0 or 1.
+ if (mt.threads == 0)
+ mt.threads = 1;
+
+ // If the number of CPU cores/threads exceeds threads_max,
+ // limit the number of threads to keep memory usage lower.
+ // The number 8 is arbitrarily chosen and may be too low or
+ // high depending on the compression preset and the computer
+ // being used.
+ //
+ // FIXME: A better way could be to check the amount of RAM
+ // (or available RAM) and use lzma_stream_encoder_mt_memusage()
+ // to determine if the number of threads should be reduced.
+ const uint32_t threads_max = 8;
+ if (mt.threads > threads_max)
+ mt.threads = threads_max;
+
+ // Initialize the threaded encoder.
+ lzma_ret ret = lzma_stream_encoder_mt(strm, &mt);
+
+ if (ret == LZMA_OK)
+ return true;
+
+ const char *msg;
+ switch (ret) {
+ case LZMA_MEM_ERROR:
+ msg = "Memory allocation failed";
+ break;
+
+ case LZMA_OPTIONS_ERROR:
+ // We are no longer using a plain preset so this error
+ // message has been edited accordingly compared to
+ // 01_compress_easy.c.
+ msg = "Specified filter chain is not supported";
+ break;
+
+ case LZMA_UNSUPPORTED_CHECK:
+ msg = "Specified integrity check is not supported";
+ break;
+
+ default:
+ msg = "Unknown error, possibly a bug";
+ break;
+ }
+
+ fprintf(stderr, "Error initializing the encoder: %s (error code %u)\n",
+ msg, ret);
+ return false;
+}
+
+
+// This function is identical to the one in 01_compress_easy.c.
+static bool
+compress(lzma_stream *strm, FILE *infile, FILE *outfile)
+{
+ lzma_action action = LZMA_RUN;
+
+ uint8_t inbuf[BUFSIZ];
+ uint8_t outbuf[BUFSIZ];
+
+ strm->next_in = NULL;
+ strm->avail_in = 0;
+ strm->next_out = outbuf;
+ strm->avail_out = sizeof(outbuf);
+
+ while (true) {
+ if (strm->avail_in == 0 && !feof(infile)) {
+ strm->next_in = inbuf;
+ strm->avail_in = fread(inbuf, 1, sizeof(inbuf),
+ infile);
+
+ if (ferror(infile)) {
+ fprintf(stderr, "Read error: %s\n",
+ strerror(errno));
+ return false;
+ }
+
+ if (feof(infile))
+ action = LZMA_FINISH;
+ }
+
+ lzma_ret ret = lzma_code(strm, action);
+
+ if (strm->avail_out == 0 || ret == LZMA_STREAM_END) {
+ size_t write_size = sizeof(outbuf) - strm->avail_out;
+
+ if (fwrite(outbuf, 1, write_size, outfile)
+ != write_size) {
+ fprintf(stderr, "Write error: %s\n",
+ strerror(errno));
+ return false;
+ }
+
+ strm->next_out = outbuf;
+ strm->avail_out = sizeof(outbuf);
+ }
+
+ if (ret != LZMA_OK) {
+ if (ret == LZMA_STREAM_END)
+ return true;
+
+ const char *msg;
+ switch (ret) {
+ case LZMA_MEM_ERROR:
+ msg = "Memory allocation failed";
+ break;
+
+ case LZMA_DATA_ERROR:
+ msg = "File size limits exceeded";
+ break;
+
+ default:
+ msg = "Unknown error, possibly a bug";
+ break;
+ }
+
+ fprintf(stderr, "Encoder error: %s (error code %u)\n",
+ msg, ret);
+ return false;
+ }
+ }
+}
+
+
+extern int
+main(void)
+{
+ lzma_stream strm = LZMA_STREAM_INIT;
+
+ bool success = init_encoder(&strm);
+ if (success)
+ success = compress(&strm, stdin, stdout);
+
+ lzma_end(&strm);
+
+ if (fclose(stdout)) {
+ fprintf(stderr, "Write error: %s\n", strerror(errno));
+ success = false;
+ }
+
+ return success ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/examples/11_file_info.c b/vcpkg_installed/arm64-osx/share/doc/xz/examples/11_file_info.c
new file mode 100644
index 00000000..caadd980
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/examples/11_file_info.c
@@ -0,0 +1,205 @@
+// SPDX-License-Identifier: 0BSD
+
+///////////////////////////////////////////////////////////////////////////////
+//
+/// \file 11_file_info.c
+/// \brief Get uncompressed size of .xz file(s)
+///
+/// Usage: ./11_file_info INFILE1.xz [INFILEn.xz]...
+///
+/// Example: ./11_file_info foo.xz
+//
+// Author: Lasse Collin
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+static bool
+print_file_size(lzma_stream *strm, FILE *infile, const char *filename)
+{
+ // Get the file size. In standard C it can be done by seeking to
+ // the end of the file and then getting the file position.
+ // In POSIX one can use fstat() and then st_size from struct stat.
+ // Also note that fseek() and ftell() use long and thus don't support
+ // large files on 32-bit systems (POSIX versions fseeko() and
+ // ftello() can support large files).
+ if (fseek(infile, 0, SEEK_END)) {
+ fprintf(stderr, "Error seeking the file '%s': %s\n",
+ filename, strerror(errno));
+ return false;
+ }
+
+ const long file_size = ftell(infile);
+
+ // The decoder wants to start from the beginning of the .xz file.
+ rewind(infile);
+
+ // Initialize the decoder.
+ lzma_index *i;
+ lzma_ret ret = lzma_file_info_decoder(strm, &i, UINT64_MAX,
+ (uint64_t)file_size);
+ switch (ret) {
+ case LZMA_OK:
+ // Initialization succeeded.
+ break;
+
+ case LZMA_MEM_ERROR:
+ fprintf(stderr, "Out of memory when initializing "
+ "the .xz file info decoder\n");
+ return false;
+
+ case LZMA_PROG_ERROR:
+ default:
+ fprintf(stderr, "Unknown error, possibly a bug\n");
+ return false;
+ }
+
+ // This example program reuses the same lzma_stream structure
+ // for multiple files, so we need to reset this when starting
+ // a new file.
+ strm->avail_in = 0;
+
+ // Buffer for input data.
+ uint8_t inbuf[BUFSIZ];
+
+ // Pass data to the decoder and seek when needed.
+ while (true) {
+ if (strm->avail_in == 0) {
+ strm->next_in = inbuf;
+ strm->avail_in = fread(inbuf, 1, sizeof(inbuf),
+ infile);
+
+ if (ferror(infile)) {
+ fprintf(stderr,
+ "Error reading from '%s': %s\n",
+ filename, strerror(errno));
+ return false;
+ }
+
+ // We don't need to care about hitting the end of
+ // the file so no need to check for feof().
+ }
+
+ ret = lzma_code(strm, LZMA_RUN);
+
+ switch (ret) {
+ case LZMA_OK:
+ break;
+
+ case LZMA_SEEK_NEEDED:
+ // The cast is safe because liblzma won't ask us to
+ // seek past the known size of the input file which
+ // did fit into a long.
+ //
+ // NOTE: Remember to change these to off_t if you
+ // switch fseeko() or lseek().
+ if (fseek(infile, (long)(strm->seek_pos), SEEK_SET)) {
+ fprintf(stderr, "Error seeking the "
+ "file '%s': %s\n",
+ filename, strerror(errno));
+ return false;
+ }
+
+ // The old data in the inbuf is useless now. Set
+ // avail_in to zero so that we will read new input
+ // from the new file position on the next iteration
+ // of this loop.
+ strm->avail_in = 0;
+ break;
+
+ case LZMA_STREAM_END:
+ // File information was successfully decoded.
+ // See for functions that can be
+ // used on it. In this example we just print
+ // the uncompressed size (in bytes) of
+ // the .xz file followed by its file name.
+ printf("%10" PRIu64 " %s\n",
+ lzma_index_uncompressed_size(i),
+ filename);
+
+ // Free the memory of the lzma_index structure.
+ lzma_index_end(i, NULL);
+
+ return true;
+
+ case LZMA_FORMAT_ERROR:
+ // .xz magic bytes weren't found.
+ fprintf(stderr, "The file '%s' is not "
+ "in the .xz format\n", filename);
+ return false;
+
+ case LZMA_OPTIONS_ERROR:
+ fprintf(stderr, "The file '%s' has .xz headers that "
+ "are not supported by this liblzma "
+ "version\n", filename);
+ return false;
+
+ case LZMA_DATA_ERROR:
+ fprintf(stderr, "The file '%s' is corrupt\n",
+ filename);
+ return false;
+
+ case LZMA_MEM_ERROR:
+ fprintf(stderr, "Memory allocation failed when "
+ "decoding the file '%s'\n", filename);
+ return false;
+
+ // LZMA_MEMLIMIT_ERROR shouldn't happen because we used
+ // UINT64_MAX as the limit.
+ //
+ // LZMA_BUF_ERROR shouldn't happen because we always provide
+ // new input when the input buffer is empty. The decoder
+ // knows the input file size and thus won't try to read past
+ // the end of the file.
+ case LZMA_MEMLIMIT_ERROR:
+ case LZMA_BUF_ERROR:
+ case LZMA_PROG_ERROR:
+ default:
+ fprintf(stderr, "Unknown error, possibly a bug\n");
+ return false;
+ }
+ }
+
+ // This line is never reached.
+}
+
+
+extern int
+main(int argc, char **argv)
+{
+ bool success = true;
+ lzma_stream strm = LZMA_STREAM_INIT;
+
+ for (int i = 1; i < argc; ++i) {
+ FILE *infile = fopen(argv[i], "rb");
+
+ if (infile == NULL) {
+ fprintf(stderr, "Cannot open the file '%s': %s\n",
+ argv[i], strerror(errno));
+ success = false;
+ }
+
+ success &= print_file_size(&strm, infile, argv[i]);
+
+ (void)fclose(infile);
+ }
+
+ lzma_end(&strm);
+
+ // Close stdout to catch possible write errors that can occur
+ // when pending data is flushed from the stdio buffers.
+ if (fclose(stdout)) {
+ fprintf(stderr, "Write error: %s\n", strerror(errno));
+ success = false;
+ }
+
+ return success ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/examples/Makefile b/vcpkg_installed/arm64-osx/share/doc/xz/examples/Makefile
new file mode 100644
index 00000000..f5b98788
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/examples/Makefile
@@ -0,0 +1,21 @@
+# SPDX-License-Identifier: 0BSD
+# Author: Lasse Collin
+
+CC = c99
+CFLAGS = -g
+LDFLAGS = -llzma
+
+PROGS = \
+ 01_compress_easy \
+ 02_decompress \
+ 03_compress_custom \
+ 04_compress_easy_mt \
+ 11_file_info
+
+all: $(PROGS)
+
+.c:
+ $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
+
+clean:
+ -rm -f $(PROGS)
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/faq.txt b/vcpkg_installed/arm64-osx/share/doc/xz/faq.txt
new file mode 100644
index 00000000..3f9068b4
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/faq.txt
@@ -0,0 +1,244 @@
+
+XZ Utils FAQ
+============
+
+Q: What do the letters XZ mean?
+
+A: Nothing. They are just two letters, which come from the file format
+ suffix .xz. The .xz suffix was selected, because it seemed to be
+ pretty much unused. It has no deeper meaning.
+
+
+Q: What are LZMA and LZMA2?
+
+A: LZMA stands for Lempel-Ziv-Markov chain-Algorithm. It is the name
+ of the compression algorithm designed by Igor Pavlov for 7-Zip.
+ LZMA is based on LZ77 and range encoding.
+
+ LZMA2 is an updated version of the original LZMA to fix a couple of
+ practical issues. In context of XZ Utils, LZMA is called LZMA1 to
+ emphasize that LZMA is not the same thing as LZMA2. LZMA2 is the
+ primary compression algorithm in the .xz file format.
+
+
+Q: There are many LZMA related projects. How does XZ Utils relate to them?
+
+A: 7-Zip and LZMA SDK are the original projects. LZMA SDK is roughly
+ a subset of the 7-Zip source tree.
+
+ p7zip is 7-Zip's command-line tools ported to POSIX-like systems.
+
+ LZMA Utils provide a gzip-like lzma tool for POSIX-like systems.
+ LZMA Utils are based on LZMA SDK. XZ Utils are the successor to
+ LZMA Utils.
+
+ There are several other projects using LZMA. Most are more or less
+ based on LZMA SDK. See .
+
+
+Q: Why is liblzma named liblzma if its primary file format is .xz?
+ Shouldn't it be e.g. libxz?
+
+A: When the designing of the .xz format began, the idea was to replace
+ the .lzma format and use the same .lzma suffix. It would have been
+ quite OK to reuse the suffix when there were very few .lzma files
+ around. However, the old .lzma format became popular before the
+ new format was finished. The new format was renamed to .xz but the
+ name of liblzma wasn't changed.
+
+
+Q: Do XZ Utils support the .7z format?
+
+A: No. Use 7-Zip (Windows) or p7zip (POSIX-like systems) to handle .7z
+ files.
+
+
+Q: I have many .tar.7z files. Can I convert them to .tar.xz without
+ spending hours recompressing the data?
+
+A: In the "extra" directory, there is a script named 7z2lzma.bash which
+ is able to convert some .7z files to the .lzma format (not .xz). It
+ needs the 7za (or 7z) command from p7zip. The script may silently
+ produce corrupt output if certain assumptions are not met, so
+ decompress the resulting .lzma file and compare it against the
+ original before deleting the original file!
+
+
+Q: I have many .lzma files. Can I quickly convert them to the .xz format?
+
+A: For now, no. Since XZ Utils supports the .lzma format, it's usually
+ not too bad to keep the old files in the old format. If you want to
+ do the conversion anyway, you need to decompress the .lzma files and
+ then recompress to the .xz format.
+
+ Technically, there is a way to make the conversion relatively fast
+ (roughly twice the time that normal decompression takes). Writing
+ such a tool would take quite a bit of time though, and would probably
+ be useful to only a few people. If you really want such a conversion
+ tool, contact Lasse Collin and offer some money.
+
+
+Q: I have installed xz, but my tar doesn't recognize .tar.xz files.
+ How can I extract .tar.xz files?
+
+A: xz -dc foo.tar.xz | tar xf -
+
+
+Q: Can I recover parts of a broken .xz file (e.g. a corrupted CD-R)?
+
+A: It may be possible if the file consists of multiple blocks, which
+ typically is not the case if the file was created in single-threaded
+ mode. There is no recovery program yet.
+
+
+Q: Is (some part of) XZ Utils patented?
+
+A: Lasse Collin is not aware of any patents that could affect XZ Utils.
+ However, due to the nature of software patents, it's not possible to
+ guarantee that XZ Utils isn't affected by any third party patent(s).
+
+
+Q: Where can I find documentation about the file format and algorithms?
+
+A: The .xz format is documented in xz-file-format.txt. It is a container
+ format only, and doesn't include descriptions of any non-trivial
+ filters.
+
+ Documenting LZMA and LZMA2 is planned, but for now, there is no other
+ documentation than the source code. Before you begin, you should know
+ the basics of LZ77 and range-coding algorithms. LZMA is based on LZ77,
+ but LZMA is a lot more complex. Range coding is used to compress
+ the final bitstream like Huffman coding is used in Deflate.
+
+
+Q: I cannot find BCJ and BCJ2 filters. Don't they exist in liblzma?
+
+A: BCJ filter is called "x86" in liblzma. BCJ2 is not included,
+ because it requires using more than one encoded output stream.
+
+
+Q: I need to use a script that runs "xz -9". On a system with 256 MiB
+ of RAM, xz says that it cannot allocate memory. Can I make the
+ script work without modifying it?
+
+A: Set a default memory usage limit for compression. You can do it e.g.
+ in a shell initialization script such as ~/.bashrc or /etc/profile:
+
+ XZ_DEFAULTS=--memlimit-compress=150MiB
+ export XZ_DEFAULTS
+
+ xz will then scale the compression settings down so that the given
+ memory usage limit is not reached. This way xz shouldn't run out
+ of memory.
+
+ Check also that memory-related resource limits are high enough.
+ On most systems, "ulimit -a" will show the current resource limits.
+
+
+Q: How do I create files that can be decompressed with XZ Embedded?
+
+A: See the documentation in XZ Embedded. In short, something like
+ this is a good start:
+
+ xz --check=crc32 --lzma2=preset=6e,dict=64KiB
+
+ Or if a BCJ filter is needed too, e.g. if compressing
+ a kernel image for PowerPC:
+
+ xz --check=crc32 --powerpc --lzma2=preset=6e,dict=64KiB
+
+ Adjust the dictionary size to get a good compromise between
+ compression ratio and decompressor memory usage. Note that
+ in single-call decompression mode of XZ Embedded, a big
+ dictionary doesn't increase memory usage.
+
+
+Q: How is multi-threaded compression implemented in XZ Utils?
+
+A: The simplest method is splitting the uncompressed data into blocks
+ and compressing them in parallel independent from each other.
+ This is currently the only threading method supported in XZ Utils.
+ Since the blocks are compressed independently, they can also be
+ decompressed independently. Together with the index feature in .xz,
+ this allows using threads to create .xz files for random-access
+ reading. This also makes threaded decompression possible.
+
+ The independent blocks method has a couple of disadvantages too. It
+ will compress worse than a single-block method. Often the difference
+ is not too big (maybe 1-2 %) but sometimes it can be too big. Also,
+ the memory usage of the compressor increases linearly when adding
+ threads.
+
+ At least two other threading methods are possible but these haven't
+ been implemented in XZ Utils:
+
+ Match finder parallelization has been in 7-Zip for ages. It doesn't
+ affect compression ratio or memory usage significantly. Among the
+ three threading methods, only this is useful when compressing small
+ files (files that are not significantly bigger than the dictionary).
+ Unfortunately this method scales only to about two CPU cores.
+
+ The third method is pigz-style threading (I use that name, because
+ pigz uses that method). It doesn't
+ affect compression ratio significantly and scales to many cores.
+ The memory usage scales linearly when threads are added. This isn't
+ significant with pigz, because Deflate uses only a 32 KiB dictionary,
+ but with LZMA2 the memory usage will increase dramatically just like
+ with the independent-blocks method. There is also a constant
+ computational overhead, which may make pigz-method a bit dull on
+ dual-core compared to the parallel match finder method, but with more
+ cores the overhead is not a big deal anymore.
+
+ Combining the threading methods will be possible and also useful.
+ For example, combining match finder parallelization with pigz-style
+ threading or independent-blocks-threading can cut the memory usage
+ by 50 %.
+
+
+Q: I told xz to use many threads but it is using only one or two
+ processor cores. What is wrong?
+
+A: Since multi-threaded compression is done by splitting the data into
+ blocks that are compressed individually, if the input file is too
+ small for the block size, then many threads cannot be used. The
+ default block size increases when the compression level is
+ increased. For example, xz -6 uses 8 MiB LZMA2 dictionary and
+ 24 MiB blocks, and xz -9 uses 64 MiB LZMA dictionary and 192 MiB
+ blocks. If the input file is 100 MiB, xz -6 can use five threads
+ of which one will finish quickly as it has only 4 MiB to compress.
+ However, for the same file, xz -9 can only use one thread.
+
+ One can adjust block size with --block-size=SIZE but making the
+ block size smaller than LZMA2 dictionary is waste of RAM: using
+ xz -9 with 6 MiB blocks isn't any better than using xz -6 with
+ 6 MiB blocks. The default settings use a block size bigger than
+ the LZMA2 dictionary size because this was seen as a reasonable
+ compromise between RAM usage and compression ratio.
+
+ When decompressing, the ability to use threads depends on how the
+ file was created. If it was created in multi-threaded mode then
+ it can be decompressed in multi-threaded mode too if there are
+ multiple blocks in the file.
+
+
+Q: How do I build a program that needs liblzmadec (lzmadec.h)?
+
+A: liblzmadec is part of LZMA Utils. XZ Utils has liblzma, but no
+ liblzmadec. The code using liblzmadec should be ported to use
+ liblzma instead. If you cannot or don't want to do that, download
+ LZMA Utils from .
+
+
+Q: The default build of liblzma is too big. How can I make it smaller?
+
+A: Give --enable-small to the configure script. Use also appropriate
+ --enable or --disable options to include only those filter encoders
+ and decoders and integrity checks that you actually need. Use
+ CFLAGS=-Os (with GCC) or equivalent to tell your compiler to optimize
+ for size. See INSTALL for information about configure options.
+
+ If the result is still too big, take a look at XZ Embedded. It is
+ a separate project, which provides a limited but significantly
+ smaller XZ decoder implementation than XZ Utils. You can find it
+ at .
+
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/history.txt b/vcpkg_installed/arm64-osx/share/doc/xz/history.txt
new file mode 100644
index 00000000..8545e232
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/history.txt
@@ -0,0 +1,150 @@
+
+History of LZMA Utils and XZ Utils
+==================================
+
+Tukaani distribution
+
+ In 2005, there was a small group working on the Tukaani distribution,
+ which was a Slackware fork. One of the project's goals was to fit the
+ distro on a single 700 MiB ISO-9660 image. Using LZMA instead of gzip
+ helped a lot. Roughly speaking, one could fit data that took 1000 MiB
+ in gzipped form into 700 MiB with LZMA. Naturally, the compression
+ ratio varied across packages, but this was what we got on average.
+
+ Slackware packages have traditionally had .tgz as the filename suffix,
+ which is an abbreviation of .tar.gz. A logical naming for LZMA
+ compressed packages was .tlz, being an abbreviation of .tar.lzma.
+
+ At the end of the year 2007, there was no distribution under the
+ Tukaani project anymore, but development of LZMA Utils was kept going.
+ Still, there were .tlz packages around, because at least Vector Linux
+ (a Slackware based distribution) used LZMA for its packages.
+
+ First versions of the modified pkgtools used the LZMA_Alone tool from
+ Igor Pavlov's LZMA SDK as is. It was fine, because users wouldn't need
+ to interact with LZMA_Alone directly. But people soon wanted to use
+ LZMA for other files too, and the interface of LZMA_Alone wasn't
+ comfortable for those used to gzip and bzip2.
+
+
+First steps of LZMA Utils
+
+ The first version of LZMA Utils (4.22.0) included a shell script called
+ lzmash. It was a wrapper that had a gzip-like command-line interface. It
+ used the LZMA_Alone tool from LZMA SDK to do all the real work. zgrep,
+ zdiff, and related scripts from gzip were adapted to work with LZMA and
+ were part of the first LZMA Utils release too.
+
+ LZMA Utils 4.22.0 included also lzmadec, which was a small (less than
+ 10 KiB) decoder-only command-line tool. It was written on top of the
+ decoder-only C code found from the LZMA SDK. lzmadec was convenient in
+ situations where LZMA_Alone (a few hundred KiB) would be too big.
+
+ lzmash and lzmadec were written by Lasse Collin.
+
+
+Second generation
+
+ The lzmash script was an ugly and not very secure hack. The last
+ version of LZMA Utils to use lzmash was 4.27.1.
+
+ LZMA Utils 4.32.0beta1 introduced a new lzma command-line tool written
+ by Ville Koskinen. It was written in C++, and used the encoder and
+ decoder from C++ LZMA SDK with some little modifications. This tool
+ replaced both the lzmash script and the LZMA_Alone command-line tool
+ in LZMA Utils.
+
+ Introducing this new tool caused some temporary incompatibilities,
+ because the LZMA_Alone executable was simply named lzma like the new
+ command-line tool, but they had a completely different command-line
+ interface. The file format was still the same.
+
+ Lasse wrote liblzmadec, which was a small decoder-only library based
+ on the C code found from LZMA SDK. liblzmadec had an API similar to
+ zlib, although there were some significant differences, which made it
+ non-trivial to use it in some applications designed for zlib and
+ libbzip2.
+
+ The lzmadec command-line tool was converted to use liblzmadec.
+
+ Alexandre Sauvé helped converting the build system to use GNU
+ Autotools. This made it easier to test for certain less portable
+ features needed by the new command-line tool.
+
+ Since the new command-line tool never got completely finished (for
+ example, it didn't support the LZMA_OPT environment variable), the
+ intent was to not call 4.32.x stable. Similarly, liblzmadec wasn't
+ polished, but appeared to work well enough, so some people started
+ using it too.
+
+ Because the development of the third generation of LZMA Utils was
+ delayed considerably (3-4 years), the 4.32.x branch had to be kept
+ maintained. It got some bug fixes now and then, and finally it was
+ decided to call it stable, although most of the missing features were
+ never added.
+
+
+File format problems
+
+ The file format used by LZMA_Alone was primitive. It was designed with
+ embedded systems in mind, and thus provided only a minimal set of
+ features. The two biggest problems for non-embedded use were the lack
+ of magic bytes and an integrity check.
+
+ Igor and Lasse started developing a new file format with some help
+ from Ville Koskinen. Also Mark Adler, Mikko Pouru, H. Peter Anvin,
+ and Lars Wirzenius helped with some minor things at some point of the
+ development. Designing the new format took quite a long time (actually,
+ too long a time would be a more appropriate expression). It was mostly
+ because Lasse was quite slow at getting things done due to personal
+ reasons.
+
+ Originally the new format was supposed to use the same .lzma suffix
+ that was already used by the old file format. Switching to the new
+ format wouldn't have caused much trouble when the old format wasn't
+ used by many people. But since the development of the new format took
+ such a long time, the old format got quite popular, and it was decided
+ that the new file format must use a different suffix.
+
+ It was decided to use .xz as the suffix of the new file format. The
+ first stable .xz file format specification was finally released in
+ December 2008. In addition to fixing the most obvious problems of
+ the old .lzma format, the .xz format added some new features like
+ support for multiple filters (compression algorithms), filter chaining
+ (like piping on the command line), and limited random-access reading.
+
+ Currently the primary compression algorithm used in .xz is LZMA2.
+ It is an extension on top of the original LZMA to fix some practical
+ problems: LZMA2 adds support for flushing the encoder, uncompressed
+ chunks, eases stateful decoder implementations, and improves support
+ for multithreading. Since LZMA2 is better than the original LZMA, the
+ original LZMA is not supported in .xz.
+
+
+Transition to XZ Utils
+
+ The early versions of XZ Utils were called LZMA Utils. The first
+ releases were 4.42.0alphas. They dropped the rest of the C++ LZMA SDK.
+ The code was still directly based on LZMA SDK but ported to C and
+ converted from a callback API to a stateful API. Later, Igor Pavlov
+ made a C version of the LZMA encoder too; these ports from C++ to C
+ were independent in LZMA SDK and LZMA Utils.
+
+ The core of the new LZMA Utils was liblzma, a compression library with
+ a zlib-like API. liblzma supported both the old and new file format.
+ The gzip-like lzma command-line tool was rewritten to use liblzma.
+
+ The new LZMA Utils code base was renamed to XZ Utils when the name
+ of the new file format had been decided. The liblzma compression
+ library retained its name though, because changing it would have
+ caused unnecessary breakage in applications already using the early
+ liblzma snapshots.
+
+ The xz command-line tool can emulate the gzip-like lzma tool by
+ creating appropriate symlinks (e.g. lzma -> xz). Thus, practically
+ all scripts using the lzma tool from LZMA Utils will work as is with
+ XZ Utils (and will keep using the old .lzma format). Still, the .lzma
+ format is more or less deprecated. XZ Utils will keep supporting it,
+ but new applications should use the .xz format, and migrating old
+ applications to .xz is often a good idea too.
+
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/lzma-file-format.txt b/vcpkg_installed/arm64-osx/share/doc/xz/lzma-file-format.txt
new file mode 100644
index 00000000..8cce5dcc
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/lzma-file-format.txt
@@ -0,0 +1,173 @@
+
+The .lzma File Format
+=====================
+
+ 0. Preface
+ 0.1. Notices and Acknowledgements
+ 0.2. Changes
+ 1. File Format
+ 1.1. Header
+ 1.1.1. Properties
+ 1.1.2. Dictionary Size
+ 1.1.3. Uncompressed Size
+ 1.2. LZMA Compressed Data
+ 2. References
+
+
+0. Preface
+
+ This document describes the .lzma file format, which is
+ sometimes also called LZMA_Alone format. It is a legacy file
+ format, which is being or has been replaced by the .xz format.
+ The MIME type of the .lzma format is `application/x-lzma'.
+
+ The most commonly used software to handle .lzma files are
+ LZMA SDK, LZMA Utils, 7-Zip, and XZ Utils. This document
+ describes some of the differences between these implementations
+ and gives hints what subset of the .lzma format is the most
+ portable.
+
+
+0.1. Notices and Acknowledgements
+
+ This file format was designed by Igor Pavlov for use in
+ LZMA SDK. This document was written by Lasse Collin
+ using the documentation found
+ from the LZMA SDK.
+
+ This document has been put into the public domain.
+
+
+0.2. Changes
+
+ Last modified: 2024-04-08 17:35+0300
+
+ From version 2011-04-12 11:55+0300 to 2022-07-13 21:00+0300:
+ The section 1.1.3 was modified to allow End of Payload Marker
+ with a known Uncompressed Size.
+
+
+1. File Format
+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+==========================+
+ | Header | LZMA Compressed Data |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+==========================+
+
+ The .lzma format file consist of 13-byte Header followed by
+ the LZMA Compressed Data.
+
+ Unlike the .gz, .bz2, and .xz formats, it is not possible to
+ concatenate multiple .lzma files as is and expect the
+ decompression tool to decode the resulting file as if it were
+ a single .lzma file.
+
+ For example, the command line tools from LZMA Utils and
+ LZMA SDK silently ignore all the data after the first .lzma
+ stream. In contrast, the command line tool from XZ Utils
+ considers the .lzma file to be corrupt if there is data after
+ the first .lzma stream.
+
+
+1.1. Header
+
+ +------------+----+----+----+----+--+--+--+--+--+--+--+--+
+ | Properties | Dictionary Size | Uncompressed Size |
+ +------------+----+----+----+----+--+--+--+--+--+--+--+--+
+
+
+1.1.1. Properties
+
+ The Properties field contains three properties. An abbreviation
+ is given in parentheses, followed by the value range of the
+ property. The field consists of
+
+ 1) the number of literal context bits (lc, [0, 8]);
+ 2) the number of literal position bits (lp, [0, 4]); and
+ 3) the number of position bits (pb, [0, 4]).
+
+ The properties are encoded using the following formula:
+
+ Properties = (pb * 5 + lp) * 9 + lc
+
+ The following C code illustrates a straightforward way to
+ decode the Properties field:
+
+ uint8_t lc, lp, pb;
+ uint8_t prop = get_lzma_properties();
+ if (prop > (4 * 5 + 4) * 9 + 8)
+ return LZMA_PROPERTIES_ERROR;
+
+ pb = prop / (9 * 5);
+ prop -= pb * 9 * 5;
+ lp = prop / 9;
+ lc = prop - lp * 9;
+
+ XZ Utils has an additional requirement: lc + lp <= 4. Files
+ which don't follow this requirement cannot be decompressed
+ with XZ Utils. Usually this isn't a problem since the most
+ common lc/lp/pb values are 3/0/2. It is the only lc/lp/pb
+ combination that the files created by LZMA Utils can have,
+ but LZMA Utils can decompress files with any lc/lp/pb.
+
+
+1.1.2. Dictionary Size
+
+ Dictionary Size is stored as an unsigned 32-bit little endian
+ integer. Any 32-bit value is possible, but for maximum
+ portability, only sizes of 2^n and 2^n + 2^(n-1) should be
+ used.
+
+ LZMA Utils creates only files with dictionary size 2^n,
+ 16 <= n <= 25. LZMA Utils can decompress files with any
+ dictionary size.
+
+ XZ Utils creates and decompresses .lzma files only with
+ dictionary sizes 2^n and 2^n + 2^(n-1). If some other
+ dictionary size is specified when compressing, the value
+ stored in the Dictionary Size field is a rounded up, but the
+ specified value is still used in the actual compression code.
+
+
+1.1.3. Uncompressed Size
+
+ Uncompressed Size is stored as unsigned 64-bit little endian
+ integer. A special value of 0xFFFF_FFFF_FFFF_FFFF indicates
+ that Uncompressed Size is unknown. End of Payload Marker (*)
+ is used if Uncompressed Size is unknown. End of Payload Marker
+ is allowed but rarely used if Uncompressed Size is known.
+ XZ Utils 5.2.5 and older don't support .lzma files that have
+ End of Payload Marker together with a known Uncompressed Size.
+
+ XZ Utils rejects files whose Uncompressed Size field specifies
+ a known size that is 256 GiB or more. This is to reject false
+ positives when trying to guess if the input file is in the
+ .lzma format. When Uncompressed Size is unknown, there is no
+ limit for the uncompressed size of the file.
+
+ (*) Some tools use the term End of Stream (EOS) marker
+ instead of End of Payload Marker.
+
+
+1.2. LZMA Compressed Data
+
+ Detailed description of the format of this field is out of
+ scope of this document.
+
+
+2. References
+
+ LZMA SDK - The original LZMA implementation
+ https://7-zip.org/sdk.html
+
+ 7-Zip
+ https://7-zip.org/
+
+ LZMA Utils - LZMA adapted to POSIX-like systems
+ https://tukaani.org/lzma/
+
+ XZ Utils - The next generation of LZMA Utils
+ https://tukaani.org/xz/
+
+ The .xz file format - The successor of the .lzma format
+ https://tukaani.org/xz/xz-file-format.txt
+
diff --git a/vcpkg_installed/arm64-osx/share/doc/xz/xz-file-format.txt b/vcpkg_installed/arm64-osx/share/doc/xz/xz-file-format.txt
new file mode 100644
index 00000000..12d2530c
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/doc/xz/xz-file-format.txt
@@ -0,0 +1,1174 @@
+
+The .xz File Format
+===================
+
+Version 1.2.1 (2024-04-08)
+
+
+ 0. Preface
+ 0.1. Notices and Acknowledgements
+ 0.2. Getting the Latest Version
+ 0.3. Version History
+ 1. Conventions
+ 1.1. Byte and Its Representation
+ 1.2. Multibyte Integers
+ 2. Overall Structure of .xz File
+ 2.1. Stream
+ 2.1.1. Stream Header
+ 2.1.1.1. Header Magic Bytes
+ 2.1.1.2. Stream Flags
+ 2.1.1.3. CRC32
+ 2.1.2. Stream Footer
+ 2.1.2.1. CRC32
+ 2.1.2.2. Backward Size
+ 2.1.2.3. Stream Flags
+ 2.1.2.4. Footer Magic Bytes
+ 2.2. Stream Padding
+ 3. Block
+ 3.1. Block Header
+ 3.1.1. Block Header Size
+ 3.1.2. Block Flags
+ 3.1.3. Compressed Size
+ 3.1.4. Uncompressed Size
+ 3.1.5. List of Filter Flags
+ 3.1.6. Header Padding
+ 3.1.7. CRC32
+ 3.2. Compressed Data
+ 3.3. Block Padding
+ 3.4. Check
+ 4. Index
+ 4.1. Index Indicator
+ 4.2. Number of Records
+ 4.3. List of Records
+ 4.3.1. Unpadded Size
+ 4.3.2. Uncompressed Size
+ 4.4. Index Padding
+ 4.5. CRC32
+ 5. Filter Chains
+ 5.1. Alignment
+ 5.2. Security
+ 5.3. Filters
+ 5.3.1. LZMA2
+ 5.3.2. Branch/Call/Jump Filters for Executables
+ 5.3.3. Delta
+ 5.3.3.1. Format of the Encoded Output
+ 5.4. Custom Filter IDs
+ 5.4.1. Reserved Custom Filter ID Ranges
+ 6. Cyclic Redundancy Checks
+ 7. References
+
+
+0. Preface
+
+ This document describes the .xz file format (filename suffix
+ ".xz", MIME type "application/x-xz"). It is intended that this
+ this format replace the old .lzma format used by LZMA SDK and
+ LZMA Utils.
+
+
+0.1. Notices and Acknowledgements
+
+ This file format was designed by Lasse Collin
+ and Igor Pavlov.
+
+ Special thanks for helping with this document goes to
+ Ville Koskinen. Thanks for helping with this document goes to
+ Mark Adler, H. Peter Anvin, Mikko Pouru, and Lars Wirzenius.
+
+ This document has been put into the public domain.
+
+
+0.2. Getting the Latest Version
+
+ The latest official version of this document can be downloaded
+ from .
+
+ Specific versions of this document have a filename
+ xz-file-format-X.Y.Z.txt where X.Y.Z is the version number.
+ For example, the version 1.0.0 of this document is available
+ at .
+
+
+0.3. Version History
+
+ Version Date Description
+
+ 1.2.1 2024-04-08 The URLs of this specification and
+ XZ Utils were changed back to the
+ original ones in Sections 0.2 and 7.
+
+ 1.2.0 2024-01-19 Added RISC-V filter and updated URLs in
+ Sections 0.2 and 7. The URL of this
+ specification was changed.
+
+ 1.1.0 2022-12-11 Added ARM64 filter and clarified 32-bit
+ ARM endianness in Section 5.3.2,
+ language improvements in Section 5.4
+
+ 1.0.4 2009-08-27 Language improvements in Sections 1.2,
+ 2.1.1.2, 3.1.1, 3.1.2, and 5.3.1
+
+ 1.0.3 2009-06-05 Spelling fixes in Sections 5.1 and 5.4
+
+ 1.0.2 2009-06-04 Typo fixes in Sections 4 and 5.3.1
+
+ 1.0.1 2009-06-01 Typo fix in Section 0.3 and minor
+ clarifications to Sections 2, 2.2,
+ 3.3, 4.4, and 5.3.2
+
+ 1.0.0 2009-01-14 The first official version
+
+
+1. Conventions
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHOULD",
+ "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in [RFC-2119].
+
+ Indicating a warning means displaying a message, returning
+ appropriate exit status, or doing something else to let the
+ user know that something worth warning occurred. The operation
+ SHOULD still finish if a warning is indicated.
+
+ Indicating an error means displaying a message, returning
+ appropriate exit status, or doing something else to let the
+ user know that something prevented successfully finishing the
+ operation. The operation MUST be aborted once an error has
+ been indicated.
+
+
+1.1. Byte and Its Representation
+
+ In this document, byte is always 8 bits.
+
+ A "null byte" has all bits unset. That is, the value of a null
+ byte is 0x00.
+
+ To represent byte blocks, this document uses notation that
+ is similar to the notation used in [RFC-1952]:
+
+ +-------+
+ | Foo | One byte.
+ +-------+
+
+ +---+---+
+ | Foo | Two bytes; that is, some of the vertical bars
+ +---+---+ can be missing.
+
+ +=======+
+ | Foo | Zero or more bytes.
+ +=======+
+
+ In this document, a boxed byte or a byte sequence declared
+ using this notation is called "a field". The example field
+ above would be called "the Foo field" or plain "Foo".
+
+ If there are many fields, they may be split to multiple lines.
+ This is indicated with an arrow ("--->"):
+
+ +=====+
+ | Foo |
+ +=====+
+
+ +=====+
+ ---> | Bar |
+ +=====+
+
+ The above is equivalent to this:
+
+ +=====+=====+
+ | Foo | Bar |
+ +=====+=====+
+
+
+1.2. Multibyte Integers
+
+ Multibyte integers of static length, such as CRC values,
+ are stored in little endian byte order (least significant
+ byte first).
+
+ When smaller values are more likely than bigger values (for
+ example file sizes), multibyte integers are encoded in a
+ variable-length representation:
+ - Numbers in the range [0, 127] are copied as is, and take
+ one byte of space.
+ - Bigger numbers will occupy two or more bytes. All but the
+ last byte of the multibyte representation have the highest
+ (eighth) bit set.
+
+ For now, the value of the variable-length integers is limited
+ to 63 bits, which limits the encoded size of the integer to
+ nine bytes. These limits may be increased in the future if
+ needed.
+
+ The following C code illustrates encoding and decoding of
+ variable-length integers. The functions return the number of
+ bytes occupied by the integer (1-9), or zero on error.
+
+ #include
+ #include
+
+ size_t
+ encode(uint8_t buf[static 9], uint64_t num)
+ {
+ if (num > UINT64_MAX / 2)
+ return 0;
+
+ size_t i = 0;
+
+ while (num >= 0x80) {
+ buf[i++] = (uint8_t)(num) | 0x80;
+ num >>= 7;
+ }
+
+ buf[i++] = (uint8_t)(num);
+
+ return i;
+ }
+
+ size_t
+ decode(const uint8_t buf[], size_t size_max, uint64_t *num)
+ {
+ if (size_max == 0)
+ return 0;
+
+ if (size_max > 9)
+ size_max = 9;
+
+ *num = buf[0] & 0x7F;
+ size_t i = 0;
+
+ while (buf[i++] & 0x80) {
+ if (i >= size_max || buf[i] == 0x00)
+ return 0;
+
+ *num |= (uint64_t)(buf[i] & 0x7F) << (i * 7);
+ }
+
+ return i;
+ }
+
+
+2. Overall Structure of .xz File
+
+ A standalone .xz files consist of one or more Streams which may
+ have Stream Padding between or after them:
+
+ +========+================+========+================+
+ | Stream | Stream Padding | Stream | Stream Padding | ...
+ +========+================+========+================+
+
+ The sizes of Stream and Stream Padding are always multiples
+ of four bytes, thus the size of every valid .xz file MUST be
+ a multiple of four bytes.
+
+ While a typical file contains only one Stream and no Stream
+ Padding, a decoder handling standalone .xz files SHOULD support
+ files that have more than one Stream or Stream Padding.
+
+ In contrast to standalone .xz files, when the .xz file format
+ is used as an internal part of some other file format or
+ communication protocol, it usually is expected that the decoder
+ stops after the first Stream, and doesn't look for Stream
+ Padding or possibly other Streams.
+
+
+2.1. Stream
+
+ +-+-+-+-+-+-+-+-+-+-+-+-+=======+=======+ +=======+
+ | Stream Header | Block | Block | ... | Block |
+ +-+-+-+-+-+-+-+-+-+-+-+-+=======+=======+ +=======+
+
+ +=======+-+-+-+-+-+-+-+-+-+-+-+-+
+ ---> | Index | Stream Footer |
+ +=======+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ All the above fields have a size that is a multiple of four. If
+ Stream is used as an internal part of another file format, it
+ is RECOMMENDED to make the Stream start at an offset that is
+ a multiple of four bytes.
+
+ Stream Header, Index, and Stream Footer are always present in
+ a Stream. The maximum size of the Index field is 16 GiB (2^34).
+
+ There are zero or more Blocks. The maximum number of Blocks is
+ limited only by the maximum size of the Index field.
+
+ Total size of a Stream MUST be less than 8 EiB (2^63 bytes).
+ The same limit applies to the total amount of uncompressed
+ data stored in a Stream.
+
+ If an implementation supports handling .xz files with multiple
+ concatenated Streams, it MAY apply the above limits to the file
+ as a whole instead of limiting per Stream basis.
+
+
+2.1.1. Stream Header
+
+ +---+---+---+---+---+---+-------+------+--+--+--+--+
+ | Header Magic Bytes | Stream Flags | CRC32 |
+ +---+---+---+---+---+---+-------+------+--+--+--+--+
+
+
+2.1.1.1. Header Magic Bytes
+
+ The first six (6) bytes of the Stream are so called Header
+ Magic Bytes. They can be used to identify the file type.
+
+ Using a C array and ASCII:
+ const uint8_t HEADER_MAGIC[6]
+ = { 0xFD, '7', 'z', 'X', 'Z', 0x00 };
+
+ In plain hexadecimal:
+ FD 37 7A 58 5A 00
+
+ Notes:
+ - The first byte (0xFD) was chosen so that the files cannot
+ be erroneously detected as being in .lzma format, in which
+ the first byte is in the range [0x00, 0xE0].
+ - The sixth byte (0x00) was chosen to prevent applications
+ from misdetecting the file as a text file.
+
+ If the Header Magic Bytes don't match, the decoder MUST
+ indicate an error.
+
+
+2.1.1.2. Stream Flags
+
+ The first byte of Stream Flags is always a null byte. In the
+ future, this byte may be used to indicate a new Stream version
+ or other Stream properties.
+
+ The second byte of Stream Flags is a bit field:
+
+ Bit(s) Mask Description
+ 0-3 0x0F Type of Check (see Section 3.4):
+ ID Size Check name
+ 0x00 0 bytes None
+ 0x01 4 bytes CRC32
+ 0x02 4 bytes (Reserved)
+ 0x03 4 bytes (Reserved)
+ 0x04 8 bytes CRC64
+ 0x05 8 bytes (Reserved)
+ 0x06 8 bytes (Reserved)
+ 0x07 16 bytes (Reserved)
+ 0x08 16 bytes (Reserved)
+ 0x09 16 bytes (Reserved)
+ 0x0A 32 bytes SHA-256
+ 0x0B 32 bytes (Reserved)
+ 0x0C 32 bytes (Reserved)
+ 0x0D 64 bytes (Reserved)
+ 0x0E 64 bytes (Reserved)
+ 0x0F 64 bytes (Reserved)
+ 4-7 0xF0 Reserved for future use; MUST be zero for now.
+
+ Implementations SHOULD support at least the Check IDs 0x00
+ (None) and 0x01 (CRC32). Supporting other Check IDs is
+ OPTIONAL. If an unsupported Check is used, the decoder SHOULD
+ indicate a warning or error.
+
+ If any reserved bit is set, the decoder MUST indicate an error.
+ It is possible that there is a new field present which the
+ decoder is not aware of, and can thus parse the Stream Header
+ incorrectly.
+
+
+2.1.1.3. CRC32
+
+ The CRC32 is calculated from the Stream Flags field. It is
+ stored as an unsigned 32-bit little endian integer. If the
+ calculated value does not match the stored one, the decoder
+ MUST indicate an error.
+
+ The idea is that Stream Flags would always be two bytes, even
+ if new features are needed. This way old decoders will be able
+ to verify the CRC32 calculated from Stream Flags, and thus
+ distinguish between corrupt files (CRC32 doesn't match) and
+ files that the decoder doesn't support (CRC32 matches but
+ Stream Flags has reserved bits set).
+
+
+2.1.2. Stream Footer
+
+ +-+-+-+-+---+---+---+---+-------+------+----------+---------+
+ | CRC32 | Backward Size | Stream Flags | Footer Magic Bytes |
+ +-+-+-+-+---+---+---+---+-------+------+----------+---------+
+
+
+2.1.2.1. CRC32
+
+ The CRC32 is calculated from the Backward Size and Stream Flags
+ fields. It is stored as an unsigned 32-bit little endian
+ integer. If the calculated value does not match the stored one,
+ the decoder MUST indicate an error.
+
+ The reason to have the CRC32 field before the Backward Size and
+ Stream Flags fields is to keep the four-byte fields aligned to
+ a multiple of four bytes.
+
+
+2.1.2.2. Backward Size
+
+ Backward Size is stored as a 32-bit little endian integer,
+ which indicates the size of the Index field as multiple of
+ four bytes, minimum value being four bytes:
+
+ real_backward_size = (stored_backward_size + 1) * 4;
+
+ If the stored value does not match the real size of the Index
+ field, the decoder MUST indicate an error.
+
+ Using a fixed-size integer to store Backward Size makes
+ it slightly simpler to parse the Stream Footer when the
+ application needs to parse the Stream backwards.
+
+
+2.1.2.3. Stream Flags
+
+ This is a copy of the Stream Flags field from the Stream
+ Header. The information stored to Stream Flags is needed
+ when parsing the Stream backwards. The decoder MUST compare
+ the Stream Flags fields in both Stream Header and Stream
+ Footer, and indicate an error if they are not identical.
+
+
+2.1.2.4. Footer Magic Bytes
+
+ As the last step of the decoding process, the decoder MUST
+ verify the existence of Footer Magic Bytes. If they don't
+ match, an error MUST be indicated.
+
+ Using a C array and ASCII:
+ const uint8_t FOOTER_MAGIC[2] = { 'Y', 'Z' };
+
+ In hexadecimal:
+ 59 5A
+
+ The primary reason to have Footer Magic Bytes is to make
+ it easier to detect incomplete files quickly, without
+ uncompressing. If the file does not end with Footer Magic Bytes
+ (excluding Stream Padding described in Section 2.2), it cannot
+ be undamaged, unless someone has intentionally appended garbage
+ after the end of the Stream.
+
+
+2.2. Stream Padding
+
+ Only the decoders that support decoding of concatenated Streams
+ MUST support Stream Padding.
+
+ Stream Padding MUST contain only null bytes. To preserve the
+ four-byte alignment of consecutive Streams, the size of Stream
+ Padding MUST be a multiple of four bytes. Empty Stream Padding
+ is allowed. If these requirements are not met, the decoder MUST
+ indicate an error.
+
+ Note that non-empty Stream Padding is allowed at the end of the
+ file; there doesn't need to be a new Stream after non-empty
+ Stream Padding. This can be convenient in certain situations
+ [GNU-tar].
+
+ The possibility of Stream Padding MUST be taken into account
+ when designing an application that parses Streams backwards,
+ and the application supports concatenated Streams.
+
+
+3. Block
+
+ +==============+=================+===============+=======+
+ | Block Header | Compressed Data | Block Padding | Check |
+ +==============+=================+===============+=======+
+
+
+3.1. Block Header
+
+ +-------------------+-------------+=================+
+ | Block Header Size | Block Flags | Compressed Size |
+ +-------------------+-------------+=================+
+
+ +===================+======================+
+ ---> | Uncompressed Size | List of Filter Flags |
+ +===================+======================+
+
+ +================+--+--+--+--+
+ ---> | Header Padding | CRC32 |
+ +================+--+--+--+--+
+
+
+3.1.1. Block Header Size
+
+ This field overlaps with the Index Indicator field (see
+ Section 4.1).
+
+ This field contains the size of the Block Header field,
+ including the Block Header Size field itself. Valid values are
+ in the range [0x01, 0xFF], which indicate the size of the Block
+ Header as multiples of four bytes, minimum size being eight
+ bytes:
+
+ real_header_size = (encoded_header_size + 1) * 4;
+
+ If a Block Header bigger than 1024 bytes is needed in the
+ future, a new field can be added between the Block Header and
+ Compressed Data fields. The presence of this new field would
+ be indicated in the Block Header field.
+
+
+3.1.2. Block Flags
+
+ The Block Flags field is a bit field:
+
+ Bit(s) Mask Description
+ 0-1 0x03 Number of filters (1-4)
+ 2-5 0x3C Reserved for future use; MUST be zero for now.
+ 6 0x40 The Compressed Size field is present.
+ 7 0x80 The Uncompressed Size field is present.
+
+ If any reserved bit is set, the decoder MUST indicate an error.
+ It is possible that there is a new field present which the
+ decoder is not aware of, and can thus parse the Block Header
+ incorrectly.
+
+
+3.1.3. Compressed Size
+
+ This field is present only if the appropriate bit is set in
+ the Block Flags field (see Section 3.1.2).
+
+ The Compressed Size field contains the size of the Compressed
+ Data field, which MUST be non-zero. Compressed Size is stored
+ using the encoding described in Section 1.2. If the Compressed
+ Size doesn't match the size of the Compressed Data field, the
+ decoder MUST indicate an error.
+
+
+3.1.4. Uncompressed Size
+
+ This field is present only if the appropriate bit is set in
+ the Block Flags field (see Section 3.1.2).
+
+ The Uncompressed Size field contains the size of the Block
+ after uncompressing. Uncompressed Size is stored using the
+ encoding described in Section 1.2. If the Uncompressed Size
+ does not match the real uncompressed size, the decoder MUST
+ indicate an error.
+
+ Storing the Compressed Size and Uncompressed Size fields serves
+ several purposes:
+ - The decoder knows how much memory it needs to allocate
+ for a temporary buffer in multithreaded mode.
+ - Simple error detection: wrong size indicates a broken file.
+ - Seeking forwards to a specific location in streamed mode.
+
+ It should be noted that the only reliable way to determine
+ the real uncompressed size is to uncompress the Block,
+ because the Block Header and Index fields may contain
+ (intentionally or unintentionally) invalid information.
+
+
+3.1.5. List of Filter Flags
+
+ +================+================+ +================+
+ | Filter 0 Flags | Filter 1 Flags | ... | Filter n Flags |
+ +================+================+ +================+
+
+ The number of Filter Flags fields is stored in the Block Flags
+ field (see Section 3.1.2).
+
+ The format of each Filter Flags field is as follows:
+
+ +===========+====================+===================+
+ | Filter ID | Size of Properties | Filter Properties |
+ +===========+====================+===================+
+
+ Both Filter ID and Size of Properties are stored using the
+ encoding described in Section 1.2. Size of Properties indicates
+ the size of the Filter Properties field as bytes. The list of
+ officially defined Filter IDs and the formats of their Filter
+ Properties are described in Section 5.3.
+
+ Filter IDs greater than or equal to 0x4000_0000_0000_0000
+ (2^62) are reserved for implementation-specific internal use.
+ These Filter IDs MUST never be used in List of Filter Flags.
+
+
+3.1.6. Header Padding
+
+ This field contains as many null byte as it is needed to make
+ the Block Header have the size specified in Block Header Size.
+ If any of the bytes are not null bytes, the decoder MUST
+ indicate an error. It is possible that there is a new field
+ present which the decoder is not aware of, and can thus parse
+ the Block Header incorrectly.
+
+
+3.1.7. CRC32
+
+ The CRC32 is calculated over everything in the Block Header
+ field except the CRC32 field itself. It is stored as an
+ unsigned 32-bit little endian integer. If the calculated
+ value does not match the stored one, the decoder MUST indicate
+ an error.
+
+ By verifying the CRC32 of the Block Header before parsing the
+ actual contents allows the decoder to distinguish between
+ corrupt and unsupported files.
+
+
+3.2. Compressed Data
+
+ The format of Compressed Data depends on Block Flags and List
+ of Filter Flags. Excluding the descriptions of the simplest
+ filters in Section 5.3, the format of the filter-specific
+ encoded data is out of scope of this document.
+
+
+3.3. Block Padding
+
+ Block Padding MUST contain 0-3 null bytes to make the size of
+ the Block a multiple of four bytes. This can be needed when
+ the size of Compressed Data is not a multiple of four. If any
+ of the bytes in Block Padding are not null bytes, the decoder
+ MUST indicate an error.
+
+
+3.4. Check
+
+ The type and size of the Check field depends on which bits
+ are set in the Stream Flags field (see Section 2.1.1.2).
+
+ The Check, when used, is calculated from the original
+ uncompressed data. If the calculated Check does not match the
+ stored one, the decoder MUST indicate an error. If the selected
+ type of Check is not supported by the decoder, it SHOULD
+ indicate a warning or error.
+
+
+4. Index
+
+ +-----------------+===================+
+ | Index Indicator | Number of Records |
+ +-----------------+===================+
+
+ +=================+===============+-+-+-+-+
+ ---> | List of Records | Index Padding | CRC32 |
+ +=================+===============+-+-+-+-+
+
+ Index serves several purposes. Using it, one can
+ - verify that all Blocks in a Stream have been processed;
+ - find out the uncompressed size of a Stream; and
+ - quickly access the beginning of any Block (random access).
+
+
+4.1. Index Indicator
+
+ This field overlaps with the Block Header Size field (see
+ Section 3.1.1). The value of Index Indicator is always 0x00.
+
+
+4.2. Number of Records
+
+ This field indicates how many Records there are in the List
+ of Records field, and thus how many Blocks there are in the
+ Stream. The value is stored using the encoding described in
+ Section 1.2. If the decoder has decoded all the Blocks of the
+ Stream, and then notices that the Number of Records doesn't
+ match the real number of Blocks, the decoder MUST indicate an
+ error.
+
+
+4.3. List of Records
+
+ List of Records consists of as many Records as indicated by the
+ Number of Records field:
+
+ +========+========+
+ | Record | Record | ...
+ +========+========+
+
+ Each Record contains information about one Block:
+
+ +===============+===================+
+ | Unpadded Size | Uncompressed Size |
+ +===============+===================+
+
+ If the decoder has decoded all the Blocks of the Stream, it
+ MUST verify that the contents of the Records match the real
+ Unpadded Size and Uncompressed Size of the respective Blocks.
+
+ Implementation hint: It is possible to verify the Index with
+ constant memory usage by calculating for example SHA-256 of
+ both the real size values and the List of Records, then
+ comparing the hash values. Implementing this using
+ non-cryptographic hash like CRC32 SHOULD be avoided unless
+ small code size is important.
+
+ If the decoder supports random-access reading, it MUST verify
+ that Unpadded Size and Uncompressed Size of every completely
+ decoded Block match the sizes stored in the Index. If only
+ partial Block is decoded, the decoder MUST verify that the
+ processed sizes don't exceed the sizes stored in the Index.
+
+
+4.3.1. Unpadded Size
+
+ This field indicates the size of the Block excluding the Block
+ Padding field. That is, Unpadded Size is the size of the Block
+ Header, Compressed Data, and Check fields. Unpadded Size is
+ stored using the encoding described in Section 1.2. The value
+ MUST never be zero; with the current structure of Blocks, the
+ actual minimum value for Unpadded Size is five.
+
+ Implementation note: Because the size of the Block Padding
+ field is not included in Unpadded Size, calculating the total
+ size of a Stream or doing random-access reading requires
+ calculating the actual size of the Blocks by rounding Unpadded
+ Sizes up to the next multiple of four.
+
+ The reason to exclude Block Padding from Unpadded Size is to
+ ease making a raw copy of Compressed Data without Block
+ Padding. This can be useful, for example, if someone wants
+ to convert Streams to some other file format quickly.
+
+
+4.3.2. Uncompressed Size
+
+ This field indicates the Uncompressed Size of the respective
+ Block as bytes. The value is stored using the encoding
+ described in Section 1.2.
+
+
+4.4. Index Padding
+
+ This field MUST contain 0-3 null bytes to pad the Index to
+ a multiple of four bytes. If any of the bytes are not null
+ bytes, the decoder MUST indicate an error.
+
+
+4.5. CRC32
+
+ The CRC32 is calculated over everything in the Index field
+ except the CRC32 field itself. The CRC32 is stored as an
+ unsigned 32-bit little endian integer. If the calculated
+ value does not match the stored one, the decoder MUST indicate
+ an error.
+
+
+5. Filter Chains
+
+ The Block Flags field defines how many filters are used. When
+ more than one filter is used, the filters are chained; that is,
+ the output of one filter is the input of another filter. The
+ following figure illustrates the direction of data flow.
+
+ v Uncompressed Data ^
+ | Filter 0 |
+ Encoder | Filter 1 | Decoder
+ | Filter n |
+ v Compressed Data ^
+
+
+5.1. Alignment
+
+ Alignment of uncompressed input data is usually the job of
+ the application producing the data. For example, to get the
+ best results, an archiver tool should make sure that all
+ PowerPC executable files in the archive stream start at
+ offsets that are multiples of four bytes.
+
+ Some filters, for example LZMA2, can be configured to take
+ advantage of specified alignment of input data. Note that
+ taking advantage of aligned input can be beneficial also when
+ a filter is not the first filter in the chain. For example,
+ if you compress PowerPC executables, you may want to use the
+ PowerPC filter and chain that with the LZMA2 filter. Because
+ not only the input but also the output alignment of the PowerPC
+ filter is four bytes, it is now beneficial to set LZMA2
+ settings so that the LZMA2 encoder can take advantage of its
+ four-byte-aligned input data.
+
+ The output of the last filter in the chain is stored to the
+ Compressed Data field, which is is guaranteed to be aligned
+ to a multiple of four bytes relative to the beginning of the
+ Stream. This can increase
+ - speed, if the filtered data is handled multiple bytes at
+ a time by the filter-specific encoder and decoder,
+ because accessing aligned data in computer memory is
+ usually faster; and
+ - compression ratio, if the output data is later compressed
+ with an external compression tool.
+
+
+5.2. Security
+
+ If filters would be allowed to be chained freely, it would be
+ possible to create malicious files, that would be very slow to
+ decode. Such files could be used to create denial of service
+ attacks.
+
+ Slow files could occur when multiple filters are chained:
+
+ v Compressed input data
+ | Filter 1 decoder (last filter)
+ | Filter 0 decoder (non-last filter)
+ v Uncompressed output data
+
+ The decoder of the last filter in the chain produces a lot of
+ output from little input. Another filter in the chain takes the
+ output of the last filter, and produces very little output
+ while consuming a lot of input. As a result, a lot of data is
+ moved inside the filter chain, but the filter chain as a whole
+ gets very little work done.
+
+ To prevent this kind of slow files, there are restrictions on
+ how the filters can be chained. These restrictions MUST be
+ taken into account when designing new filters.
+
+ The maximum number of filters in the chain has been limited to
+ four, thus there can be at maximum of three non-last filters.
+ Of these three non-last filters, only two are allowed to change
+ the size of the data.
+
+ The non-last filters, that change the size of the data, MUST
+ have a limit how much the decoder can compress the data: the
+ decoder SHOULD produce at least n bytes of output when the
+ filter is given 2n bytes of input. This limit is not
+ absolute, but significant deviations MUST be avoided.
+
+ The above limitations guarantee that if the last filter in the
+ chain produces 4n bytes of output, the chain as a whole will
+ produce at least n bytes of output.
+
+
+5.3. Filters
+
+5.3.1. LZMA2
+
+ LZMA (Lempel-Ziv-Markov chain-Algorithm) is a general-purpose
+ compression algorithm with high compression ratio and fast
+ decompression. LZMA is based on LZ77 and range coding
+ algorithms.
+
+ LZMA2 is an extension on top of the original LZMA. LZMA2 uses
+ LZMA internally, but adds support for flushing the encoder,
+ uncompressed chunks, eases stateful decoder implementations,
+ and improves support for multithreading. Thus, the plain LZMA
+ will not be supported in this file format.
+
+ Filter ID: 0x21
+ Size of Filter Properties: 1 byte
+ Changes size of data: Yes
+ Allow as a non-last filter: No
+ Allow as the last filter: Yes
+
+ Preferred alignment:
+ Input data: Adjustable to 1/2/4/8/16 byte(s)
+ Output data: 1 byte
+
+ The format of the one-byte Filter Properties field is as
+ follows:
+
+ Bits Mask Description
+ 0-5 0x3F Dictionary Size
+ 6-7 0xC0 Reserved for future use; MUST be zero for now.
+
+ Dictionary Size is encoded with one-bit mantissa and five-bit
+ exponent. The smallest dictionary size is 4 KiB and the biggest
+ is 4 GiB.
+
+ Raw value Mantissa Exponent Dictionary size
+ 0 2 11 4 KiB
+ 1 3 11 6 KiB
+ 2 2 12 8 KiB
+ 3 3 12 12 KiB
+ 4 2 13 16 KiB
+ 5 3 13 24 KiB
+ 6 2 14 32 KiB
+ ... ... ... ...
+ 35 3 27 768 MiB
+ 36 2 28 1024 MiB
+ 37 3 29 1536 MiB
+ 38 2 30 2048 MiB
+ 39 3 30 3072 MiB
+ 40 2 31 4096 MiB - 1 B
+
+ Instead of having a table in the decoder, the dictionary size
+ can be decoded using the following C code:
+
+ const uint8_t bits = get_dictionary_flags() & 0x3F;
+ if (bits > 40)
+ return DICTIONARY_TOO_BIG; // Bigger than 4 GiB
+
+ uint32_t dictionary_size;
+ if (bits == 40) {
+ dictionary_size = UINT32_MAX;
+ } else {
+ dictionary_size = 2 | (bits & 1);
+ dictionary_size <<= bits / 2 + 11;
+ }
+
+
+5.3.2. Branch/Call/Jump Filters for Executables
+
+ These filters convert relative branch, call, and jump
+ instructions to their absolute counterparts in executable
+ files. This conversion increases redundancy and thus
+ compression ratio.
+
+ Size of Filter Properties: 0 or 4 bytes
+ Changes size of data: No
+ Allow as a non-last filter: Yes
+ Allow as the last filter: No
+
+ Below is the list of filters in this category. The alignment
+ is the same for both input and output data.
+
+ Filter ID Alignment Description
+ 0x04 1 byte x86 filter (BCJ)
+ 0x05 4 bytes PowerPC (big endian) filter
+ 0x06 16 bytes IA64 filter
+ 0x07 4 bytes ARM filter [1]
+ 0x08 2 bytes ARM Thumb filter [1]
+ 0x09 4 bytes SPARC filter
+ 0x0A 4 bytes ARM64 filter [2]
+ 0x0B 2 bytes RISC-V filter
+
+ [1] These are for little endian instruction encoding.
+ This must not be confused with data endianness.
+ A processor configured for big endian data access
+ may still use little endian instruction encoding.
+ The filters don't care about the data endianness.
+
+ [2] 4096-byte alignment gives the best results
+ because the address in the ADRP instruction
+ is a multiple of 4096 bytes.
+
+ If the size of Filter Properties is four bytes, the Filter
+ Properties field contains the start offset used for address
+ conversions. It is stored as an unsigned 32-bit little endian
+ integer. The start offset MUST be a multiple of the alignment
+ of the filter as listed in the table above; if it isn't, the
+ decoder MUST indicate an error. If the size of Filter
+ Properties is zero, the start offset is zero.
+
+ Setting the start offset may be useful if an executable has
+ multiple sections, and there are many cross-section calls.
+ Taking advantage of this feature usually requires usage of
+ the Subblock filter, whose design is not complete yet.
+
+
+5.3.3. Delta
+
+ The Delta filter may increase compression ratio when the value
+ of the next byte correlates with the value of an earlier byte
+ at specified distance.
+
+ Filter ID: 0x03
+ Size of Filter Properties: 1 byte
+ Changes size of data: No
+ Allow as a non-last filter: Yes
+ Allow as the last filter: No
+
+ Preferred alignment:
+ Input data: 1 byte
+ Output data: Same as the original input data
+
+ The Properties byte indicates the delta distance, which can be
+ 1-256 bytes backwards from the current byte: 0x00 indicates
+ distance of 1 byte and 0xFF distance of 256 bytes.
+
+
+5.3.3.1. Format of the Encoded Output
+
+ The code below illustrates both encoding and decoding with
+ the Delta filter.
+
+ // Distance is in the range [1, 256].
+ const unsigned int distance = get_properties_byte() + 1;
+ uint8_t pos = 0;
+ uint8_t delta[256];
+
+ memset(delta, 0, sizeof(delta));
+
+ while (1) {
+ const int byte = read_byte();
+ if (byte == EOF)
+ break;
+
+ uint8_t tmp = delta[(uint8_t)(distance + pos)];
+ if (is_encoder) {
+ tmp = (uint8_t)(byte) - tmp;
+ delta[pos] = (uint8_t)(byte);
+ } else {
+ tmp = (uint8_t)(byte) + tmp;
+ delta[pos] = tmp;
+ }
+
+ write_byte(tmp);
+ --pos;
+ }
+
+
+5.4. Custom Filter IDs
+
+ If a developer wants to use custom Filter IDs, there are two
+ choices. The first choice is to contact Lasse Collin and ask
+ him to allocate a range of IDs for the developer.
+
+ The second choice is to generate a 40-bit random integer
+ which the developer can use as a personal Developer ID.
+ To minimize the risk of collisions, Developer ID has to be
+ a randomly generated integer, not manually selected "hex word".
+ The following command, which works on many free operating
+ systems, can be used to generate Developer ID:
+
+ dd if=/dev/urandom bs=5 count=1 | hexdump
+
+ The developer can then use the Developer ID to create unique
+ (well, hopefully unique) Filter IDs.
+
+ Bits Mask Description
+ 0-15 0x0000_0000_0000_FFFF Filter ID
+ 16-55 0x00FF_FFFF_FFFF_0000 Developer ID
+ 56-62 0x3F00_0000_0000_0000 Static prefix: 0x3F
+
+ The resulting 63-bit integer will use 9 bytes of space when
+ stored using the encoding described in Section 1.2. To get
+ a shorter ID, see the beginning of this Section how to
+ request a custom ID range.
+
+
+5.4.1. Reserved Custom Filter ID Ranges
+
+ Range Description
+ 0x0000_0300 - 0x0000_04FF Reserved to ease .7z compatibility
+ 0x0002_0000 - 0x0007_FFFF Reserved to ease .7z compatibility
+ 0x0200_0000 - 0x07FF_FFFF Reserved to ease .7z compatibility
+
+
+6. Cyclic Redundancy Checks
+
+ There are several incompatible variations to calculate CRC32
+ and CRC64. For simplicity and clarity, complete examples are
+ provided to calculate the checks as they are used in this file
+ format. Implementations MAY use different code as long as it
+ gives identical results.
+
+ The program below reads data from standard input, calculates
+ the CRC32 and CRC64 values, and prints the calculated values
+ as big endian hexadecimal strings to standard output.
+
+ #include
+ #include
+ #include
+
+ uint32_t crc32_table[256];
+ uint64_t crc64_table[256];
+
+ void
+ init(void)
+ {
+ static const uint32_t poly32 = UINT32_C(0xEDB88320);
+ static const uint64_t poly64
+ = UINT64_C(0xC96C5795D7870F42);
+
+ for (size_t i = 0; i < 256; ++i) {
+ uint32_t crc32 = i;
+ uint64_t crc64 = i;
+
+ for (size_t j = 0; j < 8; ++j) {
+ if (crc32 & 1)
+ crc32 = (crc32 >> 1) ^ poly32;
+ else
+ crc32 >>= 1;
+
+ if (crc64 & 1)
+ crc64 = (crc64 >> 1) ^ poly64;
+ else
+ crc64 >>= 1;
+ }
+
+ crc32_table[i] = crc32;
+ crc64_table[i] = crc64;
+ }
+ }
+
+ uint32_t
+ crc32(const uint8_t *buf, size_t size, uint32_t crc)
+ {
+ crc = ~crc;
+ for (size_t i = 0; i < size; ++i)
+ crc = crc32_table[buf[i] ^ (crc & 0xFF)]
+ ^ (crc >> 8);
+ return ~crc;
+ }
+
+ uint64_t
+ crc64(const uint8_t *buf, size_t size, uint64_t crc)
+ {
+ crc = ~crc;
+ for (size_t i = 0; i < size; ++i)
+ crc = crc64_table[buf[i] ^ (crc & 0xFF)]
+ ^ (crc >> 8);
+ return ~crc;
+ }
+
+ int
+ main()
+ {
+ init();
+
+ uint32_t value32 = 0;
+ uint64_t value64 = 0;
+ uint64_t total_size = 0;
+ uint8_t buf[8192];
+
+ while (1) {
+ const size_t buf_size
+ = fread(buf, 1, sizeof(buf), stdin);
+ if (buf_size == 0)
+ break;
+
+ total_size += buf_size;
+ value32 = crc32(buf, buf_size, value32);
+ value64 = crc64(buf, buf_size, value64);
+ }
+
+ printf("Bytes: %" PRIu64 "\n", total_size);
+ printf("CRC-32: 0x%08" PRIX32 "\n", value32);
+ printf("CRC-64: 0x%016" PRIX64 "\n", value64);
+
+ return 0;
+ }
+
+
+7. References
+
+ LZMA SDK - The original LZMA implementation
+ https://7-zip.org/sdk.html
+
+ LZMA Utils - LZMA adapted to POSIX-like systems
+ https://tukaani.org/lzma/
+
+ XZ Utils - The next generation of LZMA Utils
+ https://tukaani.org/xz/
+
+ [RFC-1952]
+ GZIP file format specification version 4.3
+ https://www.ietf.org/rfc/rfc1952.txt
+ - Notation of byte boxes in section "2.1. Overall conventions"
+
+ [RFC-2119]
+ Key words for use in RFCs to Indicate Requirement Levels
+ https://www.ietf.org/rfc/rfc2119.txt
+
+ [GNU-tar]
+ GNU tar 1.35 manual
+ https://www.gnu.org/software/tar/manual/html_node/Blocking-Factor.html
+ - Node 9.4.2 "Blocking Factor", paragraph that begins
+ "gzip will complain about trailing garbage"
+ - Note that this URL points to the latest version of the
+ manual, and may some day not contain the note which is in
+ 1.35. For the exact version of the manual, download GNU
+ tar 1.35: ftp://ftp.gnu.org/pub/gnu/tar/tar-1.35.tar.gz
+
diff --git a/vcpkg_installed/arm64-osx/share/jpeg/vcpkg-cmake-wrapper.cmake b/vcpkg_installed/arm64-osx/share/jpeg/vcpkg-cmake-wrapper.cmake
new file mode 100644
index 00000000..d63c58b0
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/jpeg/vcpkg-cmake-wrapper.cmake
@@ -0,0 +1,38 @@
+cmake_policy(PUSH)
+cmake_policy(SET CMP0012 NEW)
+cmake_policy(SET CMP0054 NEW)
+find_path(JPEG_INCLUDE_DIR NAMES jpeglib.h PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include" NO_DEFAULT_PATH)
+find_library(JPEG_LIBRARY_RELEASE NAMES jpeg PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH)
+find_library(JPEG_LIBRARY_DEBUG NAMES jpeg PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH)
+if(CMAKE_VERSION VERSION_LESS 3.12 AND CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(JPEG_LIBRARY "${JPEG_LIBRARY_DEBUG}" CACHE FILEPATH "")
+endif()
+_find_package(${ARGS})
+if(JPEG_FOUND AND NOT TARGET JPEG::JPEG)
+ # Backfill JPEG::JPEG to versions of cmake before 3.12
+ add_library(JPEG::JPEG UNKNOWN IMPORTED)
+ if(DEFINED JPEG_INCLUDE_DIRS)
+ set_target_properties(JPEG::JPEG PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${JPEG_INCLUDE_DIRS}")
+ endif()
+ if(EXISTS "${JPEG_LIBRARY}")
+ set_target_properties(JPEG::JPEG PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+ IMPORTED_LOCATION "${JPEG_LIBRARY}")
+ endif()
+ if(EXISTS "${JPEG_LIBRARY_RELEASE}")
+ set_property(TARGET JPEG::JPEG APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS RELEASE)
+ set_target_properties(JPEG::JPEG PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+ IMPORTED_LOCATION_RELEASE "${JPEG_LIBRARY_RELEASE}")
+ endif()
+ if(EXISTS "${JPEG_LIBRARY_DEBUG}")
+ set_property(TARGET JPEG::JPEG APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS DEBUG)
+ set_target_properties(JPEG::JPEG PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+ IMPORTED_LOCATION_DEBUG "${JPEG_LIBRARY_DEBUG}")
+ endif()
+endif()
+cmake_policy(POP)
diff --git a/vcpkg_installed/arm64-osx/share/libjpeg-turbo/copyright b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/copyright
new file mode 100644
index 00000000..2204864f
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/copyright
@@ -0,0 +1,135 @@
+libjpeg-turbo Licenses
+======================
+
+libjpeg-turbo is covered by two compatible BSD-style open source licenses:
+
+- The IJG (Independent JPEG Group) License, which is listed in
+ [README.ijg](README.ijg)
+
+ This license applies to the libjpeg API library and associated programs,
+ including any code inherited from libjpeg and any modifications to that
+ code. Note that the libjpeg-turbo SIMD source code bears the
+ [zlib License](https://opensource.org/licenses/Zlib), but in the context of
+ the overall libjpeg API library, the terms of the zlib License are subsumed
+ by the terms of the IJG License.
+
+- The Modified (3-clause) BSD License, which is listed below
+
+ This license applies to the TurboJPEG API library and associated programs, as
+ well as the build system. Note that the TurboJPEG API library wraps the
+ libjpeg API library, so in the context of the overall TurboJPEG API library,
+ both the terms of the IJG License and the terms of the Modified (3-clause)
+ BSD License apply.
+
+
+Complying with the libjpeg-turbo Licenses
+=========================================
+
+This section provides a roll-up of the libjpeg-turbo licensing terms, to the
+best of our understanding. This is not a license in and of itself. It is
+intended solely for clarification.
+
+1. If you are distributing a modified version of the libjpeg-turbo source,
+ then:
+
+ 1. You cannot alter or remove any existing copyright or license notices
+ from the source.
+
+ **Origin**
+ - Clause 1 of the IJG License
+ - Clause 1 of the Modified BSD License
+ - Clauses 1 and 3 of the zlib License
+
+ 2. You must add your own copyright notice to the header of each source
+ file you modified, so others can tell that you modified that file. (If
+ there is not an existing copyright header in that file, then you can
+ simply add a notice stating that you modified the file.)
+
+ **Origin**
+ - Clause 1 of the IJG License
+ - Clause 2 of the zlib License
+
+ 3. You must include the IJG README file, and you must not alter any of the
+ copyright or license text in that file.
+
+ **Origin**
+ - Clause 1 of the IJG License
+
+2. If you are distributing only libjpeg-turbo binaries without the source, or
+ if you are distributing an application that statically links with
+ libjpeg-turbo, then:
+
+ 1. Your product documentation must include a message stating:
+
+ This software is based in part on the work of the Independent JPEG
+ Group.
+
+ **Origin**
+ - Clause 2 of the IJG license
+
+ 2. If your binary distribution includes or uses the TurboJPEG API, then
+ your product documentation must include the text of the Modified BSD
+ License (see below.)
+
+ **Origin**
+ - Clause 2 of the Modified BSD License
+
+3. You cannot use the name of the IJG or The libjpeg-turbo Project or the
+ contributors thereof in advertising, publicity, etc.
+
+ **Origin**
+ - IJG License
+ - Clause 3 of the Modified BSD License
+
+4. The IJG and The libjpeg-turbo Project do not warrant libjpeg-turbo to be
+ free of defects, nor do we accept any liability for undesirable
+ consequences resulting from your use of the software.
+
+ **Origin**
+ - IJG License
+ - Modified BSD License
+ - zlib License
+
+
+The Modified (3-clause) BSD License
+===================================
+
+Copyright (C)2009-2023 D. R. Commander. All Rights Reserved.
+Copyright (C)2015 Viktor Szathmáry. All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+- Neither the name of the libjpeg-turbo Project nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+
+Why Two Licenses?
+=================
+
+The zlib License could have been used instead of the Modified (3-clause) BSD
+License, and since the IJG License effectively subsumes the distribution
+conditions of the zlib License, this would have effectively placed
+libjpeg-turbo binary distributions under the IJG License. However, the IJG
+License specifically refers to the Independent JPEG Group and does not extend
+attribution and endorsement protections to other entities. Thus, it was
+desirable to choose a license that granted us the same protections for new code
+that were granted to the IJG for code derived from their software.
diff --git a/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboConfig.cmake b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboConfig.cmake
new file mode 100644
index 00000000..ba0e8210
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboConfig.cmake
@@ -0,0 +1,28 @@
+
+####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
+####### Any changes to this file will be overwritten by the next CMake run ####
+####### The input file was Config.cmake.in ########
+
+get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE)
+
+macro(set_and_check _var _file)
+ set(${_var} "${_file}")
+ if(NOT EXISTS "${_file}")
+ message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
+ endif()
+endmacro()
+
+macro(check_required_components _NAME)
+ foreach(comp ${${_NAME}_FIND_COMPONENTS})
+ if(NOT ${_NAME}_${comp}_FOUND)
+ if(${_NAME}_FIND_REQUIRED_${comp})
+ set(${_NAME}_FOUND FALSE)
+ endif()
+ endif()
+ endforeach()
+endmacro()
+
+####################################################################################
+
+include("${CMAKE_CURRENT_LIST_DIR}/libjpeg-turboTargets.cmake")
+check_required_components("libjpeg-turbo")
diff --git a/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboConfigVersion.cmake b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboConfigVersion.cmake
new file mode 100644
index 00000000..6000f1a6
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboConfigVersion.cmake
@@ -0,0 +1,43 @@
+# This is a basic version file for the Config-mode of find_package().
+# It is used by write_basic_package_version_file() as input file for configure_file()
+# to create a version-file which can be installed along a config.cmake file.
+#
+# The created file sets PACKAGE_VERSION_EXACT if the current version string and
+# the requested version string are exactly the same and it sets
+# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version.
+# The variable CVF_VERSION must be set before calling configure_file().
+
+set(PACKAGE_VERSION "3.0.3")
+
+if (PACKAGE_FIND_VERSION_RANGE)
+ # Package version must be in the requested version range
+ if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN)
+ OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX)
+ OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX)))
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+ else()
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+ endif()
+else()
+ if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+ else()
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+ if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+ set(PACKAGE_VERSION_EXACT TRUE)
+ endif()
+ endif()
+endif()
+
+
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "")
+ return()
+endif()
+
+# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
+if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8")
+ math(EXPR installedBits "8 * 8")
+ set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
+ set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
diff --git a/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboTargets-debug.cmake b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboTargets-debug.cmake
new file mode 100644
index 00000000..7c0cfa45
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboTargets-debug.cmake
@@ -0,0 +1,29 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "Debug".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "libjpeg-turbo::turbojpeg-static" for configuration "Debug"
+set_property(TARGET libjpeg-turbo::turbojpeg-static APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+set_target_properties(libjpeg-turbo::turbojpeg-static PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+ IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/debug/lib/libturbojpeg.a"
+ )
+
+list(APPEND _cmake_import_check_targets libjpeg-turbo::turbojpeg-static )
+list(APPEND _cmake_import_check_files_for_libjpeg-turbo::turbojpeg-static "${_IMPORT_PREFIX}/debug/lib/libturbojpeg.a" )
+
+# Import target "libjpeg-turbo::jpeg-static" for configuration "Debug"
+set_property(TARGET libjpeg-turbo::jpeg-static APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+set_target_properties(libjpeg-turbo::jpeg-static PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+ IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/debug/lib/libjpeg.a"
+ )
+
+list(APPEND _cmake_import_check_targets libjpeg-turbo::jpeg-static )
+list(APPEND _cmake_import_check_files_for_libjpeg-turbo::jpeg-static "${_IMPORT_PREFIX}/debug/lib/libjpeg.a" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboTargets-release.cmake b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboTargets-release.cmake
new file mode 100644
index 00000000..434000d0
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboTargets-release.cmake
@@ -0,0 +1,29 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "Release".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "libjpeg-turbo::turbojpeg-static" for configuration "Release"
+set_property(TARGET libjpeg-turbo::turbojpeg-static APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+set_target_properties(libjpeg-turbo::turbojpeg-static PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+ IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libturbojpeg.a"
+ )
+
+list(APPEND _cmake_import_check_targets libjpeg-turbo::turbojpeg-static )
+list(APPEND _cmake_import_check_files_for_libjpeg-turbo::turbojpeg-static "${_IMPORT_PREFIX}/lib/libturbojpeg.a" )
+
+# Import target "libjpeg-turbo::jpeg-static" for configuration "Release"
+set_property(TARGET libjpeg-turbo::jpeg-static APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+set_target_properties(libjpeg-turbo::jpeg-static PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+ IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libjpeg.a"
+ )
+
+list(APPEND _cmake_import_check_targets libjpeg-turbo::jpeg-static )
+list(APPEND _cmake_import_check_files_for_libjpeg-turbo::jpeg-static "${_IMPORT_PREFIX}/lib/libjpeg.a" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboTargets.cmake b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboTargets.cmake
new file mode 100644
index 00000000..82b5279b
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/libjpeg-turboTargets.cmake
@@ -0,0 +1,112 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
+ message(FATAL_ERROR "CMake >= 2.8.0 required")
+endif()
+if(CMAKE_VERSION VERSION_LESS "2.8.3")
+ message(FATAL_ERROR "CMake >= 2.8.3 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.8.3...3.28)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_cmake_targets_defined "")
+set(_cmake_targets_not_defined "")
+set(_cmake_expected_targets "")
+foreach(_cmake_expected_target IN ITEMS libjpeg-turbo::turbojpeg-static libjpeg-turbo::jpeg-static)
+ list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
+ if(TARGET "${_cmake_expected_target}")
+ list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
+ else()
+ list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
+ endif()
+endforeach()
+unset(_cmake_expected_target)
+if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
+ unset(_cmake_targets_defined)
+ unset(_cmake_targets_not_defined)
+ unset(_cmake_expected_targets)
+ unset(CMAKE_IMPORT_FILE_VERSION)
+ cmake_policy(POP)
+ return()
+endif()
+if(NOT _cmake_targets_defined STREQUAL "")
+ string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
+ string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
+ message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
+endif()
+unset(_cmake_targets_defined)
+unset(_cmake_targets_not_defined)
+unset(_cmake_expected_targets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+ set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target libjpeg-turbo::turbojpeg-static
+add_library(libjpeg-turbo::turbojpeg-static STATIC IMPORTED)
+
+set_target_properties(libjpeg-turbo::turbojpeg-static PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
+)
+
+# Create imported target libjpeg-turbo::jpeg-static
+add_library(libjpeg-turbo::jpeg-static STATIC IMPORTED)
+
+set_target_properties(libjpeg-turbo::jpeg-static PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
+)
+
+# Load information for each installed configuration.
+file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/libjpeg-turboTargets-*.cmake")
+foreach(_cmake_config_file IN LISTS _cmake_config_files)
+ include("${_cmake_config_file}")
+endforeach()
+unset(_cmake_config_file)
+unset(_cmake_config_files)
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(_cmake_target IN LISTS _cmake_import_check_targets)
+ if(CMAKE_VERSION VERSION_LESS "3.28"
+ OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
+ OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
+ foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
+ if(NOT EXISTS "${_cmake_file}")
+ message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
+ \"${_cmake_file}\"
+but this file does not exist. Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+ \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+ endif()
+ endforeach()
+ endif()
+ unset(_cmake_file)
+ unset("_cmake_import_check_files_for_${_cmake_target}")
+endforeach()
+unset(_cmake_target)
+unset(_cmake_import_check_targets)
+
+# This file does not depend on other imported targets which have
+# been exported from the same project but in a separate export set.
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)
diff --git a/vcpkg_installed/arm64-osx/share/libjpeg-turbo/usage b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/usage
new file mode 100644
index 00000000..6d70f46f
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/usage
@@ -0,0 +1,9 @@
+libjpeg-turbo is compatible with built-in implementation-agnostic CMake targets:
+
+ find_package(JPEG REQUIRED)
+ target_include_directories(main PRIVATE JPEG::JPEG)
+
+libjpeg-turbo provides CMake targets for the TurboJPEG C API:
+
+ find_package(libjpeg-turbo CONFIG REQUIRED)
+ target_link_libraries(main PRIVATE $,libjpeg-turbo::turbojpeg,libjpeg-turbo::turbojpeg-static>)
diff --git a/vcpkg_installed/arm64-osx/share/libjpeg-turbo/vcpkg.spdx.json b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/vcpkg.spdx.json
new file mode 100644
index 00000000..dc14b5c6
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/vcpkg.spdx.json
@@ -0,0 +1,198 @@
+{
+ "$schema": "https://raw.githubusercontent.com/spdx/spdx-spec/v2.2.1/schemas/spdx-schema.json",
+ "spdxVersion": "SPDX-2.2",
+ "dataLicense": "CC0-1.0",
+ "SPDXID": "SPDXRef-DOCUMENT",
+ "documentNamespace": "https://spdx.org/spdxdocs/libjpeg-turbo-arm64-osx-3.0.3-93a8bbfc-687f-48b1-b2a1-5a9e4a37539b",
+ "name": "libjpeg-turbo:arm64-osx@3.0.3 a7fd6309e4d0f4283e4a4160bda4275553b153d1019311c540b5571c1061fdde",
+ "creationInfo": {
+ "creators": [
+ "Tool: vcpkg-2024.03.14"
+ ],
+ "created": "2024-08-06T07:00:48Z"
+ },
+ "relationships": [
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "GENERATES",
+ "relatedSpdxElement": "SPDXRef-binary"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-0"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-1"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-2"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-3"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-4"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-5"
+ },
+ {
+ "spdxElementId": "SPDXRef-binary",
+ "relationshipType": "GENERATED_FROM",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-0",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-1",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-2",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-3",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-4",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-5",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ }
+ ],
+ "packages": [
+ {
+ "name": "libjpeg-turbo",
+ "SPDXID": "SPDXRef-port",
+ "versionInfo": "3.0.3",
+ "downloadLocation": "NOASSERTION",
+ "homepage": "https://github.com/libjpeg-turbo/libjpeg-turbo",
+ "licenseConcluded": "BSD-3-Clause",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "description": "libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2, NEON, AltiVec) to accelerate baseline JPEG compression and decompression on x86, x86-64, ARM, and PowerPC systems.",
+ "comment": "This is the port (recipe) consumed by vcpkg."
+ },
+ {
+ "name": "libjpeg-turbo:arm64-osx",
+ "SPDXID": "SPDXRef-binary",
+ "versionInfo": "a7fd6309e4d0f4283e4a4160bda4275553b153d1019311c540b5571c1061fdde",
+ "downloadLocation": "NONE",
+ "licenseConcluded": "BSD-3-Clause",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "comment": "This is a binary package built by vcpkg."
+ },
+ {
+ "SPDXID": "SPDXRef-resource-1",
+ "name": "libjpeg-turbo/libjpeg-turbo",
+ "downloadLocation": "git+https://github.com/libjpeg-turbo/libjpeg-turbo@3.0.3",
+ "licenseConcluded": "NOASSERTION",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "checksums": [
+ {
+ "algorithm": "SHA512",
+ "checksumValue": "46c44be837654e201d11bbf8d9fbb35b775a7d4bf653e9e709279437b10d5c8b0825ece4c8ee33f66689c263234fa2b08240fb5f5ba80e76e03891da8f64eda8"
+ }
+ ]
+ }
+ ],
+ "files": [
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/libjpeg-turbo/usage",
+ "SPDXID": "SPDXRef-file-0",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "f6ff243d0aba5bc85904527de17fc8a341a3568b0b19e3ac63b95029125b9e68"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/libjpeg-turbo/workaround_cmake_system_processor.patch",
+ "SPDXID": "SPDXRef-file-1",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "1fd13c06d27a2fcef233fe209ba0c856ed76311be59ae72e15d1c58fe36eab04"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/libjpeg-turbo/portfile.cmake",
+ "SPDXID": "SPDXRef-file-2",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "1a7b8c646c6ba9d4aa1ad90d6ef7cec98727a8003cc15013ca7334842b193386"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/libjpeg-turbo/vcpkg.json",
+ "SPDXID": "SPDXRef-file-3",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "72c77395fe1daceda5b6d67f1b465b49c007ae99b73257e1f69d50cb35aa2589"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/libjpeg-turbo/add-options-for-exes-docs-headers.patch",
+ "SPDXID": "SPDXRef-file-4",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "5c93ee62645786820dcca65d7158d39a355c3c7ac31f1d07e0a52d26e7875598"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/libjpeg-turbo/vcpkg-cmake-wrapper.cmake",
+ "SPDXID": "SPDXRef-file-5",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "d257c0a541dd60c4b6eb6f46a5e9f128a64a6ec40f3b8b5bc8ab753e7a935c61"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ }
+ ]
+}
diff --git a/vcpkg_installed/arm64-osx/share/libjpeg-turbo/vcpkg_abi_info.txt b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/vcpkg_abi_info.txt
new file mode 100644
index 00000000..1a6bda45
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libjpeg-turbo/vcpkg_abi_info.txt
@@ -0,0 +1,23 @@
+add-options-for-exes-docs-headers.patch 5c93ee62645786820dcca65d7158d39a355c3c7ac31f1d07e0a52d26e7875598
+cmake 3.30.1
+features core
+portfile.cmake 1a7b8c646c6ba9d4aa1ad90d6ef7cec98727a8003cc15013ca7334842b193386
+ports.cmake 3855df80ecd84038296b7ae73271a6190f21c4af0bb1a0ca0be752a308aaa53d
+post_build_checks 2
+triplet arm64-osx
+triplet_abi ee01c9458d62d6baf9332438e02f9de2d5daa743b47a61ba6b7d68dd84dc1e65-4cdbc0a68d47eedc16d246a07a21fabfbbe19abb89f00890c58902e2cf872d6f-24e935e23698b7e71fdd6f83197468f5145378e6
+usage f6ff243d0aba5bc85904527de17fc8a341a3568b0b19e3ac63b95029125b9e68
+vcpkg-cmake 80f0b4a35de8e569486cb5cc1c050ac52951992a600fd60a1d38cacaac220307
+vcpkg-cmake-config f8a190c788ce0b67531ca7b584535d87ad535f6eda7c2d6c782be7b255c50322
+vcpkg-cmake-wrapper.cmake d257c0a541dd60c4b6eb6f46a5e9f128a64a6ec40f3b8b5bc8ab753e7a935c61
+vcpkg.json 72c77395fe1daceda5b6d67f1b465b49c007ae99b73257e1f69d50cb35aa2589
+vcpkg_check_features 943b217e0968d64cf2cb9c272608e6a0b497377e792034f819809a79e1502c2b
+vcpkg_copy_pdbs d57e4f196c82dc562a9968c6155073094513c31e2de475694143d3aa47954b1c
+vcpkg_find_acquire_program 96d9ee675798a3bddb54340d404b814be45a35c624b2eab5465cd45eaf18b6d3
+vcpkg_find_acquire_program(NASM) b6fcd010dcc70cec5e2472dde5a5b794c11ed63a433215d0e4f8ab11620cde0a
+vcpkg_fixup_pkgconfig 1a15f6c6d8e2b244d83a7514a0412d339127d2217d1df60ad1388b546c85f777
+vcpkg_from_git 96ed81968f76354c00096dd8cd4e63c6a235fa969334a11ab18d11c0c512ff58
+vcpkg_from_github b743742296a114ea1b18ae99672e02f142c4eb2bef7f57d36c038bedbfb0502f
+vcpkg_install_copyright ba6c169ab4e59fa05682e530cdeb883767de22c8391f023d4e6844a7ec5dd3d2
+vcpkg_replace_string b450deb79207478b37119743e00808ebc42de0628e7b98c14ab24728bd5c78b8
+workaround_cmake_system_processor.patch 1fd13c06d27a2fcef233fe209ba0c856ed76311be59ae72e15d1c58fe36eab04
diff --git a/vcpkg_installed/arm64-osx/share/liblzma/copyright b/vcpkg_installed/arm64-osx/share/liblzma/copyright
new file mode 100644
index 00000000..aed21531
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/liblzma/copyright
@@ -0,0 +1,83 @@
+
+XZ Utils Licensing
+==================
+
+ Different licenses apply to different files in this package. Here
+ is a summary of which licenses apply to which parts of this package:
+
+ - liblzma is under the BSD Zero Clause License (0BSD).
+
+ - The command line tools xz, xzdec, lzmadec, and lzmainfo are
+ under 0BSD except that, on systems that don't have a usable
+ getopt_long, GNU getopt_long is compiled and linked in from the
+ 'lib' directory. The getopt_long code is under GNU LGPLv2.1+.
+
+ - The scripts to grep, diff, and view compressed files have been
+ adapted from GNU gzip. These scripts (xzgrep, xzdiff, xzless,
+ and xzmore) are under GNU GPLv2+. The man pages of the scripts
+ are under 0BSD; they aren't based on the man pages of GNU gzip.
+
+ - Most of the XZ Utils specific documentation that is in
+ plain text files (like README, INSTALL, PACKAGERS, NEWS,
+ and ChangeLog) are under 0BSD unless stated otherwise in
+ the file itself. The files xz-file-format.txt and
+ lzma-file-format.xt are in the public domain but may
+ be distributed under the terms of 0BSD too.
+
+ - Translated messages and man pages are under 0BSD except that
+ some old translations are in the public domain.
+
+ - Test files and test code in the 'tests' directory, and
+ debugging utilities in the 'debug' directory are under
+ the BSD Zero Clause License (0BSD).
+
+ - The GNU Autotools based build system contains files that are
+ under GNU GPLv2+, GNU GPLv3+, and a few permissive licenses.
+ These files don't affect the licensing of the binaries being
+ built.
+
+ - The 'extra' directory contains files that are under various
+ free software licenses. These aren't built or installed as
+ part of XZ Utils.
+
+ For the files under the BSD Zero Clause License (0BSD), if
+ a copyright notice is needed, the following is sufficient:
+
+ Copyright (C) The XZ Utils authors and contributors
+
+ If you copy significant amounts of 0BSD-licensed code from XZ Utils
+ into your project, acknowledging this somewhere in your software is
+ polite (especially if it is proprietary, non-free software), but
+ it is not legally required by the license terms. Here is an example
+ of a good notice to put into "about box" or into documentation:
+
+ This software includes code from XZ Utils .
+
+ The following license texts are included in the following files:
+ - COPYING.0BSD: BSD Zero Clause License
+ - COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1
+ - COPYING.GPLv2: GNU General Public License version 2
+ - COPYING.GPLv3: GNU General Public License version 3
+
+ A note about old XZ Utils releases:
+
+ XZ Utils releases 5.4.6 and older and 5.5.1alpha have a
+ significant amount of code put into the public domain and
+ that obviously remains so. The switch from public domain to
+ 0BSD for newer releases was made in Febrary 2024 because
+ public domain has (real or perceived) legal ambiguities in
+ some jurisdictions.
+
+ There is very little *practical* difference between public
+ domain and 0BSD. The main difference likely is that one
+ shouldn't claim that 0BSD-licensed code is in the public
+ domain; 0BSD-licensed code is copyrighted but available under
+ an extremely permissive license. Neither 0BSD nor public domain
+ require retaining or reproducing author, copyright holder, or
+ license notices when distributing the software. (Compare to,
+ for example, BSD 2-Clause "Simplified" License which does have
+ such requirements.)
+
+ If you have questions, don't hesitate to ask for more information.
+ The contact information is in the README file.
+
diff --git a/vcpkg_installed/arm64-osx/share/liblzma/liblzma-config-version.cmake b/vcpkg_installed/arm64-osx/share/liblzma/liblzma-config-version.cmake
new file mode 100644
index 00000000..2738d398
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/liblzma/liblzma-config-version.cmake
@@ -0,0 +1,65 @@
+# This is a basic version file for the Config-mode of find_package().
+# It is used by write_basic_package_version_file() as input file for configure_file()
+# to create a version-file which can be installed along a config.cmake file.
+#
+# The created file sets PACKAGE_VERSION_EXACT if the current version string and
+# the requested version string are exactly the same and it sets
+# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version,
+# but only if the requested major version is the same as the current one.
+# The variable CVF_VERSION must be set before calling configure_file().
+
+
+set(PACKAGE_VERSION "5.6.2")
+
+if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+else()
+
+ if("5.6.2" MATCHES "^([0-9]+)\\.")
+ set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
+ if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
+ string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
+ endif()
+ else()
+ set(CVF_VERSION_MAJOR "5.6.2")
+ endif()
+
+ if(PACKAGE_FIND_VERSION_RANGE)
+ # both endpoints of the range must have the expected major version
+ math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1")
+ if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
+ OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR)
+ OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT)))
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+ elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
+ AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX)
+ OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX)))
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+ else()
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+ endif()
+ else()
+ if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR)
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+ else()
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+ endif()
+
+ if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+ set(PACKAGE_VERSION_EXACT TRUE)
+ endif()
+ endif()
+endif()
+
+
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "")
+ return()
+endif()
+
+# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
+if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8")
+ math(EXPR installedBits "8 * 8")
+ set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
+ set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
diff --git a/vcpkg_installed/arm64-osx/share/liblzma/liblzma-config.cmake b/vcpkg_installed/arm64-osx/share/liblzma/liblzma-config.cmake
new file mode 100644
index 00000000..181f55a9
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/liblzma/liblzma-config.cmake
@@ -0,0 +1,16 @@
+include(CMakeFindDependencyMacro)
+set(THREADS_PREFER_PTHREAD_FLAG TRUE)
+find_dependency(Threads)
+
+include("${CMAKE_CURRENT_LIST_DIR}/liblzma-targets.cmake")
+
+if(NOT TARGET LibLZMA::LibLZMA)
+ # Be compatible with the spelling used by the FindLibLZMA module. This
+ # doesn't use ALIAS because it would make CMake resolve LibLZMA::LibLZMA
+ # to liblzma::liblzma instead of keeping the original spelling. Keeping
+ # the original spelling is important for good FindLibLZMA compatibility.
+ add_library(LibLZMA::LibLZMA INTERFACE IMPORTED)
+ set_target_properties(LibLZMA::LibLZMA PROPERTIES
+ INTERFACE_LINK_LIBRARIES liblzma::liblzma)
+endif()
+
diff --git a/vcpkg_installed/arm64-osx/share/liblzma/liblzma-targets-debug.cmake b/vcpkg_installed/arm64-osx/share/liblzma/liblzma-targets-debug.cmake
new file mode 100644
index 00000000..ea0f743a
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/liblzma/liblzma-targets-debug.cmake
@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "Debug".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "liblzma::liblzma" for configuration "Debug"
+set_property(TARGET liblzma::liblzma APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+set_target_properties(liblzma::liblzma PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+ IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/debug/lib/liblzma.a"
+ )
+
+list(APPEND _cmake_import_check_targets liblzma::liblzma )
+list(APPEND _cmake_import_check_files_for_liblzma::liblzma "${_IMPORT_PREFIX}/debug/lib/liblzma.a" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/vcpkg_installed/arm64-osx/share/liblzma/liblzma-targets-release.cmake b/vcpkg_installed/arm64-osx/share/liblzma/liblzma-targets-release.cmake
new file mode 100644
index 00000000..c3116d34
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/liblzma/liblzma-targets-release.cmake
@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "Release".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "liblzma::liblzma" for configuration "Release"
+set_property(TARGET liblzma::liblzma APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+set_target_properties(liblzma::liblzma PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+ IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/liblzma.a"
+ )
+
+list(APPEND _cmake_import_check_targets liblzma::liblzma )
+list(APPEND _cmake_import_check_files_for_liblzma::liblzma "${_IMPORT_PREFIX}/lib/liblzma.a" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/vcpkg_installed/arm64-osx/share/liblzma/liblzma-targets.cmake b/vcpkg_installed/arm64-osx/share/liblzma/liblzma-targets.cmake
new file mode 100644
index 00000000..a373f30f
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/liblzma/liblzma-targets.cmake
@@ -0,0 +1,106 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
+ message(FATAL_ERROR "CMake >= 2.8.0 required")
+endif()
+if(CMAKE_VERSION VERSION_LESS "2.8.12")
+ message(FATAL_ERROR "CMake >= 2.8.12 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.8.12...3.28)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_cmake_targets_defined "")
+set(_cmake_targets_not_defined "")
+set(_cmake_expected_targets "")
+foreach(_cmake_expected_target IN ITEMS liblzma::liblzma)
+ list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
+ if(TARGET "${_cmake_expected_target}")
+ list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
+ else()
+ list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
+ endif()
+endforeach()
+unset(_cmake_expected_target)
+if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
+ unset(_cmake_targets_defined)
+ unset(_cmake_targets_not_defined)
+ unset(_cmake_expected_targets)
+ unset(CMAKE_IMPORT_FILE_VERSION)
+ cmake_policy(POP)
+ return()
+endif()
+if(NOT _cmake_targets_defined STREQUAL "")
+ string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
+ string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
+ message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
+endif()
+unset(_cmake_targets_defined)
+unset(_cmake_targets_not_defined)
+unset(_cmake_expected_targets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+ set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target liblzma::liblzma
+add_library(liblzma::liblzma STATIC IMPORTED)
+
+set_target_properties(liblzma::liblzma PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
+ INTERFACE_LINK_LIBRARIES "Threads::Threads"
+)
+
+# Load information for each installed configuration.
+file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/liblzma-targets-*.cmake")
+foreach(_cmake_config_file IN LISTS _cmake_config_files)
+ include("${_cmake_config_file}")
+endforeach()
+unset(_cmake_config_file)
+unset(_cmake_config_files)
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(_cmake_target IN LISTS _cmake_import_check_targets)
+ if(CMAKE_VERSION VERSION_LESS "3.28"
+ OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
+ OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
+ foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
+ if(NOT EXISTS "${_cmake_file}")
+ message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
+ \"${_cmake_file}\"
+but this file does not exist. Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+ \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+ endif()
+ endforeach()
+ endif()
+ unset(_cmake_file)
+ unset("_cmake_import_check_files_for_${_cmake_target}")
+endforeach()
+unset(_cmake_target)
+unset(_cmake_import_check_targets)
+
+# This file does not depend on other imported targets which have
+# been exported from the same project but in a separate export set.
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)
diff --git a/vcpkg_installed/arm64-osx/share/liblzma/usage b/vcpkg_installed/arm64-osx/share/liblzma/usage
new file mode 100644
index 00000000..b1461c93
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/liblzma/usage
@@ -0,0 +1,9 @@
+liblzma is compatible with built-in CMake targets:
+
+ find_package(LibLZMA REQUIRED)
+ target_link_libraries(main PRIVATE LibLZMA::LibLZMA)
+
+liblzma provides CMake targets:
+
+ find_package(liblzma CONFIG REQUIRED)
+ target_link_libraries(main PRIVATE liblzma::liblzma)
diff --git a/vcpkg_installed/arm64-osx/share/liblzma/vcpkg-cmake-wrapper.cmake b/vcpkg_installed/arm64-osx/share/liblzma/vcpkg-cmake-wrapper.cmake
new file mode 100644
index 00000000..826cdba0
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/liblzma/vcpkg-cmake-wrapper.cmake
@@ -0,0 +1,64 @@
+cmake_policy(PUSH)
+cmake_policy(SET CMP0012 NEW)
+cmake_policy(SET CMP0057 NEW)
+set(z_vcpkg_liblzma_fixup_needed 0)
+if(NOT "CONFIG" IN_LIST ARGS AND NOT "NO_MODULE" IN_LIST ARGS AND NOT CMAKE_DISABLE_FIND_PACKAGE_LibLZMA)
+ get_filename_component(z_vcpkg_liblzma_prefix "${CMAKE_CURRENT_LIST_DIR}" DIRECTORY)
+ get_filename_component(z_vcpkg_liblzma_prefix "${z_vcpkg_liblzma_prefix}" DIRECTORY)
+ find_path(LIBLZMA_INCLUDE_DIR NAMES lzma.h PATHS "${z_vcpkg_liblzma_prefix}/include" NO_DEFAULT_PATH)
+ # liblzma doesn't use a debug postfix, but FindLibLZMA.cmake expects it
+ find_library(LIBLZMA_LIBRARY_RELEASE NAMES lzma PATHS "${z_vcpkg_liblzma_prefix}/lib" NO_DEFAULT_PATH)
+ find_library(LIBLZMA_LIBRARY_DEBUG NAMES lzma PATHS "${z_vcpkg_liblzma_prefix}/debug/lib" NO_DEFAULT_PATH)
+ unset(z_vcpkg_liblzma_prefix)
+ if(CMAKE_VERSION VERSION_LESS 3.16)
+ # Older versions of FindLibLZMA.cmake need a single lib in LIBLZMA_LIBRARY.
+ set(z_vcpkg_liblzma_fixup_needed 1)
+ set(LIBLZMA_LIBRARY "${LIBLZMA_LIBRARY_RELEASE}" CACHE INTERNAL "")
+ elseif(NOT TARGET LibLZMA::LibLZMA)
+ set(z_vcpkg_liblzma_fixup_needed 1)
+ endif()
+ # Known values, and required. Skip expensive tests.
+ set(LIBLZMA_HAS_AUTO_DECODER 1 CACHE INTERNAL "")
+ set(LIBLZMA_HAS_EASY_ENCODER 1 CACHE INTERNAL "")
+ set(LIBLZMA_HAS_LZMA_PRESET 1 CACHE INTERNAL "")
+endif()
+
+_find_package(${ARGS})
+
+if(z_vcpkg_liblzma_fixup_needed)
+ include(SelectLibraryConfigurations)
+ select_library_configurations(LIBLZMA)
+ if(NOT TARGET LibLZMA::LibLZMA)
+ # Backfill LibLZMA::LibLZMA to versions of cmake before 3.14
+ add_library(LibLZMA::LibLZMA UNKNOWN IMPORTED)
+ if(DEFINED LIBLZMA_INCLUDE_DIRS)
+ set_target_properties(LibLZMA::LibLZMA PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${LIBLZMA_INCLUDE_DIRS}")
+ endif()
+ set_property(TARGET LibLZMA::LibLZMA APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS RELEASE)
+ set_target_properties(LibLZMA::LibLZMA PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+ IMPORTED_LOCATION_RELEASE "${LIBLZMA_LIBRARY_RELEASE}")
+ if(EXISTS "${LIBLZMA_LIBRARY}")
+ set_target_properties(LibLZMA::LibLZMA PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+ IMPORTED_LOCATION "${LIBLZMA_LIBRARY}")
+ endif()
+ endif()
+ if(LIBLZMA_LIBRARY_DEBUG)
+ # Backfill debug variant to versions of cmake before 3.16
+ set_property(TARGET LibLZMA::LibLZMA APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+ set_target_properties(LibLZMA::LibLZMA PROPERTIES IMPORTED_LOCATION_DEBUG "${LIBLZMA_LIBRARY_DEBUG}")
+ endif()
+endif()
+if(LIBLZMA_LIBRARIES AND NOT "Threads::Threads" IN_LIST LIBLZMA_LIBRARIES)
+ set(THREADS_PREFER_PTHREAD_FLAG TRUE)
+ find_package(Threads)
+ list(APPEND LIBLZMA_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+ if(TARGET LibLZMA::LibLZMA)
+ set_property(TARGET LibLZMA::LibLZMA APPEND PROPERTY INTERFACE_LINK_LIBRARIES Threads::Threads)
+ endif()
+endif()
+unset(z_vcpkg_liblzma_fixup_needed)
+cmake_policy(POP)
diff --git a/vcpkg_installed/arm64-osx/share/liblzma/vcpkg.spdx.json b/vcpkg_installed/arm64-osx/share/liblzma/vcpkg.spdx.json
new file mode 100644
index 00000000..ce5a4d28
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/liblzma/vcpkg.spdx.json
@@ -0,0 +1,198 @@
+{
+ "$schema": "https://raw.githubusercontent.com/spdx/spdx-spec/v2.2.1/schemas/spdx-schema.json",
+ "spdxVersion": "SPDX-2.2",
+ "dataLicense": "CC0-1.0",
+ "SPDXID": "SPDXRef-DOCUMENT",
+ "documentNamespace": "https://spdx.org/spdxdocs/liblzma-arm64-osx-5.6.2-2d83d719-30b8-48da-92a3-73dea087a2c2",
+ "name": "liblzma:arm64-osx@5.6.2 c42ec360aed3f7b37aa618421dfb96cca740c4e1971dff46d55aacacf2dd3c79",
+ "creationInfo": {
+ "creators": [
+ "Tool: vcpkg-2024.03.14"
+ ],
+ "created": "2024-08-06T07:00:53Z"
+ },
+ "relationships": [
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "GENERATES",
+ "relatedSpdxElement": "SPDXRef-binary"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-0"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-1"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-2"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-3"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-4"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-5"
+ },
+ {
+ "spdxElementId": "SPDXRef-binary",
+ "relationshipType": "GENERATED_FROM",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-0",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-1",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-2",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-3",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-4",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-5",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ }
+ ],
+ "packages": [
+ {
+ "name": "liblzma",
+ "SPDXID": "SPDXRef-port",
+ "versionInfo": "5.6.2",
+ "downloadLocation": "NOASSERTION",
+ "homepage": "https://tukaani.org/xz/",
+ "licenseConcluded": "NOASSERTION",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "description": "Compression library with an API similar to that of zlib.",
+ "comment": "This is the port (recipe) consumed by vcpkg."
+ },
+ {
+ "name": "liblzma:arm64-osx",
+ "SPDXID": "SPDXRef-binary",
+ "versionInfo": "c42ec360aed3f7b37aa618421dfb96cca740c4e1971dff46d55aacacf2dd3c79",
+ "downloadLocation": "NONE",
+ "licenseConcluded": "NOASSERTION",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "comment": "This is a binary package built by vcpkg."
+ },
+ {
+ "SPDXID": "SPDXRef-resource-1",
+ "name": "tukaani-project/xz",
+ "downloadLocation": "git+https://github.com/tukaani-project/xz@v5.6.2",
+ "licenseConcluded": "NOASSERTION",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "checksums": [
+ {
+ "algorithm": "SHA512",
+ "checksumValue": "ec708bcddc64285b0c36b89c9e6413994af4c15bb6865a7bc243a048ce86afccd0df88d46d55aa23fb8071d137dcc19cf357117adc92f030919540f8993cacf9"
+ }
+ ]
+ }
+ ],
+ "files": [
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/liblzma/build-tools.patch",
+ "SPDXID": "SPDXRef-file-0",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "cb1d0ab8ac906c79545c0cf7c3e020005669922faabf0cd46f4d267c380950fe"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/liblzma/usage",
+ "SPDXID": "SPDXRef-file-1",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "8e856626fcd7a0110736379543122b37484d658078c12a55596b0664f455286d"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/liblzma/portfile.cmake",
+ "SPDXID": "SPDXRef-file-2",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "daf641b62bd5a385aefa6a697dc8b76fd7119500e0605bb99094063c4dc25e35"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/liblzma/vcpkg.json",
+ "SPDXID": "SPDXRef-file-3",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "ed2edb1ca98d7b4938c6e91bb1eea094dc3365353e4119627651437e8247bd54"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/liblzma/win_output_name.patch",
+ "SPDXID": "SPDXRef-file-4",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "8bf8437849bf04588b6cd75a1d685076bc931ba3c8c8cd4ed91b4a4f1017964f"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/liblzma/vcpkg-cmake-wrapper.cmake",
+ "SPDXID": "SPDXRef-file-5",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "a4611673d837ec6e94f0f0f9a85a1859b85ef169e762b48a99946b9436647b39"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ }
+ ]
+}
diff --git a/vcpkg_installed/arm64-osx/share/liblzma/vcpkg_abi_info.txt b/vcpkg_installed/arm64-osx/share/liblzma/vcpkg_abi_info.txt
new file mode 100644
index 00000000..65658b92
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/liblzma/vcpkg_abi_info.txt
@@ -0,0 +1,22 @@
+build-tools.patch cb1d0ab8ac906c79545c0cf7c3e020005669922faabf0cd46f4d267c380950fe
+cmake 3.30.1
+features core
+portfile.cmake daf641b62bd5a385aefa6a697dc8b76fd7119500e0605bb99094063c4dc25e35
+ports.cmake 3855df80ecd84038296b7ae73271a6190f21c4af0bb1a0ca0be752a308aaa53d
+post_build_checks 2
+triplet arm64-osx
+triplet_abi ee01c9458d62d6baf9332438e02f9de2d5daa743b47a61ba6b7d68dd84dc1e65-4cdbc0a68d47eedc16d246a07a21fabfbbe19abb89f00890c58902e2cf872d6f-24e935e23698b7e71fdd6f83197468f5145378e6
+usage 8e856626fcd7a0110736379543122b37484d658078c12a55596b0664f455286d
+vcpkg-cmake 80f0b4a35de8e569486cb5cc1c050ac52951992a600fd60a1d38cacaac220307
+vcpkg-cmake-config f8a190c788ce0b67531ca7b584535d87ad535f6eda7c2d6c782be7b255c50322
+vcpkg-cmake-wrapper.cmake a4611673d837ec6e94f0f0f9a85a1859b85ef169e762b48a99946b9436647b39
+vcpkg.json ed2edb1ca98d7b4938c6e91bb1eea094dc3365353e4119627651437e8247bd54
+vcpkg_check_features 943b217e0968d64cf2cb9c272608e6a0b497377e792034f819809a79e1502c2b
+vcpkg_copy_pdbs d57e4f196c82dc562a9968c6155073094513c31e2de475694143d3aa47954b1c
+vcpkg_copy_tools 3d45ff761bddbabe8923b52330168dc3abd295fa469d3f2e47cb14dce85332d5
+vcpkg_fixup_pkgconfig 1a15f6c6d8e2b244d83a7514a0412d339127d2217d1df60ad1388b546c85f777
+vcpkg_from_git 96ed81968f76354c00096dd8cd4e63c6a235fa969334a11ab18d11c0c512ff58
+vcpkg_from_github b743742296a114ea1b18ae99672e02f142c4eb2bef7f57d36c038bedbfb0502f
+vcpkg_install_copyright ba6c169ab4e59fa05682e530cdeb883767de22c8391f023d4e6844a7ec5dd3d2
+vcpkg_replace_string b450deb79207478b37119743e00808ebc42de0628e7b98c14ab24728bd5c78b8
+win_output_name.patch 8bf8437849bf04588b6cd75a1d685076bc931ba3c8c8cd4ed91b4a4f1017964f
diff --git a/vcpkg_installed/arm64-osx/share/libspng/copyright b/vcpkg_installed/arm64-osx/share/libspng/copyright
new file mode 100644
index 00000000..05234f0e
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libspng/copyright
@@ -0,0 +1,25 @@
+BSD 2-Clause License
+
+Copyright (c) 2018-2023, Randy
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vcpkg_installed/arm64-osx/share/libspng/usage b/vcpkg_installed/arm64-osx/share/libspng/usage
new file mode 100644
index 00000000..bc69e6a0
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libspng/usage
@@ -0,0 +1,4 @@
+libspng provides CMake targets:
+
+ find_package(SPNG CONFIG REQUIRED)
+ target_link_libraries(main PRIVATE $,spng::spng,spng::spng_static>)
\ No newline at end of file
diff --git a/vcpkg_installed/arm64-osx/share/libspng/vcpkg.spdx.json b/vcpkg_installed/arm64-osx/share/libspng/vcpkg.spdx.json
new file mode 100644
index 00000000..d0862de0
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libspng/vcpkg.spdx.json
@@ -0,0 +1,154 @@
+{
+ "$schema": "https://raw.githubusercontent.com/spdx/spdx-spec/v2.2.1/schemas/spdx-schema.json",
+ "spdxVersion": "SPDX-2.2",
+ "dataLicense": "CC0-1.0",
+ "SPDXID": "SPDXRef-DOCUMENT",
+ "documentNamespace": "https://spdx.org/spdxdocs/libspng-arm64-osx-0.7.4-72413d7e-1614-40dc-99ab-f46c061b1a7b",
+ "name": "libspng:arm64-osx@0.7.4 5553ab465f255abcf58b922c102d684a03691d0aa7a5a1103969f37781e73804",
+ "creationInfo": {
+ "creators": [
+ "Tool: vcpkg-2024.03.14"
+ ],
+ "created": "2024-08-05T17:59:41Z"
+ },
+ "relationships": [
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "GENERATES",
+ "relatedSpdxElement": "SPDXRef-binary"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-0"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-1"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-2"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-3"
+ },
+ {
+ "spdxElementId": "SPDXRef-binary",
+ "relationshipType": "GENERATED_FROM",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-0",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-1",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-2",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-3",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ }
+ ],
+ "packages": [
+ {
+ "name": "libspng",
+ "SPDXID": "SPDXRef-port",
+ "versionInfo": "0.7.4",
+ "downloadLocation": "git+https://github.com/Microsoft/vcpkg#ports/libspng",
+ "homepage": "https://github.com/randy408/libspng",
+ "licenseConcluded": "BSD-2-Clause",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "description": "Simple, modern libpng alternative",
+ "comment": "This is the port (recipe) consumed by vcpkg."
+ },
+ {
+ "name": "libspng:arm64-osx",
+ "SPDXID": "SPDXRef-binary",
+ "versionInfo": "5553ab465f255abcf58b922c102d684a03691d0aa7a5a1103969f37781e73804",
+ "downloadLocation": "NONE",
+ "licenseConcluded": "BSD-2-Clause",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "comment": "This is a binary package built by vcpkg."
+ },
+ {
+ "SPDXID": "SPDXRef-resource-1",
+ "name": "randy408/libspng",
+ "downloadLocation": "git+https://github.com/randy408/libspng@v0.7.4",
+ "licenseConcluded": "NOASSERTION",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "checksums": [
+ {
+ "algorithm": "SHA512",
+ "checksumValue": "cd729653599ed97f80d19f3048c1b3bc2ac16f922b3465804b1913bc45d9fc8b28b56bc2121fda36e9d3dcdd12612cced5383313b722a5342b613f8781879f1a"
+ }
+ ]
+ }
+ ],
+ "files": [
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/libspng/fix-spngconfig-cmake.patch",
+ "SPDXID": "SPDXRef-file-0",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "f0b811d39ec33c32f801e60ff7f136c61b2a1820866dad9f199543f50775099a"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/libspng/usage",
+ "SPDXID": "SPDXRef-file-1",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "439edd85d105f6d937217304fc63576451872d0c67c758ae92d16f6543421ca5"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/libspng/portfile.cmake",
+ "SPDXID": "SPDXRef-file-2",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "191c5a8f4a5351bf641ec2e0d1d91c4edfa5608a8bf337f32803ef20a8ad0b25"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/libspng/vcpkg.json",
+ "SPDXID": "SPDXRef-file-3",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "0023f620e11b4b7cceae0ae86d67790bb3dff7884cba0db9034554ac451433d6"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ }
+ ]
+}
diff --git a/vcpkg_installed/arm64-osx/share/libspng/vcpkg_abi_info.txt b/vcpkg_installed/arm64-osx/share/libspng/vcpkg_abi_info.txt
new file mode 100644
index 00000000..4570d93e
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/libspng/vcpkg_abi_info.txt
@@ -0,0 +1,18 @@
+cmake 3.30.1
+features core
+fix-spngconfig-cmake.patch f0b811d39ec33c32f801e60ff7f136c61b2a1820866dad9f199543f50775099a
+portfile.cmake 191c5a8f4a5351bf641ec2e0d1d91c4edfa5608a8bf337f32803ef20a8ad0b25
+ports.cmake 3855df80ecd84038296b7ae73271a6190f21c4af0bb1a0ca0be752a308aaa53d
+post_build_checks 2
+triplet arm64-osx
+triplet_abi ee01c9458d62d6baf9332438e02f9de2d5daa743b47a61ba6b7d68dd84dc1e65-4cdbc0a68d47eedc16d246a07a21fabfbbe19abb89f00890c58902e2cf872d6f-24e935e23698b7e71fdd6f83197468f5145378e6
+usage 439edd85d105f6d937217304fc63576451872d0c67c758ae92d16f6543421ca5
+vcpkg-cmake 80f0b4a35de8e569486cb5cc1c050ac52951992a600fd60a1d38cacaac220307
+vcpkg-cmake-config f8a190c788ce0b67531ca7b584535d87ad535f6eda7c2d6c782be7b255c50322
+vcpkg.json 0023f620e11b4b7cceae0ae86d67790bb3dff7884cba0db9034554ac451433d6
+vcpkg_copy_pdbs d57e4f196c82dc562a9968c6155073094513c31e2de475694143d3aa47954b1c
+vcpkg_fixup_pkgconfig 1a15f6c6d8e2b244d83a7514a0412d339127d2217d1df60ad1388b546c85f777
+vcpkg_from_git 96ed81968f76354c00096dd8cd4e63c6a235fa969334a11ab18d11c0c512ff58
+vcpkg_from_github b743742296a114ea1b18ae99672e02f142c4eb2bef7f57d36c038bedbfb0502f
+vcpkg_install_copyright ba6c169ab4e59fa05682e530cdeb883767de22c8391f023d4e6844a7ec5dd3d2
+zlib c2102b0d8124b02749c30b7ab35159aea6b120bfdf84928fceb40e6efe70a88a
diff --git a/vcpkg_installed/arm64-osx/share/spng/SPNGConfig.cmake b/vcpkg_installed/arm64-osx/share/spng/SPNGConfig.cmake
new file mode 100644
index 00000000..c5579fee
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/spng/SPNGConfig.cmake
@@ -0,0 +1,32 @@
+
+####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
+####### Any changes to this file will be overwritten by the next CMake run ####
+####### The input file was Config.cmake.in ########
+
+get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE)
+
+macro(set_and_check _var _file)
+ set(${_var} "${_file}")
+ if(NOT EXISTS "${_file}")
+ message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
+ endif()
+endmacro()
+
+macro(check_required_components _NAME)
+ foreach(comp ${${_NAME}_FIND_COMPONENTS})
+ if(NOT ${_NAME}_${comp}_FOUND)
+ if(${_NAME}_FIND_REQUIRED_${comp})
+ set(${_NAME}_FOUND FALSE)
+ endif()
+ endif()
+ endforeach()
+endmacro()
+
+####################################################################################
+
+include(CMakeFindDependencyMacro)
+find_dependency(ZLIB REQUIRED)
+
+include("${CMAKE_CURRENT_LIST_DIR}/SPNGTargets.cmake")
+
+check_required_components(spng)
diff --git a/vcpkg_installed/arm64-osx/share/spng/SPNGConfigVersion.cmake b/vcpkg_installed/arm64-osx/share/spng/SPNGConfigVersion.cmake
new file mode 100644
index 00000000..cc766fe7
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/spng/SPNGConfigVersion.cmake
@@ -0,0 +1,65 @@
+# This is a basic version file for the Config-mode of find_package().
+# It is used by write_basic_package_version_file() as input file for configure_file()
+# to create a version-file which can be installed along a config.cmake file.
+#
+# The created file sets PACKAGE_VERSION_EXACT if the current version string and
+# the requested version string are exactly the same and it sets
+# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version,
+# but only if the requested major version is the same as the current one.
+# The variable CVF_VERSION must be set before calling configure_file().
+
+
+set(PACKAGE_VERSION "0.7.4")
+
+if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+else()
+
+ if("0.7.4" MATCHES "^([0-9]+)\\.")
+ set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}")
+ if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0)
+ string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}")
+ endif()
+ else()
+ set(CVF_VERSION_MAJOR "0.7.4")
+ endif()
+
+ if(PACKAGE_FIND_VERSION_RANGE)
+ # both endpoints of the range must have the expected major version
+ math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1")
+ if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
+ OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR)
+ OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT)))
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+ elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR
+ AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX)
+ OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX)))
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+ else()
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+ endif()
+ else()
+ if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR)
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+ else()
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+ endif()
+
+ if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+ set(PACKAGE_VERSION_EXACT TRUE)
+ endif()
+ endif()
+endif()
+
+
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "")
+ return()
+endif()
+
+# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
+if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8")
+ math(EXPR installedBits "8 * 8")
+ set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
+ set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
diff --git a/vcpkg_installed/arm64-osx/share/spng/SPNGTargets-debug.cmake b/vcpkg_installed/arm64-osx/share/spng/SPNGTargets-debug.cmake
new file mode 100644
index 00000000..ab777996
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/spng/SPNGTargets-debug.cmake
@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "Debug".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "spng::spng_static" for configuration "Debug"
+set_property(TARGET spng::spng_static APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+set_target_properties(spng::spng_static PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
+ IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/debug/lib/libspng_static.a"
+ )
+
+list(APPEND _cmake_import_check_targets spng::spng_static )
+list(APPEND _cmake_import_check_files_for_spng::spng_static "${_IMPORT_PREFIX}/debug/lib/libspng_static.a" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/vcpkg_installed/arm64-osx/share/spng/SPNGTargets-release.cmake b/vcpkg_installed/arm64-osx/share/spng/SPNGTargets-release.cmake
new file mode 100644
index 00000000..fa7a168e
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/spng/SPNGTargets-release.cmake
@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file for configuration "Release".
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "spng::spng_static" for configuration "Release"
+set_property(TARGET spng::spng_static APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+set_target_properties(spng::spng_static PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
+ IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libspng_static.a"
+ )
+
+list(APPEND _cmake_import_check_targets spng::spng_static )
+list(APPEND _cmake_import_check_files_for_spng::spng_static "${_IMPORT_PREFIX}/lib/libspng_static.a" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
diff --git a/vcpkg_installed/arm64-osx/share/spng/SPNGTargets.cmake b/vcpkg_installed/arm64-osx/share/spng/SPNGTargets.cmake
new file mode 100644
index 00000000..37c35821
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/spng/SPNGTargets.cmake
@@ -0,0 +1,107 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
+ message(FATAL_ERROR "CMake >= 2.8.0 required")
+endif()
+if(CMAKE_VERSION VERSION_LESS "2.8.12")
+ message(FATAL_ERROR "CMake >= 2.8.12 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.8.12...3.28)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_cmake_targets_defined "")
+set(_cmake_targets_not_defined "")
+set(_cmake_expected_targets "")
+foreach(_cmake_expected_target IN ITEMS spng::spng_static)
+ list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
+ if(TARGET "${_cmake_expected_target}")
+ list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
+ else()
+ list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
+ endif()
+endforeach()
+unset(_cmake_expected_target)
+if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
+ unset(_cmake_targets_defined)
+ unset(_cmake_targets_not_defined)
+ unset(_cmake_expected_targets)
+ unset(CMAKE_IMPORT_FILE_VERSION)
+ cmake_policy(POP)
+ return()
+endif()
+if(NOT _cmake_targets_defined STREQUAL "")
+ string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
+ string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
+ message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
+endif()
+unset(_cmake_targets_defined)
+unset(_cmake_targets_not_defined)
+unset(_cmake_expected_targets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+ set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target spng::spng_static
+add_library(spng::spng_static STATIC IMPORTED)
+
+set_target_properties(spng::spng_static PROPERTIES
+ INTERFACE_COMPILE_DEFINITIONS "SPNG_STATIC"
+ INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include"
+ INTERFACE_LINK_LIBRARIES "\$;\$"
+)
+
+# Load information for each installed configuration.
+file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/SPNGTargets-*.cmake")
+foreach(_cmake_config_file IN LISTS _cmake_config_files)
+ include("${_cmake_config_file}")
+endforeach()
+unset(_cmake_config_file)
+unset(_cmake_config_files)
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(_cmake_target IN LISTS _cmake_import_check_targets)
+ if(CMAKE_VERSION VERSION_LESS "3.28"
+ OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
+ OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
+ foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
+ if(NOT EXISTS "${_cmake_file}")
+ message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
+ \"${_cmake_file}\"
+but this file does not exist. Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+ \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+ endif()
+ endforeach()
+ endif()
+ unset(_cmake_file)
+ unset("_cmake_import_check_files_for_${_cmake_target}")
+endforeach()
+unset(_cmake_target)
+unset(_cmake_import_check_targets)
+
+# This file does not depend on other imported targets which have
+# been exported from the same project but in a separate export set.
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)
diff --git a/vcpkg_installed/arm64-osx/share/tiff/copyright b/vcpkg_installed/arm64-osx/share/tiff/copyright
new file mode 100644
index 00000000..55b65673
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/tiff/copyright
@@ -0,0 +1,23 @@
+# LibTIFF license
+
+Copyright © 1988-1997 Sam Leffler\
+Copyright © 1991-1997 Silicon Graphics, Inc.
+
+Permission to use, copy, modify, distribute, and sell this software and
+its documentation for any purpose is hereby granted without fee, provided
+that (i) the above copyright notices and this permission notice appear in
+all copies of the software and related documentation, and (ii) the names of
+Sam Leffler and Silicon Graphics may not be used in any advertising or
+publicity relating to the software without the specific, prior written
+permission of Sam Leffler and Silicon Graphics.
+
+THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
+ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+OF THIS SOFTWARE.
diff --git a/vcpkg_installed/arm64-osx/share/tiff/usage b/vcpkg_installed/arm64-osx/share/tiff/usage
new file mode 100644
index 00000000..d47265b1
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/tiff/usage
@@ -0,0 +1,9 @@
+tiff is compatible with built-in CMake targets:
+
+ find_package(TIFF REQUIRED)
+ target_link_libraries(main PRIVATE TIFF::TIFF)
+
+tiff provides pkg-config modules:
+
+ # Tag Image File Format (TIFF) library.
+ libtiff-4
diff --git a/vcpkg_installed/arm64-osx/share/tiff/vcpkg-cmake-wrapper.cmake b/vcpkg_installed/arm64-osx/share/tiff/vcpkg-cmake-wrapper.cmake
new file mode 100644
index 00000000..88f2ece7
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/tiff/vcpkg-cmake-wrapper.cmake
@@ -0,0 +1,123 @@
+cmake_policy(PUSH)
+cmake_policy(SET CMP0012 NEW)
+cmake_policy(SET CMP0057 NEW)
+set(z_vcpkg_tiff_find_options "")
+if("REQUIRED" IN_LIST ARGS)
+ list(APPEND z_vcpkg_tiff_find_options "REQUIRED")
+endif()
+if("QUIET" IN_LIST ARGS)
+ list(APPEND z_vcpkg_tiff_find_options "QUIET")
+endif()
+
+_find_package(${ARGS})
+
+if(TIFF_FOUND AND "static" STREQUAL "static")
+ include(SelectLibraryConfigurations)
+ set(z_vcpkg_tiff_link_libraries "")
+ set(z_vcpkg_tiff_libraries "")
+ if("OFF")
+ find_package(WebP CONFIG ${z_vcpkg_tiff_find_options})
+ list(APPEND z_vcpkg_tiff_link_libraries "\$")
+ list(APPEND z_vcpkg_tiff_libraries ${WebP_LIBRARIES})
+ endif()
+ if("ON")
+ find_package(LibLZMA ${z_vcpkg_tiff_find_options})
+ list(APPEND z_vcpkg_tiff_link_libraries "\$")
+ list(APPEND z_vcpkg_tiff_libraries ${LIBLZMA_LIBRARIES})
+ endif()
+ if("ON")
+ find_package(JPEG ${z_vcpkg_tiff_find_options})
+ list(APPEND z_vcpkg_tiff_link_libraries "\$")
+ list(APPEND z_vcpkg_tiff_libraries ${JPEG_LIBRARIES})
+ endif()
+ if("OFF")
+ find_package(zstd CONFIG ${z_vcpkg_tiff_find_options})
+ set(z_vcpkg_tiff_zstd_target_property "IMPORTED_LOCATION_")
+ if(TARGET zstd::libzstd_shared)
+ set(z_vcpkg_tiff_zstd "\$")
+ set(z_vcpkg_tiff_zstd_target zstd::libzstd_shared)
+ if(WIN32)
+ set(z_vcpkg_tiff_zstd_target_property "IMPORTED_IMPLIB_")
+ endif()
+ else()
+ set(z_vcpkg_tiff_zstd "\$")
+ set(z_vcpkg_tiff_zstd_target zstd::libzstd_static)
+ endif()
+ get_target_property(z_vcpkg_tiff_zstd_configs "${z_vcpkg_tiff_zstd_target}" IMPORTED_CONFIGURATIONS)
+ foreach(z_vcpkg_config IN LISTS z_vcpkg_tiff_zstd_configs)
+ get_target_property(ZSTD_LIBRARY_${z_vcpkg_config} "${z_vcpkg_tiff_zstd_target}" "${z_vcpkg_tiff_zstd_target_property}${z_vcpkg_config}")
+ endforeach()
+ select_library_configurations(ZSTD)
+ if(NOT TARGET ZSTD::ZSTD)
+ add_library(ZSTD::ZSTD INTERFACE IMPORTED)
+ set_property(TARGET ZSTD::ZSTD APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${z_vcpkg_tiff_zstd})
+ endif()
+ list(APPEND z_vcpkg_tiff_link_libraries ${z_vcpkg_tiff_zstd})
+ list(APPEND z_vcpkg_tiff_libraries ${ZSTD_LIBRARIES})
+ unset(z_vcpkg_tiff_zstd)
+ unset(z_vcpkg_tiff_zstd_configs)
+ unset(z_vcpkg_config)
+ unset(z_vcpkg_tiff_zstd_target)
+ endif()
+ if("OFF")
+ find_package(unofficial-lerc ${z_vcpkg_tiff_find_options})
+ get_target_property(z_vcpkg_lerc_configs unofficial::Lerc::Lerc IMPORTED_CONFIGURATIONS)
+ foreach(z_vcpkg_property IN ITEMS IMPORTED_IMPLIB_ IMPORTED_LOCATION_)
+ foreach(z_vcpkg_config IN LISTS z_vcpkg_lerc_configs)
+ get_target_property(Z_VCPKG_LERC_LIBRARY_${z_vcpkg_config} unofficial::Lerc::Lerc "${z_vcpkg_property}${z_vcpkg_config}")
+ endforeach()
+ select_library_configurations(Z_VCPKG_LERC)
+ if(Z_VCPKG_LERC_LIBRARIES)
+ break()
+ endif()
+ endforeach()
+ list(APPEND z_vcpkg_tiff_link_libraries "\$")
+ list(APPEND z_vcpkg_tiff_libraries ${Z_VCPKG_LERC_LIBRARIES})
+ unset(z_vcpkg_config)
+ unset(z_vcpkg_lerc_configs)
+ unset(z_vcpkg_property)
+ unset(Z_VCPKG_LERC_FOUND)
+ endif()
+ if("OFF")
+ find_package(libdeflate ${z_vcpkg_tiff_find_options})
+ set(z_vcpkg_property "IMPORTED_LOCATION_")
+ if(TARGET libdeflate::libdeflate_shared)
+ set(z_vcpkg_libdeflate_target libdeflate::libdeflate_shared)
+ if(WIN32)
+ set(z_vcpkg_property "IMPORTED_IMPLIB_")
+ endif()
+ else()
+ set(z_vcpkg_libdeflate_target libdeflate::libdeflate_static)
+ endif()
+ get_target_property(z_vcpkg_libdeflate_configs "${z_vcpkg_libdeflate_target}" IMPORTED_CONFIGURATIONS)
+ foreach(z_vcpkg_config IN LISTS z_vcpkg_libdeflate_configs)
+ get_target_property(Z_VCPKG_DEFLATE_LIBRARY_${z_vcpkg_config} "${z_vcpkg_libdeflate_target}" "${z_vcpkg_property}${z_vcpkg_config}")
+ endforeach()
+ select_library_configurations(Z_VCPKG_DEFLATE)
+ list(APPEND z_vcpkg_tiff_link_libraries "\$")
+ list(APPEND z_vcpkg_tiff_libraries ${Z_VCPKG_DEFLATE_LIBRARIES})
+ unset(z_vcpkg_config)
+ unset(z_vcpkg_libdeflate_configs)
+ unset(z_vcpkg_libdeflate_target)
+ unset(z_vcpkg_property)
+ unset(Z_VCPKG_DEFLATE_FOUND)
+ endif()
+ if("ON")
+ find_package(ZLIB ${z_vcpkg_tiff_find_options})
+ list(APPEND z_vcpkg_tiff_link_libraries "\$")
+ list(APPEND z_vcpkg_tiff_libraries ${ZLIB_LIBRARIES})
+ endif()
+ if(UNIX)
+ list(APPEND z_vcpkg_tiff_link_libraries m)
+ list(APPEND z_vcpkg_tiff_libraries m)
+ endif()
+
+ if(TARGET TIFF::TIFF)
+ set_property(TARGET TIFF::TIFF APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${z_vcpkg_tiff_link_libraries})
+ endif()
+ list(APPEND TIFF_LIBRARIES ${z_vcpkg_tiff_libraries})
+ unset(z_vcpkg_tiff_link_libraries)
+ unset(z_vcpkg_tiff_libraries)
+endif()
+unset(z_vcpkg_tiff_find_options)
+cmake_policy(POP)
diff --git a/vcpkg_installed/arm64-osx/share/tiff/vcpkg.spdx.json b/vcpkg_installed/arm64-osx/share/tiff/vcpkg.spdx.json
new file mode 100644
index 00000000..e274ea17
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/tiff/vcpkg.spdx.json
@@ -0,0 +1,184 @@
+{
+ "$schema": "https://raw.githubusercontent.com/spdx/spdx-spec/v2.2.1/schemas/spdx-schema.json",
+ "spdxVersion": "SPDX-2.2",
+ "dataLicense": "CC0-1.0",
+ "SPDXID": "SPDXRef-DOCUMENT",
+ "documentNamespace": "https://spdx.org/spdxdocs/tiff-arm64-osx-4.6.0#4-b6be5e48-db68-47e5-b674-fcdde9b987fd",
+ "name": "tiff:arm64-osx@4.6.0#4 7cab047eda3134842cf4b2a1f26761f1e747b73263ab178cf662c16df3964525",
+ "creationInfo": {
+ "creators": [
+ "Tool: vcpkg-2024.03.14"
+ ],
+ "created": "2024-08-06T07:00:58Z"
+ },
+ "relationships": [
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "GENERATES",
+ "relatedSpdxElement": "SPDXRef-binary"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-0"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-1"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-2"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-3"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-4"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-5"
+ },
+ {
+ "spdxElementId": "SPDXRef-binary",
+ "relationshipType": "GENERATED_FROM",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-0",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-1",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-2",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-3",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-4",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-5",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ }
+ ],
+ "packages": [
+ {
+ "name": "tiff",
+ "SPDXID": "SPDXRef-port",
+ "versionInfo": "4.6.0#4",
+ "downloadLocation": "NOASSERTION",
+ "homepage": "https://libtiff.gitlab.io/libtiff/",
+ "licenseConcluded": "libtiff",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "description": "A library that supports the manipulation of TIFF image files",
+ "comment": "This is the port (recipe) consumed by vcpkg."
+ },
+ {
+ "name": "tiff:arm64-osx",
+ "SPDXID": "SPDXRef-binary",
+ "versionInfo": "7cab047eda3134842cf4b2a1f26761f1e747b73263ab178cf662c16df3964525",
+ "downloadLocation": "NONE",
+ "licenseConcluded": "libtiff",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "comment": "This is a binary package built by vcpkg."
+ }
+ ],
+ "files": [
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/tiff/FindCMath.patch",
+ "SPDXID": "SPDXRef-file-0",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "65d9f0fbbbcce7b82695d45e60a5f13edc13dd01e6ac57403d13f8799fa55e2d"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/tiff/usage",
+ "SPDXID": "SPDXRef-file-1",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "dcd381c31423169c97bb5a109c91282657eb7b2b9cacadf7964c67dcd5495f1e"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/tiff/portfile.cmake",
+ "SPDXID": "SPDXRef-file-2",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "8ebc415dc97a711656966a5a6fd99bafe5a17d795a62dd7bca14c3a3ded83034"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/tiff/requires-lerc.patch",
+ "SPDXID": "SPDXRef-file-3",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "3a8df29c0c6122bfa54167f3de62477aa922db25a74625eca538cb00e7ad3e14"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/tiff/vcpkg.json",
+ "SPDXID": "SPDXRef-file-4",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "9b4d32603cbce58b0f92005e602ecca303769ee07b909acb4c1d691b495835bf"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/tiff/vcpkg-cmake-wrapper.cmake.in",
+ "SPDXID": "SPDXRef-file-5",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "1a16c95aae11fa25f8593ce75a4334a7f55afbc580c4be6e1f88bb6afd07352f"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ }
+ ]
+}
diff --git a/vcpkg_installed/arm64-osx/share/tiff/vcpkg_abi_info.txt b/vcpkg_installed/arm64-osx/share/tiff/vcpkg_abi_info.txt
new file mode 100644
index 00000000..70ffc1b9
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/tiff/vcpkg_abi_info.txt
@@ -0,0 +1,25 @@
+FindCMath.patch 65d9f0fbbbcce7b82695d45e60a5f13edc13dd01e6ac57403d13f8799fa55e2d
+cmake 3.30.1
+features core;jpeg;lzma;zip
+libjpeg-turbo a7fd6309e4d0f4283e4a4160bda4275553b153d1019311c540b5571c1061fdde
+liblzma c42ec360aed3f7b37aa618421dfb96cca740c4e1971dff46d55aacacf2dd3c79
+portfile.cmake 8ebc415dc97a711656966a5a6fd99bafe5a17d795a62dd7bca14c3a3ded83034
+ports.cmake 3855df80ecd84038296b7ae73271a6190f21c4af0bb1a0ca0be752a308aaa53d
+post_build_checks 2
+requires-lerc.patch 3a8df29c0c6122bfa54167f3de62477aa922db25a74625eca538cb00e7ad3e14
+triplet arm64-osx
+triplet_abi ee01c9458d62d6baf9332438e02f9de2d5daa743b47a61ba6b7d68dd84dc1e65-4cdbc0a68d47eedc16d246a07a21fabfbbe19abb89f00890c58902e2cf872d6f-24e935e23698b7e71fdd6f83197468f5145378e6
+usage dcd381c31423169c97bb5a109c91282657eb7b2b9cacadf7964c67dcd5495f1e
+vcpkg-cmake 80f0b4a35de8e569486cb5cc1c050ac52951992a600fd60a1d38cacaac220307
+vcpkg-cmake-config f8a190c788ce0b67531ca7b584535d87ad535f6eda7c2d6c782be7b255c50322
+vcpkg-cmake-wrapper.cmake.in 1a16c95aae11fa25f8593ce75a4334a7f55afbc580c4be6e1f88bb6afd07352f
+vcpkg.json 9b4d32603cbce58b0f92005e602ecca303769ee07b909acb4c1d691b495835bf
+vcpkg_check_features 943b217e0968d64cf2cb9c272608e6a0b497377e792034f819809a79e1502c2b
+vcpkg_copy_pdbs d57e4f196c82dc562a9968c6155073094513c31e2de475694143d3aa47954b1c
+vcpkg_copy_tools 3d45ff761bddbabe8923b52330168dc3abd295fa469d3f2e47cb14dce85332d5
+vcpkg_fixup_pkgconfig 1a15f6c6d8e2b244d83a7514a0412d339127d2217d1df60ad1388b546c85f777
+vcpkg_from_git 96ed81968f76354c00096dd8cd4e63c6a235fa969334a11ab18d11c0c512ff58
+vcpkg_from_gitlab 5bbb6c56a4be11c0d10d488d95af91a37b15f520eba862254a24c6665dd39588
+vcpkg_install_copyright ba6c169ab4e59fa05682e530cdeb883767de22c8391f023d4e6844a7ec5dd3d2
+vcpkg_replace_string b450deb79207478b37119743e00808ebc42de0628e7b98c14ab24728bd5c78b8
+zlib c2102b0d8124b02749c30b7ab35159aea6b120bfdf84928fceb40e6efe70a88a
diff --git a/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/copyright b/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/copyright
new file mode 100644
index 00000000..2e4eac82
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/copyright
@@ -0,0 +1,23 @@
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/vcpkg-port-config.cmake b/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/vcpkg-port-config.cmake
new file mode 100644
index 00000000..980d4113
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/vcpkg-port-config.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/vcpkg_cmake_config_fixup.cmake")
diff --git a/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/vcpkg.spdx.json b/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/vcpkg.spdx.json
new file mode 100644
index 00000000..f8601c17
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/vcpkg.spdx.json
@@ -0,0 +1,160 @@
+{
+ "$schema": "https://raw.githubusercontent.com/spdx/spdx-spec/v2.2.1/schemas/spdx-schema.json",
+ "spdxVersion": "SPDX-2.2",
+ "dataLicense": "CC0-1.0",
+ "SPDXID": "SPDXRef-DOCUMENT",
+ "documentNamespace": "https://spdx.org/spdxdocs/vcpkg-cmake-config-arm64-osx-2024-05-23-343c7f67-3303-42a6-a0ef-720c168cbe9a",
+ "name": "vcpkg-cmake-config:arm64-osx@2024-05-23 f8a190c788ce0b67531ca7b584535d87ad535f6eda7c2d6c782be7b255c50322",
+ "creationInfo": {
+ "creators": [
+ "Tool: vcpkg-2024.03.14"
+ ],
+ "created": "2024-08-05T17:59:33Z"
+ },
+ "relationships": [
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "GENERATES",
+ "relatedSpdxElement": "SPDXRef-binary"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-0"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-1"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-2"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-3"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-4"
+ },
+ {
+ "spdxElementId": "SPDXRef-binary",
+ "relationshipType": "GENERATED_FROM",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-0",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-1",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-2",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-3",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-4",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ }
+ ],
+ "packages": [
+ {
+ "name": "vcpkg-cmake-config",
+ "SPDXID": "SPDXRef-port",
+ "versionInfo": "2024-05-23",
+ "downloadLocation": "git+https://github.com/Microsoft/vcpkg#ports/vcpkg-cmake-config",
+ "licenseConcluded": "MIT",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "comment": "This is the port (recipe) consumed by vcpkg."
+ },
+ {
+ "name": "vcpkg-cmake-config:arm64-osx",
+ "SPDXID": "SPDXRef-binary",
+ "versionInfo": "f8a190c788ce0b67531ca7b584535d87ad535f6eda7c2d6c782be7b255c50322",
+ "downloadLocation": "NONE",
+ "licenseConcluded": "MIT",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "comment": "This is a binary package built by vcpkg."
+ }
+ ],
+ "files": [
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/vcpkg-cmake-config/portfile.cmake",
+ "SPDXID": "SPDXRef-file-0",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "832b34e63f5af41ad1b2e4aa79c5bfa507a005b120b51548e674accc706837d7"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/vcpkg-cmake-config/vcpkg.json",
+ "SPDXID": "SPDXRef-file-1",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "3964c3d0e6b39c7f42cebd5949cccdc7eb6feb83ee434fe73756c954b173c5c2"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/vcpkg-cmake-config/copyright",
+ "SPDXID": "SPDXRef-file-2",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "04b60f99a43bfd7fefdc8364b24aac704a2160cef969b75ba6a38b62dc4c4b70"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/vcpkg-cmake-config/vcpkg_cmake_config_fixup.cmake",
+ "SPDXID": "SPDXRef-file-3",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "f3880578674f1bdbc54b67c5fc3787aaab8ee8bcf4e3e6e008204bf4ab67aa0b"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/vcpkg-cmake-config/vcpkg-port-config.cmake",
+ "SPDXID": "SPDXRef-file-4",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "72bc3093337e633bdd19fe5d4dd1f38ca1918def49608d676a9c98c686d38b1e"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ }
+ ]
+}
diff --git a/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/vcpkg_abi_info.txt b/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/vcpkg_abi_info.txt
new file mode 100644
index 00000000..acbacf1b
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/vcpkg_abi_info.txt
@@ -0,0 +1,12 @@
+cmake 3.30.1
+copyright 04b60f99a43bfd7fefdc8364b24aac704a2160cef969b75ba6a38b62dc4c4b70
+features core
+portfile.cmake 832b34e63f5af41ad1b2e4aa79c5bfa507a005b120b51548e674accc706837d7
+ports.cmake 3855df80ecd84038296b7ae73271a6190f21c4af0bb1a0ca0be752a308aaa53d
+post_build_checks 2
+triplet arm64-osx
+triplet_abi ee01c9458d62d6baf9332438e02f9de2d5daa743b47a61ba6b7d68dd84dc1e65-4cdbc0a68d47eedc16d246a07a21fabfbbe19abb89f00890c58902e2cf872d6f-24e935e23698b7e71fdd6f83197468f5145378e6
+vcpkg-port-config.cmake 72bc3093337e633bdd19fe5d4dd1f38ca1918def49608d676a9c98c686d38b1e
+vcpkg.json 3964c3d0e6b39c7f42cebd5949cccdc7eb6feb83ee434fe73756c954b173c5c2
+vcpkg_cmake_config_fixup.cmake f3880578674f1bdbc54b67c5fc3787aaab8ee8bcf4e3e6e008204bf4ab67aa0b
+vcpkg_list f5de3ebcbc40a4db90622ade9aca918e2cf404dc0d91342fcde457d730e6fa29
diff --git a/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/vcpkg_cmake_config_fixup.cmake b/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/vcpkg_cmake_config_fixup.cmake
new file mode 100644
index 00000000..83a1858f
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/vcpkg-cmake-config/vcpkg_cmake_config_fixup.cmake
@@ -0,0 +1,278 @@
+include_guard(GLOBAL)
+
+function(vcpkg_cmake_config_fixup)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "DO_NOT_DELETE_PARENT_CONFIG_PATH;NO_PREFIX_CORRECTION" "PACKAGE_NAME;CONFIG_PATH;TOOLS_PATH" "")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "vcpkg_cmake_config_fixup was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT arg_PACKAGE_NAME)
+ set(arg_PACKAGE_NAME "${PORT}")
+ endif()
+ if(NOT arg_CONFIG_PATH)
+ set(arg_CONFIG_PATH "share/${arg_PACKAGE_NAME}")
+ endif()
+ if(NOT arg_TOOLS_PATH)
+ set(arg_TOOLS_PATH "tools/${PORT}")
+ endif()
+ set(target_path "share/${arg_PACKAGE_NAME}")
+
+ string(REPLACE "." "\\." EXECUTABLE_SUFFIX "${VCPKG_TARGET_EXECUTABLE_SUFFIX}")
+
+ set(debug_share "${CURRENT_PACKAGES_DIR}/debug/${target_path}")
+ set(release_share "${CURRENT_PACKAGES_DIR}/${target_path}")
+
+ if(NOT arg_CONFIG_PATH STREQUAL "share/${arg_PACKAGE_NAME}")
+ if(arg_CONFIG_PATH STREQUAL "share")
+ set(arg_CONFIG_PATH z_vcpkg_share)
+ file(RENAME "${CURRENT_PACKAGES_DIR}/debug/share" "${CURRENT_PACKAGES_DIR}/debug/${arg_CONFIG_PATH}")
+ file(RENAME "${CURRENT_PACKAGES_DIR}/share" "${CURRENT_PACKAGES_DIR}/${arg_CONFIG_PATH}")
+ endif()
+
+ set(debug_config "${CURRENT_PACKAGES_DIR}/debug/${arg_CONFIG_PATH}")
+ set(release_config "${CURRENT_PACKAGES_DIR}/${arg_CONFIG_PATH}")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ if(NOT EXISTS "${debug_config}")
+ message(FATAL_ERROR "'${debug_config}' does not exist.")
+ endif()
+
+ # This roundabout handling enables CONFIG_PATH = share
+ file(MAKE_DIRECTORY "${debug_share}")
+ file(GLOB files "${debug_config}/*")
+ file(COPY ${files} DESTINATION "${debug_share}")
+ file(REMOVE_RECURSE "${debug_config}")
+ endif()
+
+ file(GLOB files "${release_config}/*")
+ file(COPY ${files} DESTINATION "${release_share}")
+ file(REMOVE_RECURSE "${release_config}")
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ get_filename_component(debug_config_dir_name "${debug_config}" NAME)
+ string(TOLOWER "${debug_config_dir_name}" debug_config_dir_name)
+ if(debug_config_dir_name STREQUAL "cmake" AND NOT arg_DO_NOT_DELETE_PARENT_CONFIG_PATH)
+ file(REMOVE_RECURSE "${debug_config}")
+ else()
+ get_filename_component(debug_config_parent_dir "${debug_config}" DIRECTORY)
+ get_filename_component(debug_config_dir_name "${debug_config_parent_dir}" NAME)
+ string(TOLOWER "${debug_config_dir_name}" debug_config_dir_name)
+ if(debug_config_dir_name STREQUAL "cmake" AND NOT arg_DO_NOT_DELETE_PARENT_CONFIG_PATH)
+ file(REMOVE_RECURSE "${debug_config_parent_dir}")
+ endif()
+ endif()
+ endif()
+
+ get_filename_component(release_config_dir_name "${release_config}" NAME)
+ string(TOLOWER "${release_config_dir_name}" release_config_dir_name)
+ if(release_config_dir_name STREQUAL "cmake" AND NOT arg_DO_NOT_DELETE_PARENT_CONFIG_PATH)
+ file(REMOVE_RECURSE "${release_config}")
+ else()
+ get_filename_component(release_config_parent_dir "${release_config}" DIRECTORY)
+ get_filename_component(release_config_dir_name "${release_config_parent_dir}" NAME)
+ string(TOLOWER "${release_config_dir_name}" release_config_dir_name)
+ if(release_config_dir_name STREQUAL "cmake" AND NOT arg_DO_NOT_DELETE_PARENT_CONFIG_PATH)
+ file(REMOVE_RECURSE "${release_config_parent_dir}")
+ endif()
+ endif()
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ if(NOT EXISTS "${debug_share}")
+ message(FATAL_ERROR "'${debug_share}' does not exist.")
+ endif()
+ endif()
+
+ file(GLOB_RECURSE release_targets
+ "${release_share}/*-release.cmake"
+ )
+ foreach(release_target IN LISTS release_targets)
+ file(READ "${release_target}" contents)
+ string(REPLACE "${CURRENT_INSTALLED_DIR}" "\${_IMPORT_PREFIX}" contents "${contents}")
+ string(REGEX REPLACE "\\\${_IMPORT_PREFIX}/bin/([^ \"]+${EXECUTABLE_SUFFIX})" "\${_IMPORT_PREFIX}/${arg_TOOLS_PATH}/\\1" contents "${contents}")
+ file(WRITE "${release_target}" "${contents}")
+ endforeach()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ file(GLOB_RECURSE debug_targets
+ "${debug_share}/*-debug.cmake"
+ )
+ foreach(debug_target IN LISTS debug_targets)
+ file(RELATIVE_PATH debug_target_rel "${debug_share}" "${debug_target}")
+
+ file(READ "${debug_target}" contents)
+ string(REPLACE "${CURRENT_INSTALLED_DIR}" "\${_IMPORT_PREFIX}" contents "${contents}")
+ string(REGEX REPLACE "\\\${_IMPORT_PREFIX}/bin/([^ \";]+${EXECUTABLE_SUFFIX})" "\${_IMPORT_PREFIX}/${arg_TOOLS_PATH}/\\1" contents "${contents}")
+ string(REPLACE "\${_IMPORT_PREFIX}/lib" "\${_IMPORT_PREFIX}/debug/lib" contents "${contents}")
+ string(REPLACE "\${_IMPORT_PREFIX}/bin" "\${_IMPORT_PREFIX}/debug/bin" contents "${contents}")
+ file(WRITE "${release_share}/${debug_target_rel}" "${contents}")
+
+ file(REMOVE "${debug_target}")
+ endforeach()
+ endif()
+
+ #Fix ${_IMPORT_PREFIX} and absolute paths in cmake generated targets and configs;
+ #Since those can be renamed we have to check in every *.cmake, but only once.
+ file(GLOB_RECURSE main_cmakes "${release_share}/*.cmake")
+ if(NOT DEFINED Z_VCPKG_CMAKE_CONFIG_ALREADY_FIXED_UP)
+ vcpkg_list(SET Z_VCPKG_CMAKE_CONFIG_ALREADY_FIXED_UP)
+ endif()
+ foreach(already_fixed_up IN LISTS Z_VCPKG_CMAKE_CONFIG_ALREADY_FIXED_UP)
+ vcpkg_list(REMOVE_ITEM main_cmakes "${already_fixed_up}")
+ endforeach()
+ vcpkg_list(APPEND Z_VCPKG_CMAKE_CONFIG_ALREADY_FIXED_UP ${main_cmakes})
+ set(Z_VCPKG_CMAKE_CONFIG_ALREADY_FIXED_UP "${Z_VCPKG_CMAKE_CONFIG_ALREADY_FIXED_UP}" CACHE INTERNAL "")
+
+ foreach(main_cmake IN LISTS main_cmakes)
+ file(READ "${main_cmake}" contents)
+ # Note: I think the following comment is no longer true, since we now require the path to be `share/blah`
+ # however, I don't know it for sure.
+ # - nimazzuc
+
+ #This correction is not correct for all cases. To make it correct for all cases it needs to consider
+ #original folder deepness to CURRENT_PACKAGES_DIR in comparison to the moved to folder deepness which
+ #is always at least (>=) 2, e.g. share/${PORT}. Currently the code assumes it is always 2 although
+ #this requirement is only true for the *Config.cmake. The targets are not required to be in the same
+ #folder as the *Config.cmake!
+ if(NOT arg_NO_PREFIX_CORRECTION)
+ string(REGEX REPLACE
+[[get_filename_component\(_IMPORT_PREFIX "\${CMAKE_CURRENT_LIST_FILE}" PATH\)(
+get_filename_component\(_IMPORT_PREFIX "\${_IMPORT_PREFIX}" PATH\))*]]
+[[get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)]]
+ contents "${contents}") # see #1044 for details why this replacement is necessary. See #4782 why it must be a regex.
+ string(REGEX REPLACE
+[[get_filename_component\(PACKAGE_PREFIX_DIR "\${CMAKE_CURRENT_LIST_DIR}/\.\./(\.\./)*" ABSOLUTE\)]]
+[[get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE)]]
+ contents "${contents}")
+ string(REGEX REPLACE
+[[get_filename_component\(PACKAGE_PREFIX_DIR "\${CMAKE_CURRENT_LIST_DIR}/\.\.((\\|/)\.\.)*" ABSOLUTE\)]]
+[[get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE)]]
+ contents "${contents}") # This is a meson-related workaround, see https://github.com/mesonbuild/meson/issues/6955
+ endif()
+
+ # Merge release and debug configurations of target property INTERFACE_LINK_LIBRARIES.
+ string(REPLACE "${release_share}/" "${debug_share}/" debug_cmake "${main_cmake}")
+ if(DEFINED VCPKG_BUILD_TYPE)
+ # Skip. Warning: A release-only port in a dual-config installation
+ # may pull release dependencies into the debug configuration.
+ elseif(NOT contents MATCHES "INTERFACE_LINK_LIBRARIES")
+ # Skip. No relevant properties.
+ elseif(NOT contents MATCHES "# Generated CMake target import file\\.")
+ # Skip. No safe assumptions about a matching debug import file.
+ elseif(NOT EXISTS "${debug_cmake}")
+ message(SEND_ERROR "Did not find a debug import file matching '${main_cmake}'")
+ else()
+ file(READ "${debug_cmake}" debug_contents)
+ set(remainder "${contents}")
+ while(remainder)
+ z_vcpkg_cmake_config_fixup_match_command("${remainder}" "set_target_properties(" matched_command remainder)
+ if(NOT matched_command MATCHES "set_target_properties[(]([^ \$]*) PROPERTIES.* INTERFACE_LINK_LIBRARIES \"([^\"]*)\"")
+ continue()
+ endif()
+ set(target "${CMAKE_MATCH_1}")
+ set(release_libs "${CMAKE_MATCH_2}")
+ z_vcpkg_cmake_config_fixup_match_command("${debug_contents}" "set_target_properties(${target} " debug_command unused)
+ if(NOT debug_command MATCHES " INTERFACE_LINK_LIBRARIES \"([^\"]*)\"")
+ message(SEND_ERROR "Did not find a debug configuration for target '${target}'.")
+ continue()
+ endif()
+ set(debug_libs "${CMAKE_MATCH_1}")
+ z_vcpkg_cmake_config_fixup_merge(merged_libs release_libs debug_libs)
+ string(REPLACE " INTERFACE_LINK_LIBRARIES \"${release_libs}\"" " INTERFACE_LINK_LIBRARIES \"${merged_libs}\"" updated_command "${matched_command}")
+ string(REPLACE "${matched_command}" "${updated_command}" contents "${contents}")
+ endwhile()
+ endif()
+
+ #Fix absolute paths to installed dir with ones relative to ${CMAKE_CURRENT_LIST_DIR}
+ #This happens if vcpkg built libraries are directly linked to a target instead of using
+ #an imported target.
+ string(REPLACE "${CURRENT_INSTALLED_DIR}" [[${VCPKG_IMPORT_PREFIX}]] contents "${contents}")
+ file(TO_CMAKE_PATH "${CURRENT_PACKAGES_DIR}" cmake_current_packages_dir)
+ string(REPLACE "${cmake_current_packages_dir}" [[${VCPKG_IMPORT_PREFIX}]] contents "${contents}")
+ # If ${VCPKG_IMPORT_PREFIX} was actually used, inject a definition of it:
+ string(FIND "${contents}" [[${VCPKG_IMPORT_PREFIX}]] index)
+ if (NOT index STREQUAL "-1")
+ get_filename_component(main_cmake_dir "${main_cmake}" DIRECTORY)
+ # Calculate relative to be a sequence of "../"
+ file(RELATIVE_PATH relative "${main_cmake_dir}" "${cmake_current_packages_dir}")
+ string(PREPEND contents "get_filename_component(VCPKG_IMPORT_PREFIX \"\${CMAKE_CURRENT_LIST_DIR}\/${relative}\" ABSOLUTE)\n")
+ endif()
+
+ file(WRITE "${main_cmake}" "${contents}")
+ endforeach()
+
+ file(GLOB_RECURSE unused_files
+ "${debug_share}/*[Tt]argets.cmake"
+ "${debug_share}/*[Cc]onfig.cmake"
+ "${debug_share}/*[Cc]onfigVersion.cmake"
+ "${debug_share}/*[Cc]onfig-version.cmake"
+ )
+ foreach(unused_file IN LISTS unused_files)
+ file(REMOVE "${unused_file}")
+ endforeach()
+
+ # Remove /debug// if it's empty.
+ file(GLOB_RECURSE remaining_files "${debug_share}/*")
+ if(remaining_files STREQUAL "")
+ file(REMOVE_RECURSE "${debug_share}")
+ endif()
+
+ # Remove /debug/share/ if it's empty.
+ file(GLOB_RECURSE remaining_files "${CURRENT_PACKAGES_DIR}/debug/share/*")
+ if(remaining_files STREQUAL "")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")
+ endif()
+endfunction()
+
+# Match a command from "" to ")\n". On match, returns the command and
+# the remainder from haystack. Otherwise, returns empty values.
+function(z_vcpkg_cmake_config_fixup_match_command haystack needle out_match out_remainder)
+ set(match "")
+ set(remainder "")
+ string(FIND "${haystack}" "${needle}" first)
+ if(NOT first EQUAL "-1")
+ string(SUBSTRING "${haystack}" ${first} -1 tmp)
+ string(FIND "${tmp}" ")\n" bound)
+ if(NOT bound EQUAL "-1")
+ math(EXPR bound "${bound} + 2")
+ string(SUBSTRING "${tmp}" 0 ${bound} match)
+ string(SUBSTRING "${tmp}" "${bound}" -1 remainder)
+ endif()
+ endif()
+ set("${out_match}" "${match}" PARENT_SCOPE)
+ set("${out_remainder}" "${remainder}" PARENT_SCOPE)
+endfunction()
+
+# Merges link interface library lists for release and debug
+# into a single expression which use generator expression as necessary.
+function(z_vcpkg_cmake_config_fixup_merge out_var release_var debug_var)
+ set(release_libs "VCPKG;${${release_var}}")
+ string(REGEX REPLACE ";optimized;([^;]*)" ";\\1" release_libs "${release_libs}")
+ string(REGEX REPLACE ";debug;([^;]*)" ";" release_libs "${release_libs}")
+ list(REMOVE_AT release_libs 0)
+ list(FILTER release_libs EXCLUDE REGEX [[^\\[$]<\\[$]:]])
+ list(TRANSFORM release_libs REPLACE [[^\\[$]<\\[$]>:(.*)>$]] "\\1")
+
+ set(debug_libs "VCPKG;${${debug_var}}")
+ string(REGEX REPLACE ";optimized;([^;]*)" ";" debug_libs "${debug_libs}")
+ string(REGEX REPLACE ";debug;([^;]*)" ";\\1" debug_libs "${debug_libs}")
+ list(REMOVE_AT debug_libs 0)
+ list(FILTER debug_libs EXCLUDE REGEX [[^\\[$]<\\[$]>:]])
+ list(TRANSFORM debug_libs REPLACE [[^\\[$]<\\[$]:(.*)>$]] "\\1")
+
+ set(merged_libs "")
+ foreach(release_lib debug_lib IN ZIP_LISTS release_libs debug_libs)
+ if(release_lib STREQUAL debug_lib)
+ list(APPEND merged_libs "${release_lib}")
+ else()
+ if(release_lib)
+ list(APPEND merged_libs "\\\$<\\\$>:${release_lib}>")
+ endif()
+ if(debug_lib)
+ list(APPEND merged_libs "\\\$<\\\$:${debug_lib}>")
+ endif()
+ endif()
+ endforeach()
+ set("${out_var}" "${merged_libs}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg_installed/arm64-osx/share/vcpkg-cmake/copyright b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/copyright
new file mode 100644
index 00000000..4d23e0e3
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/copyright
@@ -0,0 +1,20 @@
+MIT License
+
+Copyright (c) Microsoft Corporation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this
+software and associated documentation files (the "Software"), to deal in the Software
+without restriction, including without limitation the rights to use, copy, modify,
+merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be included in all copies
+or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg-port-config.cmake b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg-port-config.cmake
new file mode 100644
index 00000000..f2a973d4
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg-port-config.cmake
@@ -0,0 +1,3 @@
+include("${CMAKE_CURRENT_LIST_DIR}/vcpkg_cmake_configure.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/vcpkg_cmake_build.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/vcpkg_cmake_install.cmake")
diff --git a/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg.spdx.json b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg.spdx.json
new file mode 100644
index 00000000..ae9d8de9
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg.spdx.json
@@ -0,0 +1,182 @@
+{
+ "$schema": "https://raw.githubusercontent.com/spdx/spdx-spec/v2.2.1/schemas/spdx-schema.json",
+ "spdxVersion": "SPDX-2.2",
+ "dataLicense": "CC0-1.0",
+ "SPDXID": "SPDXRef-DOCUMENT",
+ "documentNamespace": "https://spdx.org/spdxdocs/vcpkg-cmake-arm64-osx-2024-04-23-f96212b8-ffd9-4043-9cc0-7dd98527fa9d",
+ "name": "vcpkg-cmake:arm64-osx@2024-04-23 80f0b4a35de8e569486cb5cc1c050ac52951992a600fd60a1d38cacaac220307",
+ "creationInfo": {
+ "creators": [
+ "Tool: vcpkg-2024.03.14"
+ ],
+ "created": "2024-08-05T17:59:33Z"
+ },
+ "relationships": [
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "GENERATES",
+ "relatedSpdxElement": "SPDXRef-binary"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-0"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-1"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-2"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-3"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-4"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-5"
+ },
+ {
+ "spdxElementId": "SPDXRef-binary",
+ "relationshipType": "GENERATED_FROM",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-0",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-1",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-2",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-3",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-4",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-5",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ }
+ ],
+ "packages": [
+ {
+ "name": "vcpkg-cmake",
+ "SPDXID": "SPDXRef-port",
+ "versionInfo": "2024-04-23",
+ "downloadLocation": "git+https://github.com/Microsoft/vcpkg#ports/vcpkg-cmake",
+ "licenseConcluded": "MIT",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "comment": "This is the port (recipe) consumed by vcpkg."
+ },
+ {
+ "name": "vcpkg-cmake:arm64-osx",
+ "SPDXID": "SPDXRef-binary",
+ "versionInfo": "80f0b4a35de8e569486cb5cc1c050ac52951992a600fd60a1d38cacaac220307",
+ "downloadLocation": "NONE",
+ "licenseConcluded": "MIT",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "comment": "This is a binary package built by vcpkg."
+ }
+ ],
+ "files": [
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/vcpkg-cmake/vcpkg_cmake_install.cmake",
+ "SPDXID": "SPDXRef-file-0",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "3ae7886dc8434fac6f1e61190cc355fdec5fbd4f60758e2de20423cf49c91369"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/vcpkg-cmake/vcpkg_cmake_build.cmake",
+ "SPDXID": "SPDXRef-file-1",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "6d1c27080fe3e768b5e7b968d6a28a37db154ebcb214297de25f10b6713511e1"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/vcpkg-cmake/portfile.cmake",
+ "SPDXID": "SPDXRef-file-2",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "a711531b7f13b7da16fa1f25d7c5737a423d4a126465dc9e6689a0f043fcc1aa"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/vcpkg-cmake/vcpkg.json",
+ "SPDXID": "SPDXRef-file-3",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "6fd546b781a1aa5df572bdd31672cf222e55698aa5bf7d3e5c11abf1ae56a45b"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/vcpkg-cmake/vcpkg_cmake_configure.cmake",
+ "SPDXID": "SPDXRef-file-4",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "a8bc92be2faf621d6183ed1f3eb2ac3b103f4418b95f8695cf0dc7f7c5e8f724"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/vcpkg-cmake/vcpkg-port-config.cmake",
+ "SPDXID": "SPDXRef-file-5",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "f0a30f77c8f5e3ac40436fe2518a61ad067f2955c7ef3be6d6a0ca4b81cd2a45"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ }
+ ]
+}
diff --git a/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg_abi_info.txt b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg_abi_info.txt
new file mode 100644
index 00000000..4f813b0b
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg_abi_info.txt
@@ -0,0 +1,19 @@
+cmake 3.30.1
+features core
+portfile.cmake a711531b7f13b7da16fa1f25d7c5737a423d4a126465dc9e6689a0f043fcc1aa
+ports.cmake 3855df80ecd84038296b7ae73271a6190f21c4af0bb1a0ca0be752a308aaa53d
+post_build_checks 2
+triplet arm64-osx
+triplet_abi ee01c9458d62d6baf9332438e02f9de2d5daa743b47a61ba6b7d68dd84dc1e65-4cdbc0a68d47eedc16d246a07a21fabfbbe19abb89f00890c58902e2cf872d6f-24e935e23698b7e71fdd6f83197468f5145378e6
+vcpkg-port-config.cmake f0a30f77c8f5e3ac40436fe2518a61ad067f2955c7ef3be6d6a0ca4b81cd2a45
+vcpkg.json 6fd546b781a1aa5df572bdd31672cf222e55698aa5bf7d3e5c11abf1ae56a45b
+vcpkg_add_to_path 5f5ae75cf37b2a58d1a8561ca96496b64cd91ec9a0afab0b976c3e5d59030bfe
+vcpkg_cmake_build.cmake 6d1c27080fe3e768b5e7b968d6a28a37db154ebcb214297de25f10b6713511e1
+vcpkg_cmake_configure.cmake a8bc92be2faf621d6183ed1f3eb2ac3b103f4418b95f8695cf0dc7f7c5e8f724
+vcpkg_cmake_install.cmake 3ae7886dc8434fac6f1e61190cc355fdec5fbd4f60758e2de20423cf49c91369
+vcpkg_configure_cmake 9dfd362bd20613eaa83af55eb0f98c8cb50fd4826a65da74a0f1641da73497c2
+vcpkg_execute_build_process 4976d00fc7d25ad07984f282490121a09aa44a49c5dae627ca68355affd929d0
+vcpkg_execute_required_process 2df167e6e7f37c8038e02a3ebbfb239fa55de0b384ed4532d33f5483710a608b
+vcpkg_find_acquire_program 96d9ee675798a3bddb54340d404b814be45a35c624b2eab5465cd45eaf18b6d3
+vcpkg_find_acquire_program(NINJA) 8692aff2f893a8afcabbb4395a8b91ad4f6dd228f410fa4fd050d99c2ec0f52c
+vcpkg_list f5de3ebcbc40a4db90622ade9aca918e2cf404dc0d91342fcde457d730e6fa29
diff --git a/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg_cmake_build.cmake b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg_cmake_build.cmake
new file mode 100644
index 00000000..47933b3f
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg_cmake_build.cmake
@@ -0,0 +1,91 @@
+include_guard(GLOBAL)
+
+function(vcpkg_cmake_build)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "DISABLE_PARALLEL;ADD_BIN_TO_PATH" "TARGET;LOGFILE_BASE" "")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "vcpkg_cmake_build was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT DEFINED arg_LOGFILE_BASE)
+ set(arg_LOGFILE_BASE "build")
+ endif()
+ vcpkg_list(SET build_param)
+ vcpkg_list(SET parallel_param)
+ vcpkg_list(SET no_parallel_param)
+
+ if("${Z_VCPKG_CMAKE_GENERATOR}" STREQUAL "Ninja")
+ vcpkg_list(SET build_param "-v") # verbose output
+ vcpkg_list(SET parallel_param "-j${VCPKG_CONCURRENCY}")
+ vcpkg_list(SET no_parallel_param "-j1")
+ elseif("${Z_VCPKG_CMAKE_GENERATOR}" MATCHES "^Visual Studio")
+ vcpkg_list(SET build_param
+ "/p:VCPkgLocalAppDataDisabled=true"
+ "/p:UseIntelMKL=No"
+ )
+ vcpkg_list(SET parallel_param "/m")
+ elseif("${Z_VCPKG_CMAKE_GENERATOR}" STREQUAL "NMake Makefiles")
+ # No options are currently added for nmake builds
+ elseif(Z_VCPKG_CMAKE_GENERATOR STREQUAL "Unix Makefiles")
+ vcpkg_list(SET build_param "VERBOSE=1")
+ vcpkg_list(SET parallel_param "-j${VCPKG_CONCURRENCY}")
+ vcpkg_list(SET no_parallel_param "")
+ elseif(Z_VCPKG_CMAKE_GENERATOR STREQUAL "Xcode")
+ vcpkg_list(SET parallel_param -jobs "${VCPKG_CONCURRENCY}")
+ vcpkg_list(SET no_parallel_param -jobs 1)
+ else()
+ message(WARNING "Unrecognized GENERATOR setting from vcpkg_cmake_configure().")
+ endif()
+
+ vcpkg_list(SET target_param)
+ if(arg_TARGET)
+ vcpkg_list(SET target_param "--target" "${arg_TARGET}")
+ endif()
+
+ foreach(build_type IN ITEMS debug release)
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "${build_type}")
+ if("${build_type}" STREQUAL "debug")
+ set(short_build_type "dbg")
+ set(config "Debug")
+ else()
+ set(short_build_type "rel")
+ set(config "Release")
+ endif()
+
+ message(STATUS "Building ${TARGET_TRIPLET}-${short_build_type}")
+
+ if(arg_ADD_BIN_TO_PATH)
+ vcpkg_backup_env_variables(VARS PATH)
+ if("${build_type}" STREQUAL "debug")
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/debug/bin")
+ else()
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/bin")
+ endif()
+ endif()
+
+ if(arg_DISABLE_PARALLEL)
+ vcpkg_execute_build_process(
+ COMMAND
+ "${CMAKE_COMMAND}" --build . --config "${config}" ${target_param}
+ -- ${build_param} ${no_parallel_param}
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_build_type}"
+ LOGNAME "${arg_LOGFILE_BASE}-${TARGET_TRIPLET}-${short_build_type}"
+ )
+ else()
+ vcpkg_execute_build_process(
+ COMMAND
+ "${CMAKE_COMMAND}" --build . --config "${config}" ${target_param}
+ -- ${build_param} ${parallel_param}
+ NO_PARALLEL_COMMAND
+ "${CMAKE_COMMAND}" --build . --config "${config}" ${target_param}
+ -- ${build_param} ${no_parallel_param}
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_build_type}"
+ LOGNAME "${arg_LOGFILE_BASE}-${TARGET_TRIPLET}-${short_build_type}"
+ )
+ endif()
+
+ if(arg_ADD_BIN_TO_PATH)
+ vcpkg_restore_env_variables(VARS PATH)
+ endif()
+ endif()
+ endforeach()
+endfunction()
diff --git a/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg_cmake_configure.cmake b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg_cmake_configure.cmake
new file mode 100644
index 00000000..acd510f5
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg_cmake_configure.cmake
@@ -0,0 +1,353 @@
+include_guard(GLOBAL)
+
+macro(z_vcpkg_cmake_configure_both_set_or_unset var1 var2)
+ if(DEFINED ${var1} AND NOT DEFINED ${var2})
+ message(FATAL_ERROR "If ${var1} is set, then ${var2} must be set.")
+ elseif(NOT DEFINED ${var1} AND DEFINED ${var2})
+ message(FATAL_ERROR "If ${var2} is set, then ${var1} must be set.")
+ endif()
+endmacro()
+
+function(vcpkg_cmake_configure)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ "PREFER_NINJA;DISABLE_PARALLEL_CONFIGURE;WINDOWS_USE_MSBUILD;NO_CHARSET_FLAG;Z_CMAKE_GET_VARS_USAGE"
+ "SOURCE_PATH;GENERATOR;LOGFILE_BASE"
+ "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE;MAYBE_UNUSED_VARIABLES"
+ )
+
+ if(NOT arg_Z_CMAKE_GET_VARS_USAGE AND DEFINED CACHE{Z_VCPKG_CMAKE_GENERATOR})
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} already called; this function should only be called once.")
+ endif()
+ if(arg_PREFER_NINJA)
+ message(WARNING "PREFER_NINJA has been deprecated in ${CMAKE_CURRENT_FUNCTION}. Please remove it from the portfile!")
+ endif()
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(NOT DEFINED arg_SOURCE_PATH)
+ message(FATAL_ERROR "SOURCE_PATH must be set")
+ endif()
+ if(NOT DEFINED arg_LOGFILE_BASE)
+ set(arg_LOGFILE_BASE "config-${TARGET_TRIPLET}")
+ endif()
+
+ set(invalid_maybe_unused_vars "${arg_MAYBE_UNUSED_VARIABLES}")
+ list(FILTER invalid_maybe_unused_vars INCLUDE REGEX "^-D")
+ if(NOT invalid_maybe_unused_vars STREQUAL "")
+ list(JOIN invalid_maybe_unused_vars " " bad_items)
+ message(${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}
+ "Option MAYBE_UNUSED_VARIABLES must be used with variables names. "
+ "The following items are invalid: ${bad_items}")
+ endif()
+
+ set(manually_specified_variables "")
+
+ if(arg_Z_CMAKE_GET_VARS_USAGE)
+ set(configuring_message "Getting CMake variables for ${TARGET_TRIPLET}")
+ else()
+ set(configuring_message "Configuring ${TARGET_TRIPLET}")
+
+ foreach(option IN LISTS arg_OPTIONS arg_OPTIONS_RELEASE arg_OPTIONS_DEBUG)
+ if("${option}" MATCHES "^-D([^:=]*)[:=]")
+ vcpkg_list(APPEND manually_specified_variables "${CMAKE_MATCH_1}")
+ endif()
+ endforeach()
+ vcpkg_list(REMOVE_DUPLICATES manually_specified_variables)
+ foreach(maybe_unused_var IN LISTS arg_MAYBE_UNUSED_VARIABLES)
+ vcpkg_list(REMOVE_ITEM manually_specified_variables "${maybe_unused_var}")
+ endforeach()
+ debug_message("manually specified variables: ${manually_specified_variables}")
+ endif()
+
+ if(CMAKE_HOST_WIN32)
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(host_architecture "$ENV{PROCESSOR_ARCHITEW6432}")
+ else()
+ set(host_architecture "$ENV{PROCESSOR_ARCHITECTURE}")
+ endif()
+ endif()
+
+ set(ninja_host ON) # Ninja availability
+ if(host_architecture STREQUAL "x86" OR DEFINED ENV{VCPKG_FORCE_SYSTEM_BINARIES})
+ # Prebuilt ninja binaries are only provided for x64 hosts
+ find_program(NINJA NAMES ninja ninja-build)
+ if(NOT NINJA)
+ set(ninja_host OFF)
+ set(arg_DISABLE_PARALLEL_CONFIGURE ON)
+ set(arg_WINDOWS_USE_MSBUILD ON)
+ endif()
+ endif()
+
+ set(generator "")
+ set(architecture_options "")
+ if(arg_WINDOWS_USE_MSBUILD AND VCPKG_HOST_IS_WINDOWS AND VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
+ z_vcpkg_get_visual_studio_generator(OUT_GENERATOR generator OUT_ARCH arch)
+ vcpkg_list(APPEND architecture_options "-A${arch}")
+ if(DEFINED VCPKG_PLATFORM_TOOLSET)
+ vcpkg_list(APPEND arg_OPTIONS "-T${VCPKG_PLATFORM_TOOLSET}")
+ endif()
+ if(NOT generator)
+ message(FATAL_ERROR "Unable to determine appropriate Visual Studio generator for triplet ${TARGET_TRIPLET}:
+ ENV{VisualStudioVersion} : $ENV{VisualStudioVersion}
+ VCPKG_TARGET_ARCHITECTURE: ${VCPKG_TARGET_ARCHITECTURE}")
+ endif()
+ elseif(DEFINED arg_GENERATOR)
+ set(generator "${arg_GENERATOR}")
+ elseif(ninja_host)
+ set(generator "Ninja")
+ elseif(NOT VCPKG_HOST_IS_WINDOWS)
+ set(generator "Unix Makefiles")
+ endif()
+
+ if(NOT generator)
+ if(NOT VCPKG_CMAKE_SYSTEM_NAME)
+ set(VCPKG_CMAKE_SYSTEM_NAME "Windows")
+ endif()
+ message(FATAL_ERROR "Unable to determine appropriate generator for: "
+ "${VCPKG_CMAKE_SYSTEM_NAME}-${VCPKG_TARGET_ARCHITECTURE}-${VCPKG_PLATFORM_TOOLSET}")
+ endif()
+
+ set(parallel_log_args "")
+ set(log_args "")
+
+ if(generator STREQUAL "Ninja")
+ vcpkg_find_acquire_program(NINJA)
+ vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_MAKE_PROGRAM=${NINJA}")
+ # If we use Ninja, it must be on PATH for CMake's ExternalProject,
+ # cf. https://gitlab.kitware.com/cmake/cmake/-/issues/23355.
+ get_filename_component(ninja_path "${NINJA}" DIRECTORY)
+ vcpkg_add_to_path("${ninja_path}")
+ set(parallel_log_args
+ "../build.ninja" ALIAS "rel-ninja.log"
+ "../../${TARGET_TRIPLET}-dbg/build.ninja" ALIAS "dbg-ninja.log"
+ )
+ set(log_args "build.ninja")
+ endif()
+
+ set(build_dir_release "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+ set(build_dir_debug "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+ file(REMOVE_RECURSE
+ "${build_dir_release}"
+ "${build_dir_debug}")
+ file(MAKE_DIRECTORY "${build_dir_release}")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ file(MAKE_DIRECTORY "${build_dir_debug}")
+ endif()
+
+ if(DEFINED VCPKG_CMAKE_SYSTEM_NAME)
+ vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}")
+ if(VCPKG_TARGET_IS_UWP AND NOT DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
+ set(VCPKG_CMAKE_SYSTEM_VERSION 10.0)
+ elseif(VCPKG_TARGET_IS_ANDROID AND NOT DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
+ set(VCPKG_CMAKE_SYSTEM_VERSION 21)
+ endif()
+ endif()
+
+ if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
+ vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}")
+ endif()
+
+ if(DEFINED VCPKG_XBOX_CONSOLE_TARGET)
+ vcpkg_list(APPEND arg_OPTIONS "-DXBOX_CONSOLE_TARGET=${VCPKG_XBOX_CONSOLE_TARGET}")
+ endif()
+
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ vcpkg_list(APPEND arg_OPTIONS "-DBUILD_SHARED_LIBS=ON")
+ elseif(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ vcpkg_list(APPEND arg_OPTIONS "-DBUILD_SHARED_LIBS=OFF")
+ else()
+ message(FATAL_ERROR
+ "Invalid setting for VCPKG_LIBRARY_LINKAGE: \"${VCPKG_LIBRARY_LINKAGE}\". "
+ "It must be \"static\" or \"dynamic\"")
+ endif()
+
+ z_vcpkg_cmake_configure_both_set_or_unset(VCPKG_CXX_FLAGS_DEBUG VCPKG_C_FLAGS_DEBUG)
+ z_vcpkg_cmake_configure_both_set_or_unset(VCPKG_CXX_FLAGS_RELEASE VCPKG_C_FLAGS_RELEASE)
+ z_vcpkg_cmake_configure_both_set_or_unset(VCPKG_CXX_FLAGS VCPKG_C_FLAGS)
+
+ set(VCPKG_SET_CHARSET_FLAG ON)
+ if(arg_NO_CHARSET_FLAG)
+ set(VCPKG_SET_CHARSET_FLAG OFF)
+ endif()
+
+ if(NOT DEFINED VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
+ z_vcpkg_select_default_vcpkg_chainload_toolchain()
+ endif()
+
+ list(JOIN VCPKG_TARGET_ARCHITECTURE "\;" target_architecture_string)
+ vcpkg_list(APPEND arg_OPTIONS
+ "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}"
+ "-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET}"
+ "-DVCPKG_SET_CHARSET_FLAG=${VCPKG_SET_CHARSET_FLAG}"
+ "-DVCPKG_PLATFORM_TOOLSET=${VCPKG_PLATFORM_TOOLSET}"
+ "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON"
+ "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON"
+ "-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON"
+ "-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE"
+ "-DCMAKE_VERBOSE_MAKEFILE=ON"
+ "-DVCPKG_APPLOCAL_DEPS=OFF"
+ "-DCMAKE_TOOLCHAIN_FILE=${SCRIPTS}/buildsystems/vcpkg.cmake"
+ "-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON"
+ "-DVCPKG_CXX_FLAGS=${VCPKG_CXX_FLAGS}"
+ "-DVCPKG_CXX_FLAGS_RELEASE=${VCPKG_CXX_FLAGS_RELEASE}"
+ "-DVCPKG_CXX_FLAGS_DEBUG=${VCPKG_CXX_FLAGS_DEBUG}"
+ "-DVCPKG_C_FLAGS=${VCPKG_C_FLAGS}"
+ "-DVCPKG_C_FLAGS_RELEASE=${VCPKG_C_FLAGS_RELEASE}"
+ "-DVCPKG_C_FLAGS_DEBUG=${VCPKG_C_FLAGS_DEBUG}"
+ "-DVCPKG_CRT_LINKAGE=${VCPKG_CRT_LINKAGE}"
+ "-DVCPKG_LINKER_FLAGS=${VCPKG_LINKER_FLAGS}"
+ "-DVCPKG_LINKER_FLAGS_RELEASE=${VCPKG_LINKER_FLAGS_RELEASE}"
+ "-DVCPKG_LINKER_FLAGS_DEBUG=${VCPKG_LINKER_FLAGS_DEBUG}"
+ "-DVCPKG_TARGET_ARCHITECTURE=${target_architecture_string}"
+ "-DCMAKE_INSTALL_LIBDIR:STRING=lib"
+ "-DCMAKE_INSTALL_BINDIR:STRING=bin"
+ "-D_VCPKG_ROOT_DIR=${VCPKG_ROOT_DIR}"
+ "-D_VCPKG_INSTALLED_DIR=${_VCPKG_INSTALLED_DIR}"
+ "-DVCPKG_MANIFEST_INSTALL=OFF"
+ )
+
+ # Sets configuration variables for macOS builds
+ foreach(config_var IN ITEMS INSTALL_NAME_DIR OSX_DEPLOYMENT_TARGET OSX_SYSROOT OSX_ARCHITECTURES)
+ if(DEFINED VCPKG_${config_var})
+ vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_${config_var}=${VCPKG_${config_var}}")
+ endif()
+ endforeach()
+
+ vcpkg_list(PREPEND arg_OPTIONS "-DFETCHCONTENT_FULLY_DISCONNECTED=ON")
+
+ # Allow overrides / additional configuration variables from triplets
+ if(DEFINED VCPKG_CMAKE_CONFIGURE_OPTIONS)
+ vcpkg_list(APPEND arg_OPTIONS ${VCPKG_CMAKE_CONFIGURE_OPTIONS})
+ endif()
+ if(DEFINED VCPKG_CMAKE_CONFIGURE_OPTIONS_RELEASE)
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE ${VCPKG_CMAKE_CONFIGURE_OPTIONS_RELEASE})
+ endif()
+ if(DEFINED VCPKG_CMAKE_CONFIGURE_OPTIONS_DEBUG)
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG ${VCPKG_CMAKE_CONFIGURE_OPTIONS_DEBUG})
+ endif()
+
+ vcpkg_list(SET rel_command
+ "${CMAKE_COMMAND}" "${arg_SOURCE_PATH}"
+ -G "${generator}"
+ ${architecture_options}
+ "-DCMAKE_BUILD_TYPE=Release"
+ "-DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}"
+ ${arg_OPTIONS} ${arg_OPTIONS_RELEASE})
+ vcpkg_list(SET dbg_command
+ "${CMAKE_COMMAND}" "${arg_SOURCE_PATH}"
+ -G "${generator}"
+ ${architecture_options}
+ "-DCMAKE_BUILD_TYPE=Debug"
+ "-DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}/debug"
+ ${arg_OPTIONS} ${arg_OPTIONS_DEBUG})
+
+ if(NOT arg_DISABLE_PARALLEL_CONFIGURE)
+ vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_DISABLE_SOURCE_CHANGES=ON")
+
+ vcpkg_find_acquire_program(NINJA)
+
+ #parallelize the configure step
+ set(ninja_configure_contents
+ "rule CreateProcess\n command = \$process\n\n"
+ )
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "release")
+ z_vcpkg_configure_cmake_build_cmakecache(ninja_configure_contents ".." "rel")
+ endif()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "debug")
+ z_vcpkg_configure_cmake_build_cmakecache(ninja_configure_contents "../../${TARGET_TRIPLET}-dbg" "dbg")
+ endif()
+
+ file(MAKE_DIRECTORY "${build_dir_release}/vcpkg-parallel-configure")
+ file(WRITE
+ "${build_dir_release}/vcpkg-parallel-configure/build.ninja"
+ "${ninja_configure_contents}")
+
+ message(STATUS "${configuring_message}")
+ vcpkg_execute_required_process(
+ COMMAND "${NINJA}" -v
+ WORKING_DIRECTORY "${build_dir_release}/vcpkg-parallel-configure"
+ LOGNAME "${arg_LOGFILE_BASE}"
+ SAVE_LOG_FILES
+ "../../${TARGET_TRIPLET}-dbg/CMakeCache.txt" ALIAS "dbg-CMakeCache.txt.log"
+ "../CMakeCache.txt" ALIAS "rel-CMakeCache.txt.log"
+ "../../${TARGET_TRIPLET}-dbg/CMakeFiles/CMakeConfigureLog.yaml" ALIAS "dbg-CMakeConfigureLog.yaml.log"
+ "../CMakeFiles/CMakeConfigureLog.yaml" ALIAS "rel-CMakeConfigureLog.yaml.log"
+ ${parallel_log_args}
+ )
+
+ vcpkg_list(APPEND config_logs
+ "${CURRENT_BUILDTREES_DIR}/${arg_LOGFILE_BASE}-out.log"
+ "${CURRENT_BUILDTREES_DIR}/${arg_LOGFILE_BASE}-err.log")
+ else()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "debug")
+ message(STATUS "${configuring_message}-dbg")
+ vcpkg_execute_required_process(
+ COMMAND ${dbg_command}
+ WORKING_DIRECTORY "${build_dir_debug}"
+ LOGNAME "${arg_LOGFILE_BASE}-dbg"
+ SAVE_LOG_FILES
+ "CMakeCache.txt"
+ "CMakeFiles/CMakeConfigureLog.yaml"
+ ${log_args}
+ )
+ vcpkg_list(APPEND config_logs
+ "${CURRENT_BUILDTREES_DIR}/${arg_LOGFILE_BASE}-dbg-out.log"
+ "${CURRENT_BUILDTREES_DIR}/${arg_LOGFILE_BASE}-dbg-err.log")
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "release")
+ message(STATUS "${configuring_message}-rel")
+ vcpkg_execute_required_process(
+ COMMAND ${rel_command}
+ WORKING_DIRECTORY "${build_dir_release}"
+ LOGNAME "${arg_LOGFILE_BASE}-rel"
+ SAVE_LOG_FILES
+ "CMakeCache.txt"
+ "CMakeFiles/CMakeConfigureLog.yaml"
+ ${log_args}
+ )
+ vcpkg_list(APPEND config_logs
+ "${CURRENT_BUILDTREES_DIR}/${arg_LOGFILE_BASE}-rel-out.log"
+ "${CURRENT_BUILDTREES_DIR}/${arg_LOGFILE_BASE}-rel-err.log")
+ endif()
+ endif()
+
+ set(all_unused_variables)
+ foreach(config_log IN LISTS config_logs)
+ if(NOT EXISTS "${config_log}")
+ continue()
+ endif()
+ file(READ "${config_log}" log_contents)
+ debug_message("Reading configure log ${config_log}...")
+ if(NOT log_contents MATCHES "Manually-specified variables were not used by the project:\n\n(( [^\n]*\n)*)")
+ continue()
+ endif()
+ string(STRIP "${CMAKE_MATCH_1}" unused_variables) # remove leading ` ` and trailing `\n`
+ string(REPLACE "\n " ";" unused_variables "${unused_variables}")
+ debug_message("unused variables: ${unused_variables}")
+ foreach(unused_variable IN LISTS unused_variables)
+ if(unused_variable IN_LIST manually_specified_variables)
+ debug_message("manually specified unused variable: ${unused_variable}")
+ vcpkg_list(APPEND all_unused_variables "${unused_variable}")
+ else()
+ debug_message("unused variable (not manually specified): ${unused_variable}")
+ endif()
+ endforeach()
+ endforeach()
+
+ if(DEFINED all_unused_variables)
+ vcpkg_list(REMOVE_DUPLICATES all_unused_variables)
+ vcpkg_list(JOIN all_unused_variables "\n " all_unused_variables)
+ message(WARNING "The following variables are not used in CMakeLists.txt:
+ ${all_unused_variables}
+Please recheck them and remove the unnecessary options from the `vcpkg_cmake_configure` call.
+If these options should still be passed for whatever reason, please use the `MAYBE_UNUSED_VARIABLES` argument.")
+ endif()
+
+ if(NOT arg_Z_CMAKE_GET_VARS_USAGE)
+ set(Z_VCPKG_CMAKE_GENERATOR "${generator}" CACHE INTERNAL "The generator which was used to configure CMake.")
+ endif()
+endfunction()
diff --git a/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg_cmake_install.cmake b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg_cmake_install.cmake
new file mode 100644
index 00000000..2bd8b4ea
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/vcpkg-cmake/vcpkg_cmake_install.cmake
@@ -0,0 +1,21 @@
+include_guard(GLOBAL)
+
+function(vcpkg_cmake_install)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "DISABLE_PARALLEL;ADD_BIN_TO_PATH" "" "")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "vcpkg_cmake_install was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ set(args)
+ foreach(arg IN ITEMS DISABLE_PARALLEL ADD_BIN_TO_PATH)
+ if(arg_${arg})
+ list(APPEND args "${arg}")
+ endif()
+ endforeach()
+
+ vcpkg_cmake_build(
+ ${args}
+ LOGFILE_BASE install
+ TARGET install
+ )
+endfunction()
diff --git a/vcpkg_installed/arm64-osx/share/zlib/copyright b/vcpkg_installed/arm64-osx/share/zlib/copyright
new file mode 100644
index 00000000..ab8ee6f7
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/zlib/copyright
@@ -0,0 +1,22 @@
+Copyright notice:
+
+ (C) 1995-2022 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
diff --git a/vcpkg_installed/arm64-osx/share/zlib/usage b/vcpkg_installed/arm64-osx/share/zlib/usage
new file mode 100644
index 00000000..39d86182
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/zlib/usage
@@ -0,0 +1,4 @@
+The package zlib is compatible with built-in CMake targets:
+
+ find_package(ZLIB REQUIRED)
+ target_link_libraries(main PRIVATE ZLIB::ZLIB)
diff --git a/vcpkg_installed/arm64-osx/share/zlib/vcpkg-cmake-wrapper.cmake b/vcpkg_installed/arm64-osx/share/zlib/vcpkg-cmake-wrapper.cmake
new file mode 100644
index 00000000..8624b708
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/zlib/vcpkg-cmake-wrapper.cmake
@@ -0,0 +1,12 @@
+find_path(ZLIB_INCLUDE_DIR NAMES zlib.h PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include" NO_DEFAULT_PATH)
+find_library(ZLIB_LIBRARY_RELEASE NAMES zlib z PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH)
+find_library(ZLIB_LIBRARY_DEBUG NAMES zlibd z PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH)
+if(NOT ZLIB_INCLUDE_DIR OR NOT (ZLIB_LIBRARY_RELEASE OR ZLIB_LIBRARY_DEBUG))
+ message(FATAL_ERROR "Broken installation of vcpkg port zlib")
+endif()
+if(CMAKE_VERSION VERSION_LESS 3.4)
+ include(SelectLibraryConfigurations)
+ select_library_configurations(ZLIB)
+ unset(ZLIB_FOUND)
+endif()
+_find_package(${ARGS})
diff --git a/vcpkg_installed/arm64-osx/share/zlib/vcpkg.spdx.json b/vcpkg_installed/arm64-osx/share/zlib/vcpkg.spdx.json
new file mode 100644
index 00000000..4818466c
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/zlib/vcpkg.spdx.json
@@ -0,0 +1,220 @@
+{
+ "$schema": "https://raw.githubusercontent.com/spdx/spdx-spec/v2.2.1/schemas/spdx-schema.json",
+ "spdxVersion": "SPDX-2.2",
+ "dataLicense": "CC0-1.0",
+ "SPDXID": "SPDXRef-DOCUMENT",
+ "documentNamespace": "https://spdx.org/spdxdocs/zlib-arm64-osx-1.3.1-5f57fc33-67d7-45b9-a46b-27382fef558b",
+ "name": "zlib:arm64-osx@1.3.1 c2102b0d8124b02749c30b7ab35159aea6b120bfdf84928fceb40e6efe70a88a",
+ "creationInfo": {
+ "creators": [
+ "Tool: vcpkg-2024.03.14"
+ ],
+ "created": "2024-08-05T17:59:36Z"
+ },
+ "relationships": [
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "GENERATES",
+ "relatedSpdxElement": "SPDXRef-binary"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-0"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-1"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-2"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-3"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-4"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-5"
+ },
+ {
+ "spdxElementId": "SPDXRef-port",
+ "relationshipType": "CONTAINS",
+ "relatedSpdxElement": "SPDXRef-file-6"
+ },
+ {
+ "spdxElementId": "SPDXRef-binary",
+ "relationshipType": "GENERATED_FROM",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-0",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-1",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-2",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-3",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-4",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-5",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ },
+ {
+ "spdxElementId": "SPDXRef-file-6",
+ "relationshipType": "CONTAINED_BY",
+ "relatedSpdxElement": "SPDXRef-port"
+ }
+ ],
+ "packages": [
+ {
+ "name": "zlib",
+ "SPDXID": "SPDXRef-port",
+ "versionInfo": "1.3.1",
+ "downloadLocation": "git+https://github.com/Microsoft/vcpkg#ports/zlib",
+ "homepage": "https://www.zlib.net/",
+ "licenseConcluded": "Zlib",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "description": "A compression library",
+ "comment": "This is the port (recipe) consumed by vcpkg."
+ },
+ {
+ "name": "zlib:arm64-osx",
+ "SPDXID": "SPDXRef-binary",
+ "versionInfo": "c2102b0d8124b02749c30b7ab35159aea6b120bfdf84928fceb40e6efe70a88a",
+ "downloadLocation": "NONE",
+ "licenseConcluded": "Zlib",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "comment": "This is a binary package built by vcpkg."
+ },
+ {
+ "SPDXID": "SPDXRef-resource-1",
+ "name": "madler/zlib",
+ "downloadLocation": "git+https://github.com/madler/zlib@v1.3.1",
+ "licenseConcluded": "NOASSERTION",
+ "licenseDeclared": "NOASSERTION",
+ "copyrightText": "NOASSERTION",
+ "checksums": [
+ {
+ "algorithm": "SHA512",
+ "checksumValue": "8c9642495bafd6fad4ab9fb67f09b268c69ff9af0f4f20cf15dfc18852ff1f312bd8ca41de761b3f8d8e90e77d79f2ccacd3d4c5b19e475ecf09d021fdfe9088"
+ }
+ ]
+ }
+ ],
+ "files": [
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/zlib/0003-android-and-mingw-fixes.patch",
+ "SPDXID": "SPDXRef-file-0",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "63e62c9bae3952b8cca832e01aa96ef3b2696b21976c5031d6d6d79937d8d54c"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/zlib/0002-build-static-or-shared-not-both.patch",
+ "SPDXID": "SPDXRef-file-1",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "dd4945e8af55d9feb65af706cb0254a6925dc4ac12789586c0d28acf323ad075"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/zlib/usage",
+ "SPDXID": "SPDXRef-file-2",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "be22662327df993eebc437495add75acb365ab18d37c7e5de735d4ea4f5d3083"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/zlib/portfile.cmake",
+ "SPDXID": "SPDXRef-file-3",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "b14cee469c2da06e036e63293c0b6e6509924462e9b341b317986df46b281695"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/zlib/vcpkg.json",
+ "SPDXID": "SPDXRef-file-4",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "8ad7072167e1bf56d2ed531e43ecc95026d5b305ed0393140d5ec78f5c6b6c00"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/zlib/vcpkg-cmake-wrapper.cmake",
+ "SPDXID": "SPDXRef-file-5",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "5d49ef2ee6448479c2aad0e5f732e2676eaba0411860f9bebabe6002d66f57d1"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ },
+ {
+ "fileName": ".//Users/dmtrkovalenko/dev/vcpkg/ports/zlib/0001-Prevent-invalid-inclusions-when-HAVE_-is-set-to-0.patch",
+ "SPDXID": "SPDXRef-file-6",
+ "checksums": [
+ {
+ "algorithm": "SHA256",
+ "checksumValue": "750b9542cb55e6328cca01d3ca997f1373b9530afa95e04213168676936e7bfa"
+ }
+ ],
+ "licenseConcluded": "NOASSERTION",
+ "copyrightText": "NOASSERTION"
+ }
+ ]
+}
diff --git a/vcpkg_installed/arm64-osx/share/zlib/vcpkg_abi_info.txt b/vcpkg_installed/arm64-osx/share/zlib/vcpkg_abi_info.txt
new file mode 100644
index 00000000..cc892144
--- /dev/null
+++ b/vcpkg_installed/arm64-osx/share/zlib/vcpkg_abi_info.txt
@@ -0,0 +1,19 @@
+0001-Prevent-invalid-inclusions-when-HAVE_-is-set-to-0.patch 750b9542cb55e6328cca01d3ca997f1373b9530afa95e04213168676936e7bfa
+0002-build-static-or-shared-not-both.patch dd4945e8af55d9feb65af706cb0254a6925dc4ac12789586c0d28acf323ad075
+0003-android-and-mingw-fixes.patch 63e62c9bae3952b8cca832e01aa96ef3b2696b21976c5031d6d6d79937d8d54c
+cmake 3.30.1
+features core
+portfile.cmake b14cee469c2da06e036e63293c0b6e6509924462e9b341b317986df46b281695
+ports.cmake 3855df80ecd84038296b7ae73271a6190f21c4af0bb1a0ca0be752a308aaa53d
+post_build_checks 2
+triplet arm64-osx
+triplet_abi ee01c9458d62d6baf9332438e02f9de2d5daa743b47a61ba6b7d68dd84dc1e65-4cdbc0a68d47eedc16d246a07a21fabfbbe19abb89f00890c58902e2cf872d6f-24e935e23698b7e71fdd6f83197468f5145378e6
+usage be22662327df993eebc437495add75acb365ab18d37c7e5de735d4ea4f5d3083
+vcpkg-cmake 80f0b4a35de8e569486cb5cc1c050ac52951992a600fd60a1d38cacaac220307
+vcpkg-cmake-wrapper.cmake 5d49ef2ee6448479c2aad0e5f732e2676eaba0411860f9bebabe6002d66f57d1
+vcpkg.json 8ad7072167e1bf56d2ed531e43ecc95026d5b305ed0393140d5ec78f5c6b6c00
+vcpkg_copy_pdbs d57e4f196c82dc562a9968c6155073094513c31e2de475694143d3aa47954b1c
+vcpkg_fixup_pkgconfig 1a15f6c6d8e2b244d83a7514a0412d339127d2217d1df60ad1388b546c85f777
+vcpkg_from_git 96ed81968f76354c00096dd8cd4e63c6a235fa969334a11ab18d11c0c512ff58
+vcpkg_from_github b743742296a114ea1b18ae99672e02f142c4eb2bef7f57d36c038bedbfb0502f
+vcpkg_replace_string b450deb79207478b37119743e00808ebc42de0628e7b98c14ab24728bd5c78b8
diff --git a/vcpkg_installed/vcpkg/info/libjpeg-turbo_3.0.3_arm64-osx.list b/vcpkg_installed/vcpkg/info/libjpeg-turbo_3.0.3_arm64-osx.list
new file mode 100644
index 00000000..337f3c29
--- /dev/null
+++ b/vcpkg_installed/vcpkg/info/libjpeg-turbo_3.0.3_arm64-osx.list
@@ -0,0 +1,33 @@
+arm64-osx/
+arm64-osx/debug/
+arm64-osx/debug/lib/
+arm64-osx/debug/lib/libjpeg.a
+arm64-osx/debug/lib/libturbojpeg.a
+arm64-osx/debug/lib/pkgconfig/
+arm64-osx/debug/lib/pkgconfig/libjpeg.pc
+arm64-osx/debug/lib/pkgconfig/libturbojpeg.pc
+arm64-osx/include/
+arm64-osx/include/jconfig.h
+arm64-osx/include/jerror.h
+arm64-osx/include/jmorecfg.h
+arm64-osx/include/jpeglib.h
+arm64-osx/include/turbojpeg.h
+arm64-osx/lib/
+arm64-osx/lib/libjpeg.a
+arm64-osx/lib/libturbojpeg.a
+arm64-osx/lib/pkgconfig/
+arm64-osx/lib/pkgconfig/libjpeg.pc
+arm64-osx/lib/pkgconfig/libturbojpeg.pc
+arm64-osx/share/
+arm64-osx/share/jpeg/
+arm64-osx/share/jpeg/vcpkg-cmake-wrapper.cmake
+arm64-osx/share/libjpeg-turbo/
+arm64-osx/share/libjpeg-turbo/copyright
+arm64-osx/share/libjpeg-turbo/libjpeg-turboConfig.cmake
+arm64-osx/share/libjpeg-turbo/libjpeg-turboConfigVersion.cmake
+arm64-osx/share/libjpeg-turbo/libjpeg-turboTargets-debug.cmake
+arm64-osx/share/libjpeg-turbo/libjpeg-turboTargets-release.cmake
+arm64-osx/share/libjpeg-turbo/libjpeg-turboTargets.cmake
+arm64-osx/share/libjpeg-turbo/usage
+arm64-osx/share/libjpeg-turbo/vcpkg.spdx.json
+arm64-osx/share/libjpeg-turbo/vcpkg_abi_info.txt
diff --git a/vcpkg_installed/vcpkg/info/liblzma_5.6.2_arm64-osx.list b/vcpkg_installed/vcpkg/info/liblzma_5.6.2_arm64-osx.list
new file mode 100644
index 00000000..9b55a9e5
--- /dev/null
+++ b/vcpkg_installed/vcpkg/info/liblzma_5.6.2_arm64-osx.list
@@ -0,0 +1,60 @@
+arm64-osx/
+arm64-osx/debug/
+arm64-osx/debug/lib/
+arm64-osx/debug/lib/liblzma.a
+arm64-osx/debug/lib/pkgconfig/
+arm64-osx/debug/lib/pkgconfig/liblzma.pc
+arm64-osx/include/
+arm64-osx/include/lzma.h
+arm64-osx/include/lzma/
+arm64-osx/include/lzma/base.h
+arm64-osx/include/lzma/bcj.h
+arm64-osx/include/lzma/block.h
+arm64-osx/include/lzma/check.h
+arm64-osx/include/lzma/container.h
+arm64-osx/include/lzma/delta.h
+arm64-osx/include/lzma/filter.h
+arm64-osx/include/lzma/hardware.h
+arm64-osx/include/lzma/index.h
+arm64-osx/include/lzma/index_hash.h
+arm64-osx/include/lzma/lzma12.h
+arm64-osx/include/lzma/stream_flags.h
+arm64-osx/include/lzma/version.h
+arm64-osx/include/lzma/vli.h
+arm64-osx/lib/
+arm64-osx/lib/liblzma.a
+arm64-osx/lib/pkgconfig/
+arm64-osx/lib/pkgconfig/liblzma.pc
+arm64-osx/share/
+arm64-osx/share/doc/
+arm64-osx/share/doc/xz/
+arm64-osx/share/doc/xz/AUTHORS
+arm64-osx/share/doc/xz/COPYING
+arm64-osx/share/doc/xz/COPYING.0BSD
+arm64-osx/share/doc/xz/COPYING.GPLv2
+arm64-osx/share/doc/xz/NEWS
+arm64-osx/share/doc/xz/README
+arm64-osx/share/doc/xz/THANKS
+arm64-osx/share/doc/xz/examples/
+arm64-osx/share/doc/xz/examples/00_README.txt
+arm64-osx/share/doc/xz/examples/01_compress_easy.c
+arm64-osx/share/doc/xz/examples/02_decompress.c
+arm64-osx/share/doc/xz/examples/03_compress_custom.c
+arm64-osx/share/doc/xz/examples/04_compress_easy_mt.c
+arm64-osx/share/doc/xz/examples/11_file_info.c
+arm64-osx/share/doc/xz/examples/Makefile
+arm64-osx/share/doc/xz/faq.txt
+arm64-osx/share/doc/xz/history.txt
+arm64-osx/share/doc/xz/lzma-file-format.txt
+arm64-osx/share/doc/xz/xz-file-format.txt
+arm64-osx/share/liblzma/
+arm64-osx/share/liblzma/copyright
+arm64-osx/share/liblzma/liblzma-config-version.cmake
+arm64-osx/share/liblzma/liblzma-config.cmake
+arm64-osx/share/liblzma/liblzma-targets-debug.cmake
+arm64-osx/share/liblzma/liblzma-targets-release.cmake
+arm64-osx/share/liblzma/liblzma-targets.cmake
+arm64-osx/share/liblzma/usage
+arm64-osx/share/liblzma/vcpkg-cmake-wrapper.cmake
+arm64-osx/share/liblzma/vcpkg.spdx.json
+arm64-osx/share/liblzma/vcpkg_abi_info.txt
diff --git a/vcpkg_installed/vcpkg/info/libspng_0.7.4_arm64-osx.list b/vcpkg_installed/vcpkg/info/libspng_0.7.4_arm64-osx.list
new file mode 100644
index 00000000..802069f6
--- /dev/null
+++ b/vcpkg_installed/vcpkg/info/libspng_0.7.4_arm64-osx.list
@@ -0,0 +1,24 @@
+arm64-osx/
+arm64-osx/debug/
+arm64-osx/debug/lib/
+arm64-osx/debug/lib/libspng_static.a
+arm64-osx/debug/lib/pkgconfig/
+arm64-osx/debug/lib/pkgconfig/libspng_static.pc
+arm64-osx/include/
+arm64-osx/include/spng.h
+arm64-osx/lib/
+arm64-osx/lib/libspng_static.a
+arm64-osx/lib/pkgconfig/
+arm64-osx/lib/pkgconfig/libspng_static.pc
+arm64-osx/share/
+arm64-osx/share/libspng/
+arm64-osx/share/libspng/copyright
+arm64-osx/share/libspng/usage
+arm64-osx/share/libspng/vcpkg.spdx.json
+arm64-osx/share/libspng/vcpkg_abi_info.txt
+arm64-osx/share/spng/
+arm64-osx/share/spng/SPNGConfig.cmake
+arm64-osx/share/spng/SPNGConfigVersion.cmake
+arm64-osx/share/spng/SPNGTargets-debug.cmake
+arm64-osx/share/spng/SPNGTargets-release.cmake
+arm64-osx/share/spng/SPNGTargets.cmake
diff --git a/vcpkg_installed/vcpkg/info/tiff_4.6.0_arm64-osx.list b/vcpkg_installed/vcpkg/info/tiff_4.6.0_arm64-osx.list
new file mode 100644
index 00000000..357569e8
--- /dev/null
+++ b/vcpkg_installed/vcpkg/info/tiff_4.6.0_arm64-osx.list
@@ -0,0 +1,22 @@
+arm64-osx/
+arm64-osx/debug/
+arm64-osx/debug/lib/
+arm64-osx/debug/lib/libtiffd.a
+arm64-osx/debug/lib/pkgconfig/
+arm64-osx/debug/lib/pkgconfig/libtiff-4.pc
+arm64-osx/include/
+arm64-osx/include/tiff.h
+arm64-osx/include/tiffconf.h
+arm64-osx/include/tiffio.h
+arm64-osx/include/tiffvers.h
+arm64-osx/lib/
+arm64-osx/lib/libtiff.a
+arm64-osx/lib/pkgconfig/
+arm64-osx/lib/pkgconfig/libtiff-4.pc
+arm64-osx/share/
+arm64-osx/share/tiff/
+arm64-osx/share/tiff/copyright
+arm64-osx/share/tiff/usage
+arm64-osx/share/tiff/vcpkg-cmake-wrapper.cmake
+arm64-osx/share/tiff/vcpkg.spdx.json
+arm64-osx/share/tiff/vcpkg_abi_info.txt
diff --git a/vcpkg_installed/vcpkg/info/vcpkg-cmake-config_2024-05-23_arm64-osx.list b/vcpkg_installed/vcpkg/info/vcpkg-cmake-config_2024-05-23_arm64-osx.list
new file mode 100644
index 00000000..a4911366
--- /dev/null
+++ b/vcpkg_installed/vcpkg/info/vcpkg-cmake-config_2024-05-23_arm64-osx.list
@@ -0,0 +1,8 @@
+arm64-osx/
+arm64-osx/share/
+arm64-osx/share/vcpkg-cmake-config/
+arm64-osx/share/vcpkg-cmake-config/copyright
+arm64-osx/share/vcpkg-cmake-config/vcpkg-port-config.cmake
+arm64-osx/share/vcpkg-cmake-config/vcpkg.spdx.json
+arm64-osx/share/vcpkg-cmake-config/vcpkg_abi_info.txt
+arm64-osx/share/vcpkg-cmake-config/vcpkg_cmake_config_fixup.cmake
diff --git a/vcpkg_installed/vcpkg/info/vcpkg-cmake_2024-04-23_arm64-osx.list b/vcpkg_installed/vcpkg/info/vcpkg-cmake_2024-04-23_arm64-osx.list
new file mode 100644
index 00000000..848d2c45
--- /dev/null
+++ b/vcpkg_installed/vcpkg/info/vcpkg-cmake_2024-04-23_arm64-osx.list
@@ -0,0 +1,10 @@
+arm64-osx/
+arm64-osx/share/
+arm64-osx/share/vcpkg-cmake/
+arm64-osx/share/vcpkg-cmake/copyright
+arm64-osx/share/vcpkg-cmake/vcpkg-port-config.cmake
+arm64-osx/share/vcpkg-cmake/vcpkg.spdx.json
+arm64-osx/share/vcpkg-cmake/vcpkg_abi_info.txt
+arm64-osx/share/vcpkg-cmake/vcpkg_cmake_build.cmake
+arm64-osx/share/vcpkg-cmake/vcpkg_cmake_configure.cmake
+arm64-osx/share/vcpkg-cmake/vcpkg_cmake_install.cmake
diff --git a/vcpkg_installed/vcpkg/info/zlib_1.3.1_arm64-osx.list b/vcpkg_installed/vcpkg/info/zlib_1.3.1_arm64-osx.list
new file mode 100644
index 00000000..0e7d6047
--- /dev/null
+++ b/vcpkg_installed/vcpkg/info/zlib_1.3.1_arm64-osx.list
@@ -0,0 +1,20 @@
+arm64-osx/
+arm64-osx/debug/
+arm64-osx/debug/lib/
+arm64-osx/debug/lib/libz.a
+arm64-osx/debug/lib/pkgconfig/
+arm64-osx/debug/lib/pkgconfig/zlib.pc
+arm64-osx/include/
+arm64-osx/include/zconf.h
+arm64-osx/include/zlib.h
+arm64-osx/lib/
+arm64-osx/lib/libz.a
+arm64-osx/lib/pkgconfig/
+arm64-osx/lib/pkgconfig/zlib.pc
+arm64-osx/share/
+arm64-osx/share/zlib/
+arm64-osx/share/zlib/copyright
+arm64-osx/share/zlib/usage
+arm64-osx/share/zlib/vcpkg-cmake-wrapper.cmake
+arm64-osx/share/zlib/vcpkg.spdx.json
+arm64-osx/share/zlib/vcpkg_abi_info.txt
diff --git a/vcpkg_installed/vcpkg/status b/vcpkg_installed/vcpkg/status
new file mode 100644
index 00000000..62eb1786
--- /dev/null
+++ b/vcpkg_installed/vcpkg/status
@@ -0,0 +1,85 @@
+Package: vcpkg-cmake-config
+Version: 2024-05-23
+Architecture: arm64-osx
+Multi-Arch: same
+Abi: f8a190c788ce0b67531ca7b584535d87ad535f6eda7c2d6c782be7b255c50322
+Status: install ok installed
+
+Package: vcpkg-cmake
+Version: 2024-04-23
+Architecture: arm64-osx
+Multi-Arch: same
+Abi: 80f0b4a35de8e569486cb5cc1c050ac52951992a600fd60a1d38cacaac220307
+Status: install ok installed
+
+Package: libjpeg-turbo
+Version: 3.0.3
+Depends: vcpkg-cmake, vcpkg-cmake-config
+Architecture: arm64-osx
+Multi-Arch: same
+Abi: a7fd6309e4d0f4283e4a4160bda4275553b153d1019311c540b5571c1061fdde
+Description: libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2, NEON, AltiVec) to accelerate baseline JPEG compression and decompression on x86, x86-64, ARM, and PowerPC systems.
+Status: install ok installed
+
+Package: zlib
+Version: 1.3.1
+Depends: vcpkg-cmake
+Architecture: arm64-osx
+Multi-Arch: same
+Abi: c2102b0d8124b02749c30b7ab35159aea6b120bfdf84928fceb40e6efe70a88a
+Description: A compression library
+Status: install ok installed
+
+Package: libspng
+Version: 0.7.4
+Depends: vcpkg-cmake, vcpkg-cmake-config, zlib
+Architecture: arm64-osx
+Multi-Arch: same
+Abi: 5553ab465f255abcf58b922c102d684a03691d0aa7a5a1103969f37781e73804
+Description: Simple, modern libpng alternative
+Status: install ok installed
+
+Package: liblzma
+Version: 5.6.2
+Depends: vcpkg-cmake, vcpkg-cmake-config
+Architecture: arm64-osx
+Multi-Arch: same
+Abi: c42ec360aed3f7b37aa618421dfb96cca740c4e1971dff46d55aacacf2dd3c79
+Description: Compression library with an API similar to that of zlib.
+Status: install ok installed
+
+Package: tiff
+Version: 4.6.0
+Port-Version: 4
+Depends: vcpkg-cmake, vcpkg-cmake-config
+Architecture: arm64-osx
+Multi-Arch: same
+Abi: 7cab047eda3134842cf4b2a1f26761f1e747b73263ab178cf662c16df3964525
+Description: A library that supports the manipulation of TIFF image files
+Default-Features: jpeg, lzma, zip
+Status: install ok installed
+
+Package: tiff
+Feature: jpeg
+Depends: libjpeg-turbo
+Architecture: arm64-osx
+Multi-Arch: same
+Description: Support JPEG compression in TIFF image files
+Status: install ok installed
+
+Package: tiff
+Feature: lzma
+Depends: liblzma
+Architecture: arm64-osx
+Multi-Arch: same
+Description: Support LZMA compression in TIFF image files
+Status: install ok installed
+
+Package: tiff
+Feature: zip
+Depends: zlib
+Architecture: arm64-osx
+Multi-Arch: same
+Description: Support ZIP/deflate compression in TIFF image files
+Status: install ok installed
+