// File: /workspace/github_cpp_makefile_star2_O1/eniac[P]Mantis/src/compile/compile_p4.cpp
// Function: generatePackingTablesForIng(std::vector<AstNode*, std::allocator<AstNode*>>*, std::vector<std::pair<std::vector<std::pair<ReactionArgNode*, int>, std::allocator<std::pair<ReactionArgNode*, int>>>, int>, std::allocator<std::pair<std::vector<std::pair<ReactionArgNode*, int>, std::allocator<std::pair<ReactionArgNode*, int>>>, int>>> const&, bool)
static vector<MblRefNode*> generatePackingTablesForIng(vector<AstNode*>* newNodes,
                                          const vector<ReactionArgBin>& bins, bool forIng) {
    vector<MblRefNode*> reactionArgRefs;

    string p4rArgHdrType;
    string p4rArgHdrName;
    string p4rPackTableNameBase;
    string p4rPackActionNameBase;
    string p4rPackFlcNameBase;
    string p4rPackFlNameBase;
    if(forIng) {
        p4rArgHdrType = std::string(kP4rIngArghdrType);
        p4rArgHdrName = std::string(kP4rIngArghdrName);
        p4rPackTableNameBase = "__tiPack";
        p4rPackActionNameBase = "__aiPack";
        p4rPackFlcNameBase = "__flci_packedArgs_reg";
        p4rPackFlNameBase = "__fli_packedArgs_reg";
    } else {
        p4rArgHdrType = std::string(kP4rEgrArghdrType);
        p4rArgHdrName = std::string(kP4rEgrArghdrName);
        p4rPackTableNameBase = "__tePack";
        p4rPackActionNameBase = "__aePack";
        p4rPackFlcNameBase = "__flce_packedArgs_reg";
        p4rPackFlNameBase = "__fle_packedArgs_reg";
    }

    // Generate packed fields
    ostringstream oss_fld;
    oss_fld << "header_type " << p4rArgHdrType << " {\n"
            << "  fields {\n";
    for (int i = 0; i < bins.size(); ++i) {
        oss_fld << "  reg" << i << " : " << bins[i].second << ";\n";
    }
    oss_fld << " }\n"
            << "}\n\n"
            << "metadata " << p4rArgHdrType << " "
                           << p4rArgHdrName << ";\n\n";
    auto packedMetaNode = new UnanchoredNode(
            new string(oss_fld.str()), new string("metadata"),
            new string(p4rArgHdrType));
    newNodes->push_back(packedMetaNode);

    // Synthesize table/action for each pack
    for (int i = 0; i < bins.size(); ++i) {
        // Generate packing table
        auto tiPackName = new NameNode(new string(p4rPackTableNameBase+std::to_string(i)));
        auto tiPackReads = new TableReadStmtsNode();
        auto tiPackActions = new TableActionStmtsNode();
        tiPackActions->push_back(
                new TableActionStmtNode(new NameNode(new string(p4rPackActionNameBase+std::to_string(i)))));
        auto tiPackTable = new TableNode(tiPackName, tiPackReads, tiPackActions,
                                        "  default_action : "+p4rPackActionNameBase+std::to_string(i)+"();\nsize:1;", "");
        newNodes->push_back(tiPackTable);

        // Generate packing action
        auto aiPackName = new NameNode(new string(p4rPackActionNameBase+std::to_string(i)));
        auto aiPackParams = new ActionParamsNode();
        auto aiPackStmts = new ActionStmtsNode(); 

        // Actual size of the reg (<= 32)
        int regsize = 0;
        // Generate field list node
        ostringstream oss_fl;
        oss_fl << "field_list " << p4rPackFlNameBase << i << "{\n";
        for (int j = 0; j < bins[i].first.size(); ++j) {

            AstNode* arg = bins[i].first[j].first->arg_;
            int width = bins[i].first[j].second;
            regsize += width;

            if (typeContains(arg, "FieldNode")) {
                oss_fl << arg->toString() << ";\n";
            } else if (typeContains(arg, "MblRefNode")) {
                oss_fl << arg->toString() << ";\n";
                // Mark this ref for future processing
                // Currently not supporting field list and hash duplication
                reactionArgRefs.push_back(dynamic_cast<MblRefNode*>(arg));
            } else {
                assert(false);
            }            

        }
        // Close field_list
        oss_fl << "\n}\n\n";
        newNodes->push_back(
            new UnanchoredNode(
                new string(oss_fl.str()), new string("field_list"),
                new string("field_list"+std::to_string(i)))
        );  

        // Generate field_list_calculation
        ostringstream oss_flc;
        oss_flc << "field_list_calculation " << p4rPackFlcNameBase << i << " {\n"
                << "  input {\n"
                << "    " << p4rPackFlNameBase << i << ";\n"
                << "  }\n"
                << "  algorithm : identity;\n"
                << "  output_width : " << regsize << ";\n"
                << "}\n\n";

        newNodes->push_back(
            new UnanchoredNode(
                new string(oss_flc.str()), new string("field_list_calc"),
                new string(p4rPackFlcNameBase+std::to_string(i)))
        ); 

        // Example: modify_field_with_hash_based_offset(dst, 0, __flce_packedArgs_reg0, 4294967296);
        // Note: alternative approach using (modify - shift_left - add_to_field) would not fit into a single action due to data plane constraints
        auto aiPackStmtName = new NameNode(new string("modify_field_with_hash_based_offset"));
        auto aiPackStmtArgs = new ArgsNode();
        // dst
        ostringstream oss_postfix;
        oss_postfix << "reg" << i;
        BodyWordNode* targetBodyWord = new BodyWordNode(
            BodyWordNode::FIELD,
                new FieldNode(
                    new NameNode(new string(p4rArgHdrName)),
                    new NameNode(new string(oss_postfix.str()))));
        aiPackStmtArgs->push_back(targetBodyWord);
        // base
        aiPackStmtArgs->push_back(
                new BodyWordNode(
                    BodyWordNode::INTEGER,
                    new IntegerNode(new string(to_string(0))))); 
        // __calc_packedArgs_regx
        aiPackStmtArgs->push_back(
                new BodyWordNode(
                    BodyWordNode::STRING,
                    new StrNode(new string(p4rPackFlcNameBase+std::to_string(i)))));             
        // size (power of 2)           
        aiPackStmtArgs->push_back(
                new BodyWordNode(
                    BodyWordNode::INTEGER,
                    new IntegerNode(new string(to_string((long long)(pow(2, regsize))))))); 

        aiPackStmts->push_back(
                new ActionStmtNode(aiPackStmtName, aiPackStmtArgs, ActionStmtNode::NAME_ARGLIST, NULL, NULL));        
        
        auto aiPackAction = new ActionNode(aiPackName, aiPackParams, aiPackStmts);
        auto aiPackActionWrapper = new InputNode(NULL, aiPackAction);
        newNodes->push_back(aiPackActionWrapper);
    }
    
    return reactionArgRefs;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x768, %rsp            # imm = 0x768
movq %rdx, -0x60(%rbp)
movq %rsi, -0x68(%rbp)
xorl %eax, %eax
movq %rax, 0x10(%rdi)
xorpd %xmm0, %xmm0
movq %rdi, -0x70(%rbp)
movupd %xmm0, (%rdi)
leaq -0xc0(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq %rax, -0x8(%rdx)
movb %al, (%rdx)
leaq -0x138(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq %rax, -0x8(%rdx)
movb %al, (%rdx)
leaq -0x178(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq %rax, -0x8(%rdx)
movb %al, (%rdx)
leaq -0x118(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq %rax, -0x8(%rdx)
movb %al, (%rdx)
leaq -0xa0(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq %rax, -0x8(%rdx)
movb %al, (%rdx)
leaq -0x80(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq %rax, -0x8(%rdx)
movb %al, (%rdx)
leaq -0x778(%rbp), %r14
testl %ecx, %ecx
je 0x6a326
movq %r14, -0x10(%r14)
leaq 0xfcf4(%rip), %rsi      # 0x79f42
leaq 0xfcfe(%rip), %rdx      # 0x79f53
leaq -0x788(%rbp), %rdi
callq 0x33112
leaq -0xd0(%rbp), %rdi
leaq -0x788(%rbp), %rbx
movq %rbx, %rsi
callq 0x2e4c0
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x6a284
callq 0x2e360
leaq -0x788(%rbp), %rdi
movq %r14, (%rdi)
leaq 0xfcbf(%rip), %rsi      # 0x79f54
leaq 0xfcc7(%rip), %rdx      # 0x79f63
callq 0x33112
leaq -0x148(%rbp), %rdi
movq %rbx, %rsi
callq 0x2e4c0
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x6a2bd
callq 0x2e360
leaq -0x188(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0xf8a3(%rip), %rcx      # 0x79b72
movl $0x8, %r8d
xorl %esi, %esi
callq 0x2e640
leaq -0x128(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0xfc76(%rip), %rcx      # 0x79f64
movl $0x8, %r8d
xorl %esi, %esi
callq 0x2e640
leaq -0xb0(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0xfc60(%rip), %rcx      # 0x79f6d
movl $0x15, %r8d
xorl %esi, %esi
callq 0x2e640
leaq 0xfc62(%rip), %rcx      # 0x79f83
jmp 0x6a404
movq %r14, -0x10(%r14)
leaq 0xfc67(%rip), %rsi      # 0x79f98
leaq 0xfc71(%rip), %rdx      # 0x79fa9
leaq -0x788(%rbp), %rdi
callq 0x33112
leaq -0xd0(%rbp), %rdi
leaq -0x788(%rbp), %rbx
movq %rbx, %rsi
callq 0x2e4c0
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x6a367
callq 0x2e360
leaq -0x788(%rbp), %rdi
movq %r14, (%rdi)
leaq 0xfc32(%rip), %rsi      # 0x79faa
leaq 0xfc3a(%rip), %rdx      # 0x79fb9
callq 0x33112
leaq -0x148(%rbp), %rdi
movq %rbx, %rsi
callq 0x2e4c0
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x6a3a0
callq 0x2e360
leaq -0x188(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0xf7ed(%rip), %rcx      # 0x79b9f
movl $0x8, %r8d
xorl %esi, %esi
callq 0x2e640
leaq -0x128(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0xfbe9(%rip), %rcx      # 0x79fba
movl $0x8, %r8d
xorl %esi, %esi
callq 0x2e640
leaq -0xb0(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0xfbd3(%rip), %rcx      # 0x79fc3
movl $0x15, %r8d
xorl %esi, %esi
callq 0x2e640
leaq 0xfbd5(%rip), %rcx      # 0x79fd9
leaq -0x90(%rbp), %rdi
movq 0x8(%rdi), %rdx
movl $0x14, %r8d
xorl %esi, %esi
callq 0x2e640
leaq -0x788(%rbp), %rdi
callq 0x2e550
leaq 0xb9b6(%rip), %rsi      # 0x75de5
leaq -0x788(%rbp), %rdi
movl $0xc, %edx
callq 0x2e440
movq -0xd0(%rbp), %rsi
movq -0xc8(%rbp), %rdx
leaq -0x788(%rbp), %rdi
callq 0x2e440
movq %rax, %rbx
leaq 0xf76b(%rip), %rsi      # 0x79bcf
movl $0x3, %edx
movq %rax, %rdi
callq 0x2e440
leaq 0xb97a(%rip), %rsi      # 0x75df2
movl $0xb, %edx
movq %rbx, %rdi
callq 0x2e440
movq -0x60(%rbp), %rcx
movq 0x8(%rcx), %rax
cmpq (%rcx), %rax
je 0x6a51f
movl $0x18, %r12d
xorl %ebx, %ebx
leaq -0x788(%rbp), %r15
leaq 0xb979(%rip), %r13      # 0x75e25
movl $0x5, %edx
movq %r15, %rdi
leaq 0xfb33(%rip), %rsi      # 0x79fee
callq 0x2e440
movq %r15, %rdi
movl %ebx, %esi
callq 0x2e700
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
leaq 0xf860(%rip), %rsi      # 0x79d3c
callq 0x2e440
movq -0x60(%rbp), %rax
movq (%rax), %rax
movl (%rax,%r12), %esi
movq %r14, %rdi
callq 0x2e700
movl $0x2, %edx
movq %rax, %rdi
movq %r13, %rsi
callq 0x2e440
movq -0x60(%rbp), %rcx
movq 0x8(%rcx), %rax
subq (%rcx), %rax
incq %rbx
sarq $0x5, %rax
addq $0x20, %r12
cmpq %rbx, %rax
ja 0x6a4ac
leaq 0xce91(%rip), %rsi      # 0x773b7
leaq -0x788(%rbp), %rdi
movl $0x3, %edx
callq 0x2e440
leaq 0xfb4f(%rip), %rsi      # 0x7a08d
leaq -0x788(%rbp), %rdi
movl $0x3, %edx
callq 0x2e440
leaq 0xb8b0(%rip), %rsi      # 0x75e06
leaq -0x788(%rbp), %rdi
movl $0x9, %edx
callq 0x2e440
movq -0xd0(%rbp), %rsi
movq -0xc8(%rbp), %rdx
leaq -0x788(%rbp), %rdi
callq 0x2e440
movq %rax, %rbx
leaq 0xdae6(%rip), %rsi      # 0x78071
movl $0x1, %edx
movq %rax, %rdi
callq 0x2e440
movq -0x148(%rbp), %rsi
movq -0x140(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
leaq 0xcc1f(%rip), %rsi      # 0x771d4
movl $0x3, %edx
movq %rax, %rdi
callq 0x2e440
movl $0x58, %edi
callq 0x2e3a0
movq %rax, %rbx
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r15
leaq -0x780(%rbp), %rsi
movq %rax, %rdi
callq 0x2e660
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
movb $0x1, %r13b
leaq 0xf737(%rip), %rsi      # 0x79d40
leaq 0xf738(%rip), %rdx      # 0x79d48
movq %r14, %rdi
callq 0x33112
xorl %r13d, %r13d
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r12
addq $0x10, %rax
movq %rax, (%r12)
movq -0xd0(%rbp), %rsi
movq -0xc8(%rbp), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0x32f92
xorl %r13d, %r13d
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
movq %r12, %rcx
callq 0x3e566
movq %rbx, -0x320(%rbp)
movq -0x68(%rbp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x6a67c
movq %rbx, (%rsi)
addq $0x8, 0x8(%rdi)
jmp 0x6a688
leaq -0x320(%rbp), %rdx
callq 0x333de
movq -0x60(%rbp), %rcx
movq 0x8(%rcx), %rax
cmpq (%rcx), %rax
je 0x6b985
movq $0x0, -0x30(%rbp)
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x40(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rbx
movl $0x1, %r14d
cmpq $0xa, -0x30(%rbp)
jb 0x6a711
movl $0x4, %r14d
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x6a708
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6a70e
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6a711
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %r14d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x6a6d3
addl $-0x3, %r14d
jmp 0x6a711
addl $-0x2, %r14d
jmp 0x6a711
decl %r14d
movl %r14d, %esi
leaq -0x310(%rbp), %rax
movq %rax, -0x320(%rbp)
leaq -0x320(%rbp), %r15
movq %r15, %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x320(%rbp), %rdi
movl %r14d, %esi
movq -0x30(%rbp), %rdx
callq 0x39c27
movb $0x1, %r14b
movq -0x188(%rbp), %rcx
movq -0x180(%rbp), %r8
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2e420
movq %rbx, %rdx
addq $0x10, %rdx
movq %rdx, (%rbx)
movq (%rax), %rsi
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rsi
je 0x6a78b
movq %rsi, (%rbx)
movq (%rcx), %rdx
movq %rdx, 0x10(%rbx)
jmp 0x6a793
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
xorl %r14d, %r14d
movq -0x40(%rbp), %rdi
movq %rbx, %rsi
callq 0x329d8
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6a7d1
callq 0x2e360
movl $0x48, %edi
callq 0x2e3a0
movq %rax, %r14
movq %rax, %rdi
callq 0x36eaa
movl $0x48, %edi
callq 0x2e3a0
movq %rax, %r15
movq %rax, %rdi
callq 0x371c4
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x50(%rbp)
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x58(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r12
movl $0x1, %ebx
cmpq $0xa, -0x30(%rbp)
jb 0x6a873
movl $0x4, %ebx
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x6a86c
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6a871
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6a873
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x6a839
addl $-0x3, %ebx
jmp 0x6a873
addl $-0x2, %ebx
jmp 0x6a873
decl %ebx
movq %r15, -0x38(%rbp)
movq %r14, -0x48(%rbp)
movl %ebx, %esi
leaq -0x310(%rbp), %rax
movq %rax, -0x320(%rbp)
leaq -0x320(%rbp), %r14
movq %r14, %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x320(%rbp), %rdi
movl %ebx, %esi
movq -0x30(%rbp), %rdx
callq 0x39c27
movb $0x1, %bl
movq -0x128(%rbp), %rcx
movq -0x120(%rbp), %r8
movb $0x1, %r13b
movb $0x1, %r15b
movq %r14, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2e420
movq %r12, %rdx
addq $0x10, %rdx
movq %rdx, (%r12)
movq (%rax), %rsi
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rsi
je 0x6a8fb
movq %rsi, (%r12)
movq (%rcx), %rdx
movq %rdx, 0x10(%r12)
jmp 0x6a903
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%r12)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
xorl %r15d, %r15d
movb $0x1, %r13b
movq -0x58(%rbp), %rdi
movq %r12, %rsi
callq 0x329d8
xorl %r13d, %r13d
xorl %r15d, %r15d
movq -0x50(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x3700c
xorl %r13d, %r13d
xorl %ebx, %ebx
xorl %r15d, %r15d
movq -0x38(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x32898
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6a96d
callq 0x2e360
movl $0x98, %edi
callq 0x2e3a0
movq -0x68(%rbp), %r14
movq %rax, %r15
leaq -0x498(%rbp), %rdi
leaq 0xf668(%rip), %rsi      # 0x79ff4
leaq -0x128(%rbp), %rdx
callq 0x50cf7
movl $0x1, %ebx
cmpq $0xa, -0x30(%rbp)
jb 0x6a9e7
movl $0x4, %ebx
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x6a9e0
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6a9e5
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6a9e7
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x6a9ad
addl $-0x3, %ebx
jmp 0x6a9e7
addl $-0x2, %ebx
jmp 0x6a9e7
decl %ebx
movl %ebx, %esi
leaq -0x600(%rbp), %rax
movq %rax, -0x610(%rbp)
leaq -0x610(%rbp), %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x610(%rbp), %rdi
movl %ebx, %esi
movq -0x30(%rbp), %rdx
callq 0x39c27
movq -0x498(%rbp), %rcx
movl $0xf, %esi
leaq -0x488(%rbp), %rax
cmpq %rax, %rcx
je 0x6aa39
movq -0x488(%rbp), %rsi
movq -0x490(%rbp), %r8
movq -0x608(%rbp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x6aa71
movl $0xf, %esi
leaq -0x600(%rbp), %rdi
cmpq %rdi, -0x610(%rbp)
je 0x6aa6c
movq -0x600(%rbp), %rsi
cmpq %rsi, %rax
jbe 0x6aa86
movq -0x610(%rbp), %rsi
leaq -0x498(%rbp), %rdi
callq 0x2e130
jmp 0x6aa96
leaq -0x610(%rbp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2e420
leaq -0x310(%rbp), %rsi
movq %rsi, -0x320(%rbp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x6aac3
movq %rdx, -0x320(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x310(%rbp)
jmp 0x6aacb
movupd (%rcx), %xmm0
movupd %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x318(%rbp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq -0x320(%rbp), %rdi
leaq 0xf510(%rip), %rsi      # 0x7a008
callq 0x2e7e0
leaq -0x158(%rbp), %rsi
movq %rsi, -0x168(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x6ab2d
movq %rdx, -0x168(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x158(%rbp)
jmp 0x6ab35
movupd (%rcx), %xmm0
movupd %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x160(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x198(%rbp), %rax
movq %rax, -0x1a8(%rbp)
leaq -0x1a8(%rbp), %rbx
movq %rbx, %rdi
leaq 0xcd6d(%rip), %rdx      # 0x778db
movq %rdx, %rsi
callq 0x33112
movq %r15, %rdi
movq -0x40(%rbp), %rsi
movq -0x48(%rbp), %rdx
movq -0x38(%rbp), %rcx
leaq -0x168(%rbp), %r8
movq %rbx, %r9
callq 0x37326
movq -0x1a8(%rbp), %rdi
leaq -0x198(%rbp), %rax
cmpq %rax, %rdi
je 0x6abac
callq 0x2e360
movq -0x168(%rbp), %rdi
leaq -0x158(%rbp), %rax
cmpq %rax, %rdi
je 0x6abc4
callq 0x2e360
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6abdc
callq 0x2e360
movq -0x610(%rbp), %rdi
leaq -0x600(%rbp), %rax
cmpq %rax, %rdi
je 0x6abf4
callq 0x2e360
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6ac0c
callq 0x2e360
movq %r15, -0x320(%rbp)
movq 0x8(%r14), %rsi
cmpq 0x10(%r14), %rsi
je 0x6ac27
movq %r15, (%rsi)
addq $0x8, 0x8(%r14)
jmp 0x6ac36
movq %r14, %rdi
leaq -0x320(%rbp), %rdx
callq 0x333de
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x58(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rbx
movl $0x1, %r14d
cmpq $0xa, -0x30(%rbp)
jb 0x6aca6
movl $0x4, %r14d
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x6ac9d
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6aca3
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6aca6
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %r14d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x6ac68
addl $-0x3, %r14d
jmp 0x6aca6
addl $-0x2, %r14d
jmp 0x6aca6
decl %r14d
movl %r14d, %esi
leaq -0x310(%rbp), %rax
movq %rax, -0x320(%rbp)
leaq -0x320(%rbp), %r15
movq %r15, %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x320(%rbp), %rdi
movl %r14d, %esi
movq -0x30(%rbp), %rdx
callq 0x39c27
movb $0x1, %r14b
movq -0x128(%rbp), %rcx
movq -0x120(%rbp), %r8
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2e420
movq %rbx, %rdx
addq $0x10, %rdx
movq %rdx, (%rbx)
movq (%rax), %rsi
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rsi
je 0x6ad20
movq %rsi, (%rbx)
movq (%rcx), %rdx
movq %rdx, 0x10(%rbx)
jmp 0x6ad28
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
xorl %r14d, %r14d
movq -0x58(%rbp), %rdi
movq %rbx, %rsi
callq 0x329d8
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6ad66
callq 0x2e360
movl $0x48, %edi
callq 0x2e3a0
leaq -0x320(%rbp), %rbx
movq %rax, -0xe8(%rbp)
movq %rax, %rdi
callq 0x389cc
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x50(%rbp)
movq %rax, %rdi
callq 0x38fe6
movq %rbx, %rdi
callq 0x2e550
movl $0xb, %edx
movq %rbx, %rdi
leaq 0xf261(%rip), %rsi      # 0x7a014
callq 0x2e440
movq -0x90(%rbp), %rsi
movq -0x88(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movq %rax, %rdi
movq -0x30(%rbp), %rsi
callq 0x2e700
movl $0x2, %edx
movq %rax, %rdi
leaq 0xede7(%rip), %rsi      # 0x79bd0
callq 0x2e440
movq -0x60(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %r14
shlq $0x5, %r14
movq (%rcx,%r14), %rax
cmpq %rax, 0x8(%rcx,%r14)
je 0x6af6e
xorl %r12d, %r12d
movl $0x8, %r13d
xorl %r15d, %r15d
movq -0x8(%rax,%r13), %rcx
movq 0x40(%rcx), %rbx
addl (%rax,%r13), %r15d
movq %rbx, %rdi
leaq 0xd105(%rip), %rsi      # 0x77f34
callq 0x6f390
testb %al, %al
je 0x6ae96
movq (%rbx), %rax
leaq -0x498(%rbp), %rdi
movq %rbx, %rsi
callq *(%rax)
movq -0x498(%rbp), %rsi
movq -0x490(%rbp), %rdx
leaq -0x320(%rbp), %rdi
callq 0x2e440
movl $0x2, %edx
movq %rax, %rdi
leaq 0xafb5(%rip), %rsi      # 0x75e25
callq 0x2e440
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6af45
callq 0x2e360
jmp 0x6af45
movq %rbx, %rdi
leaq 0xaf70(%rip), %rsi      # 0x75e10
callq 0x6f390
testb %al, %al
je 0x6ba47
movq (%rbx), %rax
leaq -0x498(%rbp), %rdi
movq %rbx, %rsi
callq *(%rax)
movq -0x498(%rbp), %rsi
movq -0x490(%rbp), %rdx
leaq -0x320(%rbp), %rdi
callq 0x2e440
movl $0x2, %edx
movq %rax, %rdi
leaq 0xaf40(%rip), %rsi      # 0x75e25
callq 0x2e440
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6af02
callq 0x2e360
movq %rbx, %rdi
leaq 0x21724(%rip), %rsi     # 0x8c630
leaq 0x22565(%rip), %rdx     # 0x8d478
xorl %ecx, %ecx
callq 0x2e430
movq %rax, -0x498(%rbp)
movq -0x70(%rbp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x6af39
movq %rax, (%rsi)
addq $0x8, 0x8(%rdi)
jmp 0x6af45
leaq -0x498(%rbp), %rdx
callq 0x6ec86
incq %r12
movq -0x60(%rbp), %rax
movq (%rax), %rcx
movq (%rcx,%r14), %rax
movq 0x8(%rcx,%r14), %rcx
subq %rax, %rcx
sarq $0x4, %rcx
addq $0x10, %r13
cmpq %r12, %rcx
ja 0x6ae18
jmp 0x6af71
xorl %r15d, %r15d
movl $0x4, %edx
leaq -0x320(%rbp), %rdi
leaq 0xf108(%rip), %rsi      # 0x7a08c
callq 0x2e440
movl $0x58, %edi
callq 0x2e3a0
movl $0x20, %edi
movq %rax, -0x40(%rbp)
callq 0x2e3a0
movq %rax, %r14
movq %rax, %rdi
leaq -0x318(%rbp), %rsi
callq 0x2e660
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rdi
addq $0x10, %rax
movq %rax, (%rdi)
movb $0x1, %bl
movb $0x1, %r12b
movq %rdi, -0x38(%rbp)
leaq 0xf0ba(%rip), %rsi      # 0x7a091
leaq 0xf0bd(%rip), %rdx      # 0x7a09b
callq 0x33112
xorl %r12d, %r12d
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rsi
movl $0x1, %ebx
cmpq $0xa, -0x30(%rbp)
jb 0x6b042
movl $0x4, %ebx
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x6b03b
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6b040
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6b042
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x6b008
addl $-0x3, %ebx
jmp 0x6b042
addl $-0x2, %ebx
jmp 0x6b042
decl %ebx
movq %rsi, -0x48(%rbp)
movl %ebx, %esi
leaq -0x488(%rbp), %rax
movq %rax, -0x498(%rbp)
leaq -0x498(%rbp), %r13
movq %r13, %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x498(%rbp), %rdi
movl %ebx, %esi
movq -0x30(%rbp), %rdx
callq 0x39c27
movb $0x1, %bl
movl $0xa, %r8d
movb $0x1, %r12b
movq %r13, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0xeffc(%rip), %rcx      # 0x7a091
callq 0x2e420
movq -0x48(%rbp), %rcx
movq %rcx, %rdx
addq $0x10, %rdx
movq %rdx, (%rcx)
movq (%rax), %rdi
movq %rax, %r8
addq $0x10, %r8
cmpq %r8, %rdi
je 0x6b0c3
movq %rdi, (%rcx)
movq (%r8), %rdx
movq %rdx, 0x10(%rcx)
jmp 0x6b0cc
movupd (%r8), %xmm0
movupd %xmm0, (%rdx)
movq -0x38(%rbp), %rdx
movq 0x8(%rax), %rdi
movq %rdi, 0x8(%rcx)
movq %r8, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
xorl %r12d, %r12d
movq -0x40(%rbp), %rdi
movq %r14, %rsi
callq 0x3e566
movq -0x40(%rbp), %rax
movq %rax, -0x610(%rbp)
movq -0x68(%rbp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x6b119
movq %rax, (%rsi)
addq $0x8, 0x8(%rdi)
jmp 0x6b12a
xorl %r12d, %r12d
xorl %ebx, %ebx
leaq -0x610(%rbp), %rdx
callq 0x333de
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6b142
callq 0x2e360
leaq -0x498(%rbp), %rbx
movq %rbx, %rdi
callq 0x2e550
movl $0x17, %edx
movq %rbx, %rdi
leaq 0xef3c(%rip), %rsi      # 0x7a09c
callq 0x2e440
movq -0xb0(%rbp), %rsi
movq -0xa8(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movq %rax, %rdi
movq -0x30(%rbp), %rsi
callq 0x2e700
movq %rax, %rbx
movl $0x3, %edx
movq %rax, %rdi
leaq 0xea36(%rip), %rsi      # 0x79bcf
callq 0x2e440
movl $0xa, %edx
movq %rbx, %rdi
leaq 0xef07(%rip), %rsi      # 0x7a0b4
callq 0x2e440
movl $0x4, %edx
movq %rbx, %rdi
leaq 0xabed(%rip), %rsi      # 0x75dae
callq 0x2e440
movq -0x90(%rbp), %rsi
movq -0x88(%rbp), %rdx
movq %rbx, %rdi
callq 0x2e440
movq %rax, %rdi
movq -0x30(%rbp), %rsi
callq 0x2e700
movq %rax, %rbx
movl $0x2, %edx
movq %rax, %rdi
leaq 0xac2b(%rip), %rsi      # 0x75e25
callq 0x2e440
movl $0x4, %edx
movq %rbx, %rdi
leaq 0xc1a8(%rip), %rsi      # 0x773b6
callq 0x2e440
movl $0x18, %edx
movq %rbx, %rdi
leaq 0xee9d(%rip), %rsi      # 0x7a0bf
callq 0x2e440
movl $0x11, %edx
movq %rbx, %rdi
leaq 0xeea2(%rip), %rsi      # 0x7a0d8
callq 0x2e440
movq %rbx, %rdi
movl %r15d, %esi
callq 0x2e700
movq %rax, %rbx
movl $0x2, %edx
movq %rax, %rdi
leaq 0xabcd(%rip), %rsi      # 0x75e25
callq 0x2e440
movl $0x3, %edx
movq %rbx, %rdi
leaq 0xee21(%rip), %rsi      # 0x7a08d
callq 0x2e440
movl $0x58, %edi
callq 0x2e3a0
movl $0x20, %edi
movq %rax, -0x40(%rbp)
callq 0x2e3a0
movq %rax, %rbx
movq %rax, %rdi
leaq -0x490(%rbp), %rsi
callq 0x2e660
movl $0x20, %edi
callq 0x2e3a0
movq %rbx, -0x48(%rbp)
movq %rax, %rcx
addq $0x10, %rcx
movq %rcx, (%rax)
movb $0x1, %bl
movb $0x1, %r12b
movq %rax, -0x38(%rbp)
movq %rax, %rdi
leaq 0xee24(%rip), %rsi      # 0x7a0ea
leaq 0xee2c(%rip), %rdx      # 0x7a0f9
callq 0x33112
xorl %r12d, %r12d
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r14
movl $0x1, %ebx
cmpq $0xa, -0x30(%rbp)
jb 0x6b331
movl $0x4, %ebx
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x6b32a
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6b32f
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6b331
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x6b2f7
addl $-0x3, %ebx
jmp 0x6b331
addl $-0x2, %ebx
jmp 0x6b331
decl %ebx
movl %ebx, %esi
leaq -0x600(%rbp), %rax
movq %rax, -0x610(%rbp)
leaq -0x610(%rbp), %r13
movq %r13, %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x610(%rbp), %rdi
movl %ebx, %esi
movq -0x30(%rbp), %rdx
callq 0x39c27
movb $0x1, %bl
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %r8
movb $0x1, %r12b
movq %r13, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x2e420
movq %r14, %rdx
addq $0x10, %rdx
movq %rdx, (%r14)
movq (%rax), %rsi
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rsi
je 0x6b3ab
movq %rsi, (%r14)
movq (%rcx), %rdx
movq %rdx, 0x10(%r14)
jmp 0x6b3b3
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%r14)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
xorl %r12d, %r12d
movq -0x40(%rbp), %rdi
movq -0x48(%rbp), %rsi
movq -0x38(%rbp), %rdx
movq %r14, %rcx
callq 0x3e566
movq -0x40(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x68(%rbp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x6b404
movq %rax, (%rsi)
addq $0x8, 0x8(%rdi)
jmp 0x6b415
xorl %r12d, %r12d
xorl %ebx, %ebx
leaq -0x108(%rbp), %rdx
callq 0x333de
movq -0x610(%rbp), %rdi
leaq -0x600(%rbp), %rax
cmpq %rax, %rdi
je 0x6b42d
callq 0x2e360
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x48(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rbx
addq $0x10, %rax
movq %rax, (%rbx)
movb $0x1, %r14b
movq %rbx, %rdi
leaq 0xec9e(%rip), %rsi      # 0x7a0fa
leaq 0xecba(%rip), %rdx      # 0x7a11d
callq 0x33112
xorl %r14d, %r14d
movq -0x48(%rbp), %rdi
movq %rbx, %rsi
callq 0x329d8
movl $0x48, %edi
callq 0x2e3a0
movq %rax, -0x40(%rbp)
movq %rax, %rdi
callq 0x386a0
leaq -0x610(%rbp), %rbx
movq %rbx, %rdi
callq 0x2e550
movl $0x3, %edx
movq %rbx, %rdi
leaq 0xeb45(%rip), %rsi      # 0x79ff0
callq 0x2e440
movq %rbx, %rdi
movq -0x30(%rbp), %rsi
callq 0x2e700
movl $0x50, %edi
callq 0x2e3a0
movq %rax, -0x38(%rbp)
movl $0x50, %edi
callq 0x2e3a0
movq %rax, %r12
movl $0x48, %edi
callq 0x2e3a0
movq %rax, %r13
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rbx
addq $0x10, %rax
movq %rax, (%rbx)
movq -0x148(%rbp), %rsi
movq -0x140(%rbp), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0x32f92
movq %r13, %rdi
movq %rbx, %rsi
callq 0x329d8
movl $0x48, %edi
callq 0x2e3a0
movq %rax, %rbx
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r14
movq %rax, %rdi
leaq -0x608(%rbp), %rsi
callq 0x2e660
movq %rbx, %rdi
movq %r14, %rsi
callq 0x329d8
movq %r12, %rdi
movq %r13, %rsi
movq %rbx, %rdx
callq 0x3c766
movq -0x38(%rbp), %rdi
movl $0x2, %esi
movq %r12, %rdx
callq 0x3526c
movq -0x40(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x32998
movl $0x50, %edi
callq 0x2e3a0
movq %rax, %r14
movl $0x48, %edi
callq 0x2e3a0
movq %rax, %rbx
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r12
addq $0x10, %rax
movq %rax, (%r12)
movl $0x1, %esi
movq %r12, %rdi
movl $0x2d, %edx
callq 0x2e460
movq (%r12), %rax
movb $0x30, (%rax)
movq %rbx, %rdi
movq %r12, %rsi
callq 0x32c82
movq %r14, %rdi
movl $0x4, %esi
movq %rbx, %rdx
callq 0x3526c
movq -0x40(%rbp), %rdi
movq %r14, %rsi
callq 0x32998
movl $0x50, %edi
callq 0x2e3a0
movl $0x48, %edi
movq %rax, -0xe0(%rbp)
callq 0x2e3a0
movq %rax, -0x38(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %rsi
movl $0x1, %ebx
cmpq $0xa, -0x30(%rbp)
jb 0x6b666
movl $0x4, %ebx
movq -0x30(%rbp), %rax
cmpl $0x63, %eax
jbe 0x6b65f
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6b664
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6b666
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x6b62c
addl $-0x3, %ebx
jmp 0x6b666
addl $-0x2, %ebx
jmp 0x6b666
decl %ebx
movq %rsi, -0xd8(%rbp)
movl %ebx, %esi
leaq -0xf8(%rbp), %rax
movq %rax, -0x108(%rbp)
leaq -0x108(%rbp), %r12
movq %r12, %rdi
movl $0x2d, %edx
callq 0x2e460
movq -0x108(%rbp), %rdi
movl %ebx, %esi
movq -0x30(%rbp), %rdx
callq 0x39c27
movb $0x1, %bl
movq -0xb0(%rbp), %rcx
movq -0xa8(%rbp), %r8
movb $0x1, %r13b
movb $0x1, %r14b
movq %r12, %rdi
xorl %esi, %esi
xorl %edx, %edx
movq -0xe0(%rbp), %r12
callq 0x2e420
movq -0xd8(%rbp), %rsi
movq %rsi, %rdx
addq $0x10, %rdx
movq %rdx, (%rsi)
movq (%rax), %rdi
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdi
je 0x6b6f8
movq %rdi, (%rsi)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsi)
jmp 0x6b700
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
xorl %r13d, %r13d
movb $0x1, %r14b
movq -0x38(%rbp), %rdi
callq 0x32b5a
xorl %r13d, %r13d
xorl %r14d, %r14d
movq %r12, %rdi
movl $0x3, %esi
movq -0x38(%rbp), %rdx
callq 0x3526c
xorl %r13d, %r13d
xorl %r14d, %r14d
xorl %ebx, %ebx
movq -0x40(%rbp), %rdi
movq %r12, %rsi
callq 0x32998
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x6b769
callq 0x2e360
movl $0x50, %edi
callq 0x2e3a0
movq %rax, %rbx
movl $0x48, %edi
callq 0x2e3a0
movq %rax, %r12
movq %rbx, -0x38(%rbp)
movl $0x20, %edi
callq 0x2e3a0
movq %rax, %r13
movsd 0xe174(%rip), %xmm0     # 0x79910
movl %r15d, %edi
callq 0x2e620
cvttsd2si %xmm0, %r15
movq %r15, %rbx
negq %rbx
cmovsq %r15, %rbx
movl $0x1, %r14d
cmpq $0xa, %rbx
jb 0x6b813
movl $0x4, %r14d
movq %rbx, %rcx
cmpq $0x63, %rcx
jbe 0x6b80a
cmpq $0x3e7, %rcx            # imm = 0x3E7
jbe 0x6b810
cmpq $0x2710, %rcx           # imm = 0x2710
jb 0x6b813
movq %rcx, %rax
movabsq $0x346dc5d63886594b, %rdx # imm = 0x346DC5D63886594B
mulq %rdx
shrq $0xb, %rdx
addl $0x4, %r14d
cmpq $0x1869f, %rcx          # imm = 0x1869F
movq %rdx, %rcx
ja 0x6b7c8
addl $-0x3, %r14d
jmp 0x6b813
addl $-0x2, %r14d
jmp 0x6b813
decl %r14d
shrq $0x3f, %r15
leal (%r15,%r14), %esi
movq %r13, %rax
addq $0x10, %rax
movq %rax, (%r13)
movq %r13, %rdi
movl $0x2d, %edx
callq 0x2e460
addq (%r13), %r15
movq %r15, %rdi
movl %r14d, %esi
movq %rbx, %rdx
callq 0x6eda2
movq %r12, %rdi
movq %r13, %rsi
callq 0x32c82
movq -0x38(%rbp), %rbx
movq %rbx, %rdi
movl $0x4, %esi
movq %r12, %rdx
callq 0x3526c
movq -0x40(%rbp), %rdi
movq %rbx, %rsi
callq 0x32998
movl $0x60, %edi
callq 0x2e3a0
movq %rax, %rbx
movq %rax, %rdi
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x38bc2
movq -0x50(%rbp), %rdi
movq %rbx, %rsi
callq 0x32958
movl $0x58, %edi
callq 0x2e3a0
movq %rax, %rbx
movq %rax, %rdi
movq -0x58(%rbp), %rsi
movq -0xe8(%rbp), %rdx
movq -0x50(%rbp), %rcx
callq 0x391b4
movl $0x50, %edi
callq 0x2e3a0
movq %rax, %r14
movq %rax, %rdi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x326fe
movq %r14, -0x108(%rbp)
movq -0x68(%rbp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x6b8fe
movq %r14, (%rsi)
addq $0x8, 0x8(%rdi)
jmp 0x6b90a
leaq -0x108(%rbp), %rdx
callq 0x333de
leaq -0x610(%rbp), %rdi
movq 0x22690(%rip), %rbx     # 0x8dfa8
movq %rbx, %rsi
callq 0x2e230
leaq -0x5a0(%rbp), %rdi
callq 0x2e150
leaq -0x498(%rbp), %rdi
movq %rbx, %rsi
callq 0x2e230
leaq -0x428(%rbp), %rdi
callq 0x2e150
leaq -0x320(%rbp), %rdi
movq %rbx, %rsi
callq 0x2e230
leaq -0x2b0(%rbp), %rdi
callq 0x2e150
movq -0x30(%rbp), %rdx
incq %rdx
movq -0x60(%rbp), %rcx
movq 0x8(%rcx), %rax
subq (%rcx), %rax
sarq $0x5, %rax
movq %rdx, -0x30(%rbp)
cmpq %rdx, %rax
ja 0x6a6a1
movq 0x2261c(%rip), %rsi     # 0x8dfa8
leaq -0x788(%rbp), %rdi
callq 0x2e230
leaq -0x718(%rbp), %rdi
callq 0x2e150
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x6b9b9
callq 0x2e360
movq -0xb0(%rbp), %rdi
leaq -0xa0(%rbp), %rax
cmpq %rax, %rdi
je 0x6b9d1
callq 0x2e360
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rax
cmpq %rax, %rdi
je 0x6b9e9
callq 0x2e360
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
cmpq %rax, %rdi
je 0x6ba01
callq 0x2e360
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0x6ba19
callq 0x2e360
movq -0xd0(%rbp), %rdi
leaq -0xc0(%rbp), %rax
cmpq %rax, %rdi
je 0x6ba31
callq 0x2e360
movq -0x70(%rbp), %rax
addq $0x768, %rsp            # imm = 0x768
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xa2e6(%rip), %rdi      # 0x75d34
leaq 0xdf3a(%rip), %rsi      # 0x7998f
leaq 0xe5c4(%rip), %rcx      # 0x7a020
movl $0x3fa, %edx            # imm = 0x3FA
callq 0x2e2a0
jmp 0x6bf46
jmp 0x6babc
jmp 0x6babc
jmp 0x6babc
jmp 0x6babc
movq %rax, -0x30(%rbp)
movq %r12, %rdi
callq 0x2e360
xorl %r13d, %r13d
jmp 0x6ba9e
movq %rax, -0x30(%rbp)
movq %r15, %rdi
jmp 0x6baa6
jmp 0x6bf46
jmp 0x6babc
movq %rax, -0x30(%rbp)
jmp 0x6baab
movq %rax, -0x30(%rbp)
testb %r13b, %r13b
je 0x6baab
movq %r14, %rdi
callq 0x2e360
movq %rbx, %rdi
callq 0x2e360
movq -0x30(%rbp), %r13
jmp 0x6bfdb
movq %rax, %r13
jmp 0x6bffa
jmp 0x6bf4e
jmp 0x6bf46
jmp 0x6bf46
movq %rax, %r15
movb $0x1, %r14b
movb $0x1, %bl
jmp 0x6bed2
jmp 0x6bf4e
jmp 0x6bcff
jmp 0x6bcff
movq %rax, %r15
movb $0x1, %r13b
movb $0x1, %r14b
movb $0x1, %bl
jmp 0x6bec1
jmp 0x6bd0a
movq %rax, %rbx
movq %r13, %rdi
callq 0x2e360
jmp 0x6bcee
jmp 0x6bf4e
jmp 0x6bf76
movq %rax, %r14
movq %rbx, %rdi
callq 0x2e360
jmp 0x6bd2a
movq %rax, %r13
jmp 0x6bd6a
movq %rax, %r13
movq %r14, %rdi
callq 0x2e360
jmp 0x6bd45
jmp 0x6bf76
movq %rax, %r13
jmp 0x6be37
movq %rax, %r13
movb $0x1, %bl
jmp 0x6bee3
jmp 0x6bf76
movq %rax, %r13
movq %r12, %rdi
callq 0x2e360
jmp 0x6bd12
movq %rax, %r13
movq %rbx, %rdi
callq 0x2e360
jmp 0x6bd76
jmp 0x6bfb9
movq %rax, %r13
movq %r14, %rdi
callq 0x2e360
jmp 0x6bd80
jmp 0x6bf76
movq %rax, %r13
movb $0x1, %r12b
movb $0x1, %bl
jmp 0x6be60
movq %rax, %r13
movb $0x1, %r12b
movb $0x1, %bl
jmp 0x6be11
jmp 0x6bfb9
movq %rax, %r13
jmp 0x6bc1e
movq %rax, %r13
jmp 0x6bf36
jmp 0x6bf46
movq %rax, %r13
jmp 0x6bc06
jmp 0x6bf46
jmp 0x6bf46
movq %rax, %r13
movq -0xe8(%rbp), %rdi
jmp 0x6bf3a
movq %rax, %r13
movq -0x1a8(%rbp), %rdi
leaq -0x198(%rbp), %rax
cmpq %rax, %rdi
je 0x6bc06
callq 0x2e360
movq -0x168(%rbp), %rdi
leaq -0x158(%rbp), %rax
cmpq %rax, %rdi
je 0x6bc1e
callq 0x2e360
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6bc45
callq 0x2e360
jmp 0x6bc45
jmp 0x6bf46
movq %rax, %r13
jmp 0x6bc5d
movq %rax, %r13
movq -0x610(%rbp), %rdi
leaq -0x600(%rbp), %rax
cmpq %rax, %rdi
je 0x6bc5d
callq 0x2e360
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6bcaf
callq 0x2e360
jmp 0x6bcaf
movq %rax, %r13
jmp 0x6bdb7
jmp 0x6bcac
jmp 0x6bf46
movq %rax, %r13
movb $0x1, %r14b
jmp 0x6bdaa
movq %rax, %r14
movb $0x1, %r13b
movb $0x1, %bl
movb $0x1, %r15b
jmp 0x6bf10
movq %rax, %r13
movb $0x1, %r14b
jmp 0x6bddb
movq %rax, %r13
movq %r15, %rdi
jmp 0x6bf3a
movq %rax, %r13
movb $0x1, %bl
jmp 0x6bf2e
movq %rax, %r14
movb $0x1, %r13b
movb $0x1, %bl
jmp 0x6bf1d
jmp 0x6bf46
jmp 0x6bf46
movq %rax, %r13
movq %r14, %rdi
jmp 0x6bf3a
movq %rax, %r13
jmp 0x6bde8
movq %rax, %rbx
movq %r12, %rdi
callq 0x2e360
movq %rbx, %r13
movq -0x38(%rbp), %rbx
jmp 0x6bd02
movq %rax, %r13
movq %rbx, %rdi
jmp 0x6beee
movq %rax, %r13
jmp 0x6bd1a
movq %rax, %r13
movq %rbx, %rdi
callq 0x2e360
movq %r14, %rdi
jmp 0x6beee
jmp 0x6bf4e
movq %rax, %r14
movq %r13, %rdi
callq 0x2e360
movq %r14, %r13
jmp 0x6be93
movq %rax, %r13
jmp 0x6be9b
movq %rax, %r13
movq %rbx, %rdi
callq 0x2e360
jmp 0x6be93
movq %rax, %r13
jmp 0x6be21
movq %rax, %r13
testb %r14b, %r14b
je 0x6bd6a
movq %rbx, %rdi
callq 0x2e360
movq -0x48(%rbp), %rdi
jmp 0x6be3b
movq %rax, %r13
movb $0x1, %bl
jmp 0x6be2f
movq %rax, %r13
movb $0x1, %bl
jmp 0x6be7f
movq %rax, %r13
jmp 0x6be71
movq %rax, %r13
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6bdaa
callq 0x2e360
testb %r14b, %r14b
je 0x6bdb7
movq %rbx, %rdi
callq 0x2e360
movq -0x58(%rbp), %rdi
jmp 0x6bf3a
movq %rax, %r13
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6bddb
callq 0x2e360
testb %r14b, %r14b
je 0x6bde8
movq %rbx, %rdi
callq 0x2e360
movq -0x40(%rbp), %rdi
jmp 0x6bf3a
jmp 0x6bf46
movq %rax, %r13
movq -0x610(%rbp), %rdi
leaq -0x600(%rbp), %rax
cmpq %rax, %rdi
je 0x6be11
callq 0x2e360
testb %r12b, %r12b
je 0x6be1e
movq %r14, %rdi
callq 0x2e360
xorl %r12d, %r12d
testb %r12b, %r12b
je 0x6be2f
movq -0x38(%rbp), %rdi
callq 0x2e360
testb %bl, %bl
je 0x6bf79
movq -0x40(%rbp), %rdi
callq 0x2e360
jmp 0x6bf79
movq %rax, %r13
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6be60
callq 0x2e360
testb %r12b, %r12b
je 0x6be6e
movq -0x48(%rbp), %rdi
callq 0x2e360
xorl %r12d, %r12d
testb %r12b, %r12b
je 0x6be7f
movq -0x38(%rbp), %rdi
callq 0x2e360
testb %bl, %bl
je 0x6bfbc
movq -0x40(%rbp), %rdi
jmp 0x6bfb2
movq %rax, %r13
movq %r12, %rdi
callq 0x2e360
movq -0x38(%rbp), %rdi
jmp 0x6beee
jmp 0x6bfb9
movq %rax, %r15
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x6bec1
callq 0x2e360
testb %r13b, %r13b
je 0x6bed2
movq -0xd8(%rbp), %rdi
callq 0x2e360
testb %r14b, %r14b
je 0x6bee0
movq -0x38(%rbp), %rdi
callq 0x2e360
movq %r15, %r13
testb %bl, %bl
je 0x6bf51
movq -0xe0(%rbp), %rdi
callq 0x2e360
jmp 0x6bf51
movq %rax, %r14
movq -0x320(%rbp), %rdi
leaq -0x310(%rbp), %rax
cmpq %rax, %rdi
je 0x6bf10
callq 0x2e360
testb %r15b, %r15b
je 0x6bf1d
movq %r12, %rdi
callq 0x2e360
testb %r13b, %r13b
je 0x6bf2b
movq -0x58(%rbp), %rdi
callq 0x2e360
movq %r14, %r13
testb %bl, %bl
je 0x6bfdb
movq -0x50(%rbp), %rdi
callq 0x2e360
jmp 0x6bfdb
jmp 0x6bfb9
movq %rax, %r13
jmp 0x6bfdb
movq %rax, %r13
movq 0x22050(%rip), %rsi     # 0x8dfa8
leaq -0x610(%rbp), %rdi
callq 0x2e230
leaq -0x5a0(%rbp), %rdi
callq 0x2e150
jmp 0x6bf79
jmp 0x6bfb9
jmp 0x6bfb9
movq %rax, %r13
movq 0x22028(%rip), %rsi     # 0x8dfa8
leaq -0x498(%rbp), %rdi
callq 0x2e230
leaq -0x428(%rbp), %rdi
callq 0x2e150
jmp 0x6bfbc
jmp 0x6bf9c
movq %rax, %r13
movq -0x498(%rbp), %rdi
leaq -0x488(%rbp), %rax
cmpq %rax, %rdi
je 0x6bfbc
callq 0x2e360
jmp 0x6bfbc
movq %rax, %r13
movq 0x21fe5(%rip), %rsi     # 0x8dfa8
leaq -0x320(%rbp), %rdi
callq 0x2e230
leaq -0x2b0(%rbp), %rdi
callq 0x2e150
movq 0x21fc6(%rip), %rsi     # 0x8dfa8
leaq -0x788(%rbp), %rdi
callq 0x2e230
leaq -0x718(%rbp), %rdi
callq 0x2e150
leaq -0x80(%rbp), %rax
movq -0x90(%rbp), %rdi
cmpq %rax, %rdi
je 0x6c00f
callq 0x2e360
movq -0xb0(%rbp), %rdi
leaq -0xa0(%rbp), %rax
cmpq %rax, %rdi
je 0x6c027
callq 0x2e360
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rax
cmpq %rax, %rdi
je 0x6c03f
callq 0x2e360
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
cmpq %rax, %rdi
je 0x6c057
callq 0x2e360
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0x6c06f
callq 0x2e360
movq -0xd0(%rbp), %rdi
leaq -0xc0(%rbp), %rax
cmpq %rax, %rdi
je 0x6c087
callq 0x2e360
movq -0x70(%rbp), %rax
movq (%rax), %rdi
testq %rdi, %rdi
je 0x6c098
callq 0x2e360
movq %r13, %rdi
callq 0x2e730