// File: /workspace/github_cpp_makefile_star2_O3/BU-DiSC[P]BF-Shared-Hashing/./args.hxx
// Function: bool args::ArgumentParser::Complete<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>>(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>, __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>)
bool Complete(It it, It end)
            {
                auto nextIt = it;
                if (!readCompletion || (++nextIt != end))
                {
                    return false;
                }

                const auto &chunk = *it;
                auto pos = GetNextPositional();
                std::vector<Command *> commands = GetCommands();
                const auto optionType = ParseOption(chunk, true);

                if (!commands.empty() && (chunk.empty() || optionType == OptionType::Positional))
                {
                    for (auto &cmd : commands)
                    {
                        if ((cmd->GetOptions() & Options::HiddenFromCompletion) == Options::None)
                        {
                            AddCompletionReply(chunk, cmd->Name());
                        }
                    }
                } else
                {
                    bool hasPositionalCompletion = true;

                    if (!commands.empty())
                    {
                        for (auto &cmd : commands)
                        {
                            if ((cmd->GetOptions() & Options::HiddenFromCompletion) == Options::None)
                            {
                                AddCompletionReply(chunk, cmd->Name());
                            }
                        }
                    } else if (pos)
                    {
                        if ((pos->GetOptions() & Options::HiddenFromCompletion) == Options::None)
                        {
                            auto choices = pos->HelpChoices(helpParams);
                            hasPositionalCompletion = !choices.empty() || optionType != OptionType::Positional;
                            for (auto &choice : choices)
                            {
                                AddCompletionReply(chunk, choice);
                            }
                        }
                    }

                    if (hasPositionalCompletion)
                    {
                        auto flags = GetAllFlags();
                        for (auto flag : flags)
                        {
                            if ((flag->GetOptions() & Options::HiddenFromCompletion) != Options::None)
                            {
                                continue;
                            }

                            auto &matcher = flag->GetMatcher();
                            if (!AddCompletionReply(chunk, matcher.GetShortOrAny().str(shortprefix, longprefix)))
                            {
                                for (auto &flagName : matcher.GetFlagStrings())
                                {
                                    if (AddCompletionReply(chunk, flagName.str(shortprefix, longprefix)))
                                    {
                                        break;
                                    }
                                }
                            }
                        }

                        if (optionType == OptionType::LongFlag && allowJoinedLongValue)
                        {
                            const auto separator = longseparator.empty() ? chunk.npos : chunk.find(longseparator);
                            if (separator != chunk.npos)
                            {
                                std::string arg(chunk, 0, separator);
                                if (auto flag = this->Match(arg.substr(longprefix.size())))
                                {
                                    for (auto &choice : flag->HelpChoices(helpParams))
                                    {
                                        AddCompletionReply(chunk, arg + longseparator + choice);
                                    }
                                }
                            }
                        } else if (optionType == OptionType::ShortFlag && allowJoinedShortValue)
                        {
                            if (chunk.size() > shortprefix.size() + 1)
                            {
                                auto arg = chunk.at(shortprefix.size());
                                //TODO: support -abcVALUE where a and b take no value
                                if (auto flag = this->Match(arg))
                                {
                                    for (auto &choice : flag->HelpChoices(helpParams))
                                    {
                                        AddCompletionReply(chunk, shortprefix + arg + choice);
                                    }
                                }
                            }
                        }
                    }
                }

#ifndef ARGS_NOEXCEPT
                throw Completion(completion->Get());
#else
                return true;
#endif
            }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xd8, %rsp
