// File: xelia-it[P]mustache/test/src/../../src/../third-party/json/single_include/nlohmann/json.hpp
// Function: nlohmann::json_abi_v3_11_2::detail::lexer<nlohmann::json_abi_v3_11_2::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::json_abi_v3_11_2::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>, void>, nlohmann::json_abi_v3_11_2::detail::iterator_input_adapter<char const*>>::get_codepoint()
int get_codepoint()
    {
        // this function only makes sense after reading `\u`
        JSON_ASSERT(current == 'u');
        int codepoint = 0;

        const auto factors = { 12u, 8u, 4u, 0u };
        for (const auto factor : factors)
        {
            get();

            if (current >= '0' && current <= '9')
            {
                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x30u) << factor);
            }
            else if (current >= 'A' && current <= 'F')
            {
                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x37u) << factor);
            }
            else if (current >= 'a' && current <= 'f')
            {
                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x57u) << factor);
            }
            else
            {
                return -1;
            }
        }

        JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF);
        return codepoint;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x60(%rbp)
cmpl $0x75, 0x14(%rax)
jne 0x11603c
jmp 0x11605b
leaq 0x3023b(%rip), %rdi     # 0x14627e
leaq 0x2e89c(%rip), %rsi     # 0x1448e6
movl $0x1d35, %edx           # imm = 0x1D35
leaq 0x30237(%rip), %rcx     # 0x14628d
callq 0x524b0
movl $0x0, -0x14(%rbp)
movl $0xc, -0x38(%rbp)
movl $0x8, -0x34(%rbp)
movl $0x4, -0x30(%rbp)
movl $0x0, -0x2c(%rbp)
leaq -0x38(%rbp), %rax
movq %rax, -0x28(%rbp)
movq $0x4, -0x20(%rbp)
leaq -0x28(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rdi
callq 0x116340
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rdi
callq 0x116360
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
cmpq -0x50(%rbp), %rax
je 0x116171
movq -0x60(%rbp), %rdi
movq -0x48(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x54(%rbp)
callq 0x115c20
movq -0x60(%rbp), %rax
cmpl $0x30, 0x14(%rax)
jl 0x1160fb
movq -0x60(%rbp), %rax
cmpl $0x39, 0x14(%rax)
jg 0x1160fb
movq -0x60(%rbp), %rax
movl 0x14(%rax), %eax
subl $0x30, %eax
movl -0x54(%rbp), %ecx
shll %cl, %eax
addl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0x11615e
movq -0x60(%rbp), %rax
cmpl $0x41, 0x14(%rax)
jl 0x116126
movq -0x60(%rbp), %rax
cmpl $0x46, 0x14(%rax)
jg 0x116126
movq -0x60(%rbp), %rax
movl 0x14(%rax), %eax
subl $0x37, %eax
movl -0x54(%rbp), %ecx
shll %cl, %eax
addl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0x11615c
movq -0x60(%rbp), %rax
cmpl $0x61, 0x14(%rax)
jl 0x116151
movq -0x60(%rbp), %rax
cmpl $0x66, 0x14(%rax)
jg 0x116151
movq -0x60(%rbp), %rax
movl 0x14(%rax), %eax
subl $0x57, %eax
movl -0x54(%rbp), %ecx
shll %cl, %eax
addl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0x11615a
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1161ba
jmp 0x11615c
jmp 0x11615e
jmp 0x116160
movq -0x48(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x48(%rbp)
jmp 0x1160b0
xorl %eax, %eax
xorl %ecx, %ecx
cmpl -0x14(%rbp), %ecx
movb %al, -0x61(%rbp)
jg 0x11618a
cmpl $0xffff, -0x14(%rbp)    # imm = 0xFFFF
setle %al
movb %al, -0x61(%rbp)
movb -0x61(%rbp), %al
testb $0x1, %al
jne 0x116193
jmp 0x116195
jmp 0x1161b4
leaq 0x301e2(%rip), %rdi     # 0x14637e
leaq 0x2e743(%rip), %rsi     # 0x1448e6
movl $0x1d4f, %edx           # imm = 0x1D4F
leaq 0x300de(%rip), %rcx     # 0x14628d
callq 0x524b0
movl -0x14(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x70, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)