// File: Davidc2525[P]Leaf/compiler/backend/x86_64_linux/generator.cpp
// Function: x86_64_linux_generator_visitor::visit(LEAF::AST::TryStatementNode*)
void x86_64_linux_generator_visitor::visit(TryStatementNode *_try_)
{
    UPDATE_STATICS
    Section *st = assembly->get_program()->section(Sections::text);

    DInstruccion *i = new DInstruccion(";start try ");
    i->add_operand(new RegisterOperand(_try_->end_label->c_str()));
    st->add(i);

    //prepare try instruccion

    bool rax_bussy = rp->isBussy(rp->get_by_name("rax")->id);
    if (rax_bussy)
    {
        i = new DInstruccion("push ");
        i->add_operand(new RegisterOperand("rax"));
        st->add(i);
    }

    i = new DInstruccion("new_list");
    i->add_operand(new InmediateIntOperand(_try_->_caths_.size()));
    st->add(i);

    Register *tmp = rp->reserve();
    i = new DInstruccion("mov");
    i->add_operand(new RegisterOperand(tmp->getName()));
    i->add_operand(new RegisterOperand("rax"));
    st->add(i);

    vector<ASTU>::iterator _catchs_ = _try_->_caths_.begin();
    int index = 0;
    for (; _catchs_ != _try_->_caths_.end(); _catchs_++)
    {
        i = new DInstruccion("new_handler");
        int type_id = symbol_table::get_id(((CatchStatementNode *)(*_catchs_))->ex_var->obj->type, 0);
        i->add_operand(new InmediateIntOperand(type_id));
        string *label = ((CatchStatementNode *)(*_catchs_))->start_label;
        i->add_operand(new RegisterOperand(label->c_str()));
        st->add(i);

        i = new DInstruccion("list_set");
        i->add_operand(new RegisterOperand(tmp->getName()));
        i->add_operand(new InmediateIntOperand(index));
        i->add_operand(new RegisterOperand("rax"));
        st->add(i);

        index++;
    }
    i = new DInstruccion("_push_");
    i->add_operand(new RegisterOperand(tmp->getName()));
    st->add(i);

    i = new DInstruccion("call _dump_stack");
    //st->add(i);
    rp->free(tmp->id);

    if (rax_bussy)
    {
        i = new DInstruccion("pop ");
        i->add_operand(new RegisterOperand("rax"));
        st->add(i);
    }
    i = new DInstruccion(";end prepare try ");
    i->add_operand(new RegisterOperand(_try_->end_label->c_str()));
    st->add(i);
    //

    //_try_->child->accept(this);

    vector<ASTU>::iterator x = _try_->nodos.begin();
    for (; x != _try_->nodos.end(); x++)
    {
        (*x)->accept(this);
    }

    i = new DInstruccion("jmp");
    i->add_operand(new RegisterOperand(_try_->end_label->c_str()));
    st->add(i);

    _catchs_ = _try_->_caths_.begin();
    for (; _catchs_ != _try_->_caths_.end(); _catchs_++)
    {
        (*_catchs_)->accept(this);
        DInstruccion *i = new DInstruccion("jmp");
        i->add_operand(new RegisterOperand(_try_->end_label_wout_pop->c_str()));
        st->add(i);
    }

    i = new DInstruccion(";end try ");
    i->add_operand(new RegisterOperand(_try_->end_label->c_str()));
    st->add(i);

    Label *try_label = new Label((char *)_try_->end_label->c_str());
    st->add(try_label);

    i = new DInstruccion("_pop_");
    st->add(i);

    try_label = new Label((char *)_try_->end_label_wout_pop->c_str());
    st->add(try_label);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2a0, %rsp            # imm = 0x2A0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movl 0x8(%rax), %ecx
incl %ecx
movl %ecx, 0x8(%rax)
movq 0x10(%rax), %rdi
callq 0xb010
movq %rax, %rdi
movl $0x2, %esi
callq 0x1c3c0
movq %rax, -0x18(%rbp)
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xb0(%rbp)
leaq 0x6242(%rip), %rsi      # 0x361b0
callq 0x1a4e0
jmp 0x2ff75
movq -0xb0(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0xd0(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, -0xc0(%rbp)
movq %rax, -0xc8(%rbp)
movq -0x10(%rbp), %rax
movq 0x60(%rax), %rdi
callq 0x6120
movq -0xc0(%rbp), %rdi
movq %rax, %rsi
callq 0x1b1e0
jmp 0x2ffc1
movq -0xc8(%rbp), %rsi
movq -0xd0(%rbp), %rdi
movq (%rdi), %rax
callq *0x20(%rax)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x18670
movq -0xb8(%rbp), %rax
movq 0x30(%rax), %rcx
movq %rcx, -0xd8(%rbp)
movq 0x30(%rax), %rdi
movq (%rdi), %rax
leaq 0x5d02(%rip), %rsi      # 0x35d04
callq *0x10(%rax)
movq -0xd8(%rbp), %rdi
movl (%rax), %esi
movq (%rdi), %rax
callq *(%rax)
andb $0x1, %al
movb %al, -0x2d(%rbp)
testb $0x1, -0x2d(%rbp)
je 0x30130
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xe0(%rbp)
leaq 0x617c(%rip), %rsi      # 0x361bc
callq 0x1a4e0
jmp 0x30047
movq -0xe0(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0xf0(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xe8(%rbp)
leaq 0x5c89(%rip), %rsi      # 0x35d04
callq 0x1b1e0
jmp 0x30082
movq -0xe8(%rbp), %rsi
movq -0xf0(%rbp), %rdi
movq (%rdi), %rax
callq *0x20(%rax)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x18670
jmp 0x30130
movq -0xb0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0xc8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movq -0xe0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0xe8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xf8(%rbp)
leaq 0x6074(%rip), %rsi      # 0x361c2
callq 0x1a4e0
jmp 0x30155
movq -0xf8(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x110(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, -0x100(%rbp)
movq %rax, -0x108(%rbp)
movq -0x10(%rbp), %rdi
addq $0x40, %rdi
callq 0xde70
movq -0x100(%rbp), %rdi
movl %eax, %esi
callq 0x1b0f0
jmp 0x301a0
movq -0x108(%rbp), %rsi
movq -0x110(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x18670
movq -0xb8(%rbp), %rax
movq 0x30(%rax), %rdi
movq (%rdi), %rax
movq 0x50(%rax), %rax
callq *%rax
movq %rax, -0x38(%rbp)
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x118(%rbp)
leaq 0x5f8f(%rip), %rsi      # 0x36189
callq 0x1a4e0
jmp 0x30201
movq -0x118(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x130(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, -0x128(%rbp)
movq -0x38(%rbp), %rdi
callq 0x21350
movq %rax, -0x120(%rbp)
jmp 0x3023a
movq -0x120(%rbp), %rsi
movq -0x128(%rbp), %rdi
callq 0x1b1e0
jmp 0x3024f
movq -0x128(%rbp), %rsi
movq -0x130(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movq -0x20(%rbp), %rax
movq %rax, -0x140(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x138(%rbp)
leaq 0x5a75(%rip), %rsi      # 0x35d04
callq 0x1b1e0
jmp 0x30296
movq -0x138(%rbp), %rsi
movq -0x140(%rbp), %rdi
movq (%rdi), %rax
callq *0x20(%rax)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x18670
movq -0x10(%rbp), %rdi
addq $0x40, %rdi
callq 0xdd70
movq %rax, -0x40(%rbp)
movl $0x0, -0x44(%rbp)
movq -0x10(%rbp), %rdi
addq $0x40, %rdi
callq 0xdc00
movq %rax, -0x50(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x31da0
testb $0x1, %al
jne 0x302f6
jmp 0x306d3
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x148(%rbp)
leaq 0x5eb7(%rip), %rsi      # 0x361cb
callq 0x1a4e0
jmp 0x3031b
movq -0x148(%rbp), %rax
movq %rax, -0x20(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x31de0
movq (%rax), %rax
movq 0x58(%rax), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rdi
xorl %esi, %esi
callq 0x1fe70
movl %eax, -0x54(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x158(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x150(%rbp)
movl -0x54(%rbp), %esi
callq 0x1b0f0
jmp 0x30374
movq -0x150(%rbp), %rsi
movq -0x158(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
leaq -0x40(%rbp), %rdi
callq 0x31de0
movq (%rax), %rax
movq 0x40(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x170(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, -0x160(%rbp)
movq %rax, -0x168(%rbp)
movq -0x60(%rbp), %rdi
callq 0x6120
movq -0x160(%rbp), %rdi
movq %rax, %rsi
callq 0x1b1e0
jmp 0x303dc
movq -0x168(%rbp), %rsi
movq -0x170(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x18670
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x178(%rbp)
leaq 0x5db9(%rip), %rsi      # 0x361d7
callq 0x1a4e0
jmp 0x30425
movq -0x178(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x190(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, -0x188(%rbp)
movq -0x38(%rbp), %rdi
callq 0x21350
movq %rax, -0x180(%rbp)
jmp 0x3045e
movq -0x180(%rbp), %rsi
movq -0x188(%rbp), %rdi
callq 0x1b1e0
jmp 0x30473
movq -0x188(%rbp), %rsi
movq -0x190(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movq -0x20(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x198(%rbp)
movl -0x44(%rbp), %esi
callq 0x1b0f0
jmp 0x304b6
movq -0x198(%rbp), %rsi
movq -0x1a0(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movq -0x20(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x1a8(%rbp)
leaq 0x580e(%rip), %rsi      # 0x35d04
callq 0x1b1e0
jmp 0x304fd
movq -0x1a8(%rbp), %rsi
movq -0x1b0(%rbp), %rdi
movq (%rdi), %rax
callq *0x20(%rax)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x18670
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
leaq -0x40(%rbp), %rdi
xorl %esi, %esi
callq 0x31e00
movq %rax, -0x68(%rbp)
jmp 0x302cf
movq -0xf8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x108(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x118(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x128(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x138(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x148(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x150(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x168(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x178(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x188(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x198(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x1a8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x1b8(%rbp)
leaq 0x5aef(%rip), %rsi      # 0x361e0
callq 0x1a4e0
jmp 0x306f8
movq -0x1b8(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, -0x1c8(%rbp)
movq -0x38(%rbp), %rdi
callq 0x21350
movq %rax, -0x1c0(%rbp)
jmp 0x30731
movq -0x1c0(%rbp), %rsi
movq -0x1c8(%rbp), %rdi
callq 0x1b1e0
jmp 0x30746
movq -0x1c8(%rbp), %rsi
movq -0x1d0(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x18670
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x1d8(%rbp)
leaq 0x5a5f(%rip), %rsi      # 0x361e7
callq 0x1a4e0
jmp 0x3078f
movq -0xb8(%rbp), %rax
movq -0x1d8(%rbp), %rcx
movq %rcx, -0x20(%rbp)
movq 0x30(%rax), %rdi
movq -0x38(%rbp), %rax
movl (%rax), %esi
movq (%rdi), %rax
callq *0x28(%rax)
testb $0x1, -0x2d(%rbp)
je 0x308eb
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x1e0(%rbp)
leaq 0x5a1f(%rip), %rsi      # 0x361f8
callq 0x1a4e0
jmp 0x307e0
movq -0x1e0(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x1f0(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x1e8(%rbp)
leaq 0x54f0(%rip), %rsi      # 0x35d04
callq 0x1b1e0
jmp 0x3081b
movq -0x1e8(%rbp), %rsi
movq -0x1f0(%rbp), %rdi
movq (%rdi), %rax
callq *0x20(%rax)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x18670
jmp 0x308eb
movq -0x1b8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x1c8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x1d8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x1e0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x1e8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x1f8(%rbp)
leaq 0x58f4(%rip), %rsi      # 0x361fd
callq 0x1a4e0
jmp 0x30910
movq -0x1f8(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x210(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, -0x200(%rbp)
movq %rax, -0x208(%rbp)
movq -0x10(%rbp), %rax
movq 0x60(%rax), %rdi
callq 0x6120
movq -0x200(%rbp), %rdi
movq %rax, %rsi
callq 0x1b1e0
jmp 0x3095c
movq -0x208(%rbp), %rsi
movq -0x210(%rbp), %rdi
movq (%rdi), %rax
callq *0x20(%rax)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x18670
movq -0x10(%rbp), %rdi
addq $0x28, %rdi
callq 0xdd70
movq %rax, -0x70(%rbp)
movq -0x10(%rbp), %rdi
addq $0x28, %rdi
callq 0xdc00
movq %rax, -0x78(%rbp)
leaq -0x70(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x31da0
testb $0x1, %al
jne 0x309b2
jmp 0x30a1f
leaq -0x70(%rbp), %rdi
callq 0x31de0
movq -0xb8(%rbp), %rsi
movq (%rax), %rdi
movq (%rdi), %rax
callq *(%rax)
leaq -0x70(%rbp), %rdi
xorl %esi, %esi
callq 0x31e00
movq %rax, -0x80(%rbp)
jmp 0x3098e
movq -0x1f8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x208(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x218(%rbp)
leaq 0x57d2(%rip), %rsi      # 0x3620f
callq 0x1a4e0
jmp 0x30a44
movq -0x218(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x230(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, -0x220(%rbp)
movq %rax, -0x228(%rbp)
movq -0x10(%rbp), %rax
movq 0x60(%rax), %rdi
callq 0x6120
movq -0x220(%rbp), %rdi
movq %rax, %rsi
callq 0x1b1e0
jmp 0x30a90
movq -0x228(%rbp), %rsi
movq -0x230(%rbp), %rdi
movq (%rdi), %rax
callq *0x20(%rax)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x18670
movq -0x10(%rbp), %rdi
addq $0x40, %rdi
callq 0xdd70
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rdi
addq $0x40, %rdi
callq 0xdc00
movq %rax, -0x90(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x31da0
testb $0x1, %al
jne 0x30afd
jmp 0x30c52
leaq -0x40(%rbp), %rdi
callq 0x31de0
movq -0xb8(%rbp), %rsi
movq (%rax), %rdi
movq (%rdi), %rax
movq (%rax), %rax
callq *%rax
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x238(%rbp)
leaq 0x56d9(%rip), %rsi      # 0x3620f
callq 0x1a4e0
jmp 0x30b3d
movq -0x238(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x250(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, -0x240(%rbp)
movq %rax, -0x248(%rbp)
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rdi
callq 0x6120
movq -0x240(%rbp), %rdi
movq %rax, %rsi
callq 0x1b1e0
jmp 0x30b8f
movq -0x248(%rbp), %rsi
movq -0x250(%rbp), %rdi
movq (%rdi), %rax
callq *0x20(%rax)
movq -0x18(%rbp), %rdi
movq -0x98(%rbp), %rsi
callq 0x18670
leaq -0x40(%rbp), %rdi
xorl %esi, %esi
callq 0x31e00
movq %rax, -0xa0(%rbp)
jmp 0x30ad0
movq -0x218(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x228(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x238(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x248(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x258(%rbp)
leaq 0x55a3(%rip), %rsi      # 0x36213
callq 0x1a4e0
jmp 0x30c77
movq -0x258(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x270(%rbp)
movl $0x10, %edi
callq 0x62e0
movq %rax, -0x260(%rbp)
movq %rax, -0x268(%rbp)
movq -0x10(%rbp), %rax
movq 0x60(%rax), %rdi
callq 0x6120
movq -0x260(%rbp), %rdi
movq %rax, %rsi
callq 0x1b1e0
jmp 0x30cc3
movq -0x268(%rbp), %rsi
movq -0x270(%rbp), %rdi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x18670
movl $0x10, %edi
callq 0x62e0
movq %rax, -0x278(%rbp)
movq %rax, -0x280(%rbp)
movq -0x10(%rbp), %rax
movq 0x60(%rax), %rdi
callq 0x6120
movq -0x278(%rbp), %rdi
movq %rax, %rsi
callq 0x19b10
jmp 0x30d1d
movq -0x280(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x18(%rbp), %rdi
movq -0xa8(%rbp), %rsi
callq 0x18670
movl $0x28, %edi
callq 0x62e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x288(%rbp)
leaq 0x54c4(%rip), %rsi      # 0x3621d
callq 0x1a4e0
jmp 0x30d60
movq -0x288(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x18670
movl $0x10, %edi
callq 0x62e0
movq %rax, -0x290(%rbp)
movq %rax, -0x298(%rbp)
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rdi
callq 0x6120
movq -0x290(%rbp), %rdi
movq %rax, %rsi
callq 0x19b10
jmp 0x30dae
movq -0x298(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x18(%rbp), %rdi
movq -0xa8(%rbp), %rsi
callq 0x18670
addq $0x2a0, %rsp            # imm = 0x2A0
popq %rbp
retq
movq -0x258(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x268(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x280(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x288(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x28, %esi
callq 0x62f0
jmp 0x30e6e
movq -0x298(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
movl $0x10, %esi
callq 0x62f0
movq -0x28(%rbp), %rdi
callq 0x64f0
nopw (%rax,%rax)