// File: 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
subq $0x530, %rsp            # imm = 0x530
movq %rdx, -0x4c8(%rbp)
movq %rsi, -0x4c0(%rbp)
movq %rdi, -0x4b8(%rbp)
movq %rdi, %rax
movq %rax, -0x4b0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl 0x98(%rsi), %eax
movq %rax, -0x4a8(%rbp)
subq $0x5, %rax
ja 0x8539
movq -0x4a8(%rbp), %rax
leaq 0xd451(%rip), %rcx      # 0x1502c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x4c0(%rbp), %rdi
callq 0x9340
movq %rax, %rdx
leaq 0xd5ed(%rip), %rsi      # 0x151e7
movq %rsi, -0x4d0(%rbp)
leaq -0x38(%rbp), %rdi
movq %rdi, -0x4d8(%rbp)
callq 0x9930
movq -0x4b8(%rbp), %rdi
movq -0x4d8(%rbp), %rsi
movq -0x4d0(%rbp), %rdx
callq 0x98e0
jmp 0x7c2d
leaq -0x38(%rbp), %rdi
callq 0x87f0
jmp 0x853b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x87f0
jmp 0x854b
movq -0x4c0(%rbp), %rdi
addq $0x38, %rdi
callq 0x9a40
movb (%rax), %dl
leaq 0xd439(%rip), %rcx      # 0x150a7
leaq 0xd437(%rip), %rax      # 0x150ac
testb $0x1, %dl
cmovneq %rcx, %rax
movq %rax, -0x4e8(%rbp)
leaq -0x45(%rbp), %rdi
movq %rdi, -0x4e0(%rbp)
callq 0x42b0
movq -0x4b8(%rbp), %rdi
movq -0x4e8(%rbp), %rsi
movq -0x4e0(%rbp), %rdx
callq 0x8560
jmp 0x7caf
leaq -0x45(%rbp), %rdi
callq 0x41d0
jmp 0x853b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x45(%rbp), %rdi
callq 0x41d0
jmp 0x854b
movq -0x4c0(%rbp), %rdi
addq $0x28, %rdi
callq 0x9ad0
movq -0x4b8(%rbp), %rdi
movsd (%rax), %xmm0
callq 0x9a80
jmp 0x853b
leaq -0x46(%rbp), %rdi
movq %rdi, -0x4f0(%rbp)
callq 0x42b0
movq -0x4b8(%rbp), %rdi
movq -0x4f0(%rbp), %rdx
leaq 0xd381(%rip), %rsi      # 0x150a2
callq 0x8560
jmp 0x7d28
leaq -0x46(%rbp), %rdi
callq 0x41d0
jmp 0x853b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x46(%rbp), %rdi
callq 0x41d0
jmp 0x854b
leaq -0x69(%rbp), %rdi
movq %rdi, -0x4f8(%rbp)
callq 0x42b0
movq -0x4f8(%rbp), %rdx
leaq 0xd47b(%rip), %rsi      # 0x151e9
leaq -0x68(%rbp), %rdi
callq 0x8560
jmp 0x7d79
leaq -0x69(%rbp), %rdi
callq 0x41d0
movq -0x4c0(%rbp), %rdi
addq $0x40, %rdi
callq 0x9b10
movq %rax, -0x500(%rbp)
jmp 0x7d9b
movq -0x500(%rbp), %rsi
leaq -0x88(%rbp), %rdi
callq 0x9b50
jmp 0x7db0
movl $0x0, -0x8c(%rbp)
movslq -0x8c(%rbp), %rax
movq %rax, -0x508(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x8ed0
movq %rax, %rcx
movq -0x508(%rbp), %rax
cmpq %rcx, %rax
jae 0x8035
movslq -0x8c(%rbp), %rsi
leaq -0x88(%rbp), %rdi
callq 0x9c40
movq %rax, %rsi
leaq -0x130(%rbp), %rdi
callq 0x9c60
jmp 0x7e0b
movq -0x4c8(%rbp), %rsi
leaq 0xd24d(%rip), %rdx      # 0x15066
leaq -0x170(%rbp), %rdi
callq 0x9df0
jmp 0x7e27
leaq -0x230(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x9c60
jmp 0x7e3c
movq -0x4c8(%rbp), %rsi
leaq 0xd21c(%rip), %rdx      # 0x15066
leaq -0x250(%rbp), %rdi
callq 0x9df0
jmp 0x7e58
leaq -0x190(%rbp), %rdi
leaq -0x230(%rbp), %rsi
leaq -0x250(%rbp), %rdx
callq 0x7b80
jmp 0x7e74
leaq -0x150(%rbp), %rdi
leaq -0x170(%rbp), %rsi
leaq -0x190(%rbp), %rdx
callq 0x9d20
jmp 0x7e90
leaq -0x68(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x9e70
jmp 0x7ea2
leaq -0x150(%rbp), %rdi
callq 0x87f0
leaq -0x190(%rbp), %rdi
callq 0x87f0
leaq -0x250(%rbp), %rdi
callq 0x87f0
leaq -0x230(%rbp), %rdi
callq 0x9540
leaq -0x170(%rbp), %rdi
callq 0x87f0
movslq -0x8c(%rbp), %rax
movq %rax, -0x510(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x8ed0
movq %rax, %rcx
movq -0x510(%rbp), %rax
subq $0x1, %rcx
cmpq %rcx, %rax
jae 0x7ff5
leaq 0xd1d3(%rip), %rsi      # 0x150e9
leaq -0x68(%rbp), %rdi
callq 0x8720
jmp 0x7f21
jmp 0x7ff5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x69(%rbp), %rdi
callq 0x41d0
jmp 0x854b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x80b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x80a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x8027
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7fe7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7fdb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7fcf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x7fc3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x87f0
leaq -0x190(%rbp), %rdi
callq 0x87f0
leaq -0x250(%rbp), %rdi
callq 0x87f0
leaq -0x230(%rbp), %rdi
callq 0x9540
leaq -0x170(%rbp), %rdi
callq 0x87f0
jmp 0x8027
leaq 0xd1ee(%rip), %rsi      # 0x151ea
leaq -0x68(%rbp), %rdi
callq 0x8720
jmp 0x8007
leaq -0x130(%rbp), %rdi
callq 0x9540
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0x7dba
leaq -0x130(%rbp), %rdi
callq 0x9540
jmp 0x80a8
movq -0x4c8(%rbp), %rdx
leaq -0x270(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x9ea0
jmp 0x804e
movq -0x4b8(%rbp), %rdi
leaq 0xd08b(%rip), %rdx      # 0x150e7
leaq -0x270(%rbp), %rsi
callq 0x98e0
jmp 0x806a
leaq -0x270(%rbp), %rdi
callq 0x87f0
leaq -0x88(%rbp), %rdi
callq 0x8f40
leaq -0x68(%rbp), %rdi
callq 0x87f0
jmp 0x853b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x87f0
leaq -0x88(%rbp), %rdi
callq 0x8f40
leaq -0x68(%rbp), %rdi
callq 0x87f0
jmp 0x854b
leaq -0x291(%rbp), %rdi
movq %rdi, -0x518(%rbp)
callq 0x42b0
movq -0x518(%rbp), %rdx
leaq 0xd109(%rip), %rsi      # 0x151ec
leaq -0x290(%rbp), %rdi
callq 0x8560
jmp 0x80f1
leaq -0x291(%rbp), %rdi
callq 0x41d0
movq -0x4c0(%rbp), %rdi
addq $0x60, %rdi
callq 0x9f20
movq %rax, -0x520(%rbp)
jmp 0x8116
movq -0x520(%rbp), %rsi
leaq -0x2c8(%rbp), %rdi
callq 0x9f60
jmp 0x812b
movl $0x0, -0x2cc(%rbp)
leaq -0x2c8(%rbp), %rax
movq %rax, -0x2d8(%rbp)
movq -0x2d8(%rbp), %rdi
callq 0x9f90
movq %rax, -0x2e0(%rbp)
movq -0x2d8(%rbp), %rdi
callq 0x9fc0
movq %rax, -0x2e8(%rbp)
leaq -0x2e0(%rbp), %rdi
leaq -0x2e8(%rbp), %rsi
callq 0x9ff0
xorb $-0x1, %al
testb $0x1, %al
jne 0x8187
jmp 0x84a9
leaq -0x2e0(%rbp), %rdi
callq 0xa020
movq %rax, -0x2f0(%rbp)
movq -0x2f0(%rbp), %rdi
callq 0xa040
movq %rax, -0x2f8(%rbp)
movq -0x2f0(%rbp), %rdi
callq 0xa060
movq -0x4c8(%rbp), %rsi
movq %rax, -0x300(%rbp)
leaq 0xce98(%rip), %rdx      # 0x15066
leaq -0x3a0(%rbp), %rdi
callq 0x9df0
jmp 0x81dc
leaq 0xd004(%rip), %rdx      # 0x151e7
leaq -0x380(%rbp), %rdi
leaq -0x3a0(%rbp), %rsi
callq 0x98e0
jmp 0x81f8
movq -0x2f8(%rbp), %rdx
leaq -0x360(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0xa080
jmp 0x8214
leaq 0xcfd4(%rip), %rdx      # 0x151ef
leaq -0x340(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0x98e0
jmp 0x8230
movq -0x300(%rbp), %rsi
leaq -0x460(%rbp), %rdi
callq 0x9c60
jmp 0x8245
movq -0x4c8(%rbp), %rsi
leaq 0xce13(%rip), %rdx      # 0x15066
leaq -0x480(%rbp), %rdi
callq 0x9df0
jmp 0x8261
leaq -0x3c0(%rbp), %rdi
leaq -0x460(%rbp), %rsi
leaq -0x480(%rbp), %rdx
callq 0x7b80
jmp 0x827d
leaq -0x320(%rbp), %rdi
leaq -0x340(%rbp), %rsi
leaq -0x3c0(%rbp), %rdx
callq 0x9d20
jmp 0x8299
leaq -0x290(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x9e70
jmp 0x82ae
leaq -0x320(%rbp), %rdi
callq 0x87f0
leaq -0x3c0(%rbp), %rdi
callq 0x87f0
leaq -0x480(%rbp), %rdi
callq 0x87f0
leaq -0x460(%rbp), %rdi
callq 0x9540
leaq -0x340(%rbp), %rdi
callq 0x87f0
leaq -0x360(%rbp), %rdi
callq 0x87f0
leaq -0x380(%rbp), %rdi
callq 0x87f0
leaq -0x3a0(%rbp), %rdi
callq 0x87f0
movslq -0x2cc(%rbp), %rax
movq %rax, -0x528(%rbp)
leaq -0x2c8(%rbp), %rdi
callq 0x91e0
movq %rax, %rcx
movq -0x528(%rbp), %rax
subq $0x1, %rcx
cmpq %rcx, %rax
jae 0x8474
leaq 0xcda3(%rip), %rsi      # 0x150e9
leaq -0x290(%rbp), %rdi
callq 0x8720
jmp 0x8354
jmp 0x8474
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x291(%rbp), %rdi
callq 0x41d0
jmp 0x854b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x852b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x851f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x8463
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x8457
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x844b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x843f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x8433
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x8427
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x841b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x87f0
leaq -0x3c0(%rbp), %rdi
callq 0x87f0
leaq -0x480(%rbp), %rdi
callq 0x87f0
leaq -0x460(%rbp), %rdi
callq 0x9540
leaq -0x340(%rbp), %rdi
callq 0x87f0
leaq -0x360(%rbp), %rdi
callq 0x87f0
leaq -0x380(%rbp), %rdi
callq 0x87f0
leaq -0x3a0(%rbp), %rdi
callq 0x87f0
jmp 0x851f
leaq 0xcd6f(%rip), %rsi      # 0x151ea
leaq -0x290(%rbp), %rdi
callq 0x8720
jmp 0x8489
movl -0x2cc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2cc(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0xa0d0
jmp 0x8169
movq -0x4c8(%rbp), %rdx
leaq -0x4a0(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x9ea0
jmp 0x84c5
movq -0x4b8(%rbp), %rdi
leaq 0xcc61(%rip), %rdx      # 0x15134
leaq -0x4a0(%rbp), %rsi
callq 0x98e0
jmp 0x84e1
leaq -0x4a0(%rbp), %rdi
callq 0x87f0
leaq -0x2c8(%rbp), %rdi
callq 0x9240
leaq -0x290(%rbp), %rdi
callq 0x87f0
jmp 0x853b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x4a0(%rbp), %rdi
callq 0x87f0
leaq -0x2c8(%rbp), %rdi
callq 0x9240
leaq -0x290(%rbp), %rdi
callq 0x87f0
jmp 0x854b
ud2
movq -0x4b0(%rbp), %rax
addq $0x530, %rsp            # imm = 0x530
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x42a0
nopw %cs:(%rax,%rax)
nop