#!/bin/sh
#
# Makeself version 2.7.2
#  by Stephane Peter <megastep@megastep.org>
#
# Utility to create self-extracting tar.gz archives.
# The resulting archive is a file holding the tar.gz archive with
# a small Shell script stub that uncompresses the archive to a temporary
# directory and then executes a given script from withing that directory.
#
# Makeself home page: https://makeself.io/ - Version history available on GitHub
#
# (C) 1998-2025 by Stephane Peter <megastep@megastep.org>
#
# This software is released under the terms of the GNU GPL version 2 and above
# Please read the license at http://www.gnu.org/copyleft/gpl.html
# Self-extracting archives created with this script are explictly NOT released under the term of the GPL
#

MS_VERSION=2.7.2
MS_COMMAND="$0"
MS_SIGN_NEXT=n
unset CDPATH

for f in ${1+"$@"}; do
    if test "$MS_SIGN_NEXT" = y; then
        arg_value="XXXX"
        MS_SIGN_NEXT=n
    else
        case "$f" in
            --sign)
                MS_SIGN_NEXT=y
                arg_value="$f"
                ;;
            --sign=*)
                arg_value="--sign=XXXX"
                ;;
            *)
                arg_value="$f"
                ;;
        esac
    fi
    MS_COMMAND="$MS_COMMAND \\\\
    \\\"$arg_value\\\""
done

# For Solaris systems
if test -d /usr/xpg4/bin; then
    PATH=/usr/xpg4/bin:$PATH
    export PATH
fi

# Procedures

