// File: /workspace/github_cpp_makefile_star2_O2/travisdowns[P]avx-turbo/./args.hxx
// Function: bool args::ArgumentParser::ParseArgsValues<__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>>>>>>(args::FlagBase&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, __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, bool, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, bool, 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 ParseArgsValues(FlagBase &flag, const std::string &arg, It &it, It end,
                                 const bool allowSeparate, const bool allowJoined,
                                 const bool hasJoined, const std::string &joinedArg,
                                 const bool canDiscardJoined, std::vector<std::string> &values)
            {
                values.clear();

                Nargs nargs = flag.NumberOfArguments();

                if (hasJoined && !allowJoined && nargs.min != 0)
                {
                    return RaiseParseError("Flag '" + arg + "' was passed a joined argument, but these are disallowed");
                }

                if (hasJoined)
                {
                    if (!canDiscardJoined || nargs.max != 0)
                    {
                        values.push_back(joinedArg);
                    }
                } else if (!allowSeparate)
                {
                    if (nargs.min != 0)
                    {
                        return RaiseParseError("Flag '" + arg + "' was passed a separate argument, but these are disallowed");
                    }
                } else
                {
                    auto valueIt = it;
                    ++valueIt;

                    while (valueIt != end &&
                           values.size() < nargs.max &&
                           (nargs.min == nargs.max || ParseOption(*valueIt) == OptionType::Positional))
                    {

                        values.push_back(*valueIt);
                        ++it;
                        ++valueIt;
                    }
                }

                if (values.size() > nargs.max)
                {
                    return RaiseParseError("Passed an argument into a non-argument flag: " + arg);
                } else if (values.size() < nargs.min)
                {
                    if (nargs.min == 1 && nargs.max == 1)
                    {
                        return RaiseParseError("Flag '" + arg + "' requires an argument but received none");
                    } else if (nargs.min == 1)
                    {
                        return RaiseParseError("Flag '" + arg + "' requires at least one argument but received none");
                    } else if (nargs.min != nargs.max)
                    {
                        return RaiseParseError("Flag '" + arg + "' requires at least " + std::to_string(nargs.min) +
                                               " arguments but received " + std::to_string(values.size()));
                    } else
                    {
                        return RaiseParseError("Flag '" + arg + "' requires " + std::to_string(nargs.min) +
                                               " arguments but received " + std::to_string(values.size()));
                    }
                }

                return true;
            }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xf8, %rsp
