_tracexec() {
    local i cur prev opts cmd
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    cmd=""
    opts=""

    for i in ${COMP_WORDS[@]}
    do
        case "${cmd},${i}" in
            ",$1")
                cmd="tracexec"
                ;;
            tracexec,collect)
                cmd="tracexec__collect"
                ;;
            tracexec,generate-completions)
                cmd="tracexec__generate__completions"
                ;;
            tracexec,help)
                cmd="tracexec__help"
                ;;
            tracexec,log)
                cmd="tracexec__log"
                ;;
            tracexec,tui)
                cmd="tracexec__tui"
                ;;
            tracexec__help,collect)
                cmd="tracexec__help__collect"
                ;;
            tracexec__help,generate-completions)
                cmd="tracexec__help__generate__completions"
                ;;
            tracexec__help,help)
                cmd="tracexec__help__help"
                ;;
            tracexec__help,log)
                cmd="tracexec__help__log"
                ;;
            tracexec__help,tui)
                cmd="tracexec__help__tui"
                ;;
            *)
                ;;
        esac
    done

    case "${cmd}" in
        tracexec)
            opts="-C -P -u -h -V --color --cwd --profile --no-profile --user --help --version log tui generate-completions collect help"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --color)
                    COMPREPLY=($(compgen -W "auto always never" -- "${cur}"))
                    return 0
                    ;;
                --cwd)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -C)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --profile)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -P)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --user)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -u)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        tracexec__collect)
            opts="-F -p -o -h --successful-only --fd-in-cmdline --stdio-in-cmdline --resolve-proc-self-exe --no-resolve-proc-self-exe --hide-cloexec-fds --no-hide-cloexec-fds --timestamp --no-timestamp --inline-timestamp-format --seccomp-bpf --tracer-delay --format --pretty --output --foreground --no-foreground --help <CMD>..."
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --inline-timestamp-format)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --seccomp-bpf)
                    COMPREPLY=($(compgen -W "auto on off" -- "${cur}"))
                    return 0
                    ;;
                --tracer-delay)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --format)
                    COMPREPLY=($(compgen -W "json-stream json" -- "${cur}"))
                    return 0
                    ;;
                -F)
                    COMPREPLY=($(compgen -W "json-stream json" -- "${cur}"))
                    return 0
                    ;;
                --output)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -o)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        tracexec__generate__completions)
            opts="-h --help bash elvish fish powershell zsh"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        tracexec__help)
            opts="log tui generate-completions collect help"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        tracexec__help__collect)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        tracexec__help__generate__completions)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        tracexec__help__help)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        tracexec__help__log)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        tracexec__help__tui)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        tracexec__log)
            opts="-o -h --more-colors --less-colors --show-cmdline --no-show-cmdline --show-interpreter --no-show-interpreter --foreground --no-foreground --diff-fd --no-diff-fd --show-fd --no-show-fd --diff-env --no-diff-env --show-env --no-show-env --show-comm --no-show-comm --show-argv --no-show-argv --show-filename --no-show-filename --show-cwd --no-show-cwd --decode-errno --no-decode-errno --successful-only --fd-in-cmdline --stdio-in-cmdline --resolve-proc-self-exe --no-resolve-proc-self-exe --hide-cloexec-fds --no-hide-cloexec-fds --timestamp --no-timestamp --inline-timestamp-format --seccomp-bpf --tracer-delay --show-all-events --filter --filter-include --filter-exclude --output --help <CMD>..."
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --inline-timestamp-format)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --seccomp-bpf)
                    COMPREPLY=($(compgen -W "auto on off" -- "${cur}"))
                    return 0
                    ;;
                --tracer-delay)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --filter)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --filter-include)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --filter-exclude)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --output)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -o)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        tracexec__tui)
            opts="-t -f -A -L -F -m -D -b -h --successful-only --fd-in-cmdline --stdio-in-cmdline --resolve-proc-self-exe --no-resolve-proc-self-exe --hide-cloexec-fds --no-hide-cloexec-fds --timestamp --no-timestamp --inline-timestamp-format --seccomp-bpf --tracer-delay --show-all-events --filter --filter-include --filter-exclude --tty --follow --terminate-on-exit --kill-on-exit --active-pane --layout --frame-rate --max-events --default-external-command --add-breakpoint --help <CMD>..."
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --inline-timestamp-format)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --seccomp-bpf)
                    COMPREPLY=($(compgen -W "auto on off" -- "${cur}"))
                    return 0
                    ;;
                --tracer-delay)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --filter)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --filter-include)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --filter-exclude)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --active-pane)
                    COMPREPLY=($(compgen -W "terminal events" -- "${cur}"))
                    return 0
                    ;;
                -A)
                    COMPREPLY=($(compgen -W "terminal events" -- "${cur}"))
                    return 0
                    ;;
                --layout)
                    COMPREPLY=($(compgen -W "horizontal vertical" -- "${cur}"))
                    return 0
                    ;;
                -L)
                    COMPREPLY=($(compgen -W "horizontal vertical" -- "${cur}"))
                    return 0
                    ;;
                --frame-rate)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -F)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --max-events)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -m)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --default-external-command)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -D)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --add-breakpoint)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -b)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
    esac
}

if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then
    complete -F _tracexec -o nosort -o bashdefault -o default tracexec
else
    complete -F _tracexec -o bashdefault -o default tracexec
fi