MS_Usage()
{
    echo "Usage: $0 [args] archive_dir file_name label startup_script [script_args]"
    echo "args can be one or more of the following :"
    echo "    --version | -v     : Print out Makeself version number and exit"
    echo "    --help | -h        : Print out this help message"
    echo "    --tar-quietly      : Suppress verbose output from the tar command"
    echo "    --quiet | -q       : Do not print any messages other than errors."
    echo "    --gzip             : Compress using gzip (default if detected)"
    echo "    --pigz             : Compress with pigz"
    echo "    --zstd             : Compress with zstd"
    echo "    --bzip2            : Compress using bzip2 instead of gzip"
    echo "    --pbzip2           : Compress using pbzip2 instead of gzip"
    echo "    --bzip3            : Compress using bzip3 instead of gzip"
    echo "    --xz               : Compress using xz instead of gzip"
    echo "    --lzo              : Compress using lzop instead of gzip"
    echo "    --lz4              : Compress using lz4 instead of gzip"
    echo "    --compress         : Compress using the UNIX 'compress' command"
    echo "    --complevel lvl    : Compression level for gzip pigz zstd xz lzo lz4 bzip2 pbzip2 and bzip3 (default 9)"
    echo "    --comp-extra       : Append extra options to the chosen compressor"
    echo "    --threads thds     : Number of threads to be used by compressors that support parallelization."
    echo "                         Omit to use compressor's default. Most useful (and required) for opting"
    echo "                         into xz's threading, usually with '--threads=0' for all available cores."
    echo "                         pbzip2 and pigz are parallel by default, and setting this value allows"
    echo "                         limiting the number of threads they use."
    echo "    --base64           : Base64-encode the final compressed archive (post-compression)"
    echo "    --gpg-encrypt      : Encrypt the compressed archive using GPG"
    echo "    --gpg-asymmetric-encrypt-sign"
    echo "                       : Asymmetrically encrypt and sign the compressed archive using GPG"
    echo "    --gpg-extra opt    : Append more options to the gpg command line"
    echo "    --ssl-encrypt      : Encrypt the compressed archive using OpenSSL"
    echo "    --ssl-passwd pass  : Use the given password to encrypt the data using OpenSSL"
    echo "    --ssl-pass-src src : Use the given src as the source of password to encrypt the data"
    echo "                         using OpenSSL. See \"PASS PHRASE ARGUMENTS\" in man openssl."
    echo "                         If this option is not supplied, the user will be asked to enter"
    echo "                         encryption password on the current terminal."
    echo "    --ssl-no-md        : Do not use \"-md\" option not supported by older OpenSSL."
    echo "    --nochown          : Do not give the target folder to the current user (default)"
    echo "    --chown            : Give the target folder to the current user recursively"
    echo "    --nocomp           : Do not compress the data"
    echo "    --notemp           : The archive will create archive_dir in the current directory"
    echo "                         and uncompress in ./archive_dir"
    echo "                         Note: persistent archives do not strictly require a startup_script"
    echo "    --needroot         : Check that the root user is extracting the archive before proceeding"
    echo "    --copy             : Upon extraction, the archive will first copy itself to"
    echo "                         a temporary directory"
    echo "    --append           : Append more files to an existing Makeself archive"
    echo "                         The label and startup scripts will then be ignored"
    echo "    --target dir       : Extract directly to a target directory"
    echo "                         directory path can be either absolute or relative"
    echo "    --current          : Files will be extracted to the current directory"
    echo "                         Both --current and --target imply --notemp, and do not require a startup_script"
    echo "    --nooverwrite      : Do not extract the archive if the specified target directory exists"
    echo "    --tar-format opt   : Specify a tar archive format (default is ustar)"
    echo "    --tar-extra opt    : Append more options to the tar command line"
    echo "    --untar-extra opt  : Append more options to the during the extraction of the tar archive"
    echo "    --nomd5            : Don't calculate an MD5 for archive"
    echo "    --nocrc            : Don't calculate a CRC for archive"
    echo "    --sha256           : Compute a SHA256 checksum for the archive"
    echo "    --header file      : Specify location of the header script"
    echo "    --preextract file  : Specify a pre-extraction script"
    echo "    --cleanup file     : Specify a cleanup script that executes on interrupt and when finished successfully."
    echo "    --follow           : Follow the symlinks in the archive"
    echo "    --noprogress       : Do not show the progress during the decompression"
    echo "    --nox11            : Disable automatic spawn of a xterm"
    echo "    --nowait           : Do not wait for user input after executing embedded"
    echo "                         program from an xterm"
    echo "    --sign passphrase  : Signature private key to sign the package with"
    echo "    --lsm file         : LSM file describing the package"
    echo "    --license file     : Append a license file"
    echo "    --help-header file : Add a header to the archive's --help output"
    echo "    --packaging-date date"
    echo "                       : Use provided string as the packaging date"
    echo "                         instead of the current date."
    echo
    echo "    --keep-umask       : Keep the umask set to shell default, rather than overriding when executing self-extracting archive."
    echo "    --export-conf      : Export configuration variables to startup_script"
    echo
    echo "ENVIRONMENT"
    echo "    SETUP_NOCHECK"
    echo "        If set to 1, then checksum validation will be skipped."
    echo
    echo "Do not forget to give a fully qualified startup script name"
    echo "(i.e. with a ./ prefix if inside the archive)."
    exit 1
}

# Default settings
if type gzip >/dev/null 2>&1; then
    COMPRESS=gzip
elif type compress >/dev/null 2>&1; then
    COMPRESS=compress
else
    echo "ERROR: missing commands: gzip, compress" >&2
    MS_Usage
fi
ENCRYPT=n
ENCRYPT_MODE=n
ENCRYPT_CMD=""
DECRYPT_CMD=""
BASE64_MODE=n
PASSWD=""
PASSWD_SRC=""
OPENSSL_NO_MD=n
COMPRESS_LEVEL=9
COMP_EXTRA=""
DEFAULT_THREADS=123456 # Sentinel value
THREADS=$DEFAULT_THREADS
KEEP=n
CURRENT=n
NOX11=n
NOWAIT=n
APPEND=n
TAR_QUIETLY=n
KEEP_UMASK=n
QUIET=n
NOPROGRESS=n
COPY=none
NEED_ROOT=n
TAR_ARGS=rvf
TAR_FORMAT=ustar
TAR_EXTRA=""
GPG_EXTRA=""
DU_ARGS=-ks
HEADER=`dirname "$0"`/makeself-header.sh
SIGNATURE=""
TARGETDIR=""
NOOVERWRITE=n
DATE=`LC_ALL=C date`
EXPORT_CONF=n
SHA256=n
OWNERSHIP=n
SIGN=n
GPG_PASSPHRASE=""

