// File: /workspace/github_cpp_makefile_star2_O3/mattn[P]wandbox-run/./json.hpp
// Function: 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>::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, unsigned int, unsigned int)
void dump(const basic_json& val,
                  const bool pretty_print,
                  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("{}", 2);
                        return;
                    }

                    if (pretty_print)
                    {
                        o.write("{\n", 2);

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

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

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

                        o.put('\n');
                        o.write(indent_string.c_str(), current_indent);
                        o.put('}');
                    }
                    else
                    {
                        o.put('{');

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

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

                        o.put('}');
                    }

                    return;
                }

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

                    if (pretty_print)
                    {
                        o.write("[\n", 2);

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

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

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

                        o.put('\n');
                        o.write(indent_string.c_str(), current_indent);
                        o.put(']');
                    }
                    else
                    {
                        o.put('[');

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

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

                        o.put(']');
                    }

                    return;
                }

                case value_t::string:
                {
                    o.put('\"');
                    dump_escaped(*val.m_value.string);
                    o.put('\"');
                    return;
                }

                case value_t::boolean:
                {
                    if (val.m_value.boolean)
                    {
                        o.write("true", 4);
                    }
                    else
                    {
                        o.write("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("<discarded>", 11);
                    return;
                }

                case value_t::null:
                {
                    o.write("null", 4);
                    return;
                }
            }
        }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movzbl (%rsi), %eax
