// File: pointwiseproduct[P]untyped_lambda/untyped_lambda.cpp
// Function: main
int main(int argc, char *argv[]){
    if(argc <= 1){
        launch_interpreter();
        return 0;
    }

    program_switchs.insert("-b");
    for(int i = 2; i < argc; ++i){
        std::string str(argv[i]);
        if(str == "-o"){
            auto iter = program_switchs.find("-b");
            if(iter != program_switchs.end()){
                program_switchs.erase(iter);
            }
        }else if(str == "-b"){
            auto iter = program_switchs.find("-o");
            if(iter != program_switchs.end()){
                program_switchs.erase(iter);
            }
        }
        program_switchs.insert(str);
    }

    if(program_switchs.find("-h") != program_switchs.end() || program_switchs.find("--help") != program_switchs.end()){
        std::cout << "untyped lambda calcus ver 1.0.0" << std::endl;
        std::cout << "usage:" << std::endl;
        std::cout << "  untyped_lambda ifile_path.txt {option}" << std::endl;
        std::cout << std::endl;
        std::cout << "option:" << std::endl;
        // �w���v���b�Z�[�W���\�������D
        std::cout << "  --help:" << std::endl;
        std::cout << "      -h: show this message." << std::endl;
        // �e���̕]���O�̒l���\�������D
        std::cout << "      -b: show before evaluation of fomulas. [default]" << std::endl;
        // �e���̕]�����ʂ̂ݕ\�������D
        std::cout << "      -o: show only evaluation results." << std::endl;
        // ���̕]�����ƂɈꎞ���~�����D
        std::cout << "      -s: step evaluation." << std::endl << std::endl;

        return 0;
    }

    try{
        const fs::path ifile_path(argv[1]);
        check_file_exist(ifile_path);
        std::vector<char> str = open_file(ifile_path);
        auto a = tokenize_phase1::tokenize(str);
        auto b = tokenize_phase2::tokenize(a);
        if(!parsing_phase::lines(b.begin())){
            throw parsing_failed();
        }

        bool program_swtich_s = program_switchs.find("-s") != program_switchs.end();
        bool program_swtich_b = program_switchs.find("-b") != program_switchs.end();
        for(auto &i : internal_data::lines){
            std::unique_ptr<internal_data::expr> q((i->copy()));
            if(program_swtich_b || program_swtich_s){
                std::cout << i->to_str() << std::endl;
                if(program_swtich_s){
                    waiting();
                }
                internal_data::global_variable_replace(q);
                std::cout << q->to_str() << std::endl;
                if(program_swtich_s){
                    waiting();
                }
            }
            while(true){
                try{
                    int nest_level = 0;
                    bool mod = false;
                    //internal_data::eval2(q, true, mod, true);
                    if(internal_data::lo_most_reduction(q)){
                        throw internal_data::step_out();
                    }
                }catch(internal_data::step_out){
                    if(program_swtich_s){
                        std::cout << q->to_str() << "." << std::endl;
                        waiting();
                    }
                    continue;
                }
                break;
            }
            if(program_swtich_b || program_swtich_s){
                std::cout << "-> ";
            }
            std::cout << q->to_str() << "." << std::endl;
        }
    }catch(app_exception e){
        std::cerr << e.what() << std::endl;
    }

    return 0;
}