# LSM file stuff
LSM_CMD="echo No LSM. >> \"\$archname\""

while true
do
    case "$1" in
    --version | -v)
    echo Makeself version $MS_VERSION
    exit 0
    ;;
    --pbzip2)
    COMPRESS=pbzip2
    shift
    ;;
    --bzip3)
    COMPRESS=bzip3
    shift
    ;;
    --bzip2)
    COMPRESS=bzip2
    shift
    ;;
    --gzip)
    COMPRESS=gzip
    shift
    ;;
    --pigz)
        COMPRESS=pigz
        shift
        ;;
    --zstd)
        COMPRESS=zstd
        shift
        ;;
    --xz)
    COMPRESS=xz
    shift
    ;;
    --lzo)
    COMPRESS=lzo
    shift
    ;;
    --lz4)
    COMPRESS=lz4
    shift
    ;;
    --compress)
    COMPRESS=compress
    shift
    ;;
    --base64)
        ENCRYPT_MODE=base64
        BASE64_MODE=y
        shift
    ;;
    --gpg-encrypt)
        ENCRYPT_MODE=gpg
        shift
        ;;
    --gpg-asymmetric-encrypt-sign)
        ENCRYPT_MODE=gpg-asymmetric
        shift
        ;;
    --gpg-extra)
    GPG_EXTRA="$2"
    shift 2 || { MS_Usage; exit 1; }
    ;;
    --ssl-encrypt)
        ENCRYPT_MODE=openssl
        shift
        ;;
    --ssl-passwd)
    PASSWD=$2
    shift 2 || { MS_Usage; exit 1; }
    ;;
    --ssl-pass-src)
    PASSWD_SRC=$2
    shift 2 || { MS_Usage; exit 1; }
    ;;
    --ssl-no-md)
    OPENSSL_NO_MD=y
    shift
    ;;
    --nocomp)
    COMPRESS=none
    shift
    ;;
    --complevel)
    COMPRESS_LEVEL="$2"
    shift 2 || { MS_Usage; exit 1; }
    ;;
    --comp-extra)
    COMP_EXTRA="$2"
    shift 2 || { MS_Usage; exit 1; }
    ;;
    --threads)
    THREADS="$2"
    shift 2 || { MS_Usage; exit 1; }
    ;;
    --nochown)
    OWNERSHIP=n
    shift
    ;;
    --chown)
    OWNERSHIP=y
    shift
    ;;
    --notemp)
    KEEP=y
    shift
    ;;
    --copy)
    COPY=copy
    shift
    ;;
    --current)
    CURRENT=y
    KEEP=y
    shift
    ;;
    --tar-format)
        TAR_FORMAT="$2"
        shift 2 || { MS_Usage; exit 1; }
    ;;
    --tar-extra)
        TAR_EXTRA="$2"
        shift 2 || { MS_Usage; exit 1; }
    ;;
    --untar-extra)
        UNTAR_EXTRA="$2"
        shift 2 || { MS_Usage; exit 1; }
        ;;
    --target)
      TARGETDIR="$2"
      KEEP=y
    shift 2 || { MS_Usage; exit 1; }
       ;;
    --sign)
    SIGN=y
    GPG_PASSPHRASE="$2"
    shift 2 || { MS_Usage; exit 1; }
    ;;
    --nooverwrite)
        NOOVERWRITE=y
    shift
        ;;
    --needroot)
    NEED_ROOT=y
    shift
    ;;
    --header)
    HEADER="$2"
    shift 2 || { MS_Usage; exit 1; }
    ;;
    --preextract)
    preextract_file="$2"
    shift 2 || { MS_Usage; exit 1; }
    test -r "$preextract_file" || { echo "Unable to open pre-extraction script: $preextract_file" >&2; exit 1; }
    PREEXTRACT_ENCODED=`base64 < "$preextract_file"`
    ;;
    --cleanup)
    CLEANUP_SCRIPT="$2"
    shift 2 || { MS_Usage; exit 1; }
    ;;
    --license)
        # We need to escape all characters having a special meaning in double quotes
        LICENSE=$(sed 's/\\/\\\\/g; s/"/\\\"/g; s/`/\\\`/g; s/\$/\\\$/g' "$2")
        shift 2 || { MS_Usage; exit 1; }
    ;;
    --follow)
    TAR_ARGS=rvhf
    DU_ARGS=-ksL
    shift
    ;;
    --noprogress)
    NOPROGRESS=y
    shift
    ;;
    --nox11)
    NOX11=y
    shift
    ;;
    --nowait)
    NOWAIT=y
    shift
    ;;
    --nomd5)
    NOMD5=y
    shift
    ;;
    --sha256)
        SHA256=y
        shift
        ;;
    --nocrc)
    NOCRC=y
    shift
    ;;
    --append)
    APPEND=y
    shift
    ;;
    --lsm)
    LSM_CMD="awk 1 \"$2\" >> \"\$archname\""
    shift 2 || { MS_Usage; exit 1; }
    ;;
    --packaging-date)
    DATE="$2"
    shift 2 || { MS_Usage; exit 1; }
        ;;
    --help-header)
    HELPHEADER=`sed -e "s/'/'\\\\\''/g" $2`
    shift 2 || { MS_Usage; exit 1; }
    [ -n "$HELPHEADER" ] && HELPHEADER="$HELPHEADER
