// File: /workspace/github_cpp_makefile_star2_O2/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 0x18563
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)
pushq $0x1
popq %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x18b62
movl %eax, 0x4(%rsp)
movq (%r12), %r13
movq 0x8(%r12), %r12
cmpq %r12, %r13
jne 0x18607
testq %r15, %r15
je 0x186b3
testb $0x40, 0x8(%r15)
jne 0x186b3
leaq 0x210(%rbx), %rdx
leaq 0x18(%rsp), %rdi
movq %r15, %rsi
callq 0x19aea
movq 0x18(%rsp), %r15
movq 0x20(%rsp), %r12
cmpq %r12, %r15
setne %al
cmpl $0x2, 0x4(%rsp)
setne %bpl
orb %al, %bpl
cmpq %r12, %r15
je 0x186a4
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x199f6
addq $0x20, %r15
jmp 0x185ea
cmpl $0x2, 0x4(%rsp)
je 0x1865a
cmpq $0x0, 0x8(%r14)
je 0x1865a
cmpq %r12, %r13
je 0x186b3
movq (%r13), %rdx
testb $0x40, 0x8(%rdx)
jne 0x18637
addq $0x68, %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x199f6
addq $0x8, %r13
jmp 0x18615
movq (%r13), %rdx
testb $0x40, 0x8(%rdx)
jne 0x18656
addq $0x68, %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x199f6
addq $0x8, %r13
cmpq %r12, %r13
jne 0x1863d
pushq $0x10
popq %rdi
callq 0x6220
movq %rax, %r14
movq 0x200(%rbx), %rsi
leaq 0x18(%rsp), %rbx
movq %rbx, %rdi
callq 0x19b4c
movb $0x1, %bpl
movq %r14, %rdi
movq %rbx, %rsi
callq 0x19298
xorl %ebp, %ebp
leaq 0x1c42b(%rip), %rsi     # 0x34ac0
movq 0x1c924(%rip), %rdx     # 0x34fc0
movq %r14, %rdi
callq 0x6680
leaq 0x18(%rsp), %rdi
callq 0x739e
testb %bpl, %bpl
je 0x1865f
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)
leaq 0x198(%rbx), %rax
movq %rax, 0x8(%rsp)
leaq 0x178(%rbx), %rax
movq %rax, 0x10(%rsp)
leaq 0x18(%rsp), %rbp
cmpq 0x80(%rsp), %rcx
je 0x187e0
movq %rcx, 0x88(%rsp)
movq (%rcx), %r12
testb $0x40, 0x8(%r12)
jne 0x187cf
addq $0xa0, %r12
movq %rbp, %rdi
movq %r12, %rsi
callq 0x175f2
leaq 0x40(%rsp), %r13
movq %r13, %rdi
movq %rbp, %rsi
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
callq 0x17282
movq %rbx, %rdi
movq %r14, %rsi
movq %r13, %rdx
callq 0x199f6
movl %eax, %r15d
movq %r13, %rdi
callq 0x61f0
leaq 0x20(%rsp), %rdi
callq 0x61f0
testb %r15b, %r15b
jne 0x187cf
leaq 0x40(%rsp), %rdi
movq %r12, %rsi
callq 0x17762
movq 0x40(%rsp), %r12
movq 0x48(%rsp), %r13
cmpq %r13, %r12
je 0x187c5
movq %rbp, %rdi
movq %r12, %rsi
movq 0x8(%rsp), %rdx
movq 0x10(%rsp), %rcx
callq 0x17282
movq %rbx, %rdi
movq %r14, %rsi
movq %rbp, %rdx
callq 0x199f6
movl %eax, %r15d
movq %rbp, %rdi
callq 0x61f0
addq $0x28, %r12
testb %r15b, %r15b
je 0x18789
leaq 0x40(%rsp), %rdi
callq 0x177f0
movq 0x88(%rsp), %rcx
addq $0x8, %rcx
jmp 0x186f9
cmpl $0x0, 0x4(%rsp)
je 0x188e2
cmpl $0x1, 0x4(%rsp)
jne 0x18911
cmpb $0x1, 0x1f8(%rbx)
jne 0x18911
movq 0x1a0(%rbx), %rsi
leaq 0x1(%rsi), %rax
cmpq %rax, 0x8(%r14)
jbe 0x18911
movq %r14, %rdi
callq 0x64a0
movb (%rax), %bpl
leaq 0x20(%rsp), %r12
movb $0x1, -0x8(%r12)
movb %bpl, -0x7(%r12)
leaq 0x30(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
movq (%rbx), %rax
leaq 0x18(%rsp), %rsi
movq %rbx, %rdi
callq *0x38(%rax)
movq %rax, %r13
movq %r12, %rdi
callq 0x61f0
testq %r13, %r13
je 0x18911
leaq 0x210(%rbx), %rdx
leaq 0x60(%rsp), %rdi
movq %r13, %rsi
callq 0x19aea
movq 0x60(%rsp), %r12
movq 0x68(%rsp), %r15
movsbl %bpl, %eax
movl %eax, 0x10(%rsp)
leaq 0x40(%rsp), %r13
leaq 0x18(%rsp), %rbp
cmpq %r15, %r12
je 0x18996
movq %r13, %rdi
movq 0x8(%rsp), %rsi
movl 0x10(%rsp), %edx
callq 0x19b16
movq %rbp, %rdi
movq %r13, %rsi
movq %r12, %rdx
callq 0x17640
movq %rbx, %rdi
movq %r14, %rsi
movq %rbp, %rdx
callq 0x199f6
movq %rbp, %rdi
callq 0x61f0
movq %r13, %rdi
callq 0x61f0
addq $0x20, %r12
jmp 0x18896
cmpb $0x1, 0x1f9(%rbx)
jne 0x18911
cmpq $0x0, 0x1c0(%rbx)
je 0x18911
leaq 0x1b8(%rbx), %rsi
movq %r14, %rdi
movq %rsi, 0x8(%rsp)
xorl %edx, %edx
callq 0x6770
cmpq $-0x1, %rax
jne 0x18923
leaq 0xa8(%rsp), %rdi
callq 0x14094
jmp 0x1865f
leaq 0x40(%rsp), %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rax, %rcx
callq 0x60f0
movq 0x180(%rbx), %rdx
leaq 0x60(%rsp), %rdi
leaq 0x40(%rsp), %rsi
pushq $-0x1
popq %rcx
callq 0x6440
leaq 0x18(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x17312
movq (%rbx), %rax
leaq 0x18(%rsp), %rsi
movq %rbx, %rdi
callq *0x38(%rax)
movq %rax, %r15
leaq 0x20(%rsp), %rdi
callq 0x61f0
leaq 0x60(%rsp), %rdi
callq 0x61f0
testq %r15, %r15
jne 0x189a5
leaq 0x40(%rsp), %rdi
callq 0x61f0
jmp 0x18911
leaq 0x60(%rsp), %rdi
callq 0x739e
jmp 0x18911
leaq 0x210(%rbx), %rdx
leaq 0x90(%rsp), %rdi
movq %r15, %rsi
callq 0x19aea
movq 0x90(%rsp), %r12
movq 0x98(%rsp), %rbp
leaq 0x60(%rsp), %r13
leaq 0x18(%rsp), %r15
cmpq %rbp, %r12
je 0x18a1f
movq %r13, %rdi
leaq 0x40(%rsp), %rsi
movq 0x8(%rsp), %rdx
callq 0x17343
movq %r15, %rdi
movq %r13, %rsi
movq %r12, %rdx
callq 0x17640
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x199f6
movq %r15, %rdi
callq 0x61f0
movq %r13, %rdi
callq 0x61f0
addq $0x20, %r12
jmp 0x189d6
leaq 0x90(%rsp), %rdi
callq 0x739e
jmp 0x18987
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x61f0
jmp 0x18a43
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x61f0
jmp 0x18a52
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x739e
jmp 0x18ab6
jmp 0x18ab3
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x61f0
jmp 0x18a75
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x61f0
jmp 0x18a84
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x739e
jmp 0x18b1f
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x61f0
jmp 0x18aa5
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x61f0
jmp 0x18ab6
jmp 0x18ae9
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
jmp 0x18ae2
jmp 0x18ae9
movq %rax, %rbx
movq %r12, %rdi
jmp 0x18ae2
jmp 0x18ae9
jmp 0x18ae9
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x61f0
jmp 0x18add
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x61f0
jmp 0x18b1f
movq %rax, %rbx
jmp 0x18b1f
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x739e
jmp 0x18b4d
jmp 0x18b4a
jmp 0x18b4a
jmp 0x18b4a
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x61f0
jmp 0x18b15
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x177f0
leaq 0xa8(%rsp), %rdi
callq 0x14094
jmp 0x18b4d
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x61f0
testb %bpl, %bpl
je 0x18b4d
movq %r14, %rdi
callq 0x62f0
jmp 0x18b4d
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x13e40
movq %rbx, %rdi
callq 0x66b0