// File: /workspace/github_cpp_makefile_star2_O1/benjibc[P]json-universal-container/jsonUnitTest.cpp
// Function: main
int main()
{
    JSON data;
    populate(data);
    int ID = (int)data["id"];
    assert(((int)data["id"]) == ID);
    assert(((string)data["person"][0]["name"]) == "Benny");
    assert(((int)data["secondID"]) == 1);
    std::cout << data.json_encode() << std::endl;
    JSON decoded;
    JSONDecode(data.json_encode(), decoded);
    std::cout << decoded.json_encode() << std::endl;
    std::string test_data = "{ \"glossary\": { \"title\": \"example glossary\","
		"\"GlossDiv\": { \"title\": \"S\", \"GlossList\": { \"GlossEntry\": {"
        "\"ID\": \"SGML\",\"SortAs\": \"SGML\","
	    "\"GlossTerm\": \"Standard Generalized Markup Language\","
        "\"Acronym\": \"SGML\",\"Abbrev\": \"ISO 8879:1986\","
        "\"GlossDef\": {\"para\": \"A meta-markup language, "
        "used to create markup languages such as DocBook.\","
        "\"GlossSeeAlso\": [\"GML\", \"XML\"]},\"GlossSee\": \"markup\""
        "} } } } }";
    JSON decoded2;
    JSONDecode(test_data, decoded2);
    std::cout << decoded2.json_encode() << std::endl;
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xd0, %rsp
leaq 0x60(%rsp), %rdi
movl $0x0, 0x28(%rdi)
callq 0x3755
leaq 0x6738(%rip), %rsi      # 0xa2bb
leaq 0x60(%rsp), %rdi
callq 0x4504
movl 0x28(%rax), %ecx
cmpl $0x5, %ecx
je 0x3ba4
cmpl $0x4, %ecx
jne 0x3fb2
cvttsd2si (%rax), %ebx
jmp 0x3ba7
movzbl (%rax), %ebx
leaq 0x670d(%rip), %rsi      # 0xa2bb
leaq 0x60(%rsp), %rdi
callq 0x4504
movl 0x28(%rax), %ecx
cmpl $0x5, %ecx
je 0x3bcf
cmpl $0x4, %ecx
jne 0x4016
cvttsd2si (%rax), %eax
jmp 0x3bd2
movzbl (%rax), %eax
cmpl %ebx, %eax
jne 0x3f03
leaq 0x5677(%rip), %rsi      # 0x9258
leaq 0x60(%rsp), %rdi
callq 0x4504
movq %rax, %rdi
xorl %esi, %esi
callq 0x475e
leaq 0x5651(%rip), %rsi      # 0x924d
movq %rax, %rdi
callq 0x4504
cmpl $0x1, 0x28(%rax)
jne 0x3f22
movq (%rax), %rsi
leaq 0x30(%rsp), %rdi
movq %rsp, %rdx
callq 0x20b0
leaq 0x562d(%rip), %rsi      # 0x9252
leaq 0x30(%rsp), %rdi
callq 0x2080
testl %eax, %eax
jne 0x3f74
leaq 0x40(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x3c4a
callq 0x2170
leaq 0x55f3(%rip), %rsi      # 0x9244
leaq 0x60(%rsp), %rdi
callq 0x4504
movl 0x28(%rax), %ecx
cmpl $0x5, %ecx
je 0x3c72
cmpl $0x4, %ecx
jne 0x407a
cvttsd2si (%rax), %eax
jmp 0x3c75
movzbl (%rax), %eax
cmpl $0x1, %eax
jne 0x3f93
movq %rsp, %rdi
leaq 0x60(%rsp), %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4854
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movq 0xa339(%rip), %rdi      # 0xdfd8
callq 0x21d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0x10(%rsp), %r15
movq -0x10(%r15), %rdi
cmpq %r15, %rdi
je 0x3ce1
callq 0x2170
movl $0x0, 0x28(%rsp)
leaq 0x30(%rsp), %rdi
leaq 0x60(%rsp), %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4854
leaq 0x30(%rsp), %rdi
movq %rsp, %rsi
xorl %edx, %edx
callq 0x250f
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x3d1a
callq 0x2170
leaq 0x30(%rsp), %rdi
movq %rsp, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4854
movq 0x30(%rsp), %rsi
movq 0x38(%rsp), %rdx
movq 0xa29c(%rip), %rdi      # 0xdfd8
callq 0x21d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x3d7a
callq 0x2170
leaq 0xc0(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x5557(%rip), %rsi      # 0x92e5
leaq 0x56d1(%rip), %rdx      # 0x9466
leaq 0xb0(%rsp), %rdi
callq 0x81bc
leaq 0x30(%rsp), %rsi
movl $0x0, 0x28(%rsi)
leaq 0xb0(%rsp), %rdi
xorl %edx, %edx
callq 0x250f
leaq 0x90(%rsp), %rdi
leaq 0x30(%rsp), %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x4854
movq 0x90(%rsp), %rsi
movq 0x98(%rsp), %rdx
movq 0xa1ee(%rip), %rdi      # 0xdfd8
callq 0x21d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0xa0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e2f
callq 0x2170
movl 0x58(%rsp), %eax
cmpl $0x3, %eax
je 0x3e5f
cmpl $0x2, %eax
je 0x3e53
cmpl $0x1, %eax
jne 0x3e69
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
je 0x3e69
callq 0x2170
jmp 0x3e69
leaq 0x30(%rsp), %rdi
callq 0x79aa
jmp 0x3e69
leaq 0x30(%rsp), %rdi
callq 0x44b0
movq 0xb0(%rsp), %rdi
cmpq %r12, %rdi
je 0x3e7b
callq 0x2170
movl 0x28(%rsp), %eax
cmpl $0x3, %eax
je 0x3ea8
cmpl $0x2, %eax
je 0x3e9e
cmpl $0x1, %eax
jne 0x3eb0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x3eb0
callq 0x2170
jmp 0x3eb0
movq %rsp, %rdi
callq 0x79aa
jmp 0x3eb0
movq %rsp, %rdi
callq 0x44b0
movl 0x88(%rsp), %eax
cmpl $0x3, %eax
je 0x3ee7
cmpl $0x2, %eax
je 0x3edb
cmpl $0x1, %eax
jne 0x3ef1
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3ef1
callq 0x2170
jmp 0x3ef1
leaq 0x60(%rsp), %rdi
callq 0x79aa
jmp 0x3ef1
leaq 0x60(%rsp), %rdi
callq 0x44b0
xorl %eax, %eax
addq $0xd0, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x535b(%rip), %rdi      # 0x9265
leaq 0x536c(%rip), %rsi      # 0x927d
leaq 0x5376(%rip), %rcx      # 0x928e
movl $0x1d, %edx
callq 0x20f0
movl $0x28, %edi
callq 0x20e0
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x630d(%rip), %rsi      # 0xa24c
leaq 0x6317(%rip), %rdx      # 0xa25d
movq %rsp, %rdi
callq 0x81bc
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x69a8
xorl %ebp, %ebp
leaq 0x9cf3(%rip), %rsi      # 0xdc58
leaq 0x2a86(%rip), %rdx      # 0x69f2
movq %r14, %rdi
callq 0x2230
leaq 0x531e(%rip), %rdi      # 0x9299
leaq 0x52fb(%rip), %rsi      # 0x927d
leaq 0x5305(%rip), %rcx      # 0x928e
movl $0x1e, %edx
callq 0x20f0
leaq 0x532e(%rip), %rdi      # 0x92c8
leaq 0x52dc(%rip), %rsi      # 0x927d
leaq 0x52e6(%rip), %rcx      # 0x928e
movl $0x1f, %edx
callq 0x20f0
movl $0x28, %edi
callq 0x20e0
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
movabsq $0x69206e6120746f4e, %rax # imm = 0x69206E6120746F4E
movq %rax, (%r15)
movabsq $0x6570797420746e69, %rax # imm = 0x6570797420746E69
movq %rax, 0x7(%r15)
movq $0xf, -0x8(%r15)
movb $0x0, 0xf(%r15)
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x69a8
xorl %ebp, %ebp
leaq 0x9c51(%rip), %rsi      # 0xdc58
leaq 0x29e4(%rip), %rdx      # 0x69f2
movq %r14, %rdi
callq 0x2230
movl $0x28, %edi
callq 0x20e0
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
movabsq $0x69206e6120746f4e, %rax # imm = 0x69206E6120746F4E
movq %rax, (%r15)
movabsq $0x6570797420746e69, %rax # imm = 0x6570797420746E69
movq %rax, 0x7(%r15)
movq $0xf, -0x8(%r15)
movb $0x0, 0xf(%r15)
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x69a8
xorl %ebp, %ebp
leaq 0x9bed(%rip), %rsi      # 0xdc58
leaq 0x2980(%rip), %rdx      # 0x69f2
movq %r14, %rdi
callq 0x2230
movl $0x28, %edi
callq 0x20e0
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
movabsq $0x69206e6120746f4e, %rax # imm = 0x69206E6120746F4E
movq %rax, (%r15)
movabsq $0x6570797420746e69, %rax # imm = 0x6570797420746E69
movq %rax, 0x7(%r15)
movq $0xf, -0x8(%r15)
movb $0x0, 0xf(%r15)
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x69a8
xorl %ebp, %ebp
leaq 0x9b89(%rip), %rsi      # 0xdc58
leaq 0x291c(%rip), %rdx      # 0x69f2
movq %r14, %rdi
callq 0x2230
jmp 0x40e2
jmp 0x40e2
movq %rax, %rdi
callq 0x699d
jmp 0x40f8
jmp 0x40f8
movq %rax, %rbx
movb $0x1, %bpl
jmp 0x4109
jmp 0x40f8
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x4109
callq 0x2170
testb %bpl, %bpl
je 0x41a0
movq %r14, %rdi
callq 0x2120
jmp 0x41a0
jmp 0x4121
movq %rax, %rbx
jmp 0x4150
jmp 0x412c
jmp 0x412c
jmp 0x4176
movq %rax, %rbx
jmp 0x416c
jmp 0x419d
jmp 0x419d
jmp 0x419d
movq %rax, %rbx
leaq 0xa0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x4150
callq 0x2170
leaq 0x30(%rsp), %rdi
callq 0x4364
movq 0xb0(%rsp), %rdi
cmpq %r12, %rdi
je 0x416c
callq 0x2170
movq %rsp, %rdi
callq 0x4364
jmp 0x41a0
movq %rax, %rbx
movq 0x30(%rsp), %rdi
cmpq %r14, %rdi
jne 0x4167
jmp 0x416c
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x41a0
callq 0x2170
jmp 0x41a0
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x4364
movq %rbx, %rdi
callq 0x2240