"
    ;;
    --tar-quietly)
    TAR_QUIETLY=y
    shift
    ;;
    --keep-umask)
    KEEP_UMASK=y
    shift
    ;;
    --export-conf)
    EXPORT_CONF=y
    shift
    ;;
    -q | --quiet)
    QUIET=y
    shift
    ;;
    -h | --help)
    MS_Usage
    ;;
    -*)
    echo Unrecognized flag : "$1"
    MS_Usage
    ;;
    *)
    break
    ;;
    esac
done

if test $# -lt 1; then
    MS_Usage
else
    if test -d "$1"; then
        archdir="$1"
    else
        echo "Directory $1 does not exist." >&2
        exit 1
    fi
fi
archname="$2"

if test "$QUIET" = "y" || test "$TAR_QUIETLY" = "y"; then
    if test "$TAR_ARGS" = "rvf"; then
        TAR_ARGS="rf"
    elif test "$TAR_ARGS" = "rvhf"; then
        TAR_ARGS="rhf"
    fi
fi

if test "$APPEND" = y; then
    if test $# -lt 2; then
        MS_Usage
    fi

    # Gather the info from the original archive
    OLDENV=`sh "$archname" --dumpconf`
    if test $? -ne 0; then
        echo "Unable to update archive: $archname" >&2
        exit 1
    else
        eval "$OLDENV"
        OLDSKIP=`expr $SKIP + 1`
    fi
else
    if test "$KEEP" = n -a $# = 3; then
        echo "ERROR: Making a temporary archive with no embedded command does not make sense!" >&2
        echo >&2
        MS_Usage
    fi
    # We don't want to create an absolute directory unless a target directory is defined
    if test "$CURRENT" = y; then
        archdirname="."
    elif test x"$TARGETDIR" != x; then
        archdirname="$TARGETDIR"
    else
        archdirname=`basename "$1"`
    fi

    if test $# -lt 3; then
        MS_Usage
    fi

    LABEL="$3"
    SCRIPT="$4"
    test "x$SCRIPT" = x || shift 1
    shift 3
    SCRIPTARGS="$*"
fi

if test "$KEEP" = n -a "$CURRENT" = y; then
    echo "ERROR: It is A VERY DANGEROUS IDEA to try to combine --notemp and --current." >&2
    exit 1
fi

case $COMPRESS in
gzip)
    GZIP_CMD="gzip -c$COMPRESS_LEVEL"
    GUNZIP_CMD="gzip -cd"
    ;;
pigz) 
    GZIP_CMD="pigz -$COMPRESS_LEVEL"
    if test $THREADS -ne $DEFAULT_THREADS; then # Leave as the default if threads not indicated
        GZIP_CMD="$GZIP_CMD --processes $THREADS"
    fi
    GUNZIP_CMD="gzip -cd"
    ;;
