// File: tsoding[P]wcc/src/./wcc_alexer.cpp
// Function: Alexer::tokenize()
void Alexer::tokenize()
{
    auto source = input.trim_begin();
    while (source.count > 0) {
        if (is_symbol_start(*source.data)) {
            String_View token_text = chop_while(&source, is_symbol);

            if (token_text == "while"_sv) {
                tokens.push(Token {Token_Type::While, token_text});
            } else if (token_text == "func"_sv) {
                tokens.push(Token {Token_Type::Func, token_text});
            } else if (token_text == "local"_sv) {
                tokens.push(Token {Token_Type::Local, token_text});
            } else if (token_text == "if"_sv) {
                tokens.push(Token {Token_Type::If, token_text});
            } else if (token_text == "else"_sv) {
                tokens.push(Token {Token_Type::Else, token_text});
            } else if (token_text == "return"_sv) {
                tokens.push(Token {Token_Type::Return, token_text});
            } else if (token_text == "true"_sv) {
                tokens.push(Token {Token_Type::True, token_text});
            } else if (token_text == "false"_sv) {
                tokens.push(Token {Token_Type::False, token_text});
            } else {
                tokens.push(Token {Token_Type::Symbol, token_text});
            }
        } else if (isdigit(*source.data)) {
            String_View token_text = chop_while(&source, isdigit);
            tokens.push(Token {Token_Type::Number_Literal, token_text});
        } else {
            switch (*source.data) {
            case '(':
                tokens.push(Token {Token_Type::Open_Paren, chop_off(&source, 1)});
                break;
            case ')':
                tokens.push(Token {Token_Type::Closed_Paren, chop_off(&source, 1)});
                break;
            case ':':
                tokens.push(Token {Token_Type::Colon, chop_off(&source, 1)});
                break;
            case '{':
                tokens.push(Token {Token_Type::Open_Curly, chop_off(&source, 1)});
                break;
            case '}':
                tokens.push(Token {Token_Type::Closed_Curly, chop_off(&source, 1)});
                break;
            case '=':
                if (source.count > 1 && source.data[1] == '=') {
                    tokens.push(Token {Token_Type::Equals_Equals, chop_off(&source, 2)});
                } else {
                    tokens.push(Token {Token_Type::Equals, chop_off(&source, 1)});
                }
                break;
            case '>':
                tokens.push(Token {Token_Type::Greater, chop_off(&source, 1)});
                break;
            case '<':
                if (source.count > 1 && source.data[1] == '=') {
                    tokens.push(Token {Token_Type::Less_Equals, chop_off(&source, 2)});
                } else {
                    reporter.fail(static_cast<size_t>(source.data - input.data), "Unexpected character `", *source.data, "`");
                }
                break;
            case '&':
                if (source.count > 1 && source.data[1] == '&') {
                    tokens.push(Token {Token_Type::And, chop_off(&source, 2)});
                } else {
                    reporter.fail(static_cast<size_t>(source.data - input.data), "Unexpected character `", *source.data, "`");
                }
                break;
            case ',':
                tokens.push(Token {Token_Type::Comma, chop_off(&source, 1)});
                break;
            case '+':
                if (source.count > 1 && source.data[1] == '=') {
                    tokens.push(Token {Token_Type::Plus_Equals, chop_off(&source, 2)});
                } else {
                    tokens.push(Token {Token_Type::Plus, chop_off(&source, 1)});
                }
                break;
            case '*':
                tokens.push(Token {Token_Type::Asterisk, chop_off(&source, 1)});
                break;
            case '/':
                if (source.count > 1 && source.data[1] == '/') {
                    chop_while(&source, is_not_newline);
                } else {
                    reporter.fail(static_cast<size_t>(source.data - input.data), "Unexpected character `", *source.data, "`");
                }
                break;
            case '%':
                tokens.push(Token {Token_Type::Rem, chop_off(&source, 1)});
                break;
            case '-':
                if (source.count > 1 && source.data[1] == '=') {
                    tokens.push(Token {Token_Type::Minus_Equals, chop_off(&source, 2)});
                } else {
                    tokens.push(Token {Token_Type::Minus, chop_off(&source, 1)});
                }
                break;
            case ';':
                tokens.push(Token {Token_Type::Semicolon, chop_off(&source, 1)});
                break;

            default: {
                assert(input.data <= source.data);
                reporter.fail(static_cast<size_t>(source.data - input.data), "Unexpected character `", *source.data, "`");
            }
            }
        }
        source = source.trim_begin();
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x430, %rsp            # imm = 0x430
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x380(%rbp)
callq 0xa4e0
movq %rax, -0x18(%rbp)
movq %rdx, -0x10(%rbp)
cmpq $0x0, -0x18(%rbp)
jbe 0x42c9
movq -0x10(%rbp), %rax
movsbl (%rax), %edi
callq 0x3350
testb $0x1, %al
jne 0x3417
jmp 0x38e1
leaq -0x18(%rbp), %rdi
leaq -0x92(%rip), %rsi       # 0x3390
callq 0xa560
movq %rax, -0x28(%rbp)
movq %rdx, -0x20(%rbp)
leaq 0xb7e1(%rip), %rdi      # 0xec17
movl $0x5, %esi
callq 0x12e0
movq %rax, -0x38(%rbp)
movq %rdx, -0x30(%rbp)
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
leaq -0x28(%rbp), %rdi
callq 0xa0b0
testb $0x1, %al
jne 0x345f
jmp 0x34a8
movq -0x380(%rbp), %rdi
addq $0x10, %rdi
movl $0xc, -0x50(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x40(%rbp)
leaq -0x50(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x38dc
leaq 0xb76e(%rip), %rdi      # 0xec1d
movl $0x4, %esi
callq 0x12e0
movq %rax, -0x60(%rbp)
movq %rdx, -0x58(%rbp)
movq -0x60(%rbp), %rsi
movq -0x58(%rbp), %rdx
leaq -0x28(%rbp), %rdi
callq 0xa0b0
testb $0x1, %al
jne 0x34d8
jmp 0x3521
movq -0x380(%rbp), %rdi
addq $0x10, %rdi
movl $0x0, -0x78(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x68(%rbp)
leaq -0x78(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x38da
leaq 0xba51(%rip), %rdi      # 0xef79
movl $0x5, %esi
callq 0x12e0
movq %rax, -0x88(%rbp)
movq %rdx, -0x80(%rbp)
movq -0x88(%rbp), %rsi
movq -0x80(%rbp), %rdx
leaq -0x28(%rbp), %rdi
callq 0xa0b0
testb $0x1, %al
jne 0x3557
jmp 0x35ac
movq -0x380(%rbp), %rdi
addq $0x10, %rdi
movl $0x8, -0xa0(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x90(%rbp)
leaq -0xa0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x38d8
leaq 0xc709(%rip), %rdi      # 0xfcbc
movl $0x2, %esi
callq 0x12e0
movq %rax, -0xb0(%rbp)
movq %rdx, -0xa8(%rbp)
movq -0xb0(%rbp), %rsi
movq -0xa8(%rbp), %rdx
leaq -0x28(%rbp), %rdi
callq 0xa0b0
testb $0x1, %al
jne 0x35e8
jmp 0x363d
movq -0x380(%rbp), %rdi
addq $0x10, %rdi
movl $0x16, -0xc8(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0xb8(%rbp)
leaq -0xc8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x38d6
leaq 0xb5de(%rip), %rdi      # 0xec22
movl $0x4, %esi
callq 0x12e0
movq %rax, -0xd8(%rbp)
movq %rdx, -0xd0(%rbp)
movq -0xd8(%rbp), %rsi
movq -0xd0(%rbp), %rdx
leaq -0x28(%rbp), %rdi
callq 0xa0b0
testb $0x1, %al
jne 0x3679
jmp 0x36ce
movq -0x380(%rbp), %rdi
addq $0x10, %rdi
movl $0x17, -0xf0(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0xe0(%rbp)
leaq -0xf0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x38d4
leaq 0xb552(%rip), %rdi      # 0xec27
movl $0x6, %esi
callq 0x12e0
movq %rax, -0x100(%rbp)
movq %rdx, -0xf8(%rbp)
movq -0x100(%rbp), %rsi
movq -0xf8(%rbp), %rdx
leaq -0x28(%rbp), %rdi
callq 0xa0b0
testb $0x1, %al
jne 0x370a
jmp 0x375f
movq -0x380(%rbp), %rdi
addq $0x10, %rdi
movl $0x19, -0x118(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x108(%rbp)
leaq -0x118(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x38d2
leaq 0xae8e(%rip), %rdi      # 0xe5f4
movl $0x4, %esi
callq 0x12e0
movq %rax, -0x128(%rbp)
movq %rdx, -0x120(%rbp)
movq -0x128(%rbp), %rsi
movq -0x120(%rbp), %rdx
leaq -0x28(%rbp), %rdi
callq 0xa0b0
testb $0x1, %al
jne 0x379b
jmp 0x37f0
movq -0x380(%rbp), %rdi
addq $0x10, %rdi
movl $0x1a, -0x140(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x130(%rbp)
leaq -0x140(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x38d0
leaq 0xae02(%rip), %rdi      # 0xe5f9
movl $0x5, %esi
callq 0x12e0
movq %rax, -0x150(%rbp)
movq %rdx, -0x148(%rbp)
movq -0x150(%rbp), %rsi
movq -0x148(%rbp), %rdx
leaq -0x28(%rbp), %rdi
callq 0xa0b0
testb $0x1, %al
jne 0x382c
jmp 0x387e
movq -0x380(%rbp), %rdi
addq $0x10, %rdi
movl $0x1b, -0x168(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x160(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x158(%rbp)
leaq -0x168(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x38ce
movq -0x380(%rbp), %rdi
addq $0x10, %rdi
movl $0x1, -0x180(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x178(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x170(%rbp)
leaq -0x180(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x38d0
jmp 0x38d2
jmp 0x38d4
jmp 0x38d6
jmp 0x38d8
jmp 0x38da
jmp 0x38dc
jmp 0x4297
movq -0x10(%rbp), %rax
movsbl (%rax), %edi
callq 0x11e8
cmpl $0x0, %eax
je 0x396b
leaq -0x18(%rbp), %rdi
movq 0x106db(%rip), %rsi     # 0x13fd8
callq 0xa670
movq -0x380(%rbp), %rdi
movq %rax, -0x190(%rbp)
movq %rdx, -0x188(%rbp)
addq $0x10, %rdi
movl $0xb, -0x1a8(%rbp)
movq -0x190(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq -0x188(%rbp), %rax
movq %rax, -0x198(%rbp)
leaq -0x1a8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4295
movq -0x10(%rbp), %rax
movsbl (%rax), %eax
addl $-0x25, %eax
movl %eax, %ecx
movq %rcx, -0x388(%rbp)
subl $0x58, %eax
ja 0x422e
movq -0x388(%rbp), %rax
leaq 0xa74f(%rip), %rcx      # 0xe0e4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x390(%rbp)
movl $0x2, -0x1c0(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x390(%rbp), %rdi
movq %rax, -0x1b8(%rbp)
movq %rdx, -0x1b0(%rbp)
leaq -0x1c0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x398(%rbp)
movl $0x3, -0x1d8(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x398(%rbp), %rdi
movq %rax, -0x1d0(%rbp)
movq %rdx, -0x1c8(%rbp)
leaq -0x1d8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x3a0(%rbp)
movl $0x4, -0x1f0(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x3a0(%rbp), %rdi
movq %rax, -0x1e8(%rbp)
movq %rdx, -0x1e0(%rbp)
leaq -0x1f0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x3a8(%rbp)
movl $0x6, -0x208(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x3a8(%rbp), %rdi
movq %rax, -0x200(%rbp)
movq %rdx, -0x1f8(%rbp)
leaq -0x208(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x3b0(%rbp)
movl $0x7, -0x220(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x3b0(%rbp), %rdi
movq %rax, -0x218(%rbp)
movq %rdx, -0x210(%rbp)
leaq -0x220(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
cmpq $0x1, -0x18(%rbp)
jbe 0x3c25
movq -0x10(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x3d, %eax
jne 0x3c25
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x3b8(%rbp)
movl $0xa, -0x238(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x2, %esi
callq 0x32e0
movq -0x3b8(%rbp), %rdi
movq %rax, -0x230(%rbp)
movq %rdx, -0x228(%rbp)
leaq -0x238(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x3c89
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x3c0(%rbp)
movl $0x9, -0x250(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x3c0(%rbp), %rdi
movq %rax, -0x248(%rbp)
movq %rdx, -0x240(%rbp)
leaq -0x250(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x3c8(%rbp)
movl $0xd, -0x268(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x3c8(%rbp), %rdi
movq %rax, -0x260(%rbp)
movq %rdx, -0x258(%rbp)
leaq -0x268(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
cmpq $0x1, -0x18(%rbp)
jbe 0x3d71
movq -0x10(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x3d, %eax
jne 0x3d71
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x3d0(%rbp)
movl $0xe, -0x280(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x2, %esi
callq 0x32e0
movq -0x3d0(%rbp), %rdi
movq %rax, -0x278(%rbp)
movq %rdx, -0x270(%rbp)
leaq -0x280(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x3da4
movq -0x380(%rbp), %rax
movq %rax, %rdi
addq $0x28, %rdi
movq -0x10(%rbp), %rsi
movq 0x8(%rax), %rax
subq %rax, %rsi
movq -0x10(%rbp), %rax
leaq 0xae99(%rip), %rdx      # 0xec2e
leaq 0xab41(%rip), %r8       # 0xe8dd
movsbl (%rax), %ecx
callq 0xa710
jmp 0x4293
cmpq $0x1, -0x18(%rbp)
jbe 0x3e23
movq -0x10(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x26, %eax
jne 0x3e23
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x3d8(%rbp)
movl $0x14, -0x298(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x2, %esi
callq 0x32e0
movq -0x3d8(%rbp), %rdi
movq %rax, -0x290(%rbp)
movq %rdx, -0x288(%rbp)
leaq -0x298(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x3e56
movq -0x380(%rbp), %rax
movq %rax, %rdi
addq $0x28, %rdi
movq -0x10(%rbp), %rsi
movq 0x8(%rax), %rax
subq %rax, %rsi
movq -0x10(%rbp), %rax
leaq 0xade7(%rip), %rdx      # 0xec2e
leaq 0xaa8f(%rip), %r8       # 0xe8dd
movsbl (%rax), %ecx
callq 0xa710
jmp 0x4293
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x3e0(%rbp)
movl $0x5, -0x2b0(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x3e0(%rbp), %rdi
movq %rax, -0x2a8(%rbp)
movq %rdx, -0x2a0(%rbp)
leaq -0x2b0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
cmpq $0x1, -0x18(%rbp)
jbe 0x3f3e
movq -0x10(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x3d, %eax
jne 0x3f3e
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x3e8(%rbp)
movl $0x11, -0x2c8(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x2, %esi
callq 0x32e0
movq -0x3e8(%rbp), %rdi
movq %rax, -0x2c0(%rbp)
movq %rdx, -0x2b8(%rbp)
leaq -0x2c8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x3fa2
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x3f0(%rbp)
movl $0xf, -0x2e0(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x3f0(%rbp), %rdi
movq %rax, -0x2d8(%rbp)
movq %rdx, -0x2d0(%rbp)
leaq -0x2e0(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x3f8(%rbp)
movl $0x18, -0x2f8(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x3f8(%rbp), %rdi
movq %rax, -0x2f0(%rbp)
movq %rdx, -0x2e8(%rbp)
leaq -0x2f8(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
cmpq $0x1, -0x18(%rbp)
jbe 0x4044
movq -0x10(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x2f, %eax
jne 0x4044
leaq -0x18(%rbp), %rdi
leaq -0xcff(%rip), %rsi      # 0x3330
callq 0xa560
movq %rax, -0x308(%rbp)
movq %rdx, -0x300(%rbp)
jmp 0x4077
movq -0x380(%rbp), %rax
movq %rax, %rdi
addq $0x28, %rdi
movq -0x10(%rbp), %rsi
movq 0x8(%rax), %rax
subq %rax, %rsi
movq -0x10(%rbp), %rax
leaq 0xabc6(%rip), %rdx      # 0xec2e
leaq 0xa86e(%rip), %r8       # 0xe8dd
movsbl (%rax), %ecx
callq 0xa710
jmp 0x4293
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x400(%rbp)
movl $0x15, -0x320(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x400(%rbp), %rdi
movq %rax, -0x318(%rbp)
movq %rdx, -0x310(%rbp)
leaq -0x320(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
cmpq $0x1, -0x18(%rbp)
jbe 0x415f
movq -0x10(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x3d, %eax
jne 0x415f
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x408(%rbp)
movl $0x10, -0x338(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x2, %esi
callq 0x32e0
movq -0x408(%rbp), %rdi
movq %rax, -0x330(%rbp)
movq %rdx, -0x328(%rbp)
leaq -0x338(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x41c3
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x410(%rbp)
movl $0x12, -0x350(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x410(%rbp), %rdi
movq %rax, -0x348(%rbp)
movq %rdx, -0x340(%rbp)
leaq -0x350(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
movq -0x380(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x418(%rbp)
movl $0x13, -0x368(%rbp)
leaq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0x32e0
movq -0x418(%rbp), %rdi
movq %rax, -0x360(%rbp)
movq %rdx, -0x358(%rbp)
leaq -0x368(%rbp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rax
movq %rax, 0x10(%rsp)
callq 0xa5f0
jmp 0x4293
movq -0x380(%rbp), %rax
movq 0x8(%rax), %rax
cmpq -0x10(%rbp), %rax
ja 0x4241
jmp 0x4260
leaq 0xa9fd(%rip), %rdi      # 0xec45
leaq 0xaa10(%rip), %rsi      # 0xec5f
movl $0xb2, %edx
leaq 0xaa19(%rip), %rcx      # 0xec74
callq 0x10c0
movq -0x380(%rbp), %rax
movq %rax, %rdi
addq $0x28, %rdi
movq -0x10(%rbp), %rsi
movq 0x8(%rax), %rax
subq %rax, %rsi
movq -0x10(%rbp), %rax
leaq 0xa9aa(%rip), %rdx      # 0xec2e
leaq 0xa652(%rip), %r8       # 0xe8dd
movsbl (%rax), %ecx
callq 0xa710
jmp 0x4295
jmp 0x4297
leaq -0x18(%rbp), %rdi
callq 0xa4e0
movq %rax, -0x378(%rbp)
movq %rdx, -0x370(%rbp)
movq -0x378(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x370(%rbp), %rax
movq %rax, -0x10(%rbp)
jmp 0x33f7
addq $0x430, %rsp            # imm = 0x430
popq %rbp
retq
nopw %cs:(%rax,%rax)