// File: /workspace/github_cpp_makefile_star2_O2/xelia-it[P]mustache/test/src/../../src/../third-party/json/single_include/nlohmann/json.hpp
// Function: std::pair<bool, 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::json_sax_dom_callback_parser<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>>::handle_value<nlohmann::json_abi_v3_11_2::detail::value_t>(nlohmann::json_abi_v3_11_2::detail::value_t&&, bool)
std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool skip_callback = false)
    {
        JSON_ASSERT(!keep_stack.empty());

        // do not handle this value if we know it would be added to a discarded
        // container
        if (!keep_stack.back())
        {
            return {false, nullptr};
        }

        // create value
        auto value = BasicJsonType(std::forward<Value>(v));

        // check callback
        const bool keep = skip_callback || callback(static_cast<int>(ref_stack.size()), parse_event_t::value, value);

        // do not handle this value if we just learnt it shall be discarded
        if (!keep)
        {
            return {false, nullptr};
        }

        if (ref_stack.empty())
        {
            root = std::move(value);
            return {true, &root};
        }

        // skip this value if we already decided to skip the parent
        // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360)
        if (!ref_stack.back())
        {
            return {false, nullptr};
        }

        // we now only expect arrays and objects
        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());

        // array
        if (ref_stack.back()->is_array())
        {
            ref_stack.back()->m_value.array->emplace_back(std::move(value));
            return {true, &(ref_stack.back()->m_value.array->back())};
        }

        // object
        JSON_ASSERT(ref_stack.back()->is_object());
        // check if we should store an element for the current key
        JSON_ASSERT(!key_keep_stack.empty());
        const bool store_element = key_keep_stack.back();
        key_keep_stack.pop_back();

        if (!store_element)
        {
            return {false, nullptr};
        }

        JSON_ASSERT(object_element);
        *object_element = std::move(value);
        return {true, object_element};
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x38, %rsp
movl %edx, %r14d
movq %rsi, %r15
movq %rdi, %rbx
movq 0x20(%rdi), %rax
cmpq 0x30(%rdi), %rax
jne 0x65280
cmpl $0x0, 0x38(%rbx)
je 0x653d1
leaq 0x20(%rbx), %rdi
callq 0x651f6
testq %rdx, (%rax)
je 0x65319
movzbl (%r15), %esi
leaq -0x28(%rbp), %rdi
callq 0x639aa
testb %r14b, %r14b
jne 0x652cb
leaq 0x80(%rbx), %rdi
movq 0x10(%rbx), %rsi
subq 0x8(%rbx), %rsi
shrq $0x3, %rsi
pushq $0x5
popq %rdx
leaq -0x28(%rbp), %rcx
callq 0x6522a
testb %al, %al
je 0x653b3
movq 0x10(%rbx), %rax
cmpq %rax, 0x8(%rbx)
je 0x65323
movq -0x8(%rax), %rax
testq %rax, %rax
je 0x653b3
movzbl (%rax), %ecx
cmpl $0x1, %ecx
je 0x6534b
cmpl $0x2, %ecx
jne 0x653f0
movq 0x8(%rax), %rdi
leaq -0x28(%rbp), %rsi
callq 0x6569a
movq 0x10(%rbx), %rax
movq -0x8(%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %r14
addq $-0x10, %r14
jmp 0x653af
xorl %ebx, %ebx
xorl %r14d, %r14d
jmp 0x653c1
leaq -0x48(%rbp), %r14
leaq -0x28(%rbp), %rsi
movq %r14, %rdi
callq 0x65660
movq (%rbx), %rdi
movq %r14, %rsi
callq 0x639d0
movq %r14, %rdi
callq 0x60da8
movq (%rbx), %r14
jmp 0x653af
movq 0x48(%rbx), %rax
cmpq 0x58(%rbx), %rax
jne 0x6535f
cmpl $0x0, 0x60(%rbx)
je 0x6540f
leaq 0x48(%rbx), %rdi
callq 0x651f6
movq %rdx, %r14
leaq 0x58(%rbx), %rdi
movq (%rax), %r15
callq 0x6484e
testq %r14, %r15
je 0x653b3
cmpq $0x0, 0x70(%rbx)
je 0x6542e
leaq -0x38(%rbp), %r14
leaq -0x28(%rbp), %rsi
movq %r14, %rdi
callq 0x65660
movq 0x70(%rbx), %rdi
movq %r14, %rsi
callq 0x639d0
movq %r14, %rdi
callq 0x60da8
movq 0x70(%rbx), %r14
movb $0x1, %bl
jmp 0x653b8
xorl %ebx, %ebx
xorl %r14d, %r14d
leaq -0x28(%rbp), %rdi
callq 0x60da8
movl %ebx, %eax
movq %r14, %rdx
addq $0x38, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x156f1(%rip), %rdi     # 0x7aac9
leaq 0x13c7f(%rip), %rsi     # 0x7905e
leaq 0x156f7(%rip), %rcx     # 0x7aadd
movl $0x1be6, %edx           # imm = 0x1BE6
callq 0x24390
leaq 0x157be(%rip), %rdi     # 0x7abb5
leaq 0x13c60(%rip), %rsi     # 0x7905e
leaq 0x156d8(%rip), %rcx     # 0x7aadd
movl $0x1c09, %edx           # imm = 0x1C09
callq 0x24390
leaq 0x157dd(%rip), %rdi     # 0x7abf3
leaq 0x13c41(%rip), %rsi     # 0x7905e
leaq 0x156b9(%rip), %rcx     # 0x7aadd
movl $0x1c15, %edx           # imm = 0x1C15
callq 0x24390
leaq 0x157d6(%rip), %rdi     # 0x7ac0b
leaq 0x13c22(%rip), %rsi     # 0x7905e
leaq 0x1569a(%rip), %rcx     # 0x7aadd
movl $0x1c1e, %edx           # imm = 0x1C1E
callq 0x24390
jmp 0x6544f
movq %rax, %rbx
leaq -0x28(%rbp), %rdi
callq 0x60da8
movq %rbx, %rdi
callq 0x24950
nop