zstd)
    GZIP_CMD="zstd -$COMPRESS_LEVEL"
    if test $THREADS -ne $DEFAULT_THREADS; then # Leave as the default if threads not indicated
        GZIP_CMD="$GZIP_CMD --threads=$THREADS"
    fi
    GUNZIP_CMD="zstd -cd"
    ;;
pbzip2)
    GZIP_CMD="pbzip2 -c$COMPRESS_LEVEL"
    if test $THREADS -ne $DEFAULT_THREADS; then # Leave as the default if threads not indicated
        GZIP_CMD="$GZIP_CMD -p$THREADS"
    fi
    GUNZIP_CMD="bzip2 -d"
    ;;
bzip3)
    # Map the compression level to a block size in MiB as 2^(level-1).
    BZ3_COMPRESS_LEVEL=`echo "2^($COMPRESS_LEVEL-1)" | bc`
    GZIP_CMD="bzip3 -b$BZ3_COMPRESS_LEVEL"
    if test $THREADS -ne $DEFAULT_THREADS; then # Leave as the default if threads not indicated
        GZIP_CMD="$GZIP_CMD -j$THREADS"
    fi
    JOBS=`echo "10-$COMPRESS_LEVEL" | bc`
    GUNZIP_CMD="bzip3 -dj$JOBS"
    ;;
bzip2)
    GZIP_CMD="bzip2 -$COMPRESS_LEVEL"
    GUNZIP_CMD="bzip2 -d"
    ;;
xz)
    GZIP_CMD="xz -c$COMPRESS_LEVEL"
    # Must opt-in by specifying a value since not all versions of xz support threads
    if test $THREADS -ne $DEFAULT_THREADS; then 
        GZIP_CMD="$GZIP_CMD --threads=$THREADS"
    fi
    GUNZIP_CMD="xz -d"
    ;;
lzo)
    GZIP_CMD="lzop -c$COMPRESS_LEVEL"
    GUNZIP_CMD="lzop -d"
    ;;
lz4)
    GZIP_CMD="lz4 -c$COMPRESS_LEVEL"
    GUNZIP_CMD="lz4 -d"
    ;;
compress)
    GZIP_CMD="compress -fc"
    GUNZIP_CMD="(type compress >/dev/null 2>&1 && compress -fcd || gzip -cd)"
    ;;
none)
    GZIP_CMD="cat"
    GUNZIP_CMD="cat"
    ;;
esac

if test x"$COMP_EXTRA" != "x"; then
    GZIP_CMD="$GZIP_CMD $COMP_EXTRA"
fi

case "$ENCRYPT_MODE" in
openssl)
    if test x"$APPEND" = x"y"; then
        echo "Appending to existing archive is not compatible with OpenSSL encryption." >&2
    fi

    ENCRYPT_CMD="openssl enc -aes-256-cbc -salt -pbkdf2"
    DECRYPT_CMD="openssl enc -aes-256-cbc -d -salt -pbkdf2"

    if test x"$OPENSSL_NO_MD" != x"y"; then
        ENCRYPT_CMD="$ENCRYPT_CMD -md sha256"
        DECRYPT_CMD="$DECRYPT_CMD -md sha256"
    fi

    if test -n "$PASSWD_SRC"; then
        ENCRYPT_CMD="$ENCRYPT_CMD -pass $PASSWD_SRC"
    elif test -n "$PASSWD"; then 
        ENCRYPT_CMD="$ENCRYPT_CMD -pass pass:$PASSWD"
    fi
    ;;
gpg)
    ENCRYPT_CMD="gpg $GPG_EXTRA -ac -z$COMPRESS_LEVEL -o -"
    DECRYPT_CMD="gpg $GPG_EXTRA -d"
    ;;
gpg-asymmetric)
    ENCRYPT_CMD="gpg $GPG_EXTRA -z$COMPRESS_LEVEL -es -o -"
    DECRYPT_CMD="gpg $GPG_EXTRA --yes -d"
    ;;
base64)
    ENCRYPT_CMD="base64"
    DECRYPT_CMD="base64 --decode"
    ;;
n)
    ;;
esac

ENCRYPT="$ENCRYPT_MODE"

tmpfile="${TMPDIR:-/tmp}/mkself$$"