leaq 0x20(%rsi), %rax
cmpq %rdx, %rax
sete %al
testb %al, 0x208(%rdi)
jne 0x1d431
xorl %eax, %eax
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rsi, %r14
movq %rdi, %rbx
movq (%rdi), %rax
callq *0x40(%rax)
movq %rax, %r15
movq (%rbx), %rax
leaq 0xc0(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq *0x28(%rax)
movq %rbx, %rdi
movq %r14, %rsi
movl $0x1, %edx
callq 0x1dc10
movl %eax, 0x4(%rsp)
movq (%r12), %r13
movq 0x8(%r12), %r12
cmpq %r12, %r13
jne 0x1d4a6
testq %r15, %r15
je 0x1d4de
testb $0x40, 0x8(%r15)
jne 0x1d4de
cmpb $0x1, 0x98(%r15)
jne 0x1d729
subq $-0x80, %r15
leaq 0x8(%rsp), %rdi
movq %r15, %rsi
callq 0x690a
jmp 0x1d741
cmpl $0x2, 0x4(%rsp)
je 0x1d5cb
cmpq $0x0, 0x8(%r14)
je 0x1d5cb
movq (%r13), %rdx
testb $0x40, 0x8(%rdx)
jne 0x1d4d5
addq $0x68, %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ed3c
addq $0x8, %r13
cmpq %r12, %r13
jne 0x1d4bc
movq (%rbx), %rax
leaq 0xa8(%rsp), %rdi
movq %rbx, %rsi
callq *0x48(%rax)
movq 0xa8(%rsp), %rcx
movq 0xb0(%rsp), %rax
movq %rax, 0x80(%rsp)
cmpq %rax, %rcx
jne 0x1d5f2
cmpl $0x0, 0x4(%rsp)
je 0x1d774
cmpl $0x1, 0x4(%rsp)
jne 0x1d7ac
cmpb $0x1, 0x1f8(%rbx)
jne 0x1d7ac
movq 0x8(%r14), %rdx
movq 0x1a0(%rbx), %rsi
leaq 0x1(%rsi), %rax
cmpq %rax, %rdx
jbe 0x1d7ac
cmpq %rsi, %rdx
jbe 0x1d827
movq (%r14), %rax
movb (%rax,%rsi), %bpl
leaq 0x20(%rsp), %r12
movb $0x1, -0x18(%r12)
movb %bpl, -0x17(%r12)
movq %r12, -0x10(%r12)
movq $0x0, -0x8(%r12)
movb $0x0, (%r12)
movq (%rbx), %rax
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq *0x38(%rax)
movq %rax, %r15
movq 0x10(%rsp), %rdi
cmpq %r12, %rdi
je 0x1d59e
callq 0x53d0
testq %r15, %r15
je 0x1d7ac
cmpb $0x1, 0x98(%r15)
jne 0x1d8ee
subq $-0x80, %r15
leaq 0x60(%rsp), %rdi
movq %r15, %rsi
callq 0x690a
jmp 0x1d906
movq (%r13), %rdx
testb $0x40, 0x8(%rdx)
jne 0x1d5e4
addq $0x68, %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1ed3c
addq $0x8, %r13
cmpq %r12, %r13
jne 0x1d5cb
jmp 0x1d7d6
leaq 0x198(%rbx), %rax
movq %rax, 0x30(%rsp)
leaq 0x178(%rbx), %rax
movq %rax, 0x38(%rsp)
leaq 0x8(%rsp), %r13
leaq 0x40(%rsp), %r12
movq %rcx, 0x88(%rsp)
movq (%rcx), %rbp
testb $0x40, 0x8(%rbp)
jne 0x1d70a
addq $0xa0, %rbp
movq %r13, %rdi
movq %rbp, %rsi
callq 0x1c130
movq %r12, %rdi
movq %r13, %rsi
movq 0x30(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0x1bd30
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x1ed3c
movl %eax, %r15d
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x1d675
callq 0x53d0
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x1d689
callq 0x53d0
testb %r15b, %r15b
jne 0x1d70a
movq %r12, %rdi
movq %r13, %r12
movq %rbp, %rsi
callq 0x1c348
movq 0x40(%rsp), %rbp
movq 0x48(%rsp), %r13
cmpq %r13, %rbp
je 0x1d6f7
movq %r12, %r15
movq %r12, %rdi
movq %rbp, %rsi
movq 0x30(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0x1bd30
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x1ed3c
movl %eax, %r15d
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x1d6e8
callq 0x53d0
addq $0x28, %rbp
cmpq %r13, %rbp
sete %al
orb %al, %r15b
je 0x1d6ab
leaq 0x40(%rsp), %r15
movq %r15, %rdi
callq 0x1c3dc
movq %r12, %r13
movq %r15, %r12
movq 0x88(%rsp), %rcx
addq $0x8, %rcx
cmpq 0x80(%rsp), %rcx
jne 0x1d614
jmp 0x1d510
leaq 0x210(%rbx), %rdx
movq (%r15), %rax
leaq 0x8(%rsp), %rdi
movq %r15, %rsi
callq *0x80(%rax)
movq 0x8(%rsp), %r15
movq 0x10(%rsp), %r13
cmpq %r13, %r15
setne %r12b
cmpl $0x2, 0x4(%rsp)
setne %bpl
cmpq %r13, %r15
je 0x1d7c0
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x1ed3c
addq $0x20, %r15
jmp 0x1d75b
cmpb $0x1, 0x1f9(%rbx)
jne 0x1d7ac
movq 0x1c0(%rbx), %rcx
testq %rcx, %rcx
je 0x1d7ac
leaq 0x1b8(%rbx), %rax
movq %rax, 0x30(%rsp)
movq (%rax), %rsi
movq %r14, %rdi
xorl %edx, %edx
callq 0x5690
cmpq $-0x1, %rax
jne 0x1d835
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0x1d7d6
callq 0x53d0
jmp 0x1d7d6
orb %r12b, %bpl
leaq 0x8(%rsp), %rdi
callq 0x698e
testb %bpl, %bpl
jne 0x1d4de
movl $0x10, %edi
callq 0x51f0
movq %rax, %r14
movq 0x200(%rbx), %rsi
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0x1eebc
movb $0x1, %bpl
movq %r14, %rdi
movq %rbx, %rsi
callq 0x54d0
leaq 0x1b384(%rip), %rax     # 0x38b90
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0x1b350(%rip), %rsi     # 0x38b68
movq 0x1b7a9(%rip), %rdx     # 0x38fc8
movq %r14, %rdi
callq 0x5670
leaq 0xc6cd(%rip), %rdi      # 0x29efb
xorl %eax, %eax
callq 0x55d0
leaq 0x40(%rsp), %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rax, %rcx
callq 0x50f0
movq 0x180(%rbx), %rdx
leaq 0x60(%rsp), %rdi
leaq 0x40(%rsp), %rsi
movq $-0x1, %rcx
callq 0x5440
leaq 0x10(%rsp), %rdi
movw $0x0, -0x8(%rdi)
leaq 0x20(%rsp), %r12
movq %r12, -0x10(%r12)
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
addq %rsi, %rdx
callq 0x6c14
movq (%rbx), %rax
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq *0x38(%rax)
movq %rax, %r15
movq 0x10(%rsp), %rdi
cmpq %r12, %rdi
je 0x1d8ab
callq 0x53d0
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1d8be
callq 0x53d0
testq %r15, %r15
je 0x1d9e3
cmpb $0x1, 0x98(%r15)
jne 0x1d9a6
subq $-0x80, %r15
leaq 0x90(%rsp), %rdi
movq %r15, %rsi
callq 0x690a
jmp 0x1d9c1
leaq 0x210(%rbx), %rdx
movq (%r15), %rax
leaq 0x60(%rsp), %rdi
movq %r15, %rsi
callq *0x80(%rax)
movq 0x60(%rsp), %r15
movq 0x68(%rsp), %rax
movq %rax, 0x30(%rsp)
cmpq %rax, %r15
jne 0x1d929
leaq 0x60(%rsp), %rdi
callq 0x698e
jmp 0x1d7ac
leaq 0x198(%rbx), %rax
movq %rax, 0x38(%rsp)
movsbl %bpl, %ebp
leaq 0x40(%rsp), %r13
leaq 0x8(%rsp), %r12
movq %r13, %rdi
movq 0x38(%rsp), %rsi
movl %ebp, %edx
callq 0x1ee5b
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x1c196
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x1ed3c
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x1d982
callq 0x53d0
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x1d996
callq 0x53d0
addq $0x20, %r15
cmpq 0x30(%rsp), %r15
jne 0x1d943
jmp 0x1d91a
leaq 0x210(%rbx), %rdx
movq (%r15), %rax
leaq 0x90(%rsp), %rdi
movq %r15, %rsi
callq *0x80(%rax)
movq 0x90(%rsp), %r12
movq 0x98(%rsp), %rbp
cmpq %rbp, %r12
jne 0x1d9ff
leaq 0x90(%rsp), %rdi
callq 0x698e
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1d7ac
callq 0x53d0
jmp 0x1d7ac
leaq 0x60(%rsp), %r13
leaq 0x8(%rsp), %r15
movq %r13, %rdi
leaq 0x40(%rsp), %rsi
movq 0x30(%rsp), %rdx
callq 0x1be04
movq %r15, %rdi
movq %r13, %rsi
movq %r12, %rdx
callq 0x1c196
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x1ed3c
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x1da4b
callq 0x53d0
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x1da5f
callq 0x53d0
addq $0x20, %r12
cmpq %rbp, %r12
jne 0x1da09
jmp 0x1d9d6
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x1da89
callq 0x53d0
jmp 0x1da89
movq %rax, %rbx
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x1daa2
callq 0x53d0
jmp 0x1daa2
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x698e
jmp 0x1db28
jmp 0x1db25
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x1dacf
callq 0x53d0
jmp 0x1dacf
movq %rax, %rbx
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x1dae8
callq 0x53d0
jmp 0x1dae8
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x698e
jmp 0x1dbb4
movq %rax, %rbx
movq 0x10(%rsp), %rdi
cmpq %r12, %rdi
je 0x1db10
callq 0x53d0
jmp 0x1db10
jmp 0x1db7a
movq %rax, %rbx
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1db28
callq 0x53d0
jmp 0x1db28
movq %rax, %rbx
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
jmp 0x1db6c
jmp 0x1db7a
jmp 0x1db7a
movq %rax, %rbx
movq 0x10(%rsp), %rdi
cmpq %r12, %rdi
jne 0x1db71
jmp 0x1dbb4
movq %rax, %rbx
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x1db62
callq 0x53d0
jmp 0x1db62
movq %rax, %rbx
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x1dbb4
callq 0x53d0
jmp 0x1dbb4
jmp 0x1db7a
movq %rax, %rbx
jmp 0x1dbb4
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x698e
jmp 0x1dbf6
movq %rax, %rbx
jmp 0x1dbaa
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x1dbaa
callq 0x53d0
leaq 0x40(%rsp), %rdi
callq 0x1c3dc
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0x1dbf6
callq 0x53d0
jmp 0x1dbf6
jmp 0x1dbce
jmp 0x1dbce
jmp 0x1dbce
movq %rax, %rbx
jmp 0x1dbf6
movq %rax, %rbx
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1dbe9
callq 0x53d0
testb %bpl, %bpl
je 0x1dbf6
movq %r14, %rdi
callq 0x52e0
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x1dc08
callq 0x53d0
movq %rbx, %rdi
callq 0x56b0