// File: SYZYGYfpga[P]syzygy-tools/include/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>>::scan()
token_type scan()
    {
        // read next character and ignore whitespace
        do
        {
            get();
        }
        while (current == ' ' or current == '\t' or current == '\n' or current == '\r');

        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':
                return scan_literal("true", 4, token_type::literal_true);
            case 'f':
                return scan_literal("false", 5, token_type::literal_false);
            case 'n':
                return scan_literal("null", 4, 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>::eof():
                return token_type::end_of_input;

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

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xa9c0
movq -0x18(%rbp), %rcx
movb $0x1, %al
cmpl $0x20, 0x10(%rcx)
movb %al, -0x19(%rbp)
je 0xa898
movq -0x18(%rbp), %rcx
movb $0x1, %al
cmpl $0x9, 0x10(%rcx)
movb %al, -0x19(%rbp)
je 0xa898
movq -0x18(%rbp), %rcx
movb $0x1, %al
cmpl $0xa, 0x10(%rcx)
movb %al, -0x19(%rbp)
je 0xa898
movq -0x18(%rbp), %rax
cmpl $0xd, 0x10(%rax)
sete %al
movb %al, -0x19(%rbp)
movb -0x19(%rbp), %al
testb $0x1, %al
jne 0xa854
movq -0x18(%rbp), %rax
movl 0x10(%rax), %eax
incl %eax
movl %eax, %ecx
movq %rcx, -0x28(%rbp)
subl $0x7e, %eax
ja 0xa995
movq -0x28(%rbp), %rax
leaq 0xa79a(%rip), %rcx      # 0x1505c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x8, -0x4(%rbp)
jmp 0xa9ab
movl $0xa, -0x4(%rbp)
jmp 0xa9ab
movl $0x9, -0x4(%rbp)
jmp 0xa9ab
movl $0xb, -0x4(%rbp)
jmp 0xa9ab
movl $0xc, -0x4(%rbp)
jmp 0xa9ab
movl $0xd, -0x4(%rbp)
jmp 0xa9ab
movq -0x18(%rbp), %rdi
leaq 0xb85a(%rip), %rsi      # 0x16178
movl $0x4, %edx
movl $0x1, %ecx
callq 0xaa50
movl %eax, -0x4(%rbp)
jmp 0xa9ab
movq -0x18(%rbp), %rdi
leaq 0xb840(%rip), %rsi      # 0x1617d
movl $0x5, %edx
movl $0x2, %ecx
callq 0xaa50
movl %eax, -0x4(%rbp)
jmp 0xa9ab
movq -0x18(%rbp), %rdi
leaq 0xb827(%rip), %rsi      # 0x16183
movl $0x4, %edx
movl $0x3, %ecx
callq 0xaa50
movl %eax, -0x4(%rbp)
jmp 0xa9ab
movq -0x18(%rbp), %rdi
callq 0xab10
movl %eax, -0x4(%rbp)
jmp 0xa9ab
movq -0x18(%rbp), %rdi
callq 0xb340
movl %eax, -0x4(%rbp)
jmp 0xa9ab
movl $0xf, -0x4(%rbp)
jmp 0xa9ab
movq -0x18(%rbp), %rax
leaq 0xb7e8(%rip), %rcx      # 0x16188
movq %rcx, 0x58(%rax)
movl $0xe, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nop