if test -f "$HEADER"; then
    oldarchname="$archname"
    archname="$tmpfile"
    # Generate a fake header to count its lines
    SKIP=0
    . "$HEADER"
    SKIP=`cat "$tmpfile" |wc -l`
    # Get rid of any spaces
    SKIP=`expr $SKIP`
    rm -f "$tmpfile"
    if test "$QUIET" = "n"; then
        echo "Header is $SKIP lines long" >&2
    fi
    archname="$oldarchname"
else
    echo "Unable to open header file: $HEADER" >&2
    exit 1
fi

if test "$QUIET" = "n"; then
    echo
fi

if test "$APPEND" = n; then
    if test -f "$archname"; then
        echo "WARNING: Overwriting existing file: $archname" >&2
    fi
fi

USIZE=`du $DU_ARGS "$archdir" | awk '{print $1}'`

if test "." = "$archdirname"; then
    if test "$KEEP" = n; then
        archdirname="makeself-$$-`date +%Y%m%d%H%M%S`"
    fi
fi

test -d "$archdir" || { echo "Error: $archdir does not exist."; rm -f "$tmpfile"; exit 1; }
if test "$QUIET" = "n"; then
   echo "About to compress $USIZE KB of data..."
   echo "Adding files to archive named \"$archname\"..."
fi

# See if we have GNU tar
TAR=`exec <&- 2>&-; which gtar || command -v gtar || type gtar`
test -x "$TAR" || TAR=`exec <&- 2>&-; which bsdtar || command -v bsdtar || type bsdtar`
test -x "$TAR" || TAR=tar

