// File: /workspace/github_cpp_makefile_star2_O3/Heptagon196[P]Gos/Reflection/JSON.cpp
// Function: Tokenizer::getToken[abi:cxx11]()
Token getToken() {
        if (lastToken.second != "") {
            Token ret = lastToken;
            lastToken.second = "";
            return ret;
        }
        char ch = getChar();
        while (ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t') {
            ch = getChar();
        }
        if (ch == EOF) {
            return { TypeID::get<void>(), "" };
        }
        std::string content;
        content = ch;
        if (ch == '"') {
            content = "";
            ch = getChar();
            while (ch != '"') {
                if (ch == '\\') {
                    ch = getChar();
                    if (ch == 'n') {
                        ch = '\n';
                    } else if (ch == 'r') {
                        ch = '\r';
                    } else if (ch == 't') {
                        ch = '\t';
                    }
                }
                content.push_back(ch);
                ch = getChar();
            }
            return { TypeID::get<std::string>(), content };
        } else if (isdigit(ch) || isalpha(ch) || ch == '-' || ch == '+' || ch == '.') {
            bool hasAlpha = isalpha(ch);
            bool hasDot = ch == '.';
            ch = getChar();
            while (isdigit(ch) || isalpha(ch) || ch == '-' || ch == '+' || ch == '.') {
                if (isalpha(ch)) {
                    hasAlpha = true;
                }
                if (ch == '.') {
                    if (hasDot) {
                        hasAlpha = true;
                    }
                    hasDot = true;
                }
                content.push_back(ch);
                ch = getChar();
            }
            backChar(ch);
            if (hasAlpha) {
                return { TypeID::get<std::string>(), content };
            } else if (hasDot) {
                return { TypeID::get<float>(), content };
            } else {
                return { TypeID::get<int>(), content };
            }
        } else {
            return { TypeID::get<void>(), content };
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rsi, %r13
movq %rdi, %r14
leaq 0x30(%rsi), %r15
leaq 0x481db(%rip), %rsi     # 0xcf576
movq %r15, %rdi
callq 0x27854
testl %eax, %eax
je 0x873f9
movups 0x10(%r13), %xmm0
movups 0x20(%r13), %xmm1
movups %xmm1, 0x10(%r14)
movups %xmm0, (%r14)
leaq 0x20(%r14), %r12
movq %r13, %rbx
leaq 0x30(%r14), %r13
movq %r13, 0x20(%r14)
movq 0x30(%rbx), %rsi
movq 0x38(%rbx), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0x36954
movq 0x38(%rbx), %rdx
leaq 0x4818f(%rip), %rcx     # 0xcf576
movq %r15, %rdi
xorl %esi, %esi
xorl %r8d, %r8d
callq 0x26f38
jmp 0x877de
movb 0x8(%r13), %bpl
testb %bpl, %bpl
je 0x87409
movb $0x0, 0x8(%r13)
jmp 0x87414
movq (%r13), %rdi
callq 0x113e0
movl %eax, %ebp
movabsq $0x100002600, %r15      # imm = 0x100002600
movzbl %bpl, %ebx
cmpb $0x20, %bl
ja 0x8744a
btq %rbx, %r15
jae 0x8744a
movb 0x8(%r13), %bpl
testb %bpl, %bpl
je 0x8743d
movb $0x0, 0x8(%r13)
jmp 0x8741e
movq (%r13), %rdi
callq 0x113e0
movl %eax, %ebp
jmp 0x8741e
cmpl $0xff, %ebx
jne 0x87499
movabsq $0x3173c900e37ae1df, %rax # imm = 0x3173C900E37AE1DF
movq %rax, (%r14)
movq $0x4, 0x8(%r14)
leaq 0x348e9(%rip), %rax     # 0xbbd57
movq %rax, 0x10(%r14)
movw $0x0, 0x18(%r14)
leaq 0x20(%r14), %rdi
leaq 0x30(%r14), %rax
movq %rax, 0x20(%r14)
leaq 0x480ea(%rip), %rdx     # 0xcf576
movq %rdx, %rsi
callq 0x27370
jmp 0x877de
movsbl %bpl, %r15d
leaq 0x18(%rsp), %r12
movq %r12, -0x10(%r12)
movq $0x0, -0x8(%r12)
movb $0x0, (%r12)
leaq 0x8(%rsp), %rdi
movl $0x1, %ecx
xorl %esi, %esi
xorl %edx, %edx
movl %r15d, %r8d
callq 0x881a6
cmpb $0x22, %bpl
jne 0x874fa
leaq 0x8(%rsp), %rdi
movq 0x8(%rdi), %rdx
leaq 0x48095(%rip), %rcx     # 0xcf576
xorl %esi, %esi
xorl %r8d, %r8d
callq 0x26f38
movb 0x8(%r13), %al
testb %al, %al
je 0x87554
movb $0x0, 0x8(%r13)
jmp 0x8755d
leal -0x30(%r15), %eax
cmpl $0xa, %eax
jb 0x8752d
movl %r15d, %edi
callq 0x114e0
testl %eax, %eax
jne 0x8752d
cmpb $0x2e, %bpl
ja 0x877f0
movabsq $0x680000000000, %rax   # imm = 0x680000000000
btq %rbx, %rax
jae 0x877f0
movl %r15d, %edi
callq 0x114e0
movl %eax, %r15d
movb 0x8(%r13), %r12b
testb %r12b, %r12b
movq %r14, 0x28(%rsp)
je 0x87619
movb $0x0, 0x8(%r13)
jmp 0x87625
movq (%r13), %rdi
callq 0x113e0
movl $0x9, %ebx
leaq 0x8(%rsp), %r15
cmpb $0x5c, %al
je 0x87575
movzbl %al, %ecx
cmpl $0x22, %ecx
jne 0x875aa
jmp 0x875cf
movb 0x8(%r13), %cl
testb %cl, %cl
je 0x87584
movb $0x0, 0x8(%r13)
jmp 0x8758f
movq (%r13), %rdi
callq 0x113e0
movl %eax, %ecx
cmpb $0x6e, %cl
je 0x875a0
movzbl %cl, %eax
cmpl $0x72, %eax
jne 0x875a4
movb $0xd, %al
jmp 0x875aa
movb $0xa, %al
jmp 0x875aa
cmpb $0x74, %cl
cmovel %ebx, %eax
movsbl %al, %esi
movq %r15, %rdi
callq 0x6e3f2
movb 0x8(%r13), %al
testb %al, %al
je 0x875c4
movb $0x0, 0x8(%r13)
jmp 0x87567
movq (%r13), %rdi
callq 0x113e0
jmp 0x87567
movabsq $-0x22bfd0b2172c96aa, %rax # imm = 0xDD402F4DE8D36956
movq %rax, (%r14)
movq $0x17, 0x8(%r14)
leaq 0x34847(%rip), %rax     # 0xbbe32
movq %rax, 0x10(%r14)
movw $0x0, 0x18(%r14)
leaq 0x20(%r14), %rdi
leaq 0x30(%r14), %rax
movq %rax, 0x20(%r14)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
callq 0x36954
jmp 0x877c7
movq (%r13), %rdi
callq 0x113e0
movl %eax, %r12d
movq %r13, 0x30(%rsp)
cmpb $0x2e, %bpl
sete %bl
testl %r15d, %r15d
setne %bpl
movsbl %r12b, %r13d
leal -0x30(%r13), %eax
cmpl $0xa, %eax
jb 0x8766b
movl %r13d, %edi
callq 0x114e0
testl %eax, %eax
jne 0x8766b
cmpb $0x2e, %r12b
ja 0x876d1
movzbl %r12b, %eax
movabsq $0x680000000000, %rcx   # imm = 0x680000000000
btq %rax, %rcx
jae 0x876d1
movl %r13d, %edi
callq 0x114e0
testl %eax, %eax
setne %r14b
cmpb $0x2e, %r12b
sete %r12b
movzbl %bl, %r15d
movl $0x1, %eax
cmovel %eax, %r15d
leaq 0x8(%rsp), %rdi
movl %r13d, %esi
callq 0x6e3f2
movq 0x30(%rsp), %rax
andb %bl, %r12b
orb %r12b, %bpl
orb %r14b, %bpl
movb 0x8(%rax), %r12b
testb %r12b, %r12b
je 0x876be
movb $0x0, 0x8(%rax)
movl %r15d, %ebx
jmp 0x87638
movq (%rax), %rdi
callq 0x113e0
movl %eax, %r12d
movl %r15d, %ebx
jmp 0x87638
movq 0x30(%rsp), %rax
movb %r12b, 0x8(%rax)
testb $0x1, %bpl
je 0x87734
movabsq $-0x22bfd0b2172c96aa, %rax # imm = 0xDD402F4DE8D36956
movq 0x28(%rsp), %r14
movq %rax, (%r14)
movq $0x17, 0x8(%r14)
leaq 0x34731(%rip), %rax     # 0xbbe32
movq %rax, 0x10(%r14)
movw $0x0, 0x18(%r14)
leaq 0x20(%r14), %rdi
leaq 0x30(%r14), %rax
movq %rax, 0x20(%r14)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
leaq 0x18(%rsp), %r12
callq 0x36954
jmp 0x877c7
movq 0x28(%rsp), %r14
leaq 0x20(%r14), %rdi
leaq 0x30(%r14), %rax
testb $0x1, %bl
leaq 0x18(%rsp), %r12
je 0x8778a
movabsq $-0x5ff59d56bd4dfe9b, %rcx # imm = 0xA00A62A942B20165
movq %rcx, (%r14)
movq $0x5, 0x8(%r14)
leaq 0x34d7f(%rip), %rcx     # 0xbc4e6
movq %rcx, 0x10(%r14)
movw $0x0, 0x18(%r14)
movq %rax, 0x20(%r14)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
callq 0x36954
jmp 0x877c7
movabsq $0x2b9fff192bd4c83e, %rcx # imm = 0x2B9FFF192BD4C83E
movq %rcx, (%r14)
movq $0x3, 0x8(%r14)
leaq 0x34823(%rip), %rcx     # 0xbbfc9
movq %rcx, 0x10(%r14)
movw $0x0, 0x18(%r14)
movq %rax, 0x20(%r14)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
callq 0x36954
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x877de
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x11360
movq %r14, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movabsq $0x3173c900e37ae1df, %rax # imm = 0x3173C900E37AE1DF
movq %rax, (%r14)
movq $0x4, 0x8(%r14)
leaq 0x3454b(%rip), %rax     # 0xbbd57
movq %rax, 0x10(%r14)
movw $0x0, 0x18(%r14)
leaq 0x20(%r14), %rdi
leaq 0x30(%r14), %rax
movq %rax, 0x20(%r14)
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
addq %rsi, %rdx
callq 0x36954
jmp 0x877c7
jmp 0x87859
jmp 0x87859
jmp 0x87859
jmp 0x87859
jmp 0x87859
jmp 0x87859
jmp 0x87859
movq %rax, %rbx
movq (%r12), %rdi
cmpq %r13, %rdi
je 0x87878
movq (%r13), %rsi
jmp 0x87870
jmp 0x87859
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x87878
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x11360
movq %rbx, %rdi
callq 0x11580