// File: jo-qzy[P]MyJson/./json.hpp
// Function: JSON::value_parse::parse_number(JSON::Value*)
int parse_number(Value* element = nullptr) {
            std::string::const_iterator tmp_it = it;
            if (*tmp_it == '-')
                tmp_it++;
            if (*tmp_it == '0')
                tmp_it++;
            else {
                if (!ISDIGIT1TO9(*tmp_it))
                    return PARSE_INVALID_VALUE;
                for (tmp_it++; ISDIGIT(*tmp_it); tmp_it++);
            }
            if (*tmp_it == '.') {
                tmp_it++;
                if (!ISDIGIT(*tmp_it))
                    return PARSE_INVALID_VALUE;
                for (tmp_it++; ISDIGIT(*tmp_it); tmp_it++);
            }
            if (*tmp_it == 'e' || *tmp_it == 'E') {
                tmp_it++;
                if (*tmp_it == '-' || *tmp_it == '+')
                    tmp_it++;
                if (!ISDIGIT(*tmp_it))
                    return PARSE_INVALID_VALUE;
                for (tmp_it++; ISDIGIT(*tmp_it); tmp_it++);
            }
            // if (*tmp_it != ' ' && *tmp_it != '\0')
            //    return PARSE_INVALID_VALUE;
            double dst_number = strtod(&(*it), NULL);
            if (errno == ERANGE && (dst_number == HUGE_VAL || dst_number == -HUGE_VAL))
                return PARSE_NUMBER_OVERFLOW;
            it = tmp_it;
            if (element != nullptr)
                *element = dst_number;
            else
                *root = dst_number;
            return PARSE_OK;
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x88(%rbp)
movq 0x20(%rax), %rax
movq %rax, -0x20(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x4a46
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x28(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x30, %eax
jne 0x4a6b
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x30(%rbp)
jmp 0x4afa
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x31, %eax
jl 0x4a8d
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x39, %eax
jle 0x4a99
movl $0x2, -0x4(%rbp)
jmp 0x4d44
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x38(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x30, %ecx
movb %al, -0x89(%rbp)
jl 0x4ad9
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x39, %eax
setle %al
movb %al, -0x89(%rbp)
movb -0x89(%rbp), %al
testb $0x1, %al
jne 0x4ae5
jmp 0x4af8
jmp 0x4ae7
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x40(%rbp)
jmp 0x4aa8
jmp 0x4afa
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x2e, %eax
jne 0x4bad
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x48(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x30, %eax
jl 0x4b40
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x39, %eax
jle 0x4b4c
movl $0x2, -0x4(%rbp)
jmp 0x4d44
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x50(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x30, %ecx
movb %al, -0x8a(%rbp)
jl 0x4b8c
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x39, %eax
setle %al
movb %al, -0x8a(%rbp)
movb -0x8a(%rbp), %al
testb $0x1, %al
jne 0x4b98
jmp 0x4bab
jmp 0x4b9a
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x58(%rbp)
jmp 0x4b5b
jmp 0x4bad
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x65, %eax
je 0x4bd3
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x45, %eax
jne 0x4ca2
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x60(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x2d, %eax
je 0x4c04
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x2b, %eax
jne 0x4c13
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x68(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x30, %eax
jl 0x4c35
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x39, %eax
jle 0x4c41
movl $0x2, -0x4(%rbp)
jmp 0x4d44
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x70(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x30, %ecx
movb %al, -0x8b(%rbp)
jl 0x4c81
leaq -0x20(%rbp), %rdi
callq 0x3ef0
movsbl (%rax), %eax
cmpl $0x39, %eax
setle %al
movb %al, -0x8b(%rbp)
movb -0x8b(%rbp), %al
testb $0x1, %al
jne 0x4c8d
jmp 0x4ca0
jmp 0x4c8f
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x3f10
movq %rax, -0x78(%rbp)
jmp 0x4c50
jmp 0x4ca2
movq -0x88(%rbp), %rdi
addq $0x20, %rdi
callq 0x3ef0
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2180
movsd %xmm0, -0x80(%rbp)
callq 0x2050
cmpl $0x22, (%rax)
jne 0x4d02
movsd -0x80(%rbp), %xmm0
movsd 0x834e(%rip), %xmm1     # 0xd028
ucomisd %xmm1, %xmm0
jne 0x4ce4
jp 0x4ce4
jmp 0x4cf9
movsd -0x80(%rbp), %xmm0
movsd 0x833f(%rip), %xmm1     # 0xd030
ucomisd %xmm1, %xmm0
jne 0x4d02
jp 0x4d02
movl $0x4, -0x4(%rbp)
jmp 0x4d44
movq -0x88(%rbp), %rax
movq -0x20(%rbp), %rcx
movq %rcx, 0x20(%rax)
cmpq $0x0, -0x18(%rbp)
je 0x4d28
movsd -0x80(%rbp), %xmm0
movq -0x18(%rbp), %rdi
callq 0x6fd0
jmp 0x4d3d
movq -0x88(%rbp), %rax
movsd -0x80(%rbp), %xmm0
movq 0x28(%rax), %rdi
callq 0x6fd0
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x90, %rsp
popq %rbp
retq