cmpq $0x8, %rax
ja 0x1b431
movl %r8d, %r14d
movl %ecx, %r15d
movq %rsi, %r12
movq %rdi, %rbx
leaq 0xaffdb(%rip), %rcx     # 0xcb0c8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq (%rbx), %rdi
leaq 0xb0d9e(%rip), %rsi     # 0xcbe9e
jmp 0x1b118
movq (%rbx), %rdi
cmpb $0x1, 0x8(%r12)
jne 0x1b440
leaq 0xb1ef3(%rip), %rsi     # 0xcd00b
movl $0x4, %edx
jmp 0x1b463
movq 0x8(%r12), %rax
movq (%rax), %rcx
movq (%rbx), %rdi
cmpq 0x8(%rax), %rcx
je 0x1b44e
testb %dl, %dl
je 0x1b476
leaq 0xb1ea3(%rip), %rsi     # 0xccfe9
movl $0x2, %edx
callq 0x88440
leal (%r14,%r15), %r13d
cmpq %r13, 0x60(%rbx)
jae 0x1b16b
leaq 0x58(%rbx), %rdi
movq %r13, %rsi
movl $0x20, %edx
callq 0x99bd0
movq 0x8(%r12), %rax
movq (%rax), %rbp
movq 0x8(%rax), %rax
leaq -0x10(%rax), %rcx
cmpq %rcx, %rbp
je 0x1b1dd
movq %r14, (%rsp)
leaq 0xb1c2d(%rip), %r14     # 0xccdb8
movq (%rbx), %rdi
movq 0x58(%rbx), %rsi
movq %r13, %rdx
callq 0x88440
movq %rbx, %rdi
movq %rbp, %rsi
movl $0x1, %edx
movl %r15d, %ecx
movl %r13d, %r8d
callq 0x1b0c2
movq (%rbx), %rdi
movl $0x2, %edx
movq %r14, %rsi
callq 0x88440
addq $0x10, %rbp
movq 0x8(%r12), %rcx
movq 0x8(%rcx), %rax
leaq -0x10(%rax), %rdx
cmpq %rdx, %rbp
jne 0x1b18b
movq (%rcx), %rbp
movq (%rsp), %r14
cmpq %rax, %rbp
je 0x1b5ef
movq (%rbx), %rdi
movq 0x58(%rbx), %rsi
movq %r13, %rdx
callq 0x88440
movq 0x8(%r12), %rax
movq 0x8(%rax), %rsi
addq $-0x10, %rsi
movq %rbx, %rdi
movl $0x1, %edx
movl %r15d, %ecx
movl %r13d, %r8d
callq 0x1b0c2
movq (%rbx), %rdi
movl $0xa, %esi
callq 0x882c0
movq (%rbx), %rdi
movq 0x58(%rbx), %rsi
movl %r14d, %edx
callq 0x88440
jmp 0x1b4e7
movq (%rbx), %rdi
movl $0x22, %esi
callq 0x882c0
movq 0x8(%r12), %rsi
movq %rbx, %rdi
callq 0x1b66c
movq (%rbx), %rdi
movl $0x22, %esi
jmp 0x1b5dc
movsd 0x8(%r12), %xmm0
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x1ba06
movq 0x8(%r12), %rax
cmpq $0x0, 0x28(%rax)
movq (%rbx), %rdi
je 0x1b457
testb %dl, %dl
movq %r14, (%rsp)
je 0x1b4f4
leaq 0xb1b11(%rip), %rsi     # 0xccdb1
movl $0x2, %edx
callq 0x88440
leal (%r14,%r15), %r13d
cmpq %r13, 0x60(%rbx)
jae 0x1b2c5
leaq 0x58(%rbx), %rdi
movq %r13, %rsi
movl $0x20, %edx
callq 0x99bd0
movq 0x8(%r12), %rax
movq 0x18(%rax), %rbp
cmpq $0x1, 0x28(%rax)
je 0x1b366
xorl %r14d, %r14d
movq (%rbx), %rdi
movq 0x58(%rbx), %rsi
movq %r13, %rdx
callq 0x88440
movq (%rbx), %rdi
movl $0x22, %esi
callq 0x882c0
leaq 0x20(%rbp), %rsi
movq %rbx, %rdi
callq 0x1b66c
movq (%rbx), %rdi
movl $0x3, %edx
leaq 0xb1aa1(%rip), %rsi     # 0xccdb4
callq 0x88440
leaq 0x40(%rbp), %rsi
movq %rbx, %rdi
movl $0x1, %edx
movl %r15d, %ecx
movl %r13d, %r8d
callq 0x1b0c2
movq (%rbx), %rdi
movl $0x2, %edx
leaq 0xb1a7a(%rip), %rsi     # 0xccdb8
callq 0x88440
incq %r14
movq %rbp, %rdi
callq 0x261f0
movq %rax, %rbp
movq 0x8(%r12), %rax
movq 0x28(%rax), %rcx
decq %rcx
cmpq %rcx, %r14
jb 0x1b2dc
addq $0x8, %rax
cmpq %rax, %rbp
je 0x1b60e
movq (%rbx), %rdi
movq 0x58(%rbx), %rsi
movq %r13, %rdx
callq 0x88440
movq (%rbx), %rdi
movl $0x22, %esi
callq 0x882c0
leaq 0x20(%rbp), %rsi
movq %rbx, %rdi
callq 0x1b66c
movq (%rbx), %rdi
leaq 0xb1a0f(%rip), %rsi     # 0xccdb4
movl $0x3, %edx
callq 0x88440
addq $0x40, %rbp
movq %rbx, %rdi
movq %rbp, %rsi
movl $0x1, %edx
movl %r15d, %ecx
movl %r13d, %r8d
callq 0x1b0c2
movq (%rbx), %rdi
movl $0xa, %esi
callq 0x882c0
movq (%rbx), %rdi
movq 0x58(%rbx), %rsi
movl (%rsp), %edx
callq 0x88440
jmp 0x1b5d4
movq 0x8(%r12), %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x1b84a
movq 0x8(%r12), %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x1b954
movq (%rbx), %rdi
leaq 0xb1bec(%rip), %rsi     # 0xcd016
movl $0xb, %edx
jmp 0x1b463
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xb1bc9(%rip), %rsi     # 0xcd010
movl $0x5, %edx
jmp 0x1b463
leaq 0xb63b9(%rip), %rsi     # 0xd180e
jmp 0x1b45e
leaq 0xb1950(%rip), %rsi     # 0xccdae
movl $0x2, %edx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x88440
movl $0x5b, %esi
callq 0x882c0
movq 0x8(%r12), %rax
movq (%rax), %r13
movq 0x8(%rax), %rax
leaq -0x10(%rax), %rsi
cmpq %rsi, %r13
je 0x1b4ce
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
movl %r15d, %ecx
movl %r14d, %r8d
callq 0x1b0c2
movq (%rbx), %rdi
movl $0x2c, %esi
callq 0x882c0
addq $0x10, %r13
movq 0x8(%r12), %rcx
movq 0x8(%rcx), %rax
leaq -0x10(%rax), %rsi
cmpq %rsi, %r13
jne 0x1b495
movq (%rcx), %r13
cmpq %rax, %r13
je 0x1b62d
movq %rbx, %rdi
xorl %edx, %edx
movl %r15d, %ecx
movl %r14d, %r8d
callq 0x1b0c2
movq (%rbx), %rdi
movl $0x5d, %esi
jmp 0x1b5dc
movl $0x7b, %esi
callq 0x882c0
movq 0x8(%r12), %rax
movq 0x18(%rax), %r13
cmpq $0x1, 0x28(%rax)
je 0x1b582
xorl %r14d, %r14d
movq (%rsp), %rbp
movq (%rbx), %rdi
movl $0x22, %esi
callq 0x882c0
leaq 0x20(%r13), %rsi
movq %rbx, %rdi
callq 0x1b66c
movq (%rbx), %rdi
movl $0x2, %edx
leaq 0xb1aa9(%rip), %rsi     # 0xccfe6
callq 0x88440
leaq 0x40(%r13), %rsi
movq %rbx, %rdi
xorl %edx, %edx
movl %r15d, %ecx
movl %ebp, %r8d
callq 0x1b0c2
movq (%rbx), %rdi
movl $0x2c, %esi
callq 0x882c0
incq %r14
movq %r13, %rdi
callq 0x261f0
movq %rax, %r13
movq 0x8(%r12), %rax
movq 0x28(%rax), %rcx
decq %rcx
cmpq %rcx, %r14
jb 0x1b515
addq $0x8, %rax
cmpq %rax, %r13
je 0x1b64c
movq (%rbx), %rdi
movl $0x22, %esi
callq 0x882c0
leaq 0x20(%r13), %rsi
movq %rbx, %rdi
callq 0x1b66c
movq (%rbx), %rdi
leaq 0xb1a34(%rip), %rsi     # 0xccfe6
movl $0x2, %edx
callq 0x88440
addq $0x40, %r13
movq %rbx, %rdi
movq %r13, %rsi
xorl %edx, %edx
movl %r15d, %ecx
movq (%rsp), %r8
callq 0x1b0c2
movq (%rbx), %rdi
movl $0x7d, %esi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x882c0
leaq 0xb19f6(%rip), %rdi     # 0xccfec
leaq 0xafd08(%rip), %rsi     # 0xcb305
leaq 0xb17d7(%rip), %rcx     # 0xccddb
movl $0x1897, %edx           # imm = 0x1897
callq 0x13130
leaq 0xb17a6(%rip), %rdi     # 0xccdbb
leaq 0xafce9(%rip), %rsi     # 0xcb305
leaq 0xb17b8(%rip), %rcx     # 0xccddb
movl $0x1854, %edx           # imm = 0x1854
callq 0x13130
leaq 0xb19b8(%rip), %rdi     # 0xccfec
leaq 0xafcca(%rip), %rsi     # 0xcb305
leaq 0xb1799(%rip), %rcx     # 0xccddb
movl $0x18ab, %edx           # imm = 0x18AB
callq 0x13130
leaq 0xb1768(%rip), %rdi     # 0xccdbb
leaq 0xafcab(%rip), %rsi     # 0xcb305
leaq 0xb177a(%rip), %rcx     # 0xccddb
movl $0x186f, %edx           # imm = 0x186F
callq 0x13130
nop