// File: /workspace/github_cpp_makefile_star2_O1/Konano[P]UselessDatabase/./json.hpp
// Function: nlohmann::detail::serializer<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>>::dump(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> const&, bool, bool, unsigned int, unsigned int)
void dump(const BasicJsonType& val, const bool pretty_print,
              const bool ensure_ascii,
              const unsigned int indent_step,
              const unsigned int current_indent = 0)
    {
        switch (val.m_type)
        {
            case value_t::object:
            {
                if (val.m_value.object->empty())
                {
                    o->write_characters("{}", 2);
                    return;
                }

                if (pretty_print)
                {
                    o->write_characters("{\n", 2);

                    // variable to hold indentation for recursive calls
                    const auto new_indent = current_indent + indent_step;
                    if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))
                    {
                        indent_string.resize(indent_string.size() * 2, ' ');
                    }

                    // first n-1 elements
                    auto i = val.m_value.object->cbegin();
                    for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i)
                    {
                        o->write_characters(indent_string.c_str(), new_indent);
                        o->write_character('\"');
                        dump_escaped(i->first, ensure_ascii);
                        o->write_characters("\": ", 3);
                        dump(i->second, true, ensure_ascii, indent_step, new_indent);
                        o->write_characters(",\n", 2);
                    }

                    // last element
                    assert(i != val.m_value.object->cend());
                    assert(std::next(i) == val.m_value.object->cend());
                    o->write_characters(indent_string.c_str(), new_indent);
                    o->write_character('\"');
                    dump_escaped(i->first, ensure_ascii);
                    o->write_characters("\": ", 3);
                    dump(i->second, true, ensure_ascii, indent_step, new_indent);

                    o->write_character('\n');
                    o->write_characters(indent_string.c_str(), current_indent);
                    o->write_character('}');
                }
                else
                {
                    o->write_character('{');

                    // first n-1 elements
                    auto i = val.m_value.object->cbegin();
                    for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i)
                    {
                        o->write_character('\"');
                        dump_escaped(i->first, ensure_ascii);
                        o->write_characters("\":", 2);
                        dump(i->second, false, ensure_ascii, indent_step, current_indent);
                        o->write_character(',');
                    }

                    // last element
                    assert(i != val.m_value.object->cend());
                    assert(std::next(i) == val.m_value.object->cend());
                    o->write_character('\"');
                    dump_escaped(i->first, ensure_ascii);
                    o->write_characters("\":", 2);
                    dump(i->second, false, ensure_ascii, indent_step, current_indent);

                    o->write_character('}');
                }

                return;
            }

            case value_t::array:
            {
                if (val.m_value.array->empty())
                {
                    o->write_characters("[]", 2);
                    return;
                }

                if (pretty_print)
                {
                    o->write_characters("[\n", 2);

                    // variable to hold indentation for recursive calls
                    const auto new_indent = current_indent + indent_step;
                    if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))
                    {
                        indent_string.resize(indent_string.size() * 2, ' ');
                    }

                    // first n-1 elements
                    for (auto i = val.m_value.array->cbegin();
                            i != val.m_value.array->cend() - 1; ++i)
                    {
                        o->write_characters(indent_string.c_str(), new_indent);
                        dump(*i, true, ensure_ascii, indent_step, new_indent);
                        o->write_characters(",\n", 2);
                    }

                    // last element
                    assert(not val.m_value.array->empty());
                    o->write_characters(indent_string.c_str(), new_indent);
                    dump(val.m_value.array->back(), true, ensure_ascii, indent_step, new_indent);

                    o->write_character('\n');
                    o->write_characters(indent_string.c_str(), current_indent);
                    o->write_character(']');
                }
                else
                {
                    o->write_character('[');

                    // first n-1 elements
                    for (auto i = val.m_value.array->cbegin();
                            i != val.m_value.array->cend() - 1; ++i)
                    {
                        dump(*i, false, ensure_ascii, indent_step, current_indent);
                        o->write_character(',');
                    }

                    // last element
                    assert(not val.m_value.array->empty());
                    dump(val.m_value.array->back(), false, ensure_ascii, indent_step, current_indent);

                    o->write_character(']');
                }

                return;
            }

            case value_t::string:
            {
                o->write_character('\"');
                dump_escaped(*val.m_value.string, ensure_ascii);
                o->write_character('\"');
                return;
            }

            case value_t::boolean:
            {
                if (val.m_value.boolean)
                {
                    o->write_characters("true", 4);
                }
                else
                {
                    o->write_characters("false", 5);
                }
                return;
            }

            case value_t::number_integer:
            {
                dump_integer(val.m_value.number_integer);
                return;
            }

            case value_t::number_unsigned:
            {
                dump_integer(val.m_value.number_unsigned);
                return;
            }

            case value_t::number_float:
            {
                dump_float(val.m_value.number_float);
                return;
            }

            case value_t::discarded:
            {
                o->write_characters("<discarded>", 11);
                return;
            }

            case value_t::null:
            {
                o->write_characters("null", 4);
                return;
            }

            default:            // LCOV_EXCL_LINE
                assert(false);  // LCOV_EXCL_LINE
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movzbl (%rsi), %eax
cmpq $0x8, %rax
ja 0xb44a
movl %r9d, %r15d
movl %r8d, %r13d
movl %ecx, %ebp
movq %rsi, %r12
movq %rdi, %rbx
leaq 0x3229c(%rip), %rcx     # 0x3d0f4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq (%rbx), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
leaq 0x32ac0(%rip), %rsi     # 0x3d932
jmp 0xae91
movq (%rbx), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
cmpb $0x1, 0x8(%r12)
jne 0xb230
leaq 0x32a8a(%rip), %rsi     # 0x3d91b
movl $0x4, %edx
jmp 0xb25b
movq 0x8(%r12), %rcx
movq (%rcx), %rsi
movq (%rbx), %rdi
movq (%rdi), %rax
cmpq 0x8(%rcx), %rsi
je 0xb23e
testb %dl, %dl
movl %ebp, 0x4(%rsp)
je 0xb26b
leaq 0x32a33(%rip), %rsi     # 0x3d8f9
movl $0x2, %edx
callq *0x8(%rax)
movq %r13, 0x8(%rsp)
movq %r15, 0x10(%rsp)
addl %r15d, %r13d
movq 0x268(%rbx), %rsi
cmpq %r13, %rsi
jb 0xb418
movq 0x8(%r12), %rax
movq (%rax), %r14
movq 0x8(%rax), %rcx
leaq -0x10(%rcx), %rdx
cmpq %rdx, %r14
movq 0x8(%rsp), %r15
je 0xaf60
movzbl 0x4(%rsp), %ebp
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movq (%rdi), %rax
movq %r13, %rdx
callq *0x8(%rax)
movq %rbx, %rdi
movq %r14, %rsi
movl $0x1, %edx
movl %ebp, %ecx
movl %r15d, %r8d
movl %r13d, %r9d
callq 0xae28
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x2, %edx
leaq 0x32893(%rip), %rsi     # 0x3d7da
callq *0x8(%rax)
addq $0x10, %r14
movq 0x8(%r12), %rax
movq 0x8(%rax), %rcx
leaq -0x10(%rcx), %rdx
cmpq %rdx, %r14
jne 0xaf0a
cmpq %rcx, (%rax)
je 0xb469
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movq (%rdi), %rax
movq %r13, %rdx
callq *0x8(%rax)
movq 0x8(%r12), %rax
movq 0x8(%rax), %rsi
addq $-0x10, %rsi
movzbl 0x4(%rsp), %ecx
movq %rbx, %rdi
movl $0x1, %edx
movq 0x8(%rsp), %r8
movl %r13d, %r9d
callq 0xae28
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0xa, %esi
callq *(%rax)
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movl 0x10(%rsp), %edx
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0xb2e2
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x22, %esi
callq *(%rax)
movq 0x8(%r12), %rsi
movzbl %bpl, %edx
movq %rbx, %rdi
callq 0xb5e8
movq (%rbx), %rdi
movq (%rdi), %rax
movq (%rax), %rax
movl $0x22, %esi
jmp 0xb408
movsd 0x8(%r12), %xmm0
movq %rbx, %rdi
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xbec2
movq 0x8(%r12), %rax
cmpq $0x0, 0x28(%rax)
movq (%rbx), %rdi
movq (%rdi), %rax
je 0xb24b
testb %dl, %dl
movq %r15, 0x10(%rsp)
movq %r13, 0x8(%rsp)
movl %ebp, 0x4(%rsp)
je 0xb2f5
leaq 0x32789(%rip), %rsi     # 0x3d7d3
movl $0x2, %edx
callq *0x8(%rax)
leal (%r15,%r13), %eax
movq 0x268(%rbx), %rsi
movq %rax, 0x20(%rsp)
cmpq %rax, %rsi
jb 0xb431
movq 0x8(%r12), %r15
movq 0x18(%r15), %rbp
cmpq $0x1, 0x28(%r15)
je 0xb12d
xorl %r13d, %r13d
movzbl 0x4(%rsp), %eax
movl %eax, 0x1c(%rsp)
movq 0x20(%rsp), %r14
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movq (%rdi), %rax
movq %r14, %rdx
callq *0x8(%rax)
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x22, %esi
callq *(%rax)
leaq 0x20(%rbp), %rsi
movq %rbx, %rdi
movl 0x1c(%rsp), %r15d
movl %r15d, %edx
callq 0xb5e8
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x3, %edx
leaq 0x32700(%rip), %rsi     # 0x3d7d6
callq *0x8(%rax)
leaq 0x40(%rbp), %rsi
movq %rbx, %rdi
movl $0x1, %edx
movl %r15d, %ecx
movq 0x8(%rsp), %r8
movl %r14d, %r9d
callq 0xae28
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x2, %edx
leaq 0x326d3(%rip), %rsi     # 0x3d7da
callq *0x8(%rax)
incq %r13
movq %rbp, %rdi
callq 0x5450
movq %rax, %rbp
movq 0x8(%r12), %r15
movq 0x28(%r15), %rax
decq %rax
cmpq %rax, %r13
jb 0xb090
addq $0x8, %r15
cmpq %r15, %rbp
je 0xb488
movq %rbp, %rdi
callq 0x5450
cmpq %r15, %rax
movq 0x8(%rsp), %r15
movq 0x20(%rsp), %r12
jne 0xb4e5
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movq (%rdi), %rax
movq %r12, %rdx
callq *0x8(%rax)
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x22, %esi
callq *(%rax)
leaq 0x20(%rbp), %rsi
movzbl 0x4(%rsp), %r14d
movq %rbx, %rdi
movl %r14d, %edx
callq 0xb5e8
movq (%rbx), %rdi
movq (%rdi), %rax
leaq 0x3263f(%rip), %rsi     # 0x3d7d6
movl $0x3, %edx
callq *0x8(%rax)
addq $0x40, %rbp
movq %rbx, %rdi
movq %rbp, %rsi
movl $0x1, %edx
movl %r14d, %ecx
movl %r15d, %r8d
movl %r12d, %r9d
callq 0xae28
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0xa, %esi
callq *(%rax)
movq (%rbx), %rdi
movq 0x260(%rbx), %rsi
movl 0x10(%rsp), %edx
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0xb3fa
movq 0x8(%r12), %rsi
movq %rbx, %rdi
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xbbd4
movq 0x8(%r12), %rsi
movq %rbx, %rdi
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xbd8c
movq (%rbx), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
leaq 0x326fd(%rip), %rsi     # 0x3d926
movl $0xb, %edx
jmp 0xb25b
leaq 0x326e9(%rip), %rsi     # 0x3d920
movl $0x5, %edx
jmp 0xb25b
movq 0x8(%rax), %rax
leaq 0x326ad(%rip), %rsi     # 0x3d8f6
jmp 0xb256
movq 0x8(%rax), %rax
leaq 0x3257a(%rip), %rsi     # 0x3d7d0
movl $0x2, %edx
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax
movl $0x5b, %esi
callq *(%rax)
movq 0x8(%r12), %rax
movq (%rax), %r14
movq 0x8(%rax), %rcx
leaq -0x10(%rcx), %rsi
cmpq %rsi, %r14
je 0xb2c4
movzbl 0x4(%rsp), %ebp
movq %rbx, %rdi
movq %r14, %rsi
xorl %edx, %edx
movl %ebp, %ecx
movl %r13d, %r8d
movl %r15d, %r9d
callq 0xae28
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x2c, %esi
callq *(%rax)
addq $0x10, %r14
movq 0x8(%r12), %rax
movq 0x8(%rax), %rcx
leaq -0x10(%rcx), %rsi
cmpq %rsi, %r14
jne 0xb28c
cmpq %rcx, (%rax)
je 0xb4a7
movzbl 0x4(%rsp), %ecx
movq %rbx, %rdi
xorl %edx, %edx
movl %r13d, %r8d
movl %r15d, %r9d
callq 0xae28
movq (%rbx), %rdi
movq (%rdi), %rax
movq (%rax), %rax
movl $0x5d, %esi
jmp 0xb408
movl $0x7b, %esi
callq *(%rax)
movq 0x8(%r12), %r15
movq 0x18(%r15), %r13
cmpq $0x1, 0x28(%r15)
je 0xb38a
xorl %r14d, %r14d
movzbl 0x4(%rsp), %ebp
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x22, %esi
callq *(%rax)
leaq 0x20(%r13), %rsi
movq %rbx, %rdi
movl %ebp, %edx
callq 0xb5e8
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x2, %edx
leaq 0x325b2(%rip), %rsi     # 0x3d8f3
callq *0x8(%rax)
leaq 0x40(%r13), %rsi
movq %rbx, %rdi
xorl %edx, %edx
movl %ebp, %ecx
movq 0x8(%rsp), %r8
movq 0x10(%rsp), %r9
callq 0xae28
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x2c, %esi
callq *(%rax)
incq %r14
movq %r13, %rdi
callq 0x5450
movq %rax, %r13
movq 0x8(%r12), %r15
movq 0x28(%r15), %rax
decq %rax
cmpq %rax, %r14
jb 0xb314
addq $0x8, %r15
cmpq %r15, %r13
je 0xb4c6
movq %r13, %rdi
callq 0x5450
cmpq %r15, %rax
jne 0xb504
movq (%rbx), %rdi
movq (%rdi), %rax
movl $0x22, %esi
callq *(%rax)
leaq 0x20(%r13), %rsi
movzbl 0x4(%rsp), %ebp
movq %rbx, %rdi
movl %ebp, %edx
callq 0xb5e8
movq (%rbx), %rdi
movq (%rdi), %rax
leaq 0x3251e(%rip), %rsi     # 0x3d8f3
movl $0x2, %edx
callq *0x8(%rax)
addq $0x40, %r13
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
movl %ebp, %ecx
movq 0x8(%rsp), %r8
movq 0x10(%rsp), %r9
callq 0xae28
movq (%rbx), %rdi
movq (%rdi), %rax
movq (%rax), %rax
movl $0x7d, %esi
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax
leaq 0x260(%rbx), %rdi
addq %rsi, %rsi
movl $0x20, %edx
callq 0x5150
jmp 0xaeeb
leaq 0x260(%rbx), %rdi
addq %rsi, %rsi
movl $0x20, %edx
callq 0x5150
jmp 0xb06b
leaq 0x324cf(%rip), %rdi     # 0x3d920
leaq 0x323a5(%rip), %rsi     # 0x3d7fd
leaq 0x323a9(%rip), %rcx     # 0x3d808
movl $0x36cc, %edx           # imm = 0x36CC
callq 0x5280
leaq 0x3248c(%rip), %rdi     # 0x3d8fc
leaq 0x32386(%rip), %rsi     # 0x3d7fd
leaq 0x3238a(%rip), %rcx     # 0x3d808
movl $0x367a, %edx           # imm = 0x367A
callq 0x5280
leaq 0x3234e(%rip), %rdi     # 0x3d7dd
leaq 0x32367(%rip), %rsi     # 0x3d7fd
leaq 0x3236b(%rip), %rcx     # 0x3d808
movl $0x3634, %edx           # imm = 0x3634
callq 0x5280
leaq 0x3244e(%rip), %rdi     # 0x3d8fc
leaq 0x32348(%rip), %rsi     # 0x3d7fd
leaq 0x3234c(%rip), %rcx     # 0x3d808
movl $0x368f, %edx           # imm = 0x368F
callq 0x5280
leaq 0x32310(%rip), %rdi     # 0x3d7dd
leaq 0x32329(%rip), %rsi     # 0x3d7fd
leaq 0x3232d(%rip), %rcx     # 0x3d808
movl $0x3650, %edx           # imm = 0x3650
callq 0x5280
leaq 0x323dc(%rip), %rdi     # 0x3d8c8
leaq 0x3230a(%rip), %rsi     # 0x3d7fd
leaq 0x3230e(%rip), %rcx     # 0x3d808
movl $0x3635, %edx           # imm = 0x3635
callq 0x5280
leaq 0x323bd(%rip), %rdi     # 0x3d8c8
leaq 0x322eb(%rip), %rsi     # 0x3d7fd
leaq 0x322ef(%rip), %rcx     # 0x3d808
movl $0x3651, %edx           # imm = 0x3651
callq 0x5280
nop