// File: /workspace/github_cpp_makefile_star2_O3/Falldog[P]dcinja/src/include/nlohmann/json.hpp
// Function: nlohmann::operator<(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>>> const&, 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>>> const&)
friend bool operator<(const_reference lhs, const_reference rhs) noexcept
    {
        const auto lhs_type = lhs.type();
        const auto rhs_type = rhs.type();

        if (lhs_type == rhs_type)
        {
            switch (lhs_type)
            {
                case value_t::array:
                    // note parentheses are necessary, see
                    // https://github.com/nlohmann/json/issues/1530
                    return (*lhs.m_value.array) < (*rhs.m_value.array);

                case value_t::object:
                    return (*lhs.m_value.object) < (*rhs.m_value.object);

                case value_t::null:
                    return false;

                case value_t::string:
                    return (*lhs.m_value.string) < (*rhs.m_value.string);

                case value_t::boolean:
                    return (lhs.m_value.boolean) < (rhs.m_value.boolean);

                case value_t::number_integer:
                    return (lhs.m_value.number_integer) < (rhs.m_value.number_integer);

                case value_t::number_unsigned:
                    return (lhs.m_value.number_unsigned) < (rhs.m_value.number_unsigned);

                case value_t::number_float:
                    return (lhs.m_value.number_float) < (rhs.m_value.number_float);

                case value_t::binary:
                    return (*lhs.m_value.binary) < (*rhs.m_value.binary);

                default:
                    return false;
            }
        }
        else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float)
        {
            return static_cast<number_float_t>(lhs.m_value.number_integer) < rhs.m_value.number_float;
        }
        else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer)
        {
            return lhs.m_value.number_float < static_cast<number_float_t>(rhs.m_value.number_integer);
        }
        else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float)
        {
            return static_cast<number_float_t>(lhs.m_value.number_unsigned) < rhs.m_value.number_float;
        }
        else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned)
        {
            return lhs.m_value.number_float < static_cast<number_float_t>(rhs.m_value.number_unsigned);
        }
        else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned)
        {
            return lhs.m_value.number_integer < static_cast<number_integer_t>(rhs.m_value.number_unsigned);
        }
        else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer)
        {
            return static_cast<number_integer_t>(lhs.m_value.number_unsigned) < rhs.m_value.number_integer;
        }

        // We only reach this line if we cannot compare values. In that case,
        // we compare types. Note we have to call the operator explicitly,
        // because MSVC has problems otherwise.
        return operator<(lhs_type, rhs_type);
    }

// Assembly:
pushq %rax
movzbl (%rdi), %eax
movzbl (%rsi), %ecx
cmpb %cl, %al
jne 0x36403
decl %eax
cmpl $0x7, %eax
ja 0x3657e
leaq 0x1e587(%rip), %rcx     # 0x5495c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x8(%rdi), %rax
movq 0x8(%rsi), %rcx
movq 0x18(%rax), %rdi
addq $0x8, %rax
movq 0x18(%rcx), %rdx
addq $0x8, %rcx
movq %rax, %rsi
callq 0x37b76
jmp 0x3652d
movl %eax, %edx
xorb $0x5, %dl
movl %ecx, %r8d
xorb $0x7, %r8b
orb %dl, %r8b
jne 0x36428
cvtsi2sdq 0x8(%rdi), %xmm0
movsd 0x8(%rsi), %xmm1
ucomisd %xmm0, %xmm1
jmp 0x3652a
movl %eax, %edx
xorb $0x7, %dl
movl %ecx, %r8d
xorb $0x5, %r8b
orb %dl, %r8b
jne 0x36444
cvtsi2sdq 0x8(%rsi), %xmm0
jmp 0x36525
movl %ecx, %edx
xorb $0x7, %dl
movl %eax, %r8d
xorb $0x6, %r8b
orb %dl, %r8b
jne 0x36483
movsd 0x8(%rdi), %xmm0
unpcklps 0x1dc1f(%rip), %xmm0    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x1dc27(%rip), %xmm0    # 0x54090
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
movsd 0x8(%rsi), %xmm0
ucomisd %xmm1, %xmm0
jmp 0x3652a
movl %eax, %edx
xorb $0x7, %dl
movl %ecx, %r8d
xorb $0x6, %r8b
orb %dl, %r8b
jne 0x3652f
movsd 0x8(%rsi), %xmm0
unpcklps 0x1dbdc(%rip), %xmm0    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x1dbe4(%rip), %xmm0    # 0x54090
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
ucomisd 0x8(%rdi), %xmm1
jmp 0x3652a
movq 0x8(%rdi), %rdi
movq 0x8(%rsi), %rsi
callq 0x9050
shrl $0x1f, %eax
jmp 0x3652d
movb 0x8(%rdi), %al
cmpb 0x8(%rsi), %al
jmp 0x3651b
movq 0x8(%rdi), %rax
movq 0x8(%rsi), %rcx
movq (%rax), %rdi
movq 0x8(%rax), %rsi
movq (%rcx), %rdx
movq 0x8(%rcx), %rcx
callq 0x37c7a
jmp 0x3652d
movq 0x8(%rdi), %rax
movq 0x8(%rsi), %rcx
movq (%rax), %rdi
movq 0x8(%rax), %rsi
movq (%rcx), %rdx
movq 0x8(%rcx), %rcx
callq 0x37b0d
jmp 0x3652d
movq 0x8(%rdi), %rax
cmpq 0x8(%rsi), %rax
setb %al
jmp 0x3652d
movsd 0x8(%rsi), %xmm0
ucomisd 0x8(%rdi), %xmm0
seta %al
popq %rcx
retq
movl %ecx, %edx
xorb $0x6, %dl
movl %eax, %r8d
xorb $0x5, %r8b
orb %dl, %r8b
je 0x36551
movl %eax, %edx
xorb $0x6, %dl
movl %ecx, %r8d
xorb $0x5, %r8b
orb %dl, %r8b
jne 0x3655e
movq 0x8(%rdi), %rax
cmpq 0x8(%rsi), %rax
setl %al
jmp 0x3652d
cmpb $0x9, %al
setae %dl
cmpb $0x9, %cl
setae %sil
orb %dl, %sil
jne 0x3657e
leaq 0x26b00(%rip), %rdx     # 0x5d076
movb (%rax,%rdx), %al
cmpb (%rcx,%rdx), %al
jmp 0x3651b
xorl %eax, %eax
jmp 0x3652d
jmp 0x36584
movq %rax, %rdi
callq 0xea59