// File: /workspace/github_cpp_makefile_star2_O1/Falldog[P]dcinja/src/include/nlohmann/json.hpp
// Function: nlohmann::detail::lexer<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>>, nlohmann::detail::iterator_input_adapter<char const*>>::scan()
token_type scan()
    {
        // initially, skip the BOM
        if (position.chars_read_total == 0 && !skip_bom())
        {
            error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given";
            return token_type::parse_error;
        }

        // read next character and ignore whitespace
        skip_whitespace();

        // ignore comments
        while (ignore_comments && current == '/')
        {
            if (!scan_comment())
            {
                return token_type::parse_error;
            }

            // skip following whitespace
            skip_whitespace();
        }

        switch (current)
        {
            // structural characters
            case '[':
                return token_type::begin_array;
            case ']':
                return token_type::end_array;
            case '{':
                return token_type::begin_object;
            case '}':
                return token_type::end_object;
            case ':':
                return token_type::name_separator;
            case ',':
                return token_type::value_separator;

            // literals
            case 't':
            {
                std::array<char_type, 4> true_literal = {{'t', 'r', 'u', 'e'}};
                return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true);
            }
            case 'f':
            {
                std::array<char_type, 5> false_literal = {{'f', 'a', 'l', 's', 'e'}};
                return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false);
            }
            case 'n':
            {
                std::array<char_type, 4> null_literal = {{'n', 'u', 'l', 'l'}};
                return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null);
            }

            // string
            case '\"':
                return scan_string();

            // number
            case '-':
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                return scan_number();

            // end of input (the null byte is needed when parsing from
            // string literals)
            case '\0':
            case std::char_traits<char_type>::eof():
                return token_type::end_of_input;

            // error
            default:
                error_message = "invalid literal";
                return token_type::parse_error;
        }
    }

// Assembly:
pushq %r14
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
cmpq $0x0, 0x20(%rdi)
jne 0x228c9
movq %rbx, %rdi
callq 0x22a72
testb %al, %al
je 0x2299d
movabsq $0x100002600, %r14      # imm = 0x100002600
movq %rbx, %rdi
callq 0x9866
movl 0x14(%rbx), %eax
cmpq $0x20, %rax
ja 0x228ea
btq %rax, %r14
jb 0x228d3
movl 0x14(%rbx), %eax
cmpl $0x2f, %eax
sete %cl
andb 0x10(%rbx), %cl
cmpb $0x1, %cl
jne 0x22930
movq %rbx, %rdi
callq 0x22ab4
testb %al, %al
je 0x229a8
movq %rbx, %rdi
callq 0x9866
movl 0x14(%rbx), %eax
cmpq $0x20, %rax
ja 0x22922
btq %rax, %r14
jb 0x2290b
movl 0x14(%rbx), %eax
cmpb $0x1, 0x10(%rbx)
jne 0x22930
cmpl $0x2f, %eax
je 0x228fb
cmpl $0x5a, %eax
jg 0x22960
leal -0x22(%rax), %ecx
cmpl $0x18, %ecx
ja 0x229ea
leaq 0x32a30(%rip), %rax     # 0x55378
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq %rbx, %rdi
addq $0x18, %rsp
popq %rbx
popq %r14
jmp 0x23082
cmpl $0x6d, %eax
jle 0x229b5
cmpl $0x7a, %eax
jg 0x229f8
cmpl $0x6e, %eax
je 0x22a32
cmpl $0x74, %eax
jne 0x22a09
leaq 0xc(%rsp), %rsi
movl $0x65757274, (%rsi)     # imm = 0x65757274
movl $0x4, %edx
movq %rbx, %rdi
movl $0x1, %ecx
jmp 0x22a4a
leaq 0x34460(%rip), %rax     # 0x56e04
movq %rax, 0x70(%rbx)
movl $0xe, %eax
addq $0x18, %rsp
popq %rbx
popq %r14
retq
cmpl $0x5b, %eax
je 0x22a5e
cmpl $0x5d, %eax
je 0x22a68
cmpl $0x66, %eax
jne 0x22a09
leaq 0x10(%rsp), %rsi
movb $0x65, 0x4(%rsi)
movl $0x736c6166, (%rsi)     # imm = 0x736C6166
movl $0x5, %edx
movq %rbx, %rdi
movl $0x2, %ecx
jmp 0x22a4a
incl %eax
cmpl $0x2, %eax
jae 0x22a09
movl $0xf, %eax
jmp 0x229ad
cmpl $0x7b, %eax
je 0x22a54
cmpl $0x7d, %eax
jne 0x22a09
movl $0xb, %eax
jmp 0x229ad
leaq 0x34421(%rip), %rax     # 0x56e31
jmp 0x229a4
movl $0xc, %eax
jmp 0x229ad
movq %rbx, %rdi
addq $0x18, %rsp
popq %rbx
popq %r14
jmp 0x22baa
movl $0xd, %eax
jmp 0x229ad
leaq 0x8(%rsp), %rsi
movl $0x6c6c756e, (%rsi)     # imm = 0x6C6C756E
movl $0x4, %edx
movq %rbx, %rdi
movl $0x3, %ecx
callq 0x22b30
jmp 0x229ad
movl $0x9, %eax
jmp 0x229ad
movl $0x8, %eax
jmp 0x229ad
movl $0xa, %eax
jmp 0x229ad