// File: /workspace/github_cpp_makefile_star2_O2/eatonphil[P]cpp-json/json.cpp
// Function: json::deparse(json::JSONValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
std::string deparse(JSONValue v, std::string whitespace) {
  switch (v.type) {
  case JSONValueType::String:
    return "\"" + v.string.value() + "\"";
  case JSONValueType::Boolean:
    return (v.boolean.value() ? "true" : "false");
  case JSONValueType::Number:
    return std::to_string(v.number.value());
  case JSONValueType::Null:
    return "null";
  case JSONValueType::Array: {
    std::string s = "[\n";
    auto a = v.array.value();
    for (int i = 0; i < a.size(); i++) {
      auto value = a[i];
      s += whitespace + "  " + deparse(value, whitespace + "  ");
      if (i < a.size() - 1) {
        s += ",";
      }

      s += "\n";
    }

    return s + whitespace + "]";
  }
  case JSONValueType::Object: {
    std::string s = "{\n";
    auto values = v.object.value();
    auto i = 0;
    for (auto const &[key, value] : values) {
      s += whitespace + "  " + "\"" + key +
           "\": " + deparse(value, whitespace + "  ");

      if (i < values.size() - 1) {
        s += ",";
      }

      s += "\n";
      i++;
    }

    return s + whitespace + "}";
  }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x318, %rsp            # imm = 0x318
movq %rdx, %r14
movq %rsi, %rbx
movq %rdi, %r15
movl 0x98(%rsi), %eax
leaq 0x3e0e(%rip), %rcx      # 0x902c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rbx, %rdi
callq 0x5b18
leaq 0x3fcd(%rip), %rbx      # 0x9203
leaq -0x180(%rbp), %r14
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x5c51
movq %r15, %r12
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x5c28
leaq -0x180(%rbp), %rdi
callq 0x585c
movq %r12, %r15
jmp 0x569a
addq $0x38, %rbx
movq %rbx, %rdi
callq 0x5cc8
leaq 0x3e40(%rip), %rcx      # 0x90c3
leaq 0x3e3e(%rip), %rsi      # 0x90c8
cmpb $0x0, (%rax)
cmovneq %rcx, %rsi
jmp 0x55f5
movq %r15, -0x30(%rbp)
leaq 0x3f67(%rip), %rsi      # 0x9208
leaq -0x58(%rbp), %rdi
leaq -0x180(%rbp), %rdx
callq 0x5820
movq %r14, -0x38(%rbp)
addq $0x60, %rbx
movq %rbx, %rdi
callq 0x5eea
leaq -0x180(%rbp), %rdi
movq %rax, %rsi
callq 0x7308
leaq -0x178(%rbp), %rax
movq 0x10(%rax), %r15
movq $0x0, -0x60(%rbp)
leaq -0x200(%rbp), %r13
leaq -0x178(%rbp), %rax
cmpq %rax, %r15
je 0x564a
movq %r13, %rdi
movq -0x38(%rbp), %rsi
leaq 0x3d7a(%rip), %rdx      # 0x9082
callq 0x5e79
leaq -0x80(%rbp), %r14
movq %r14, %rdi
movq %r13, %rbx
movq %r13, %rsi
leaq 0x3ee2(%rip), %rdx      # 0x9203
callq 0x5c28
leaq 0x20(%r15), %rdx
leaq -0xe0(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x5efd
movq %r14, %r13
leaq -0xa0(%rbp), %rdi
movq %r12, %rsi
leaq 0x3ebb(%rip), %rdx      # 0x920b
callq 0x5c28
leaq 0x40(%r15), %rsi
leaq -0x2a0(%rbp), %rdi
callq 0x5d8c
leaq -0x1a0(%rbp), %r14
movq %r14, %rdi
movq -0x38(%rbp), %rsi
leaq 0x3d08(%rip), %rdx      # 0x9082
callq 0x5e79
leaq -0x1c0(%rbp), %r12
movq %r12, %rdi
leaq -0x2a0(%rbp), %rsi
movq %r14, %rdx
callq 0x51f4
leaq -0xc0(%rbp), %r14
movq %r14, %rdi
leaq -0xa0(%rbp), %rsi
movq %r12, %rdx
callq 0x5e08
leaq -0x58(%rbp), %rdi
movq %r14, %rsi
callq 0x76e8
movq %r14, %rdi
callq 0x585c
leaq -0x1c0(%rbp), %rdi
callq 0x585c
leaq -0x1a0(%rbp), %rdi
callq 0x585c
leaq -0x2a0(%rbp), %rdi
callq 0x5b9e
leaq -0xa0(%rbp), %rdi
callq 0x585c
leaq -0xe0(%rbp), %rdi
callq 0x585c
movq %r13, %rdi
callq 0x585c
movq %rbx, %rdi
callq 0x585c
movq -0x158(%rbp), %rax
decq %rax
movq -0x60(%rbp), %r14
cmpq %r14, %rax
jbe 0x5434
leaq -0x58(%rbp), %rdi
leaq 0x3cd6(%rip), %rsi      # 0x9105
callq 0x74e6
leaq -0x58(%rbp), %rdi
leaq 0x3dc7(%rip), %rsi      # 0x9206
callq 0x74e6
incq %r14
movq %r14, -0x60(%rbp)
movq %r15, %rdi
callq 0x3110
movq %rax, %r15
movq %rbx, %r13
jmp 0x52ea
movq %r15, -0x30(%rbp)
leaq 0x3d9c(%rip), %rsi      # 0x9205
leaq -0x58(%rbp), %rdi
leaq -0x180(%rbp), %rdx
callq 0x5820
addq $0x40, %rbx
movq %rbx, %rdi
callq 0x5d1c
leaq -0x80(%rbp), %rdi
movq %rax, %rsi
callq 0x5d30
xorl %r13d, %r13d
xorl %r15d, %r15d
movq -0x80(%rbp), %rsi
movq -0x78(%rbp), %rax
subq %rsi, %rax
cqto
movl $0xa0, %ecx
idivq %rcx
cmpq %r15, %rax
jbe 0x5609
addq %r13, %rsi
leaq -0x180(%rbp), %rdi
callq 0x5d8c
leaq -0xa0(%rbp), %rdi
movq %r14, %rsi
leaq 0x3bad(%rip), %rdx      # 0x9082
callq 0x5e79
leaq -0x340(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x5d8c
leaq -0x1e0(%rbp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x3b81(%rip), %rdx      # 0x9082
callq 0x5e79
leaq -0xe0(%rbp), %r12
movq %r12, %rdi
leaq -0x340(%rbp), %rsi
movq %rbx, %rdx
callq 0x51f4
leaq -0xc0(%rbp), %rbx
movq %rbx, %rdi
leaq -0xa0(%rbp), %rsi
movq %r12, %rdx
callq 0x5e08
leaq -0x58(%rbp), %rdi
movq %rbx, %rsi
callq 0x76e8
movq %rbx, %rdi
callq 0x585c
leaq -0xe0(%rbp), %rdi
callq 0x585c
leaq -0x1e0(%rbp), %rdi
callq 0x585c
leaq -0x340(%rbp), %rdi
callq 0x5b9e
leaq -0xa0(%rbp), %rdi
callq 0x585c
movq -0x78(%rbp), %rax
subq -0x80(%rbp), %rax
cqto
movl $0xa0, %ecx
idivq %rcx
decq %rax
cmpq %r15, %rax
jbe 0x55a6
leaq -0x58(%rbp), %rdi
leaq 0x3b64(%rip), %rsi      # 0x9105
callq 0x74e6
leaq -0x58(%rbp), %rdi
leaq 0x3c55(%rip), %rsi      # 0x9206
callq 0x74e6
leaq -0x180(%rbp), %rdi
callq 0x5b9e
incq %r15
addq $0xa0, %r13
jmp 0x5497
addq $0x28, %rbx
movq %rbx, %rdi
callq 0x5d08
movsd (%rax), %xmm0
movq %r15, %rdi
callq 0x5cdb
jmp 0x569a
leaq 0x3ac9(%rip), %rsi      # 0x90be
leaq -0x180(%rbp), %rdx
movq %r15, %rdi
callq 0x5820
jmp 0x569a
leaq -0x180(%rbp), %rdi
leaq -0x58(%rbp), %rsi
movq %r14, %rdx
callq 0x5eb1
leaq 0x3ae0(%rip), %rdx      # 0x9103
leaq -0x180(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0x5c28
leaq -0x180(%rbp), %rdi
callq 0x585c
leaq -0x80(%rbp), %rdi
callq 0x59ca
jmp 0x568d
leaq -0xc0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
movq -0x38(%rbp), %rdx
callq 0x5eb1
leaq 0x3aeb(%rip), %rdx      # 0x9150
leaq -0xc0(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0x5c28
leaq -0xc0(%rbp), %rdi
callq 0x585c
leaq -0x180(%rbp), %rdi
callq 0x633e
leaq -0x58(%rbp), %rdi
callq 0x585c
movq -0x30(%rbp), %r15
movq %r15, %rax
addq $0x318, %rsp            # imm = 0x318
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq -0xc0(%rbp), %rdi
jmp 0x5782
jmp 0x57e5
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x585c
jmp 0x5805
jmp 0x5795
jmp 0x56ed
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
jmp 0x5812
movq %rax, %rbx
jmp 0x5817
jmp 0x56f7
movq %rax, %rbx
jmp 0x580e
movq %rax, %rbx
jmp 0x5713
movq %rax, %rbx
leaq -0xc0(%rbp), %rdi
callq 0x585c
leaq -0x1c0(%rbp), %rdi
callq 0x585c
jmp 0x5742
jmp 0x57e5
movq %rax, %rbx
jmp 0x577b
movq %rax, %rbx
jmp 0x5772
movq %rax, %rbx
jmp 0x5766
movq %rax, %rbx
jmp 0x575a
movq %rax, %rbx
jmp 0x574e
movq %rax, %rbx
leaq -0x1a0(%rbp), %rdi
callq 0x585c
leaq -0x2a0(%rbp), %rdi
callq 0x5b9e
leaq -0xa0(%rbp), %rdi
callq 0x585c
leaq -0xe0(%rbp), %rdi
callq 0x585c
leaq -0x80(%rbp), %rdi
callq 0x585c
leaq -0x200(%rbp), %rdi
callq 0x585c
jmp 0x57e8
movq %rax, %rbx
jmp 0x57cb
movq %rax, %rbx
jmp 0x57bf
jmp 0x57f6
movq %rax, %rbx
jmp 0x5805
movq %rax, %rbx
leaq -0xc0(%rbp), %rdi
callq 0x585c
jmp 0x57b3
movq %rax, %rbx
jmp 0x57d7
movq %rax, %rbx
leaq -0xe0(%rbp), %rdi
callq 0x585c
leaq -0x1e0(%rbp), %rdi
callq 0x585c
leaq -0x340(%rbp), %rdi
callq 0x5b9e
leaq -0xa0(%rbp), %rdi
callq 0x585c
jmp 0x57f9
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x633e
jmp 0x580e
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
callq 0x5b9e
leaq -0x80(%rbp), %rdi
callq 0x59ca
leaq -0x58(%rbp), %rdi
callq 0x585c
movq %rbx, %rdi
callq 0x3260
nop