tmparch="${TMPDIR:-/tmp}/mkself$$.tar"
(
    if test "$APPEND" = "y"; then
        if test x"$ENCRYPT_MODE" != xn; then
            tail -n "+$OLDSKIP" "$archname" | eval "$DECRYPT_CMD" | eval "$GUNZIP_CMD" > "$tmparch"
        else
            tail -n "+$OLDSKIP" "$archname" | eval "$GUNZIP_CMD" > "$tmparch"
        fi
    fi
    cd "$archdir"
    # "Determining if a directory is empty"
    # https://www.etalabs.net/sh_tricks.html
    find . \
        \( \
        ! -type d \
        -o \
        \( -links 2 -exec sh -c '
            is_empty () (
                cd "$1"
                set -- .[!.]* ; test -f "$1" && return 1
                set -- ..?* ; test -f "$1" && return 1
                set -- * ; test -f "$1" && return 1
                return 0
            )
            is_empty "$0"' {} \; \
        \) \
        \) -print \
        | LC_ALL=C sort \
        | sed 's/./\\&/g' \
        | xargs $TAR $TAR_EXTRA --format $TAR_FORMAT -$TAR_ARGS "$tmparch"
) || {
    echo "ERROR: failed to create temporary archive: $tmparch"
    rm -f "$tmparch" "$tmpfile"
    exit 1
}

USIZE=`du $DU_ARGS "$tmparch" | awk '{print $1}'`

eval "$GZIP_CMD" <"$tmparch" >"$tmpfile" || {
    echo "ERROR: failed to create temporary file: $tmpfile"
    rm -f "$tmparch" "$tmpfile"
    exit 1
}
rm -f "$tmparch"

if test x"$ENCRYPT_MODE" != xn; then
    action="encrypt"
    if test x"$ENCRYPT_MODE" = x"base64"; then
        action="encode"
    fi
    echo "About to $action archive \"$archname\"..."
    { eval "$ENCRYPT_CMD" < "$tmpfile" > "${tmpfile}.enc" && mv -f "${tmpfile}.enc" "$tmpfile"; } || \
        { echo Aborting: could not $action temporary file: "$tmpfile".; rm -f "$tmpfile"; exit 1; }
fi

fsize=`cat "$tmpfile" | wc -c | tr -d " "`

# Compute the checksums

shasum=0000000000000000000000000000000000000000000000000000000000000000
md5sum=00000000000000000000000000000000
crcsum=0000000000

if test "$NOCRC" = y; then
    if test "$QUIET" = "n"; then
        echo "skipping crc at user request"
    fi
else
    crcsum=`CMD_ENV=xpg4 cksum < "$tmpfile" | sed -e 's/ /Z/' -e 's/	/Z/' | cut -dZ -f1`
    if test "$QUIET" = "n"; then
        echo "CRC: $crcsum"
    fi
fi

if test "$SHA256" = y; then
    SHA_PATH=`exec <&- 2>&-; which shasum || command -v shasum || type shasum`
    if test -x "$SHA_PATH"; then
        shasum=`eval "$SHA_PATH -a 256" < "$tmpfile" | cut -b-64`
    else
        SHA_PATH=`exec <&- 2>&-; which sha256sum || command -v sha256sum || type sha256sum`
        shasum=`eval "$SHA_PATH" < "$tmpfile" | cut -b-64`
    fi
    if test "$QUIET" = "n"; then
        if test -x "$SHA_PATH"; then
            echo "SHA256: $shasum"
        else
            echo "SHA256: none, SHA command not found"
        fi
    fi
fi
if test "$NOMD5" = y; then
    if test "$QUIET" = "n"; then
        echo "Skipping md5sum at user request"
    fi
else
    # Try to locate a MD5 binary
    OLD_PATH=$PATH
    PATH=${GUESS_MD5_PATH:-"$OLD_PATH:/bin:/usr/bin:/sbin:/usr/local/ssl/bin:/usr/local/bin:/opt/openssl/bin"}
    MD5_ARG=""
    MD5_PATH=`exec <&- 2>&-; which md5sum || command -v md5sum || type md5sum`
    test -x "$MD5_PATH" || MD5_PATH=`exec <&- 2>&-; which md5 || command -v md5 || type md5`
    test -x "$MD5_PATH" || MD5_PATH=`exec <&- 2>&-; which digest || command -v digest || type digest`
    PATH=$OLD_PATH
    if test -x "$MD5_PATH"; then
        if test `basename ${MD5_PATH}`x = digestx; then
            MD5_ARG="-a md5"
        fi
        md5sum=`eval "$MD5_PATH $MD5_ARG" < "$tmpfile" | cut -b-32`
        if test "$QUIET" = "n"; then
            echo "MD5: $md5sum"
        fi
    else
        if test "$QUIET" = "n"; then
            echo "MD5: none, MD5 command not found"
        fi
    fi
fi
if test "$SIGN" = y; then
    GPG_PATH=`exec <&- 2>&-; which gpg || command -v gpg || type gpg`
    if test -x "$GPG_PATH"; then
        SIGNATURE=`$GPG_PATH --pinentry-mode=loopback --batch --yes $GPG_EXTRA --passphrase "$GPG_PASSPHRASE" --output - --detach-sig $tmpfile | base64 | tr -d \\\\n`
        if test "$QUIET" = "n"; then
            echo "Signature: $SIGNATURE"
        fi
    else
        echo "Missing gpg command" >&2
    fi
fi

totalsize=0
for size in $fsize;
do
    totalsize=`expr $totalsize + $size`
done

if test "$APPEND" = y; then
    mv "$archname" "$archname".bak || exit

    # Prepare entry for new archive
    filesizes="$fsize"
    CRCsum="$crcsum"
    MD5sum="$md5sum"
    SHAsum="$shasum"
    Signature="$SIGNATURE"
    # Generate the header
    . "$HEADER"
    # Append the new data
    cat "$tmpfile" >> "$archname"

    chmod +x "$archname"
    rm -f "$archname".bak
    if test "$QUIET" = "n"; then
        echo "Self-extractable archive \"$archname\" successfully updated."
    fi
else
    filesizes="$fsize"
    CRCsum="$crcsum"
    MD5sum="$md5sum"
    SHAsum="$shasum"
    Signature="$SIGNATURE"

    # Generate the header
    . "$HEADER"

    # Append the compressed tar data after the stub
    if test "$QUIET" = "n"; then
        echo
    fi
    cat "$tmpfile" >> "$archname"
    chmod +x "$archname"
    if test "$QUIET" = "n"; then
        echo Self-extractable archive \"$archname\" successfully created.
    fi
fi
rm -f "$tmpfile"