movl %r9d, 0x54(%rsp)
movq %r8, %rbp
movq %rcx, %rbx
movq %rdx, 0x8(%rsp)
movq %rsi, %r12
movq %rdi, %r15
movq 0x150(%rsp), %rdi
movb 0x138(%rsp), %r14b
callq 0xe858
movq (%r12), %rax
movq %r12, %rdi
callq *0x48(%rax)
movq %rax, %r12
movq %rdx, %r13
testb %r14b, %r14b
je 0xe430
cmpb $0x0, 0x130(%rsp)
jne 0xe430
testq %r12, %r12
je 0xe430
leaq 0xd688(%rip), %rsi      # 0x1ba6f
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
movq 0x8(%rsp), %rdx
callq 0x9a7d
leaq 0xe19d(%rip), %rdx      # 0x1c59d
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
callq 0x9a5e
leaq 0x10(%rsp), %rsi
movq %r15, %rdi
callq 0xe290
movl %eax, %ebp
leaq 0x10(%rsp), %rdi
callq 0x6140
leaq 0x30(%rsp), %rdi
jmp 0xe549
testb %r14b, %r14b
je 0xe465
cmpb $0x0, 0x148(%rsp)
movq %r15, %r14
je 0xe44b
testq %r13, %r13
je 0xe506
movq 0x140(%rsp), %rsi
movq 0x150(%rsp), %rdi
callq 0xe860
jmp 0xe506
cmpb $0x0, 0x54(%rsp)
movq %r15, %r14
je 0xe4c2
movq (%rbx), %r15
addq $0x20, %r15
cmpq %rbp, %r15
je 0xe506
movq 0x150(%rsp), %rcx
movq 0x8(%rcx), %rax
subq (%rcx), %rax
sarq $0x5, %rax
cmpq %r13, %rax
jae 0xe506
cmpq %r13, %r12
je 0xe4ac
movq %r14, %rdi
movq %r15, %rsi
callq 0xdd0e
cmpl $0x2, %eax
jne 0xe506
movq 0x150(%rsp), %rdi
movq %r15, %rsi
callq 0xe860
addq $0x20, (%rbx)
jmp 0xe472
testq %r12, %r12
je 0xe506
leaq 0xd5a1(%rip), %rsi      # 0x1ba6f
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
movq 0x8(%rsp), %rdx
callq 0x9a7d
leaq 0xe0ef(%rip), %rdx      # 0x1c5d6
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
callq 0x9a5e
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0xe290
jmp 0xe41a
movq 0x150(%rsp), %rcx
movq 0x8(%rcx), %rax
subq (%rcx), %rax
sarq $0x5, %rax
cmpq %r13, %rax
jbe 0xe562
leaq 0xe0ec(%rip), %rsi      # 0x1c611
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
movq 0x8(%rsp), %rdx
callq 0x9a7d
movq %r14, %rdi
movq %rbx, %rsi
callq 0xe290
movl %eax, %ebp
leaq 0x10(%rsp), %rdi
callq 0x6140
movl %ebp, %eax
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movb $0x1, %bpl
cmpq %r12, %rax
jae 0xe54e
movq %r12, %rax
xorq $0x1, %rax
movq %r13, %rcx
xorq $0x1, %rcx
leaq 0xd4f0(%rip), %rsi      # 0x1ba6f
orq %rax, %rcx
jne 0xe5bc
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
movq 0x8(%rsp), %rdx
callq 0x9a7d
leaq 0xe0a2(%rip), %rdx      # 0x1c63f
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
callq 0x9a5e
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0xe290
jmp 0xe41a
cmpq $0x1, %r12
jne 0xe5fa
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
movq 0x8(%rsp), %rdx
callq 0x9a7d
leaq 0xe08d(%rip), %rdx      # 0x1c668
leaq 0x10(%rsp), %rdi
movq %rbx, %rsi
callq 0x9a5e
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0xe290
jmp 0xe41a
leaq 0xd8(%rsp), %rbx
movq %rbx, %rdi
cmpq %r13, %r12
jne 0xe6b2
movq 0x8(%rsp), %rdx
callq 0x9a7d
leaq 0xe0aa(%rip), %rdx      # 0x1c6c9
leaq 0x98(%rsp), %rdi
movq %rbx, %rsi
callq 0x9a5e
leaq 0x78(%rsp), %rdi
movq %r12, %rsi
callq 0xe8f3
leaq 0xb8(%rsp), %rdi
leaq 0x98(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0xe88c
leaq 0xe053(%rip), %rdx      # 0x1c6b0
leaq 0x30(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
callq 0x9a5e
movq 0x150(%rsp), %rax
movq 0x8(%rax), %rsi
subq (%rax), %rsi
sarq $0x5, %rsi
leaq 0x58(%rsp), %rdi
callq 0xe8f3
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0xe88c
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0xe290
jmp 0xe751
movq 0x8(%rsp), %rdx
callq 0x9a7d
leaq 0xdfd8(%rip), %rdx      # 0x1c69b
leaq 0x98(%rsp), %rdi
movq %rbx, %rsi
callq 0x9a5e
leaq 0x78(%rsp), %rdi
movq %r12, %rsi
callq 0xe8f3
leaq 0xb8(%rsp), %rdi
leaq 0x98(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0xe88c
leaq 0xdfaf(%rip), %rdx      # 0x1c6b0
leaq 0x30(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
callq 0x9a5e
movq 0x150(%rsp), %rax
movq 0x8(%rax), %rsi
subq (%rax), %rsi
sarq $0x5, %rsi
leaq 0x58(%rsp), %rdi
callq 0xe8f3
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0xe88c
leaq 0x10(%rsp), %rsi
movq %r14, %rdi
callq 0xe290
movl %eax, %ebp
leaq 0x10(%rsp), %rdi
callq 0x6140
leaq 0x58(%rsp), %rdi
callq 0x6140
leaq 0x30(%rsp), %rdi
callq 0x6140
leaq 0xb8(%rsp), %rdi
callq 0x6140
leaq 0x78(%rsp), %rdi
callq 0x6140
leaq 0x98(%rsp), %rdi
callq 0x6140
leaq 0xd8(%rsp), %rdi
jmp 0xe549
jmp 0xe7a4
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x6140
jmp 0xe7b8
jmp 0xe7b5
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x6140
jmp 0xe7c9
jmp 0xe7c6
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x6140
jmp 0xe7da
jmp 0xe7d7
movq %rax, %rbx
leaq 0xb8(%rsp), %rdi
callq 0x6140
jmp 0xe7ee
jmp 0xe7eb
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x6140
leaq 0x98(%rsp), %rdi
callq 0x6140
leaq 0xd8(%rsp), %rdi
jmp 0xe84a
jmp 0xe811
movq %rax, %rbx
jmp 0xe7f8
jmp 0xe818
movq %rax, %rbx
jmp 0xe805
jmp 0xe833
jmp 0xe842
jmp 0xe833
jmp 0xe842
jmp 0xe833
jmp 0xe842
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
jmp 0xe84a
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x6140
jmp 0xe845
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x6140
movq %rbx, %rdi
callq 0x65f0
nop