// File: /workspace/github_cpp_makefile_star2_O3/eniac[P]Mantis/src/compile/compile_c.cpp
// Function: generatePrologueEnd(std::vector<AstNode*, std::allocator<AstNode*>>, std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char>>&, int, int)
void generatePrologueEnd(std::vector<AstNode*> nodeArray, ostringstream& oss_init_end, int ing_iso_opt, int egr_iso_opt) {

    oss_init_end << "  __mantis__add_vars_ing;\n";
    oss_init_end << "  __mantis__add_vars_egr;\n";

    // Flip __vv to point to shallow copy
    if(((unsigned int)ing_iso_opt) & 0b10) {
        oss_init_end << "\n  __mantis__flip_vv_ing;\n\n";
    }
    if(((unsigned int)egr_iso_opt) & 0b10) {
        oss_init_end << "\n  __mantis__flip_vv_egr;\n\n";
    }    

    P4RInitBlockNode * init_node = findInitBlock(nodeArray);
    string p4r_init_user_str = "";
    if (init_node != 0) {
        p4r_init_user_str = init_node->body_->toString();
    }

    for (auto node : nodeArray) {
        // For each mbl table
        if(typeContains(node, "P4RMalleableTableNode")) {
            TableNode* table = dynamic_cast<P4RMalleableTableNode*>(node)->table_;
            string table_name = *(table->name_->word_);

            // Whenever mbl table(s) present, isolation required

            TableActionStmtsNode* actions = table->actions_;

            // Mbl tables are always with With matches (at least match on __vv)
            // For each action
            for (TableActionStmtNode* tas : *actions->list_) {
                string action_name = *tas->name_->word_;

                string str_prepare_macro_func;
                string str_mirror_macro_func;

                std::smatch result;

                // Construct match regrex for add
                str_prepare_macro_func = table_name + "_add_" + action_name;
                std::regex e_add (str_prepare_macro_func+"\\s*\\("+"([^\\)]*)"+"\\)");   // matches words beginning by "sub"

                // Stop after first match
                while (std::regex_search (p4r_init_user_str, result, e_add)) {
                    
                    str_prepare_macro_func = result[0];
                    str_mirror_macro_func = "__mantis__mirror_" + str_prepare_macro_func;
                    // Call corresponding mirror macros
                    oss_init_end << "\n  "
                                        << str_mirror_macro_func
                                        << ";\n\n";

                    // Search remaining string of p4r_reaction_user_str
                    p4r_init_user_str = result.suffix().str();
                }
                // Mod
                str_prepare_macro_func = table_name + "_mod_" + action_name;
                std::regex e_mod (str_prepare_macro_func+"\\s*\\("+"([^\\)]*)"+"\\)");   // matches words beginning by "sub"
                while (std::regex_search (p4r_init_user_str, result, e_mod)) {
                    str_prepare_macro_func = result[0];
                    str_mirror_macro_func = "__mantis__mirror_" + str_prepare_macro_func;
                    oss_init_end << "\n  "
                                        << str_mirror_macro_func
                                        << ";\n\n";
                    p4r_init_user_str = result.suffix().str();
                }
                // Del
                str_prepare_macro_func = table_name + "_del_" + action_name;
                std::regex e_del (str_prepare_macro_func+"\\s*\\("+"([^\\)]*)"+"\\)");   // matches words beginning by "sub"
                while (std::regex_search (p4r_init_user_str, result, e_del)) {
                    str_prepare_macro_func = result[0];
                    str_mirror_macro_func = "__mantis__mirror_" + str_prepare_macro_func;
                    oss_init_end << "\n  "
                                << str_mirror_macro_func
                                << ";\n\n";
                    p4r_init_user_str = result.suffix().str();
                }
            }   
        }
    }

    // Point __vv back to working copy for dialogue
    if(((unsigned int)ing_iso_opt) & 0b10) {
        oss_init_end<< "\n  __mantis__flip_vv_ing;\n\n"; 
    }
    if(((unsigned int)egr_iso_opt) & 0b10) {
        oss_init_end<< "\n  __mantis__flip_vv_egr;\n\n";
    }  
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1c8, %rsp            # imm = 0x1C8
movl %ecx, %r12d
movl %edx, %r13d
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x29ccc(%rip), %rsi     # 0x78027
movl $0x1a, %edx
movq %rbx, %rdi
callq 0x2e440
leaq 0x29cd3(%rip), %rsi     # 0x78042
movl $0x1a, %edx
movq %rbx, %rdi
callq 0x2e440
testb $0x2, %r13b
je 0x4e396
leaq 0x291ef(%rip), %rsi     # 0x77578
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
testb $0x2, %r12b
je 0x4e3b0
leaq 0x291f1(%rip), %rsi     # 0x77594
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
leaq -0x1f0(%rbp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0x32ac0
movq %r15, %rdi
callq 0x6f36e
movq %rax, %r15
movq -0x1f0(%rbp), %rdi
testq %rdi, %rdi
je 0x4e3de
callq 0x2e360
movl %r13d, -0x138(%rbp)
movl %r12d, -0x134(%rbp)
leaq -0x120(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x294dd(%rip), %rdx     # 0x778db
leaq -0x130(%rbp), %rdi
movq %rdx, %rsi
callq 0x32e40
testq %r15, %r15
je 0x4e44c
movq 0x48(%r15), %rsi
movq (%rsi), %rax
leaq -0x110(%rbp), %rdi
callq *(%rax)
leaq -0x130(%rbp), %rdi
leaq -0x110(%rbp), %r15
movq %r15, %rsi
callq 0x2e4c0
movq (%r15), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0x4e44c
callq 0x2e360
movq (%r14), %rax
movq 0x8(%r14), %rcx
movq %rcx, -0x1c0(%rbp)
cmpq %rcx, %rax
je 0x4f139
leaq -0x148(%rbp), %r15
leaq -0x88(%rbp), %r14
movq %rax, -0x1c8(%rbp)
movq (%rax), %r12
movq %r12, %rdi
leaq 0x29760(%rip), %rsi     # 0x77be5
callq 0x6e968
testb %al, %al
je 0x4f121
movq %r12, %rdi
leaq 0x3e214(%rip), %rsi     # 0x8c6b0
leaq 0x3efad(%rip), %rdx     # 0x8d450
xorl %ecx, %ecx
callq 0x2e430
movq 0x40(%rax), %r12
movq 0x40(%r12), %rax
movq 0x40(%rax), %rax
leaq -0x100(%rbp), %rcx
movq %rcx, -0x110(%rbp)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x110(%rbp), %rdi
callq 0x32cbc
movq 0x50(%r12), %rax
movq 0x40(%rax), %rax
movq (%rax), %rcx
movq 0x8(%rax), %rax
movq %rax, -0x1d0(%rbp)
cmpq %rax, %rcx
je 0x4f109
movq %rcx, -0x1d8(%rbp)
movq (%rcx), %rax
movq 0x40(%rax), %rax
movq 0x40(%rax), %rax
leaq -0x168(%rbp), %rcx
movq %rcx, -0x178(%rbp)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x178(%rbp), %rdi
callq 0x32cbc
leaq -0x98(%rbp), %rax
movq %rax, -0xa8(%rbp)
xorl %ecx, %ecx
movq %rcx, -0xa0(%rbp)
movb %cl, -0x98(%rbp)
leaq -0xe0(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq %rcx, -0xe8(%rbp)
movb %cl, -0xe0(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0xc0(%rbp)
movaps %xmm0, -0xd0(%rbp)
leaq -0x78(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x32cbc
movq %r14, %rdi
leaq 0x294b6(%rip), %rsi     # 0x77a5e
callq 0x2e7e0
movq -0x178(%rbp), %rsi
movq -0x170(%rbp), %rdx
movq %r14, %rdi
callq 0x2e130
leaq -0x188(%rbp), %r12
movq %r12, -0x198(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4e5f3
movq %rdx, -0x198(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x188(%rbp)
jmp 0x4e5fb
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x190(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xa8(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x2e4c0
movq -0x198(%rbp), %rdi
cmpq %r12, %rdi
je 0x4e639
callq 0x2e360
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x4e64e
callq 0x2e360
leaq -0x58(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x68(%rbp), %r12
movq %r12, %rdi
callq 0x32cbc
movq %r12, %rdi
leaq 0x299e0(%rip), %rsi     # 0x7805d
callq 0x2e7e0
movq %r12, %rdi
leaq 0x299d7(%rip), %rsi     # 0x78063
callq 0x2e7e0
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4e6b5
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x4e6bb
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x48(%rbp), %rdi
leaq 0x2998f(%rip), %rsi     # 0x7806c
callq 0x2e7e0
leaq -0x78(%rbp), %rsi
movq %rsi, -0x88(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4e70c
movq %rdx, -0x88(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x78(%rbp)
jmp 0x4e712
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x80(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x198(%rbp), %rdi
movq %r14, %rsi
movl $0x10, %edx
callq 0x506c4
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x4e752
callq 0x2e360
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4e764
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
jne 0x4e929
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rsi
addq %rdi, %rsi
leaq -0xd0(%rbp), %rdx
leaq -0x198(%rbp), %rcx
xorl %r8d, %r8d
callq 0x60d67
testb %al, %al
je 0x4e933
movq -0xd0(%rbp), %rcx
movq -0xc8(%rbp), %rdx
movq %rdx, %rax
subq %rcx, %rax
leaq -0x48(%rdx), %rsi
cmpq $0x48, %rax
movq %rcx, %rax
cmoveq %rsi, %rax
cmpq %rcx, %rdx
cmoveq %rsi, %rax
cmpb $0x1, 0x10(%rax)
jne 0x4e7f0
movq (%rax), %rsi
movq 0x8(%rax), %rdx
leaq -0x78(%rbp), %r12
movq %r12, -0x88(%rbp)
movq %r14, %rdi
callq 0x63144
jmp 0x4e807
leaq -0x78(%rbp), %r12
movq %r12, -0x88(%rbp)
movq $0x0, -0x80(%rbp)
movb $0x0, -0x78(%rbp)
leaq -0xa8(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x88(%rbp), %rdi
cmpq %r12, %rdi
je 0x4e827
callq 0x2e360
movq %r14, %rdi
leaq 0x29456(%rip), %rsi     # 0x77c87
leaq -0xa8(%rbp), %rdx
callq 0x50757
leaq -0xf0(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x4e861
callq 0x2e360
movl $0x3, %edx
movq %rbx, %rdi
leaq 0x297ff(%rip), %rsi     # 0x7806f
callq 0x2e440
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movl $0x3, %edx
movq %rax, %rdi
leaq 0x2893a(%rip), %rsi     # 0x771d4
callq 0x2e440
movq -0xc8(%rbp), %rax
movq %rax, %rdx
subq -0xd0(%rbp), %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
movq $-0x48, %rcx
cmpq $0x4, %rdx
jb 0x4e8d6
movq $-0x18, %rcx
cmpb $0x1, 0x10(%rax,%rcx)
jne 0x4e8f7
movq (%rax,%rcx), %rsi
movq 0x8(%rax,%rcx), %rdx
movq %r12, -0x88(%rbp)
movq %r14, %rdi
callq 0x63144
jmp 0x4e90a
movq %r12, -0x88(%rbp)
movq $0x0, -0x80(%rbp)
movb $0x0, -0x78(%rbp)
leaq -0x130(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x88(%rbp), %rdi
cmpq %r12, %rdi
je 0x4e775
callq 0x2e360
jmp 0x4e775
leaq -0x38(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
addq %rsi, %rdx
leaq -0x48(%rbp), %r12
movq %r12, %rdi
callq 0x32cbc
movq %r12, %rdi
leaq 0x291e4(%rip), %rsi     # 0x77b46
callq 0x2e7e0
movq -0x178(%rbp), %rsi
movq -0x170(%rbp), %rdx
movq %r12, %rdi
callq 0x2e130
leaq -0x78(%rbp), %r12
movq %r12, -0x88(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4e9a7
movq %rdx, -0x88(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x78(%rbp)
jmp 0x4e9af
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x80(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xa8(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x88(%rbp), %rdi
cmpq %r12, %rdi
je 0x4e9e6
callq 0x2e360
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4e9f8
callq 0x2e360
movq %r15, -0x158(%rbp)
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x158(%rbp), %r12
movq %r12, %rdi
callq 0x32cbc
movq %r12, %rdi
leaq 0x29634(%rip), %rsi     # 0x7805d
callq 0x2e7e0
movq %r12, %rdi
leaq 0x2962b(%rip), %rsi     # 0x78063
callq 0x2e7e0
leaq -0x58(%rbp), %rsi
movq %rsi, -0x68(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4ea61
movq %rdx, -0x68(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x58(%rbp)
jmp 0x4ea67
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x60(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x68(%rbp), %rdi
leaq 0x295e3(%rip), %rsi     # 0x7806c
callq 0x2e7e0
leaq -0x38(%rbp), %rsi
movq %rsi, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4eab2
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x4eab8
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r14, %rdi
leaq -0x48(%rbp), %rsi
movl $0x10, %edx
callq 0x506c4
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4eaf2
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4eb04
callq 0x2e360
movq -0x158(%rbp), %rdi
cmpq %r15, %rdi
jne 0x4ecc3
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rsi
addq %rdi, %rsi
leaq -0xd0(%rbp), %rdx
movq %r14, %rcx
xorl %r8d, %r8d
callq 0x60d67
testb %al, %al
je 0x4eccd
movq -0xd0(%rbp), %rcx
movq -0xc8(%rbp), %rdx
movq %rdx, %rax
subq %rcx, %rax
leaq -0x48(%rdx), %rsi
cmpq $0x48, %rax
movq %rcx, %rax
cmoveq %rsi, %rax
cmpq %rcx, %rdx
cmoveq %rsi, %rax
cmpb $0x1, 0x10(%rax)
jne 0x4eb8c
movq (%rax), %rsi
movq 0x8(%rax), %rdx
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
leaq -0x48(%rbp), %r13
movq %r13, %rdi
callq 0x63144
jmp 0x4eba4
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
movq $0x0, -0x40(%rbp)
movb $0x0, -0x38(%rbp)
leaq -0x48(%rbp), %r13
leaq -0xa8(%rbp), %rdi
movq %r13, %rsi
callq 0x2e4c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x4ebc1
callq 0x2e360
leaq -0x48(%rbp), %r12
movq %r12, %rdi
leaq 0x290b8(%rip), %rsi     # 0x77c87
leaq -0xa8(%rbp), %rdx
callq 0x50757
leaq -0xf0(%rbp), %rdi
movq %r12, %rsi
callq 0x2e4c0
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4ebfc
callq 0x2e360
movl $0x3, %edx
movq %rbx, %rdi
leaq 0x29464(%rip), %rsi     # 0x7806f
callq 0x2e440
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movl $0x3, %edx
movq %rax, %rdi
leaq 0x2859f(%rip), %rsi     # 0x771d4
callq 0x2e440
movq -0xc8(%rbp), %rax
movq %rax, %rdx
subq -0xd0(%rbp), %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
movq $-0x48, %rcx
cmpq $0x4, %rdx
jb 0x4ec71
movq $-0x18, %rcx
cmpb $0x1, 0x10(%rax,%rcx)
jne 0x4ec93
movq (%rax,%rcx), %rsi
movq 0x8(%rax,%rcx), %rdx
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
movq %r13, %rdi
callq 0x63144
jmp 0x4eca7
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
movq $0x0, -0x40(%rbp)
movb $0x0, -0x38(%rbp)
leaq -0x130(%rbp), %rdi
movq %r13, %rsi
callq 0x2e4c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x4eb14
callq 0x2e360
jmp 0x4eb14
leaq -0x58(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
addq %rsi, %rdx
leaq -0x68(%rbp), %r12
movq %r12, %rdi
callq 0x32cbc
movq %r12, %rdi
leaq 0x28dd1(%rip), %rsi     # 0x77acd
callq 0x2e7e0
movq -0x178(%rbp), %rsi
movq -0x170(%rbp), %rdx
movq %r12, %rdi
callq 0x2e130
leaq -0x38(%rbp), %r12
movq %r12, -0x48(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4ed3b
movq %rdx, -0x48(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x38(%rbp)
jmp 0x4ed43
movups (%rcx), %xmm0
movups %xmm0, (%r12)
leaq -0x48(%rbp), %rsi
movq 0x8(%rax), %rdx
movq %rdx, -0x40(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xa8(%rbp), %rdi
callq 0x2e4c0
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x4ed78
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4ed8a
callq 0x2e360
leaq -0x1a8(%rbp), %rax
movq %rax, -0x1b8(%rbp)
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x1b8(%rbp), %r12
movq %r12, %rdi
callq 0x32cbc
movq %r12, %rdi
leaq 0x2929b(%rip), %rsi     # 0x7805d
callq 0x2e7e0
movq %r12, %rdi
leaq 0x29292(%rip), %rsi     # 0x78063
callq 0x2e7e0
movq %r15, -0x158(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4edff
movq %rdx, -0x158(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x148(%rbp)
jmp 0x4ee06
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rdx, -0x150(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x158(%rbp), %rdi
leaq 0x2923e(%rip), %rsi     # 0x7806c
callq 0x2e7e0
leaq -0x58(%rbp), %rsi
movq %rsi, -0x68(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4ee57
movq %rdx, -0x68(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x58(%rbp)
jmp 0x4ee5d
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x60(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x48(%rbp), %rdi
leaq -0x68(%rbp), %rsi
movl $0x10, %edx
callq 0x506c4
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4ee98
callq 0x2e360
movq -0x158(%rbp), %rdi
cmpq %r15, %rdi
je 0x4eea9
callq 0x2e360
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
cmpq %rax, %rdi
je 0x4f04f
callq 0x2e360
jmp 0x4f04f
movq %r14, %r13
movq %r15, %r12
movq -0xd0(%rbp), %rcx
movq -0xc8(%rbp), %rdx
movq %rdx, %rax
subq %rcx, %rax
leaq -0x48(%rdx), %rsi
cmpq $0x48, %rax
movq %rcx, %rax
cmoveq %rsi, %rax
cmpq %rcx, %rdx
cmoveq %rsi, %rax
cmpb $0x1, 0x10(%rax)
jne 0x4ef1d
movq (%rax), %rsi
movq 0x8(%rax), %rdx
leaq -0x58(%rbp), %r15
movq %r15, -0x68(%rbp)
leaq -0x68(%rbp), %r14
movq %r14, %rdi
callq 0x63144
jmp 0x4ef35
leaq -0x58(%rbp), %r15
movq %r15, -0x68(%rbp)
movq $0x0, -0x60(%rbp)
movb $0x0, -0x58(%rbp)
leaq -0x68(%rbp), %r14
leaq -0xa8(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x68(%rbp), %rdi
cmpq %r15, %rdi
je 0x4ef52
callq 0x2e360
movq %r14, %rdi
leaq 0x28d2b(%rip), %rsi     # 0x77c87
leaq -0xa8(%rbp), %rdx
callq 0x50757
leaq -0xf0(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4ef89
callq 0x2e360
movl $0x3, %edx
movq %rbx, %rdi
leaq 0x290d7(%rip), %rsi     # 0x7806f
callq 0x2e440
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movl $0x3, %edx
movq %rax, %rdi
leaq 0x28212(%rip), %rsi     # 0x771d4
callq 0x2e440
movq -0xc8(%rbp), %rax
movq %rax, %rdx
subq -0xd0(%rbp), %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
movq $-0x48, %rcx
cmpq $0x4, %rdx
jb 0x4effe
movq $-0x18, %rcx
cmpb $0x1, 0x10(%rax,%rcx)
jne 0x4f01c
movq (%rax,%rcx), %rsi
movq 0x8(%rax,%rcx), %rdx
movq %r15, -0x68(%rbp)
movq %r14, %rdi
callq 0x63144
jmp 0x4f02c
movq %r15, -0x68(%rbp)
movq $0x0, -0x60(%rbp)
movb $0x0, -0x58(%rbp)
leaq -0x130(%rbp), %rdi
movq %r14, %rsi
callq 0x2e4c0
movq -0x68(%rbp), %rdi
cmpq %r15, %rdi
je 0x4f049
callq 0x2e360
movq %r12, %r15
movq %r13, %r14
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rsi
addq %rdi, %rsi
leaq -0xd0(%rbp), %rdx
leaq -0x48(%rbp), %rcx
xorl %r8d, %r8d
callq 0x60d67
testb %al, %al
jne 0x4eeca
leaq -0x48(%rbp), %rdi
callq 0x5072e
movq %r14, %rdi
callq 0x5072e
leaq -0x198(%rbp), %rdi
callq 0x5072e
movq -0xd0(%rbp), %rdi
testq %rdi, %rdi
je 0x4f0a9
callq 0x2e360
movq -0xf0(%rbp), %rdi
leaq -0xe0(%rbp), %rax
cmpq %rax, %rdi
je 0x4f0c1
callq 0x2e360
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0x4f0d9
callq 0x2e360
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
je 0x4f0f1
callq 0x2e360
movq -0x1d8(%rbp), %rcx
addq $0x8, %rcx
cmpq -0x1d0(%rbp), %rcx
jne 0x4e4fb
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0x4f121
callq 0x2e360
movq -0x1c8(%rbp), %rax
addq $0x8, %rax
cmpq -0x1c0(%rbp), %rax
jne 0x4e471
testb $0x2, -0x138(%rbp)
je 0x4f156
leaq 0x2842f(%rip), %rsi     # 0x77578
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
testb $0x2, -0x134(%rbp)
je 0x4f173
leaq 0x2842e(%rip), %rsi     # 0x77594
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x2e440
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x4f18b
callq 0x2e360
addq $0x1c8, %rsp            # imm = 0x1C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x4f1c3
jmp 0x4f1c3
movq %rax, %rbx
jmp 0x4f3dc
movq %rax, %rbx
movq -0x1f0(%rbp), %rdi
testq %rdi, %rdi
jne 0x4f3d7
jmp 0x4f3dc
jmp 0x4f1c3
movq %rax, %rbx
jmp 0x4f3c4
jmp 0x4f333
jmp 0x4f1e9
movq %rax, %rbx
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4f1f1
callq 0x2e360
jmp 0x4f1f1
movq %rax, %rbx
jmp 0x4f202
movq %rax, %rbx
movq -0x158(%rbp), %rdi
cmpq %r15, %rdi
je 0x4f202
callq 0x2e360
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
jmp 0x4f224
jmp 0x4f219
jmp 0x4f333
movq %rax, %rbx
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4f336
callq 0x2e360
jmp 0x4f336
jmp 0x4f344
jmp 0x4f23e
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
jne 0x4f29b
jmp 0x4f347
jmp 0x4f344
movq %rax, %rbx
jmp 0x4f279
jmp 0x4f25f
movq %rax, %rbx
jmp 0x4f28b
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4f279
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4f28b
callq 0x2e360
movq -0x158(%rbp), %rdi
cmpq %r15, %rdi
je 0x4f347
callq 0x2e360
jmp 0x4f347
movq %rax, %rbx
jmp 0x4f3ac
jmp 0x4f2c3
jmp 0x4f2b1
movq %rax, %rbx
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
jmp 0x4f307
jmp 0x4f2cb
movq %rax, %rbx
jmp 0x4f353
movq %rax, %rbx
jmp 0x4f2ff
movq %rax, %rbx
jmp 0x4f2ed
movq %rax, %rbx
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x4f2ed
callq 0x2e360
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x4f2ff
callq 0x2e360
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x4f353
callq 0x2e360
jmp 0x4f353
jmp 0x4f333
jmp 0x4f333
jmp 0x4f325
jmp 0x4f325
jmp 0x4f344
jmp 0x4f344
jmp 0x4f325
jmp 0x4f333
jmp 0x4f344
movq %rax, %rbx
leaq -0x48(%rbp), %rdi
callq 0x5072e
jmp 0x4f336
movq %rax, %rbx
leaq -0x88(%rbp), %rdi
callq 0x5072e
jmp 0x4f347
movq %rax, %rbx
leaq -0x198(%rbp), %rdi
callq 0x5072e
movq -0xd0(%rbp), %rdi
testq %rdi, %rdi
je 0x4f364
callq 0x2e360
movq -0xf0(%rbp), %rdi
leaq -0xe0(%rbp), %rax
cmpq %rax, %rdi
je 0x4f37c
callq 0x2e360
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0x4f394
callq 0x2e360
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
je 0x4f3ac
callq 0x2e360
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0x4f3c4
callq 0x2e360
movq -0x130(%rbp), %rdi
leaq -0x120(%rbp), %rax
cmpq %rax, %rdi
je 0x4f3dc
callq 0x2e360
movq %rbx, %rdi
callq 0x2e730