// Assembly:
subq $0x488, %rsp            # imm = 0x488
movl $0x0, 0x484(%rsp)
movl %edi, 0x480(%rsp)
movq %rsi, 0x478(%rsp)
cmpl $0x1, 0x480(%rsp)
jg 0x96f0
callq 0x8f10
movl $0x0, 0x484(%rsp)
jmp 0xa8c2
leaq 0x457(%rsp), %rdi
movq %rdi, 0x130(%rsp)
callq 0x55d0
movq 0x130(%rsp), %rdx
leaq 0x11a8f(%rip), %rsi     # 0x1b1a3
leaq 0x458(%rsp), %rdi
callq 0x54b0
jmp 0x9723
leaq 0x1cc46(%rip), %rdi     # 0x26370
leaq 0x458(%rsp), %rsi
callq 0xc970
movb %dl, 0x127(%rsp)
movq %rax, 0x128(%rsp)
jmp 0x9748
movb 0x127(%rsp), %al
movq 0x128(%rsp), %rcx
movq %rcx, 0x430(%rsp)
movb %al, 0x438(%rsp)
leaq 0x458(%rsp), %rdi
callq 0x5210
leaq 0x457(%rsp), %rdi
callq 0x53c0
movl $0x2, 0x42c(%rsp)
movl 0x42c(%rsp), %eax
cmpl 0x480(%rsp), %eax
jge 0x9bcb
movq 0x478(%rsp), %rax
movslq 0x42c(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0x110(%rsp)
leaq 0x407(%rsp), %rdi
movq %rdi, 0x118(%rsp)
callq 0x55d0
movq 0x110(%rsp), %rsi
movq 0x118(%rsp), %rdx
leaq 0x408(%rsp), %rdi
callq 0x54b0
jmp 0x97ef
leaq 0x407(%rsp), %rdi
callq 0x53c0
leaq 0x119a3(%rip), %rsi     # 0x1b1a6
leaq 0x408(%rsp), %rdi
callq 0xc730
movb %al, 0x10f(%rsp)
jmp 0x9819
movb 0x10f(%rsp), %al
testb $0x1, %al
jne 0x9829
jmp 0x99ef
leaq 0x3d7(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0x55d0
movq 0x100(%rsp), %rdx
leaq 0x11956(%rip), %rsi     # 0x1b1a3
leaq 0x3d8(%rsp), %rdi
callq 0x54b0
jmp 0x985c
leaq 0x1cb0d(%rip), %rdi     # 0x26370
leaq 0x3d8(%rsp), %rsi
callq 0xc9d0
movq %rax, 0xf8(%rsp)
jmp 0x987a
movq 0xf8(%rsp), %rax
movq %rax, 0x3f8(%rsp)
leaq 0x3d8(%rsp), %rdi
callq 0x5210
leaq 0x3d7(%rsp), %rdi
callq 0x53c0
leaq 0x1cac5(%rip), %rdi     # 0x26370
callq 0xca30
movq %rax, 0x3c8(%rsp)
leaq 0x3f8(%rsp), %rdi
leaq 0x3c8(%rsp), %rsi
callq 0xca10
testb $0x1, %al
jne 0x98d6
jmp 0x99ea
movq 0x3f8(%rsp), %rax
movq %rax, 0x3c0(%rsp)
movq 0x3c0(%rsp), %rsi
leaq 0x1ca7b(%rip), %rdi     # 0x26370
callq 0xca60
movq %rax, 0xf0(%rsp)
jmp 0x9904
movq 0xf0(%rsp), %rax
movq %rax, 0x3b8(%rsp)
jmp 0x99ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0x9950
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
leaq 0x458(%rsp), %rdi
callq 0x5210
leaq 0x457(%rsp), %rdi
callq 0x53c0
jmp 0xa8d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
leaq 0x407(%rsp), %rdi
callq 0x53c0
jmp 0xa8d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0x9bb9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0x99d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
leaq 0x3d8(%rsp), %rdi
callq 0x5210
leaq 0x3d7(%rsp), %rdi
callq 0x53c0
jmp 0x9bb9
jmp 0x9b53
leaq 0x117ad(%rip), %rsi     # 0x1b1a3
leaq 0x408(%rsp), %rdi
callq 0xc730
movb %al, 0xef(%rsp)
jmp 0x9a0c
movb 0xef(%rsp), %al
testb $0x1, %al
jne 0x9a1c
jmp 0x9b51
leaq 0x38f(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x55d0
movq 0xe0(%rsp), %rdx
leaq 0x11766(%rip), %rsi     # 0x1b1a6
leaq 0x390(%rsp), %rdi
callq 0x54b0
jmp 0x9a4f
leaq 0x1c91a(%rip), %rdi     # 0x26370
leaq 0x390(%rsp), %rsi
callq 0xc9d0
movq %rax, 0xd8(%rsp)
jmp 0x9a6d
movq 0xd8(%rsp), %rax
movq %rax, 0x3b0(%rsp)
leaq 0x390(%rsp), %rdi
callq 0x5210
leaq 0x38f(%rsp), %rdi
callq 0x53c0
leaq 0x1c8d2(%rip), %rdi     # 0x26370
callq 0xca30
movq %rax, 0x380(%rsp)
leaq 0x3b0(%rsp), %rdi
leaq 0x380(%rsp), %rsi
callq 0xca10
testb $0x1, %al
jne 0x9ac9
jmp 0x9b4f
movq 0x3b0(%rsp), %rax
movq %rax, 0x378(%rsp)
movq 0x378(%rsp), %rsi
leaq 0x1c888(%rip), %rdi     # 0x26370
callq 0xca60
movq %rax, 0xd0(%rsp)
jmp 0x9af7
movq 0xd0(%rsp), %rax
movq %rax, 0x370(%rsp)
jmp 0x9b4f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0x9b40
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
leaq 0x390(%rsp), %rdi
callq 0x5210
leaq 0x38f(%rsp), %rdi
callq 0x53c0
jmp 0x9bb9
jmp 0x9b51
jmp 0x9b53
leaq 0x1c816(%rip), %rdi     # 0x26370
leaq 0x408(%rsp), %rsi
callq 0xcab0
movb %dl, 0xc7(%rsp)
movq %rax, 0xc8(%rsp)
jmp 0x9b78
movb 0xc7(%rsp), %al
movq 0xc8(%rsp), %rcx
movq %rcx, 0x360(%rsp)
movb %al, 0x368(%rsp)
leaq 0x408(%rsp), %rdi
callq 0x5210
movl 0x42c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x42c(%rsp)
jmp 0x978b
leaq 0x408(%rsp), %rdi
callq 0x5210
jmp 0xa8d1
leaq 0x337(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x55d0
movq 0xb8(%rsp), %rdx
movb $0x0, 0x2fe(%rsp)
movb $0x0, 0x2fd(%rsp)
leaq 0x115aa(%rip), %rsi     # 0x1b1a9
leaq 0x338(%rsp), %rdi
callq 0x54b0
jmp 0x9c0e
leaq 0x1c75b(%rip), %rdi     # 0x26370
leaq 0x338(%rsp), %rsi
callq 0xc9d0
movq %rax, 0xb0(%rsp)
jmp 0x9c2c
movq 0xb0(%rsp), %rax
movq %rax, 0x358(%rsp)
leaq 0x1c72d(%rip), %rdi     # 0x26370
callq 0xca30
movq %rax, 0x328(%rsp)
leaq 0x358(%rsp), %rdi
leaq 0x328(%rsp), %rsi
callq 0xca10
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, 0xaf(%rsp)
jne 0x9d1a
leaq 0x2ff(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x55d0
movq 0xa0(%rsp), %rdx
movb $0x1, 0x2fe(%rsp)
leaq 0x11507(%rip), %rsi     # 0x1b1ac
leaq 0x300(%rsp), %rdi
callq 0x54b0
jmp 0x9cb4
movb $0x1, 0x2fd(%rsp)
leaq 0x1c6ad(%rip), %rdi     # 0x26370
leaq 0x300(%rsp), %rsi
callq 0xc9d0
movq %rax, 0x98(%rsp)
jmp 0x9cda
movq 0x98(%rsp), %rax
movq %rax, 0x320(%rsp)
leaq 0x1c67f(%rip), %rdi     # 0x26370
callq 0xca30
movq %rax, 0x2f0(%rsp)
leaq 0x320(%rsp), %rdi
leaq 0x2f0(%rsp), %rsi
callq 0xca10
movb %al, 0xaf(%rsp)
movb 0xaf(%rsp), %al
movb %al, 0x97(%rsp)
testb $0x1, 0x2fd(%rsp)
jne 0x9d34
jmp 0x9d41
leaq 0x300(%rsp), %rdi
callq 0x5210
testb $0x1, 0x2fe(%rsp)
jne 0x9d4d
jmp 0x9d5a
leaq 0x2ff(%rsp), %rdi
callq 0x53c0
leaq 0x338(%rsp), %rdi
callq 0x5210
leaq 0x337(%rsp), %rdi
callq 0x53c0
movb 0x97(%rsp), %al
testb $0x1, %al
jne 0x9d84
jmp 0x9f96
movq 0x1c23d(%rip), %rdi     # 0x25fc8
leaq 0x11421(%rip), %rsi     # 0x1b1b3
callq 0x5370
movq %rax, %rdi
movq 0x1c207(%rip), %rsi     # 0x25fa8
callq 0x53a0
movq 0x1c21b(%rip), %rdi     # 0x25fc8
leaq 0x1141f(%rip), %rsi     # 0x1b1d3
callq 0x5370
movq %rax, %rdi
movq 0x1c1e5(%rip), %rsi     # 0x25fa8
callq 0x53a0
movq 0x1c1f9(%rip), %rdi     # 0x25fc8
leaq 0x11404(%rip), %rsi     # 0x1b1da
callq 0x5370
movq %rax, %rdi
movq 0x1c1c3(%rip), %rsi     # 0x25fa8
callq 0x53a0
movq 0x1c1d7(%rip), %rdi     # 0x25fc8
movq 0x1c1b0(%rip), %rsi     # 0x25fa8
callq 0x53a0
movq 0x1c1c4(%rip), %rdi     # 0x25fc8
leaq 0x113f8(%rip), %rsi     # 0x1b203
callq 0x5370
movq %rax, %rdi
movq 0x1c18e(%rip), %rsi     # 0x25fa8
callq 0x53a0
movq 0x1c1a2(%rip), %rdi     # 0x25fc8
leaq 0x113de(%rip), %rsi     # 0x1b20b
callq 0x5370
movq %rax, %rdi
movq 0x1c16c(%rip), %rsi     # 0x25fa8
callq 0x53a0
movq 0x1c180(%rip), %rdi     # 0x25fc8
leaq 0x113c6(%rip), %rsi     # 0x1b215
callq 0x5370
movq %rax, %rdi
movq 0x1c14a(%rip), %rsi     # 0x25fa8
callq 0x53a0
movq 0x1c15e(%rip), %rdi     # 0x25fc8
leaq 0x113c1(%rip), %rsi     # 0x1b232
callq 0x5370
movq %rax, %rdi
movq 0x1c128(%rip), %rsi     # 0x25fa8
callq 0x53a0
movq 0x1c13c(%rip), %rdi     # 0x25fc8
leaq 0x113d6(%rip), %rsi     # 0x1b269
callq 0x5370
movq %rax, %rdi
movq 0x1c106(%rip), %rsi     # 0x25fa8
callq 0x53a0
movq 0x1c11a(%rip), %rdi     # 0x25fc8
leaq 0x113dc(%rip), %rsi     # 0x1b291
callq 0x5370
movq %rax, %rdi
movq 0x1c0e4(%rip), %rsi     # 0x25fa8
callq 0x53a0
movq %rax, %rdi
movq 0x1c0d5(%rip), %rsi     # 0x25fa8
callq 0x53a0
movl $0x0, 0x484(%rsp)
jmp 0xa8c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0x9f84
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0x9f77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0x9f5c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
testb $0x1, 0x2fd(%rsp)
jne 0x9f4d
jmp 0x9f5a
leaq 0x300(%rsp), %rdi
callq 0x5210
jmp 0x9f5c
testb $0x1, 0x2fe(%rsp)
jne 0x9f68
jmp 0x9f75
leaq 0x2ff(%rsp), %rdi
callq 0x53c0
jmp 0x9f77
leaq 0x338(%rsp), %rdi
callq 0x5210
leaq 0x337(%rsp), %rdi
callq 0x53c0
jmp 0xa8d1
movq 0x478(%rsp), %rax
movq 0x8(%rax), %rsi
leaq 0x2d0(%rsp), %rdi
callq 0xcb10
jmp 0x9fb1
leaq 0x2d0(%rsp), %rdi
callq 0x59d0
jmp 0x9fc0
leaq 0x2b8(%rsp), %rdi
leaq 0x2d0(%rsp), %rsi
callq 0x5ac0
jmp 0x9fd7
leaq 0x2a0(%rsp), %rdi
leaq 0x2b8(%rsp), %rsi
callq 0x5e90
jmp 0x9fee
leaq 0x288(%rsp), %rdi
leaq 0x2a0(%rsp), %rsi
callq 0x6520
jmp 0xa005
leaq 0x288(%rsp), %rdi
callq 0xc7f0
movq %rax, 0x278(%rsp)
leaq 0x280(%rsp), %rdi
leaq 0x278(%rsp), %rsi
callq 0xc820
movq 0x280(%rsp), %rdi
callq 0x8e30
movb %al, 0x96(%rsp)
jmp 0xa045
movb 0x96(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0xa057
jmp 0xa139
movl $0x10, %edi
callq 0x5180
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x88(%rsp)
callq 0xc860
jmp 0xa076
movq 0x88(%rsp), %rdi
leaq 0x1b893(%rip), %rsi     # 0x25918
leaq 0x2894(%rip), %rdx      # 0xc920
callq 0x5590
jmp 0xa8e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0xa801
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0xa7f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0xa7e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0xa7da
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0xa7cd
movq 0x88(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
callq 0x52a0
jmp 0xa7cd
leaq 0x247(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x55d0
movq 0x80(%rsp), %rdx
leaq 0x1114f(%rip), %rsi     # 0x1b2ac
leaq 0x248(%rsp), %rdi
callq 0x54b0
jmp 0xa16c
leaq 0x1c1fd(%rip), %rdi     # 0x26370
leaq 0x248(%rsp), %rsi
callq 0xc9d0
movq %rax, 0x78(%rsp)
jmp 0xa187
movq 0x78(%rsp), %rax
movq %rax, 0x268(%rsp)
leaq 0x1c1d5(%rip), %rdi     # 0x26370
callq 0xca30
movq %rax, 0x238(%rsp)
leaq 0x268(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0xca10
movb %al, 0x6f(%rsp)
leaq 0x248(%rsp), %rdi
callq 0x5210
leaq 0x247(%rsp), %rdi
callq 0x53c0
movb 0x6f(%rsp), %al
movb %al, 0x277(%rsp)
leaq 0x207(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0x55d0
movq 0x70(%rsp), %rdx
leaq 0x10f9f(%rip), %rsi     # 0x1b1a3
leaq 0x208(%rsp), %rdi
callq 0x54b0
jmp 0xa213
leaq 0x1c156(%rip), %rdi     # 0x26370
leaq 0x208(%rsp), %rsi
callq 0xc9d0
movq %rax, 0x60(%rsp)
jmp 0xa22e
movq 0x60(%rsp), %rax
movq %rax, 0x228(%rsp)
leaq 0x1c12e(%rip), %rdi     # 0x26370
callq 0xca30
movq %rax, 0x1f8(%rsp)
leaq 0x228(%rsp), %rdi
leaq 0x1f8(%rsp), %rsi
callq 0xca10
movb %al, 0x5f(%rsp)
leaq 0x208(%rsp), %rdi
callq 0x5210
leaq 0x207(%rsp), %rdi
callq 0x53c0
movb 0x5f(%rsp), %al
andb $0x1, %al
movb %al, 0x237(%rsp)
leaq 0x1c13a(%rip), %rax     # 0x263d0
movq %rax, 0x1f0(%rsp)
leaq 0x1c12b(%rip), %rdi     # 0x263d0
callq 0xbad0
movq %rax, 0x1e8(%rsp)
leaq 0x1c117(%rip), %rdi     # 0x263d0
callq 0xbb00
movq %rax, 0x1e0(%rsp)
leaq 0x1e8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0xbb30
testb $0x1, %al
jne 0xa2e4
jmp 0xa794
leaq 0x1e8(%rsp), %rdi
callq 0xbb70
movq %rax, 0x1d8(%rsp)
movq 0x1d8(%rsp), %rdi
callq 0xb9c0
movq %rax, %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
callq *%rax
movq %rax, 0x50(%rsp)
jmp 0xa319
movq 0x50(%rsp), %rsi
leaq 0x1d0(%rsp), %rdi
callq 0xbeb0
testb $0x1, 0x237(%rsp)
jne 0xa343
testb $0x1, 0x277(%rsp)
je 0xa534
movq 0x1d8(%rsp), %rdi
callq 0xb9c0
movq %rax, %rsi
movq (%rsi), %rax
movq 0x20(%rax), %rax
leaq 0x1b0(%rsp), %rdi
callq *%rax
jmp 0xa366
movq 0x1bc5b(%rip), %rdi     # 0x25fc8
leaq 0x1b0(%rsp), %rsi
callq 0x5340
movq %rax, 0x48(%rsp)
jmp 0xa381
movq 0x48(%rsp), %rdi
movq 0x1bc1b(%rip), %rsi     # 0x25fa8
callq 0x53a0
jmp 0xa394
leaq 0x1b0(%rsp), %rdi
callq 0x5210
testb $0x1, 0x277(%rsp)
je 0xa48c
callq 0x8f00
jmp 0xa3b6
jmp 0xa48c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0xa3f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
leaq 0x248(%rsp), %rdi
callq 0x5210
leaq 0x247(%rsp), %rdi
callq 0x53c0
jmp 0xa7cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0xa43b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
leaq 0x208(%rsp), %rdi
callq 0x5210
leaq 0x207(%rsp), %rdi
callq 0x53c0
jmp 0xa7cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0xa785
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
leaq 0x1b0(%rsp), %rdi
callq 0x5210
jmp 0xa785
leaq 0x1d0(%rsp), %rdi
callq 0x6c90
jmp 0xa49b
leaq 0x1d0(%rsp), %rdi
callq 0xb9c0
movq %rax, %rsi
movq (%rsi), %rax
movq 0x20(%rax), %rax
leaq 0x190(%rsp), %rdi
callq *%rax
jmp 0xa4be
movq 0x1bb03(%rip), %rdi     # 0x25fc8
leaq 0x190(%rsp), %rsi
callq 0x5340
movq %rax, 0x40(%rsp)
jmp 0xa4d9
movq 0x40(%rsp), %rdi
movq 0x1bac3(%rip), %rsi     # 0x25fa8
callq 0x53a0
jmp 0xa4ec
leaq 0x190(%rsp), %rdi
callq 0x5210
testb $0x1, 0x277(%rsp)
je 0xa532
callq 0x8f00
jmp 0xa50a
jmp 0xa532
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
leaq 0x190(%rsp), %rdi
callq 0x5210
jmp 0xa785
jmp 0xa534
jmp 0xa536
jmp 0xa538
movl $0x0, 0x18c(%rsp)
movb $0x0, 0x18b(%rsp)
leaq 0x1d0(%rsp), %rdi
callq 0x6e20
movb %al, 0x3f(%rsp)
jmp 0xa55e
movb 0x3f(%rsp), %al
testb $0x1, %al
jne 0xa56b
jmp 0xa64f
movl $0x1, %edi
callq 0x5180
movq %rax, %rdi
leaq 0x1b3b1(%rip), %rsi     # 0x25930
xorl %eax, %eax
movl %eax, %edx
callq 0x5590
jmp 0xa8e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
movl 0x444(%rsp), %eax
movl $0x2, %ecx
cmpl %ecx, %eax
jne 0xa785
movq 0x448(%rsp), %rdi
callq 0x5130
testb $0x1, 0x277(%rsp)
je 0xa68a
leaq 0x1d0(%rsp), %rdi
callq 0xb9c0
movq %rax, %rsi
movq (%rsi), %rax
movq 0x20(%rax), %rax
leaq 0x168(%rsp), %rdi
callq *%rax
jmp 0xa5f3
movq 0x1b9ce(%rip), %rdi     # 0x25fc8
leaq 0x168(%rsp), %rsi
callq 0x5340
movq %rax, 0x30(%rsp)
jmp 0xa60e
movq 0x30(%rsp), %rdi
leaq 0x10d1d(%rip), %rsi     # 0x1b337
callq 0x5370
movq %rax, 0x28(%rsp)
jmp 0xa626
movq 0x28(%rsp), %rdi
movq 0x1b976(%rip), %rsi     # 0x25fa8
callq 0x53a0
jmp 0xa639
leaq 0x168(%rsp), %rdi
callq 0x5210
callq 0x8f00
jmp 0xa64d
jmp 0xa68a
jmp 0xa6a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
jmp 0xa696
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
leaq 0x168(%rsp), %rdi
callq 0x5210
jmp 0xa696
callq 0x5570
jmp 0xa691
jmp 0xa536
callq 0x5570
jmp 0xa69d
jmp 0xa785
jmp 0xa6a4
testb $0x1, 0x237(%rsp)
jne 0xa6b8
testb $0x1, 0x277(%rsp)
je 0xa6cf
movq 0x1b909(%rip), %rdi     # 0x25fc8
leaq 0x10be9(%rip), %rsi     # 0x1b2af
callq 0x5370
jmp 0xa6cd
jmp 0xa6cf
leaq 0x1d0(%rsp), %rdi
callq 0xb9c0
movq %rax, %rsi
movq (%rsi), %rax
movq 0x20(%rax), %rax
leaq 0x148(%rsp), %rdi
callq *%rax
jmp 0xa6f2
movq 0x1b8cf(%rip), %rdi     # 0x25fc8
leaq 0x148(%rsp), %rsi
callq 0x5340
movq %rax, 0x20(%rsp)
jmp 0xa70d
movq 0x20(%rsp), %rdi
leaq 0x10c1e(%rip), %rsi     # 0x1b337
callq 0x5370
movq %rax, 0x18(%rsp)
jmp 0xa725
movq 0x18(%rsp), %rdi
movq 0x1b877(%rip), %rsi     # 0x25fa8
callq 0x53a0
jmp 0xa738
leaq 0x148(%rsp), %rdi
callq 0x5210
leaq 0x1d0(%rsp), %rdi
callq 0xbee0
leaq 0x1e8(%rsp), %rdi
callq 0xbb80
jmp 0xa2c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
leaq 0x148(%rsp), %rdi
callq 0x5210
leaq 0x1d0(%rsp), %rdi
callq 0xbee0
jmp 0xa7cd
leaq 0x288(%rsp), %rdi
callq 0xb940
leaq 0x2a0(%rsp), %rdi
callq 0xb5c0
leaq 0x2b8(%rsp), %rdi
callq 0xb140
leaq 0x2d0(%rsp), %rdi
callq 0xcb90
jmp 0xa88b
leaq 0x288(%rsp), %rdi
callq 0xb940
leaq 0x2a0(%rsp), %rdi
callq 0xb5c0
leaq 0x2b8(%rsp), %rdi
callq 0xb140
leaq 0x2d0(%rsp), %rdi
callq 0xcb90
movl 0x444(%rsp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0xa8d1
movq 0x448(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x5440
movq %rax, %rsi
leaq 0x138(%rsp), %rdi
callq 0xc930
jmp 0xa839
movq 0x10(%rsp), %rdi
callq 0x5130
leaq 0x138(%rsp), %rdi
callq 0x54c0
movq %rax, %rsi
movq 0x1b796(%rip), %rdi     # 0x25ff0
callq 0x5370
movq %rax, 0x8(%rsp)
jmp 0xa866
movq 0x8(%rsp), %rdi
movq 0x1b736(%rip), %rsi     # 0x25fa8
callq 0x53a0
jmp 0xa879
leaq 0x138(%rsp), %rdi
callq 0xb2e0
callq 0x5570
movl $0x0, 0x484(%rsp)
jmp 0xa8c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x448(%rsp)
movl %eax, 0x444(%rsp)
leaq 0x138(%rsp), %rdi
callq 0xb2e0
callq 0x5570
jmp 0xa8c0
jmp 0xa8d1
movl 0x484(%rsp), %eax
addq $0x488, %rsp            # imm = 0x488
retq
movq 0x448(%rsp), %rdi
callq 0x55c0
movq %rax, %rdi
callq 0xae60
nopw %cs:(%rax,%rax)