// File: /workspace/github_cpp_makefile_star2_O2/Sooryakiran[P]dotV/src/multiplier.cpp
// Function: WALLACE_TREE_MULTIPLIER_PIPELINED::WALLACE_TREE_MULTIPLIER_PIPELINED(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, int)
WALLACE_TREE_MULTIPLIER_PIPELINED::WALLACE_TREE_MULTIPLIER_PIPELINED(string name,
                                                                    vector<wire> input_wires,
                                                                    wire output_wire,
                                                                    int n_bits,
                                                                    int pipeline_k){

    /*------------------------------------------------------------------------------------------
    First we do the basic setups and input/output declaration.
    Inputs:
        A : n_bit input number
        B : n_bit input number
        CLK : 1 bit clock
        P : 2 x n_bit output product
    ------------------------------------------------------------------------------------------*/
    this->name = name;
    this->inputs = input_wires;
    this->outputs.push_back(output_wire);
    this->n_bits = n_bits;

    this->declare("A", CHIP_INPUTS);
    this->declare("B", CHIP_INPUTS);
    this->declare("CLK", CHIP_INPUTS, 1);
    this->declare("P", CHIP_OUTPUTS, 2*n_bits);

    
    /*------------------------------------------------------------------------------------------
    Now we compute the first set of partial products. Partial products are stored in a vector of
    type cutwire

    For convinience during wiring, we declared a struct WALLACE_TREE_MULTIPLIER_PIPELINED::CutWire
    containing information about shift and wire length.

            typedef struct cut_wire{
                wire wire_id;
                int shift=0;
                int length=0;
            } CutWire;

    ------------------------------------------------------------------------------------------*/
    vector<WALLACE_TREE_MULTIPLIER_PIPELINED::CutWire> partial_products;

    for(int n=0; n<n_bits; n++){
        /*------------------------------------------------------------------------------------------
        For each bit compute the initial partial products and append it to the partial products 
        vector.
        ------------------------------------------------------------------------------------------*/
        wire partial_product = "WTM_PP_0_" + to_string(n);
        this->add_wire("[" + to_string(n_bits - 1) + ":0] " + partial_product);
        for(int i=0; i <n_bits; i++){
            AND curr_and("WTM_PP_AND_" + to_string(n) + "_" + to_string(i),
                        {"A[" + to_string(i) + "]", "B[" + to_string(n) + "]"},
                        partial_product + "[" + to_string(i) + "]");
            this->add_submodule(curr_and);
        }

        WALLACE_TREE_MULTIPLIER_PIPELINED::CutWire current_cutwire;
        current_cutwire.wire_id = partial_product;
        current_cutwire.shift = n;
        current_cutwire.length= n_bits;

        partial_products.push_back(current_cutwire);
    }

    int current_level = 1;

    /*------------------------------------------------------------------------------------------
    As long as there are more than 2 entries in the partial products, we wire the next level.
    ------------------------------------------------------------------------------------------*/
    while(partial_products.size()>2){
        /*------------------------------------------------------------------------------------------
        We declare a vector to hold next level partial products
        ------------------------------------------------------------------------------------------*/
        vector<WALLACE_TREE_MULTIPLIER_PIPELINED::CutWire> next_level_partial_products;

        /*------------------------------------------------------------------------------------------
        For each groups of 3 possible, we wire Carry Save Adder (csa) for the next level. 
        
        See WALLACE_TREE_MULTIPLIER_PIPELINED::make_csa(...) for mode details.
        ------------------------------------------------------------------------------------------*/
        for(int i=0; i < partial_products.size()/3; i++){
            
            WALLACE_TREE_MULTIPLIER_PIPELINED::CutWire o1, o2;
            make_csa("WTM_LEVEL_" + to_string(current_level) + "_GROUP_" + to_string(i),
                    partial_products.at(i*3),
                    partial_products.at(i*3+1),
                    partial_products.at(i*3+2),
                    &o1, &o2);
            
            next_level_partial_products.push_back(o1);
            next_level_partial_products.push_back(o2);
        }

        /*------------------------------------------------------------------------------------------
        If there were any left over partial products (not included in any groups of 3), we just add
        them to the next level.
        ------------------------------------------------------------------------------------------*/
        for(int i=(partial_products.size()/3)*3; i<partial_products.size(); i++){
            next_level_partial_products.push_back(partial_products.at(i));
        }


        /*------------------------------------------------------------------------------------------
        We update the partial products for the next level of iteration.
        ------------------------------------------------------------------------------------------*/
        partial_products = next_level_partial_products;


        /*------------------------------------------------------------------------------------------
        If current level is a multiple of k, pass the partial products through a FlipFlop
        ------------------------------------------------------------------------------------------*/        
        if(current_level != 0 && current_level%pipeline_k==0){
            for(int i=0; i< partial_products.size(); i++){
                wire curr_output_wire = "WTM_LEVEL_" + to_string(current_level) + "_FLIP_FLOP_" + to_string(i) + "_WIRE";
                this->add_wire("[" + to_string(partial_products.at(i).length - 1) + ":0] " + curr_output_wire);
                
                FLIP_FLOP_N_BIT curr_flipflop("WTM_LEVEL_" + to_string(current_level) + "_FLIP_FLOP_" + to_string(i),
                                             {partial_products.at(i).wire_id , "CLK"},
                                             curr_output_wire, partial_products.at(i).length);
                
                partial_products.at(i).wire_id = curr_output_wire;
                this->add_submodule(curr_flipflop);               
            }
        }

        current_level++;
    }

    /*------------------------------------------------------------------------------------------
    Now there are just 2 entries remaining in the partial products. We read the entries and con-
    vert bot of them to a normal wire.
    ------------------------------------------------------------------------------------------*/ 
    CutWire final_cut_1, final_cut_2;
    final_cut_1 = partial_products.at(0);
    final_cut_2 = partial_products.at(1);

    wire final_1 = "WTM_FINAL_1";
    wire final_2 = "WTM_FINAL_2";

    this->add_wire("[" + to_string(2*this->n_bits - 1) + ":0]" + final_1);
    this->add_wire("[" + to_string(2*this->n_bits - 1) + ":0]" + final_2);

    /*------------------------------------------------------------------------------------------
    Pad zeros as needed to the Least Significant Bits.
    ------------------------------------------------------------------------------------------*/ 
    if(final_cut_1.shift > 0){
        this->verilog("assign " + final_1 + "[" + to_string(final_cut_1.shift - 1) + ":0] = 0;" );
    }
    if(final_cut_2.shift > 0){
        this->verilog("assign " + final_2 + "[" + to_string(final_cut_2.shift - 1) + ":0] = 0;" );
    }

    /*------------------------------------------------------------------------------------------
    Pad zeros as needed to the Most Significant Bits.
    ------------------------------------------------------------------------------------------*/ 
    if(final_cut_1.length < 2*n_bits){
        this->verilog("assign " + final_1 + "[" + to_string(2*n_bits - 1) + ":" + to_string(final_cut_1.length) + "] = 0;");
    }
    if(final_cut_2.length < 2*n_bits){
        this->verilog("assign " + final_2 + "[" + to_string(2*n_bits - 1) + ":" + to_string(final_cut_2.length) + "] = 0;");
    }
    
    /*------------------------------------------------------------------------------------------
    Join the new wires to the partial products wire.
    ------------------------------------------------------------------------------------------*/ 
    JOIN_N_BIT joint_1("WTM_FINAL_JOINT_1",
                       final_1 + "["+ to_string(min(final_cut_1.length + final_cut_1.shift - 1, 2*n_bits -1)) + ":" + to_string(final_cut_1.shift) + "]",
                       final_cut_1.wire_id + "[" + to_string(min(final_cut_1.length, 2*n_bits) -1)  + ":0]", min(final_cut_1.length, 2*n_bits));

    JOIN_N_BIT joint_2("WTM_FINAL_JOINT_2",
                       final_2 + "["+ to_string(min(final_cut_2.length + final_cut_2.shift - 1, 2*n_bits -1)) + ":" + to_string(final_cut_2.shift) + "]",
                       final_cut_2.wire_id + "[" + to_string(min(final_cut_2.length, 2*n_bits) -1)  + ":0]", min(final_cut_2.length, 2*n_bits));

    
    /*------------------------------------------------------------------------------------------
    Add a CLA at the end to sum thr last two partial products. Note that the CLA has a register
    at its end, so we do not need to add a register at the end.
    ------------------------------------------------------------------------------------------*/ 
    CARRY_LOOK_AHEAD_ADDER_PIPELINED final_cla("WTM_CLA",
                                    {final_1, final_2, "CLK"},
                                    "P",
                                    2*n_bits, pipeline_k);

    this->add_submodule(joint_1);
    this->add_submodule(joint_2);   
    this->add_submodule(final_cla);


    /*------------------------------------------------------------------------------------------
    Now we use the auto_gen function to create the module definition.
    ------------------------------------------------------------------------------------------*/ 
    this->definition = this->auto_gen("module WALLACE_TREE_MULTIPLIER_" + to_string(n_bits) + "_BIT");
    this->generate = "WALLACE_TREE_MULTIPLIER_" + to_string(n_bits) + "_BIT " + this->name + " (" + this->inputs.at(0) + ", " + this->inputs.at(1) + ", " + this->outputs.at(0) + ");";
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1358, %rsp           # imm = 0x1358
movl %r9d, -0xbc(%rbp)
movl %r8d, %r13d
movq %rcx, %rbx
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %r12
callq 0xa690
movq %r12, %rdi
movq %r15, %rsi
movq %r12, -0x30(%rbp)
callq 0xa410
leaq 0x80(%r12), %rdi
movq %rdi, -0x250(%rbp)
movq %r14, %rsi
callq 0xa810
leaq 0x98(%r12), %rdi
movq %rdi, -0x248(%rbp)
movq %rbx, %rsi
callq 0xa3e0
movl %r13d, 0x190(%r12)
leaq 0x55db(%rip), %rsi      # 0x1f6f2
leaq -0xa68(%rbp), %rdi
leaq -0x408(%rbp), %rdx
callq 0xac60
leaq -0xa68(%rbp), %rsi
movq %r12, %rdi
xorl %edx, %edx
callq 0xa270
leaq -0xa68(%rbp), %rdi
callq 0xa370
leaq 0x536a(%rip), %rsi      # 0x1f4b8
leaq -0xa48(%rbp), %rdi
leaq -0x408(%rbp), %rdx
callq 0xac60
leaq -0xa48(%rbp), %rsi
movq -0x30(%rbp), %rdi
xorl %edx, %edx
callq 0xa270
leaq -0xa48(%rbp), %rdi
callq 0xa370
leaq 0x5567(%rip), %rsi      # 0x1f6ed
leaq -0xa28(%rbp), %rdi
leaq -0x408(%rbp), %rdx
callq 0xac60
leaq -0xa28(%rbp), %rsi
pushq $0x1
popq %rcx
movq -0x30(%rbp), %rdi
xorl %edx, %edx
callq 0xaea0
leaq -0xa28(%rbp), %rdi
callq 0xa370
leaq 0x5542(%rip), %rsi      # 0x1f703
leaq -0xa08(%rbp), %rdi
leaq -0x408(%rbp), %rdx
callq 0xac60
leal (,%r13,2), %ecx
leaq -0xa08(%rbp), %rsi
pushq $0x1
popq %rdx
movq -0x30(%rbp), %rdi
movl %edx, -0x34(%rbp)
movq %rcx, -0x258(%rbp)
callq 0xaea0
leaq -0xa08(%rbp), %rdi
callq 0xa370
leaq -0x50(%rbp), %rax
andq $0x0, 0x10(%rax)
xorps %xmm0, %xmm0
movaps %xmm0, (%rax)
leal -0x1(%r13), %eax
movl %eax, -0x1dc(%rbp)
leaq -0x580(%rbp), %rbx
xorl %esi, %esi
testl %r13d, %r13d
movl $0x0, %ecx
movq %r13, -0x198(%rbp)
cmovgl %r13d, %ecx
movl %ecx, -0x1e0(%rbp)
cmpl -0x1e0(%rbp), %esi
je 0x1a625
leaq -0x408(%rbp), %r14
movq %r14, %rdi
movl %esi, -0x98(%rbp)
callq 0xa9a0
leaq -0x758(%rbp), %rdi
leaq 0x57d1(%rip), %rsi      # 0x1fa40
movq %r14, %rdx
callq 0xac40
movq %r14, %rdi
callq 0xa370
leaq -0x190(%rbp), %r14
movq %r14, %rdi
movl -0x1dc(%rbp), %esi
callq 0xa9a0
leaq -0x5a0(%rbp), %r15
movq %r15, %rdi
leaq 0x4f0e(%rip), %rsi      # 0x1f1b3
movq %r14, %rdx
callq 0xac40
leaq -0x408(%rbp), %r14
movq %r14, %rdi
movq %r15, %rsi
leaq 0x52e8(%rip), %rdx      # 0x1f5a9
callq 0xa150
leaq -0xb80(%rbp), %r15
movq %r15, %rdi
movq %r14, %rsi
leaq -0x758(%rbp), %rdx
callq 0xaaf0
movq -0x30(%rbp), %rdi
movq %r15, %rsi
callq 0xa1d0
movq %r15, %rdi
callq 0xa370
leaq -0x408(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
xorl %r15d, %r15d
cmpl -0x198(%rbp), %r15d
je 0x1a5a4
leaq -0xe8(%rbp), %r14
movq %r14, %rdi
movl -0x98(%rbp), %esi
callq 0xa9a0
leaq -0x110(%rbp), %r13
movq %r13, %rdi
leaq 0x56fd(%rip), %rsi      # 0x1fa4a
movq %r14, %rdx
callq 0xac40
leaq -0x190(%rbp), %rdi
movq %r13, %rsi
leaq 0x56e2(%rip), %rdx      # 0x1fa48
callq 0xa150
leaq -0x220(%rbp), %r14
movq %r14, %rdi
movl %r15d, %esi
callq 0xa9a0
leaq -0x9e8(%rbp), %rdi
leaq -0x190(%rbp), %rsi
movq %r14, %rdx
callq 0xa640
leaq -0x90(%rbp), %r14
movq %r14, %rdi
movl %r15d, %esi
callq 0xa9a0
leaq -0x130(%rbp), %r13
movq %r13, %rdi
leaq 0x56a0(%rip), %rsi      # 0x1fa56
movq %r14, %rdx
callq 0xac40
leaq -0x5a0(%rbp), %rdi
movq %r13, %rsi
leaq 0x4e54(%rip), %rdx      # 0x1f223
callq 0xa150
leaq -0xb8(%rbp), %r14
movq %r14, %rdi
movl -0x98(%rbp), %esi
callq 0xa9a0
leaq -0x70(%rbp), %r13
movq %r13, %rdi
leaq 0x5662(%rip), %rsi      # 0x1fa59
movq %r14, %rdx
callq 0xac40
movq %rbx, %rdi
movq %r13, %rsi
leaq 0x4e17(%rip), %rdx      # 0x1f223
callq 0xa150
leaq -0x9c8(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
pushq $0x2
popq %rdx
leaq -0x240(%rbp), %rcx
callq 0xa170
leaq -0x1b8(%rbp), %rdi
leaq -0x758(%rbp), %rsi
leaq 0x4d70(%rip), %rdx      # 0x1f1b3
callq 0xa960
leaq -0x200(%rbp), %r14
movq %r14, %rdi
movl %r15d, %esi
callq 0xa9a0
leaq -0x1d8(%rbp), %r13
movq %r13, %rdi
leaq -0x1b8(%rbp), %rsi
movq %r14, %rdx
callq 0xa640
leaq -0xb60(%rbp), %r12
movq %r12, %rdi
movq %r13, %rsi
leaq 0x4d9c(%rip), %rdx      # 0x1f223
callq 0xa150
leaq -0x408(%rbp), %rdi
leaq -0x9e8(%rbp), %rsi
leaq -0x9c8(%rbp), %r13
movq %r13, %rdx
movq %r12, %rcx
callq 0xa240
movq %r12, %rdi
callq 0xa370
leaq -0x1d8(%rbp), %rdi
callq 0xa370
leaq -0x200(%rbp), %rdi
callq 0xa370
leaq -0x1b8(%rbp), %rdi
callq 0xa370
movq %r13, %rdi
callq 0xa550
pushq $0x20
popq %r12
leaq (%r12,%rbp), %rdi
addq $-0x5a0, %rdi           # imm = 0xFA60
callq 0xa370
addq $-0x20, %r12
cmpq $-0x20, %r12
jne 0x1a4e4
leaq -0x70(%rbp), %rdi
callq 0xa370
leaq -0xb8(%rbp), %rdi
callq 0xa370
leaq -0x130(%rbp), %rdi
callq 0xa370
leaq -0x90(%rbp), %rdi
callq 0xa370
leaq -0x9e8(%rbp), %rdi
callq 0xa370
leaq -0x220(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x110(%rbp), %rdi
callq 0xa370
leaq -0xe8(%rbp), %rdi
callq 0xa370
leaq -0x1378(%rbp), %r14
movq %r14, %rdi
leaq -0x408(%rbp), %r12
movq %r12, %rsi
callq 0xa850
movq -0x30(%rbp), %rdi
movq %r14, %rsi
callq 0xa680
movq %r14, %rdi
callq 0xa230
movq %r12, %rdi
callq 0xa230
incl %r15d
jmp 0x1a31a
leaq -0x3f8(%rbp), %rax
movq %rax, -0x408(%rbp)
andq $0x0, -0x400(%rbp)
movb $0x0, -0x3f8(%rbp)
andq $0x0, -0x3e8(%rbp)
leaq -0x408(%rbp), %r14
movq %r14, %rdi
leaq -0x758(%rbp), %rsi
callq 0xa410
movl -0x98(%rbp), %r15d
movl %r15d, -0x3e8(%rbp)
movq -0x198(%rbp), %rax
movl %eax, -0x3e4(%rbp)
leaq -0x50(%rbp), %rdi
movq %r14, %rsi
callq 0xadd0
movq %r14, %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
incl %r15d
movl %r15d, %esi
jmp 0x1a240
leaq -0xad0(%rbp), %r13
movq -0x50(%rbp), %rdi
movq -0x48(%rbp), %rcx
movq %rcx, %rax
subq %rdi, %rax
cqto
pushq $0x28
popq %rsi
idivq %rsi
cmpq $0x3, %rax
jb 0x1ac31
andq $0x0, -0x120(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x130(%rbp)
movq $0x0, -0x98(%rbp)
xorl %r14d, %r14d
movq %rcx, %rax
subq %rdi, %rax
cqto
pushq $0x28
popq %rsi
idivq %rsi
movq %rax, %rsi
xorl %edx, %edx
pushq $0x3
popq %r8
divq %r8
cmpq %r14, %rax
jbe 0x1a881
leaq -0x3f8(%rbp), %rax
movq %rax, -0x408(%rbp)
andq $0x0, -0x400(%rbp)
xorl %ecx, %ecx
movb %cl, -0x3f8(%rbp)
andq $0x0, -0x3e8(%rbp)
leaq -0x590(%rbp), %rax
movq %rax, -0x5a0(%rbp)
andq $0x0, -0x598(%rbp)
movb %cl, -0x590(%rbp)
andq $0x0, -0x580(%rbp)
leaq -0x110(%rbp), %rbx
movq %rbx, %rdi
movl -0x34(%rbp), %esi
callq 0xa9a0
leaq -0x190(%rbp), %r12
movq %r12, %rdi
leaq 0x5360(%rip), %rsi      # 0x1fa5c
movq %rbx, %rdx
callq 0xac40
leaq -0x758(%rbp), %rdi
movq %r12, %rsi
leaq 0x5352(%rip), %rdx      # 0x1fa67
callq 0xa150
leaq -0xe8(%rbp), %rbx
movq %rbx, %rdi
movl %r14d, %esi
callq 0xa9a0
leaq -0xaa8(%rbp), %rdi
leaq -0x758(%rbp), %rsi
movq %rbx, %rdx
callq 0xa640
leaq -0x50(%rbp), %rdi
movq -0x98(%rbp), %rbx
movq %rbx, %rsi
callq 0xadb0
leaq -0xb20(%rbp), %rdi
movq %rax, %rsi
callq 0xa5d0
leaq 0x1(%rbx), %rsi
leaq -0x50(%rbp), %rdi
callq 0xadb0
leaq -0xaf8(%rbp), %rdi
movq %rax, %rsi
callq 0xa5d0
leaq 0x2(%rbx), %rsi
leaq -0x50(%rbp), %rdi
callq 0xadb0
movq %r13, %rdi
movq %rax, %rsi
callq 0xa5d0
leaq -0x5a0(%rbp), %rax
movq %rax, (%rsp)
movq -0x30(%rbp), %rdi
leaq -0xaa8(%rbp), %rbx
movq %rbx, %rsi
leaq -0xb20(%rbp), %r12
movq %r12, %rdx
movq %r13, %r15
leaq -0xaf8(%rbp), %r13
movq %r13, %rcx
movq %r15, %r8
leaq -0x408(%rbp), %r9
callq 0xa2e0
movq %r15, %rdi
callq 0xa370
movq %r13, %rdi
callq 0xa370
movq %r12, %rdi
callq 0xa370
movq %rbx, %rdi
callq 0xa370
leaq -0xe8(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x110(%rbp), %rdi
callq 0xa370
leaq -0x130(%rbp), %r12
movq %r12, %rdi
leaq -0x408(%rbp), %r15
movq %r15, %rsi
callq 0xadd0
leaq -0x5a0(%rbp), %rbx
movq %r12, %rdi
movq %rbx, %rsi
callq 0xadd0
movq %rbx, %rdi
callq 0xa370
movq %r15, %rdi
callq 0xa370
incq %r14
movq -0x50(%rbp), %rdi
movq -0x48(%rbp), %rcx
addq $0x3, -0x98(%rbp)
leaq -0xad0(%rbp), %r13
jmp 0x1a66c
subl %edx, %esi
movslq %esi, %r14
leaq -0x110(%rbp), %r15
subq %rdi, %rcx
movq %rcx, %rax
cqto
pushq $0x28
popq %rcx
idivq %rcx
cmpq %r14, %rax
jbe 0x1a8c8
leaq -0x50(%rbp), %rdi
movq %r14, %rsi
callq 0xadb0
leaq -0x130(%rbp), %rdi
movq %rax, %rsi
callq 0xadd0
incq %r14
movq -0x50(%rbp), %rdi
movq -0x48(%rbp), %rcx
jmp 0x1a88d
leaq -0x50(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0xa5b0
movl -0x34(%rbp), %eax
cltd
idivl -0xbc(%rbp)
testl %edx, %edx
je 0x1a8fa
incl -0x34(%rbp)
leaq -0x130(%rbp), %rdi
callq 0xa250
jmp 0x1a62c
xorl %r14d, %r14d
movq -0x48(%rbp), %rax
subq -0x50(%rbp), %rax
cqto
pushq $0x28
popq %rcx
idivq %rcx
cmpq %r14, %rax
jbe 0x1a8e6
movq %r15, %rdi
movl -0x34(%rbp), %esi
callq 0xa9a0
leaq -0x190(%rbp), %rbx
movq %rbx, %rdi
leaq 0x512e(%rip), %rsi      # 0x1fa5c
movq %r15, %rdx
callq 0xac40
leaq -0x5a0(%rbp), %rdi
movq %rbx, %rsi
leaq 0x5128(%rip), %rdx      # 0x1fa6f
callq 0xa150
leaq -0xe8(%rbp), %rbx
movq %rbx, %rdi
movl %r14d, %esi
callq 0xa9a0
leaq -0x408(%rbp), %r12
movq %r12, %rdi
leaq -0x5a0(%rbp), %rsi
movq %rbx, %rdx
callq 0xa640
leaq -0x758(%rbp), %rdi
movq %r12, %rsi
leaq 0x5196(%rip), %rdx      # 0x1fb1e
callq 0xa150
movq %r12, %rdi
callq 0xa370
leaq -0xe8(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rbx
movq %rbx, %rdi
callq 0xa370
movq %r15, %rdi
callq 0xa370
leaq -0x50(%rbp), %rdi
movq %r14, %rsi
callq 0xadb0
movl 0x24(%rax), %esi
decl %esi
movq %rbx, %rdi
callq 0xa9a0
leaq -0x5a0(%rbp), %r12
movq %r12, %rdi
leaq 0x47c5(%rip), %rsi      # 0x1f1b3
movq %rbx, %rdx
callq 0xac40
leaq -0x408(%rbp), %rbx
movq %rbx, %rdi
movq %r12, %rsi
leaq 0x4b9f(%rip), %rdx      # 0x1f5a9
callq 0xa150
leaq -0xb40(%rbp), %r12
movq %r12, %rdi
movq %rbx, %rsi
leaq -0x758(%rbp), %rdx
callq 0xaaf0
movq -0x30(%rbp), %rdi
movq %r12, %rsi
callq 0xa1d0
movq %r12, %rdi
callq 0xa370
leaq -0x408(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0xe8(%rbp), %rbx
movq %rbx, %rdi
movl -0x34(%rbp), %esi
callq 0xa9a0
movq %r15, %rdi
leaq 0x4fe0(%rip), %rsi      # 0x1fa5c
movq %rbx, %rdx
callq 0xac40
leaq -0x190(%rbp), %rdi
movq %r15, %rsi
leaq 0x4fda(%rip), %rdx      # 0x1fa6f
callq 0xa150
leaq -0x220(%rbp), %rbx
movq %rbx, %rdi
movl %r14d, %esi
callq 0xa9a0
leaq -0x9b0(%rbp), %rdi
leaq -0x190(%rbp), %rsi
movq %rbx, %rdx
callq 0xa640
leaq -0x50(%rbp), %rdi
movq %r14, %rsi
callq 0xadb0
leaq -0x5a0(%rbp), %rdi
movq %rax, %rsi
callq 0xaa40
leaq -0x580(%rbp), %rdi
leaq 0x4c02(%rip), %rsi      # 0x1f6ed
leaq -0x90(%rbp), %rdx
callq 0xac60
leaq -0x990(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
pushq $0x2
popq %rdx
leaq -0x70(%rbp), %rcx
callq 0xa170
leaq -0xa88(%rbp), %rdi
leaq -0x758(%rbp), %rsi
callq 0xaa40
leaq -0x50(%rbp), %rdi
movq %r14, %rsi
callq 0xadb0
leaq -0x990(%rbp), %rbx
leaq -0xa88(%rbp), %r15
movl 0x24(%rax), %r8d
leaq -0x408(%rbp), %rdi
leaq -0x9b0(%rbp), %rsi
movq %rbx, %rdx
movq %r15, %rcx
callq 0xa510
movq %r15, %rdi
callq 0xa370
movq %rbx, %rdi
callq 0xa550
pushq $0x20
popq %r15
leaq (%r15,%rbp), %rdi
addq $-0x5a0, %rdi           # imm = 0xFA60
callq 0xa370
addq $-0x20, %r15
cmpq $-0x20, %r15
jne 0x1ab6f
leaq -0x9b0(%rbp), %rdi
callq 0xa370
leaq -0x220(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x110(%rbp), %r15
movq %r15, %rdi
callq 0xa370
leaq -0xe8(%rbp), %rdi
callq 0xa370
leaq -0x50(%rbp), %rdi
movq %r14, %rsi
callq 0xadb0
movq %rax, %rdi
leaq -0x758(%rbp), %rsi
callq 0xa410
leaq -0x11e0(%rbp), %rdi
leaq -0x408(%rbp), %rsi
callq 0xa850
movq -0x30(%rbp), %rdi
leaq -0x11e0(%rbp), %rbx
movq %rbx, %rsi
callq 0xa680
movq %rbx, %rdi
callq 0xa230
leaq -0x408(%rbp), %rdi
callq 0xa230
leaq -0x758(%rbp), %rdi
callq 0xa370
incq %r14
jmp 0x1a8fd
leaq -0x100(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
andq $0x0, 0x10(%rax)
leaq -0xd8(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
andq $0x0, 0x10(%rax)
leaq -0x50(%rbp), %rdi
xorl %esi, %esi
callq 0xadb0
leaq -0x110(%rbp), %rdi
movq %rax, %rsi
callq 0xa870
leaq -0x50(%rbp), %rdi
pushq $0x1
popq %rsi
callq 0xadb0
leaq -0xe8(%rbp), %rdi
movq %rax, %rsi
callq 0xa870
leaq 0x4dde(%rip), %rsi      # 0x1fa7b
leaq -0x220(%rbp), %rdi
leaq -0x408(%rbp), %rdx
callq 0xac60
movq -0x198(%rbp), %r14
movq -0x258(%rbp), %r15
leaq 0x4dc2(%rip), %rsi      # 0x1fa87
leaq -0x130(%rbp), %rdi
leaq -0x408(%rbp), %rdx
callq 0xac60
movq -0x30(%rbp), %rax
movl 0x190(%rax), %eax
leal -0x1(,%rax,2), %esi
leaq -0x758(%rbp), %rdi
callq 0xa9a0
leaq 0x44b7(%rip), %rsi      # 0x1f1b3
leaq -0x5a0(%rbp), %rdi
leaq -0x758(%rbp), %rdx
callq 0xac40
leaq 0x450b(%rip), %rdx      # 0x1f221
leaq -0x408(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
callq 0xa150
leaq -0x978(%rbp), %rdi
leaq -0x408(%rbp), %rsi
leaq -0x220(%rbp), %rdx
callq 0xaaf0
leaq -0x978(%rbp), %rsi
movq -0x30(%rbp), %rbx
movq %rbx, %rdi
callq 0xa1d0
leaq -0x978(%rbp), %rdi
callq 0xa370
leaq -0x408(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
movl 0x190(%rbx), %eax
leal -0x1(,%rax,2), %esi
leaq -0x758(%rbp), %rdi
callq 0xa9a0
leaq 0x440d(%rip), %rsi      # 0x1f1b3
leaq -0x5a0(%rbp), %rdi
leaq -0x758(%rbp), %rdx
callq 0xac40
leaq 0x4461(%rip), %rdx      # 0x1f221
leaq -0x408(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
callq 0xa150
leaq -0x958(%rbp), %rdi
leaq -0x408(%rbp), %rsi
leaq -0x130(%rbp), %rdx
callq 0xaaf0
leaq -0x958(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0xa1d0
leaq -0x958(%rbp), %rdi
callq 0xa370
leaq -0x408(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
cmpl $0x0, -0xf0(%rbp)
jle 0x1af02
leaq 0x4726(%rip), %rsi      # 0x1f567
leaq -0x758(%rbp), %rdi
leaq -0x220(%rbp), %rdx
callq 0xa6c0
leaq 0x4358(%rip), %rdx      # 0x1f1b3
leaq -0x5a0(%rbp), %rdi
leaq -0x758(%rbp), %rsi
callq 0xa150
movl -0xf0(%rbp), %esi
decl %esi
leaq -0x190(%rbp), %rdi
callq 0xa9a0
leaq -0x408(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
leaq -0x190(%rbp), %rdx
callq 0xa640
leaq 0x4bf0(%rip), %rdx      # 0x1fa93
leaq -0x938(%rbp), %rdi
leaq -0x408(%rbp), %rsi
callq 0xa150
leaq -0x938(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0xa590
leaq -0x938(%rbp), %rdi
callq 0xa370
leaq -0x408(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
cmpl $0x0, -0xc8(%rbp)
jle 0x1afd7
leaq 0x4651(%rip), %rsi      # 0x1f567
leaq -0x758(%rbp), %rdi
leaq -0x130(%rbp), %rdx
callq 0xa6c0
leaq 0x4283(%rip), %rdx      # 0x1f1b3
leaq -0x5a0(%rbp), %rdi
leaq -0x758(%rbp), %rsi
callq 0xa150
movl -0xc8(%rbp), %esi
decl %esi
leaq -0x190(%rbp), %rdi
callq 0xa9a0
leaq -0x408(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
leaq -0x190(%rbp), %rdx
callq 0xa640
leaq 0x4b1b(%rip), %rdx      # 0x1fa93
leaq -0x918(%rbp), %rdi
leaq -0x408(%rbp), %rsi
callq 0xa150
leaq -0x918(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0xa590
leaq -0x918(%rbp), %rdi
callq 0xa370
leaq -0x408(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
cmpl %r15d, -0xec(%rbp)
jge 0x1b109
leaq 0x457c(%rip), %rsi      # 0x1f567
leaq -0x90(%rbp), %rdi
leaq -0x220(%rbp), %rdx
callq 0xa6c0
leaq 0x41ae(%rip), %rdx      # 0x1f1b3
leaq -0x190(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0xa150
leal -0x1(%r15), %esi
leaq -0x70(%rbp), %rdi
callq 0xa9a0
leaq -0x758(%rbp), %rdi
leaq -0x190(%rbp), %rsi
leaq -0x70(%rbp), %rdx
callq 0xa640
leaq 0x4a59(%rip), %rdx      # 0x1fa9c
leaq -0x5a0(%rbp), %rdi
leaq -0x758(%rbp), %rsi
callq 0xa150
movl -0xec(%rbp), %esi
leaq -0xb8(%rbp), %rdi
callq 0xa9a0
leaq -0x408(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
callq 0xa640
leaq 0x4a0c(%rip), %rdx      # 0x1fa95
leaq -0x8f8(%rbp), %rdi
leaq -0x408(%rbp), %rsi
callq 0xa150
leaq -0x8f8(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0xa590
leaq -0x8f8(%rbp), %rdi
callq 0xa370
leaq -0x408(%rbp), %rdi
callq 0xa370
leaq -0xb8(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
leaq -0x70(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x90(%rbp), %rdi
callq 0xa370
cmpl %r15d, -0xc4(%rbp)
jge 0x1b23b
leaq 0x444a(%rip), %rsi      # 0x1f567
leaq -0x90(%rbp), %rdi
leaq -0x130(%rbp), %rdx
callq 0xa6c0
leaq 0x407c(%rip), %rdx      # 0x1f1b3
leaq -0x190(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0xa150
leal -0x1(%r15), %esi
leaq -0x70(%rbp), %rdi
callq 0xa9a0
leaq -0x758(%rbp), %rdi
leaq -0x190(%rbp), %rsi
leaq -0x70(%rbp), %rdx
callq 0xa640
leaq 0x4927(%rip), %rdx      # 0x1fa9c
leaq -0x5a0(%rbp), %rdi
leaq -0x758(%rbp), %rsi
callq 0xa150
movl -0xc4(%rbp), %esi
leaq -0xb8(%rbp), %rdi
callq 0xa9a0
leaq -0x408(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
callq 0xa640
leaq 0x48da(%rip), %rdx      # 0x1fa95
leaq -0x8d8(%rbp), %rdi
leaq -0x408(%rbp), %rsi
callq 0xa150
leaq -0x8d8(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0xa590
leaq -0x8d8(%rbp), %rdi
callq 0xa370
leaq -0x408(%rbp), %rdi
callq 0xa370
leaq -0xb8(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
leaq -0x70(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x90(%rbp), %rdi
callq 0xa370
leaq 0x485c(%rip), %rsi      # 0x1fa9e
leaq -0x8b8(%rbp), %rdi
leaq -0x240(%rbp), %rdx
callq 0xac60
leaq 0x3f57(%rip), %rdx      # 0x1f1b3
leaq -0x90(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0xa960
movl -0xf0(%rbp), %eax
movl -0xec(%rbp), %ecx
leal (%rcx,%rax), %esi
decl %esi
leal -0x1(%r15), %ebx
cmpl %esi, %ebx
cmovll %ebx, %esi
leaq -0x70(%rbp), %rdi
callq 0xa9a0
leaq -0x190(%rbp), %rdi
leaq -0x90(%rbp), %rsi
leaq -0x70(%rbp), %rdx
callq 0xa640
leaq 0x47ec(%rip), %rdx      # 0x1fa9c
leaq -0x758(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0xa150
movl -0xf0(%rbp), %esi
leaq -0xb8(%rbp), %rdi
callq 0xa9a0
leaq -0x5a0(%rbp), %rdi
leaq -0x758(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
callq 0xa640
leaq 0x3f2d(%rip), %rdx      # 0x1f223
leaq -0x898(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
callq 0xa150
leaq 0x3ea3(%rip), %rdx      # 0x1f1b3
leaq -0x1b8(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0xa960
movl -0xec(%rbp), %esi
cmpl %esi, %r15d
cmovll %r15d, %esi
decl %esi
leaq -0x200(%rbp), %rdi
callq 0xa9a0
leaq -0x1d8(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
leaq -0x200(%rbp), %rdx
callq 0xa640
leaq 0x3ec2(%rip), %rdx      # 0x1f221
leaq -0x878(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0xa150
movl -0xec(%rbp), %r8d
cmpl %r8d, %r15d
cmovll %r15d, %r8d
leaq -0x408(%rbp), %rdi
leaq -0x8b8(%rbp), %rsi
leaq -0x898(%rbp), %rdx
leaq -0x878(%rbp), %rcx
callq 0xa450
leaq -0x878(%rbp), %rdi
callq 0xa370
leaq -0x1d8(%rbp), %rdi
callq 0xa370
leaq -0x200(%rbp), %rdi
callq 0xa370
leaq -0x1b8(%rbp), %rdi
callq 0xa370
leaq -0x898(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0xb8(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x70(%rbp), %rdi
callq 0xa370
leaq -0x90(%rbp), %rdi
callq 0xa370
leaq -0x8b8(%rbp), %rdi
callq 0xa370
leaq 0x467b(%rip), %rsi      # 0x1fab0
leaq -0x858(%rbp), %rdi
leaq -0x5c0(%rbp), %rdx
callq 0xac60
leaq 0x3d64(%rip), %rdx      # 0x1f1b3
leaq -0x70(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0xa960
movl -0xc8(%rbp), %eax
movl -0xc4(%rbp), %ecx
leal (%rcx,%rax), %esi
decl %esi
cmpl %esi, %ebx
cmovll %ebx, %esi
leaq -0xb8(%rbp), %rdi
callq 0xa9a0
leaq -0x90(%rbp), %rdi
leaq -0x70(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
callq 0xa640
leaq 0x45fd(%rip), %rdx      # 0x1fa9c
leaq -0x190(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0xa150
movl -0xc8(%rbp), %esi
leaq -0x1d8(%rbp), %rdi
callq 0xa9a0
leaq -0x758(%rbp), %rdi
leaq -0x190(%rbp), %rsi
leaq -0x1d8(%rbp), %rdx
callq 0xa640
leaq 0x3d3e(%rip), %rdx      # 0x1f223
leaq -0x838(%rbp), %rdi
leaq -0x758(%rbp), %rsi
callq 0xa150
leaq 0x3cb4(%rip), %rdx      # 0x1f1b3
leaq -0x200(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0xa960
movl -0xc4(%rbp), %esi
cmpl %esi, %r15d
cmovll %r15d, %esi
decl %esi
leaq -0x240(%rbp), %rdi
callq 0xa9a0
leaq -0x1b8(%rbp), %rdi
leaq -0x200(%rbp), %rsi
leaq -0x240(%rbp), %rdx
callq 0xa640
leaq 0x3cd3(%rip), %rdx      # 0x1f221
leaq -0x818(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0xa150
movl -0xc4(%rbp), %r8d
cmpl %r8d, %r15d
cmovll %r15d, %r8d
leaq -0x5a0(%rbp), %rdi
leaq -0x858(%rbp), %rsi
leaq -0x838(%rbp), %rdx
leaq -0x818(%rbp), %rcx
callq 0xa450
leaq -0x818(%rbp), %rdi
callq 0xa370
leaq -0x1b8(%rbp), %rdi
callq 0xa370
leaq -0x240(%rbp), %rdi
callq 0xa370
leaq -0x200(%rbp), %rdi
callq 0xa370
leaq -0x838(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
leaq -0x1d8(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rbx
movq %rbx, %rdi
callq 0xa370
leaq -0x90(%rbp), %rdi
callq 0xa370
leaq -0xb8(%rbp), %rdi
callq 0xa370
leaq -0x70(%rbp), %rdi
callq 0xa370
leaq -0x858(%rbp), %rdi
callq 0xa370
leaq 0x449b(%rip), %rsi      # 0x1fac2
leaq -0x7f8(%rbp), %rdi
leaq -0x90(%rbp), %rdx
callq 0xac60
leaq -0x220(%rbp), %rsi
movq %rbx, %rdi
callq 0xaa40
leaq -0x170(%rbp), %rbx
leaq -0x130(%rbp), %rsi
movq %rbx, %rdi
callq 0xaa40
leaq -0x150(%rbp), %rbx
leaq 0x4080(%rip), %rsi      # 0x1f6ed
leaq -0x70(%rbp), %rdx
movq %rbx, %rdi
callq 0xac60
leaq -0x270(%rbp), %rdi
leaq -0x190(%rbp), %rsi
pushq $0x3
popq %rdx
leaq -0xb8(%rbp), %rcx
callq 0xa170
leaq 0x4066(%rip), %rsi      # 0x1f703
leaq -0x7d8(%rbp), %rdi
leaq -0x1d8(%rbp), %rdx
callq 0xac60
leaq -0x758(%rbp), %rdi
leaq -0x7f8(%rbp), %rsi
leaq -0x270(%rbp), %rdx
leaq -0x7d8(%rbp), %rcx
movl %r15d, %r8d
movl -0xbc(%rbp), %r9d
callq 0xa340
leaq -0x7d8(%rbp), %rdi
callq 0xa370
leaq -0x270(%rbp), %rdi
callq 0xa550
pushq $0x40
popq %rbx
leaq (%rbx,%rbp), %rdi
addq $-0x190, %rdi           # imm = 0xFE70
callq 0xa370
addq $-0x20, %rbx
cmpq $-0x20, %rbx
jne 0x1b6f6
leaq -0x7f8(%rbp), %rdi
callq 0xa370
leaq -0x1048(%rbp), %rdi
leaq -0x408(%rbp), %rsi
callq 0xa850
leaq -0x1048(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0xa680
leaq -0x1048(%rbp), %rdi
callq 0xa230
leaq -0xeb0(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
callq 0xa850
leaq -0xeb0(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0xa680
leaq -0xeb0(%rbp), %rdi
callq 0xa230
leaq -0xd18(%rbp), %rdi
leaq -0x758(%rbp), %rsi
callq 0xa850
leaq -0xd18(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0xa680
leaq -0xd18(%rbp), %rdi
callq 0xa230
leaq -0x70(%rbp), %rdi
movl %r14d, %esi
callq 0xa9a0
leaq 0x430e(%rip), %rsi      # 0x1faca
leaq -0x90(%rbp), %rdi
leaq -0x70(%rbp), %rdx
callq 0xac40
leaq 0x3dbf(%rip), %rdx      # 0x1f592
leaq -0x7b8(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0xa150
leaq -0x190(%rbp), %rdi
leaq -0x7b8(%rbp), %rdx
movq -0x30(%rbp), %rbx
movq %rbx, %rsi
callq 0xa3f0
leaq 0x20(%rbx), %rdi
leaq -0x190(%rbp), %rbx
movq %rbx, %rsi
callq 0xa920
movq %rbx, %rdi
callq 0xa370
leaq -0x7b8(%rbp), %rdi
callq 0xa370
leaq -0x90(%rbp), %rdi
callq 0xa370
leaq -0x70(%rbp), %rdi
callq 0xa370
leaq -0x778(%rbp), %rdi
movl %r14d, %esi
callq 0xa9a0
leaq 0x427f(%rip), %rsi      # 0x1fad1
leaq -0x798(%rbp), %rdi
leaq -0x778(%rbp), %rdx
callq 0xac40
movq -0x250(%rbp), %rbx
leaq 0x3953(%rip), %rdx      # 0x1f1c6
leaq -0x5c0(%rbp), %rdi
leaq -0x798(%rbp), %rsi
callq 0xa150
leaq -0x240(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0xaaf0
leaq 0x37c9(%rip), %rdx      # 0x1f06d
leaq -0x200(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0xa150
movq %rbx, %rdi
xorl %esi, %esi
callq 0xa200
leaq -0x1b8(%rbp), %rdi
leaq -0x200(%rbp), %rsi
movq %rax, %rdx
callq 0xaaf0
leaq 0x3792(%rip), %rdx      # 0x1f070
leaq -0x1d8(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0xa150
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0xa200
leaq -0xb8(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
movq %rax, %rdx
callq 0xaaf0
leaq 0x3757(%rip), %rdx      # 0x1f070
leaq -0x70(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0xa150
movq -0x248(%rbp), %rdi
xorl %esi, %esi
callq 0xa200
leaq -0x90(%rbp), %rdi
leaq -0x70(%rbp), %rsi
movq %rax, %rdx
callq 0xaaf0
leaq 0x3dc0(%rip), %rdx      # 0x1f711
leaq -0x190(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0xa150
movq -0x30(%rbp), %rdi
addq $0x40, %rdi
leaq -0x190(%rbp), %rbx
movq %rbx, %rsi
callq 0xa920
movq %rbx, %rdi
callq 0xa370
leaq -0x90(%rbp), %rdi
callq 0xa370
leaq -0x70(%rbp), %rdi
callq 0xa370
leaq -0xb8(%rbp), %rdi
callq 0xa370
leaq -0x1d8(%rbp), %rdi
callq 0xa370
leaq -0x1b8(%rbp), %rdi
callq 0xa370
leaq -0x200(%rbp), %rdi
callq 0xa370
leaq -0x240(%rbp), %rdi
callq 0xa370
leaq -0x5c0(%rbp), %rdi
callq 0xa370
leaq -0x798(%rbp), %rdi
callq 0xa370
leaq -0x778(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa230
leaq -0x5a0(%rbp), %rdi
callq 0xa230
leaq -0x408(%rbp), %rdi
callq 0xa230
leaq -0x130(%rbp), %rdi
callq 0xa370
leaq -0x220(%rbp), %rdi
callq 0xa370
leaq -0xe8(%rbp), %rdi
callq 0xa370
leaq -0x110(%rbp), %rdi
callq 0xa370
leaq -0x50(%rbp), %rdi
callq 0xa250
addq $0x1358, %rsp           # imm = 0x1358
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
leaq -0x8d8(%rbp), %rdi
jmp 0x1ba8f
jmp 0x1ba96
jmp 0x1baae
jmp 0x1babf
jmp 0x1bad0
jmp 0x1bb00
jmp 0x1bb05
movq %rax, %r14
leaq -0x8f8(%rbp), %rdi
callq 0xa370
jmp 0x1ba99
movq %rax, %r14
leaq -0x408(%rbp), %rdi
callq 0xa370
jmp 0x1bab1
jmp 0x1bb0a
jmp 0x1be67
movq %rax, %r14
leaq -0xb8(%rbp), %rdi
callq 0xa370
jmp 0x1bac2
movq %rax, %r14
leaq -0x5a0(%rbp), %rdi
callq 0xa370
jmp 0x1bad3
movq %rax, %r14
leaq -0x758(%rbp), %rdi
callq 0xa370
leaq -0x70(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x90(%rbp), %rdi
jmp 0x1be5d
movq %rax, %r14
jmp 0x1badf
movq %rax, %r14
jmp 0x1bae8
movq %rax, %r14
jmp 0x1baf4
jmp 0x1be67
movq %rax, %r14
leaq -0x918(%rbp), %rdi
jmp 0x1bb3d
jmp 0x1bb44
jmp 0x1bb55
jmp 0x1be42
jmp 0x1be53
jmp 0x1be67
movq %rax, %r14
leaq -0x938(%rbp), %rdi
callq 0xa370
jmp 0x1bb47
movq %rax, %r14
leaq -0x408(%rbp), %rdi
callq 0xa370
jmp 0x1bb58
movq %rax, %r14
leaq -0x190(%rbp), %rdi
jmp 0x1be3b
jmp 0x1be42
jmp 0x1be53
jmp 0x1be67
movq %rax, %r14
leaq -0x90(%rbp), %rdi
callq 0xa370
jmp 0x1becb
movq %rax, %r14
jmp 0x1bed4
movq %rax, %r14
jmp 0x1bef1
movq %rax, %r14
jmp 0x1bf0e
movq %rax, %r14
jmp 0x1bf1a
movq %rax, %r14
jmp 0x1bf26
movq %rax, %r14
jmp 0x1bf32
jmp 0x1bf75
movq %rax, %r14
leaq -0x7b8(%rbp), %rdi
callq 0xa370
jmp 0x1bbd0
movq %rax, %r14
leaq -0x90(%rbp), %rdi
callq 0xa370
jmp 0x1bbe1
movq %rax, %r14
leaq -0x70(%rbp), %rdi
jmp 0x1bf39
jmp 0x1bf75
movq %rax, %r14
leaq -0xd18(%rbp), %rdi
jmp 0x1bc11
movq %rax, %r14
leaq -0xeb0(%rbp), %rdi
jmp 0x1bc11
movq %rax, %r14
leaq -0x1048(%rbp), %rdi
callq 0xa230
jmp 0x1bf78
movq %rax, %r14
leaq -0x7d8(%rbp), %rdi
callq 0xa370
jmp 0x1bc2f
movq %rax, %r14
leaq -0x270(%rbp), %rdi
callq 0xa550
jmp 0x1bc40
movq %rax, %r14
pushq $0x40
popq %r15
leaq (%r15,%rbp), %rdi
addq $-0x190, %rdi           # imm = 0xFE70
callq 0xa370
addq $-0x20, %r15
cmpq $-0x20, %r15
jne 0x1bc44
movb $0x1, %al
jmp 0x1bf45
jmp 0x1bf40
movq %rax, %r14
jmp 0x1bf84
movq %rax, %r14
leaq -0x818(%rbp), %rdi
callq 0xa370
jmp 0x1bc86
movq %rax, %r14
leaq -0x1b8(%rbp), %rdi
callq 0xa370
jmp 0x1bc97
movq %rax, %r14
leaq -0x240(%rbp), %rdi
callq 0xa370
jmp 0x1bca8
movq %rax, %r14
leaq -0x200(%rbp), %rdi
callq 0xa370
jmp 0x1bcb9
movq %rax, %r14
leaq -0x838(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
leaq -0x1d8(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x90(%rbp), %rdi
callq 0xa370
leaq -0xb8(%rbp), %rdi
callq 0xa370
leaq -0x70(%rbp), %rdi
callq 0xa370
leaq -0x858(%rbp), %rdi
callq 0xa370
jmp 0x1bf90
movq %rax, %r14
jmp 0x1bcc5
movq %rax, %r14
jmp 0x1bcd1
movq %rax, %r14
jmp 0x1bcdd
movq %rax, %r14
jmp 0x1bce9
movq %rax, %r14
jmp 0x1bcf5
movq %rax, %r14
jmp 0x1bd01
movq %rax, %r14
jmp 0x1bd0a
movq %rax, %r14
jmp 0x1bf90
movq %rax, %r14
leaq -0x878(%rbp), %rdi
callq 0xa370
jmp 0x1bd5a
movq %rax, %r14
leaq -0x1d8(%rbp), %rdi
callq 0xa370
jmp 0x1bd6b
movq %rax, %r14
leaq -0x200(%rbp), %rdi
callq 0xa370
jmp 0x1bd7c
movq %rax, %r14
leaq -0x1b8(%rbp), %rdi
callq 0xa370
jmp 0x1bd8d
movq %rax, %r14
leaq -0x898(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0xb8(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x70(%rbp), %rdi
callq 0xa370
leaq -0x90(%rbp), %rdi
callq 0xa370
leaq -0x8b8(%rbp), %rdi
jmp 0x1be5d
movq %rax, %r14
jmp 0x1bd99
movq %rax, %r14
jmp 0x1bda5
movq %rax, %r14
jmp 0x1bdb1
movq %rax, %r14
jmp 0x1bdbd
movq %rax, %r14
jmp 0x1bdc9
movq %rax, %r14
jmp 0x1bdd2
movq %rax, %r14
jmp 0x1bdde
jmp 0x1be67
movq %rax, %r14
leaq -0x958(%rbp), %rdi
jmp 0x1be2a
jmp 0x1be31
jmp 0x1be42
jmp 0x1be53
jmp 0x1be67
movq %rax, %r14
leaq -0x978(%rbp), %rdi
callq 0xa370
jmp 0x1be34
movq %rax, %r14
leaq -0x408(%rbp), %rdi
callq 0xa370
jmp 0x1be45
movq %rax, %r14
leaq -0x5a0(%rbp), %rdi
callq 0xa370
jmp 0x1be56
movq %rax, %r14
leaq -0x758(%rbp), %rdi
callq 0xa370
jmp 0x1bf9c
movq %rax, %r14
jmp 0x1bf9c
movq %rax, %r14
jmp 0x1bfa8
jmp 0x1bfd4
movq %rax, %r14
leaq -0xa08(%rbp), %rdi
jmp 0x1beb9
jmp 0x1bfcc
movq %rax, %r14
leaq -0xa28(%rbp), %rdi
jmp 0x1beb9
jmp 0x1bfcc
movq %rax, %r14
leaq -0xa48(%rbp), %rdi
jmp 0x1beb9
jmp 0x1bfcc
movq %rax, %r14
leaq -0xa68(%rbp), %rdi
callq 0xa370
jmp 0x1c462
jmp 0x1bfcc
movq %rax, %r14
leaq -0x70(%rbp), %rdi
callq 0xa370
leaq -0xb8(%rbp), %rdi
callq 0xa370
jmp 0x1bee5
movq %rax, %r14
leaq -0x1d8(%rbp), %rdi
callq 0xa370
leaq -0x1b8(%rbp), %rdi
callq 0xa370
jmp 0x1bf02
movq %rax, %r14
leaq -0x200(%rbp), %rdi
callq 0xa370
leaq -0x240(%rbp), %rdi
callq 0xa370
leaq -0x5c0(%rbp), %rdi
callq 0xa370
leaq -0x798(%rbp), %rdi
callq 0xa370
leaq -0x778(%rbp), %rdi
callq 0xa370
jmp 0x1bf78
movq %rax, %r14
xorl %eax, %eax
leaq -0x190(%rbp), %r15
cmpq %rbx, %r15
sete %cl
orb %al, %cl
jne 0x1bf67
addq $-0x20, %rbx
movq %rbx, %rdi
callq 0xa370
cmpq %r15, %rbx
jne 0x1bf56
leaq -0x7f8(%rbp), %rdi
callq 0xa370
jmp 0x1bf84
movq %rax, %r14
leaq -0x758(%rbp), %rdi
callq 0xa230
leaq -0x5a0(%rbp), %rdi
callq 0xa230
leaq -0x408(%rbp), %rdi
callq 0xa230
leaq -0x130(%rbp), %rdi
callq 0xa370
leaq -0x220(%rbp), %rdi
callq 0xa370
leaq -0xe8(%rbp), %rdi
callq 0xa370
leaq -0x110(%rbp), %rdi
jmp 0x1c396
movq %rax, %r14
jmp 0x1c462
movq %rax, %r14
jmp 0x1bfb4
jmp 0x1c3ca
jmp 0x1c245
movq %rax, %r14
jmp 0x1c021
movq %rax, %r14
jmp 0x1c015
movq %rax, %r14
jmp 0x1c009
movq %rax, %r14
jmp 0x1c459
movq %rax, %r14
leaq -0xb80(%rbp), %rdi
callq 0xa370
leaq -0x408(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
jmp 0x1c38a
movq %rax, %r14
leaq -0x408(%rbp), %rdi
jmp 0x1c396
movq %rax, %r14
leaq -0x408(%rbp), %rdi
jmp 0x1c38a
movq %rax, %r14
leaq -0x11e0(%rbp), %rdi
callq 0xa230
jmp 0x1c3b5
movq %rax, %r14
jmp 0x1c154
movq %rax, %r14
jmp 0x1c160
movq %rax, %r14
leaq -0x5a0(%rbp), %rdi
callq 0xa370
jmp 0x1c182
movq %rax, %r14
jmp 0x1c18e
movq %rax, %r14
jmp 0x1c0f0
movq %rax, %r14
leaq -0x408(%rbp), %rdi
callq 0xa370
jmp 0x1c110
movq %rax, %r14
jmp 0x1c1a6
jmp 0x1c1c3
movq %rax, %r14
jmp 0x1c139
jmp 0x1c3ca
movq %rax, %r14
jmp 0x1c19a
movq %rax, %r14
jmp 0x1c1b2
movq %rax, %r14
jmp 0x1c12d
movq %rax, %r14
leaq -0xb40(%rbp), %rdi
callq 0xa370
jmp 0x1c0e4
movq %rax, %r14
leaq -0x408(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
jmp 0x1c101
movq %rax, %r14
leaq -0x190(%rbp), %rdi
jmp 0x1c1b9
movq %rax, %r14
leaq -0xe8(%rbp), %rdi
callq 0xa370
jmp 0x1c121
movq %rax, %r14
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x110(%rbp), %rdi
jmp 0x1c448
movq %rax, %r14
leaq -0xa88(%rbp), %rdi
callq 0xa370
leaq -0x990(%rbp), %rdi
callq 0xa550
pushq $0x20
popq %rbx
leaq (%rbx,%rbp), %rdi
addq $-0x5a0, %rdi           # imm = 0xFA60
callq 0xa370
addq $-0x20, %rbx
cmpq $-0x20, %rbx
jne 0x1c163
jmp 0x1c182
movq %rax, %r14
leaq -0x9b0(%rbp), %rdi
callq 0xa370
leaq -0x220(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x110(%rbp), %rdi
callq 0xa370
leaq -0xe8(%rbp), %rdi
callq 0xa370
jmp 0x1c3c1
movq %rax, %r14
jmp 0x1c3c1
movq %rax, %r14
jmp 0x1c41d
movq %rax, %r14
jmp 0x1c429
jmp 0x1c3cf
movq %rax, %r14
leaq -0xad0(%rbp), %rdi
callq 0xa370
jmp 0x1c3d7
movq %rax, %r14
jmp 0x1c411
movq %rax, %r14
jmp 0x1c405
movq %rax, %r14
jmp 0x1c218
movq %rax, %r14
leaq -0x1378(%rbp), %rdi
callq 0xa230
leaq -0x408(%rbp), %rdi
callq 0xa230
jmp 0x1c38f
movq %rax, %r14
jmp 0x1c25c
movq %rax, %r14
leaq -0x5a0(%rbp), %rbx
jmp 0x1c23d
movq %rax, %r14
xorl %r15d, %r15d
jmp 0x1c311
movq %rax, %r14
jmp 0x1c38f
movq %rax, %r14
leaq -0xb60(%rbp), %rdi
callq 0xa370
leaq -0x1d8(%rbp), %rdi
callq 0xa370
jmp 0x1c2b7
movq %rax, %r14
jmp 0x1c383
movq %rax, %r14
xorl %r15d, %r15d
jmp 0x1c305
movq %rax, %r14
jmp 0x1c377
movq %rax, %r14
xorl %r15d, %r15d
jmp 0x1c2fc
movq %rax, %r14
jmp 0x1c36b
movq %rax, %r14
jmp 0x1c2db
movq %rax, %r14
jmp 0x1c2cf
movq %rax, %r14
jmp 0x1c35f
movq %rax, %r14
jmp 0x1c353
movq %rax, %r14
jmp 0x1c2c3
movq %rax, %r14
leaq -0x200(%rbp), %rdi
callq 0xa370
leaq -0x1b8(%rbp), %rdi
callq 0xa370
leaq -0x9c8(%rbp), %rdi
callq 0xa550
pushq $0x20
popq %r15
leaq (%r15,%rbp), %rdi
addq $-0x5a0, %rdi           # imm = 0xFA60
callq 0xa370
addq $-0x20, %r15
cmpq $-0x20, %r15
jne 0x1c2df
movb $0x1, %r15b
leaq -0x70(%rbp), %rdi
callq 0xa370
leaq -0xb8(%rbp), %rdi
callq 0xa370
leaq -0x130(%rbp), %rdi
callq 0xa370
leaq -0x90(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rax
cmpq %rbx, %rax
sete %al
orb %r15b, %al
jne 0x1c353
leaq -0x5a0(%rbp), %r15
addq $-0x20, %rbx
movq %rbx, %rdi
callq 0xa370
cmpq %r15, %rbx
jne 0x1c342
leaq -0x9e8(%rbp), %rdi
callq 0xa370
leaq -0x220(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x110(%rbp), %rdi
callq 0xa370
leaq -0xe8(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
jmp 0x1c459
movq %rax, %r14
xorl %r15d, %r15d
leaq -0x5a0(%rbp), %rbx
jmp 0x1c31d
movq %rax, %r14
leaq -0x408(%rbp), %rdi
callq 0xa230
leaq -0x758(%rbp), %rdi
jmp 0x1c448
movq %rax, %r14
jmp 0x1c44d
movq %rax, %r14
jmp 0x1c435
movq %rax, %r14
leaq -0xaf8(%rbp), %rdi
callq 0xa370
jmp 0x1c3e8
movq %rax, %r14
leaq -0xb20(%rbp), %rdi
callq 0xa370
jmp 0x1c3f9
movq %rax, %r14
leaq -0xaa8(%rbp), %rdi
callq 0xa370
leaq -0xe8(%rbp), %rdi
callq 0xa370
leaq -0x758(%rbp), %rdi
callq 0xa370
leaq -0x190(%rbp), %rdi
callq 0xa370
leaq -0x110(%rbp), %rdi
callq 0xa370
leaq -0x5a0(%rbp), %rdi
callq 0xa370
leaq -0x408(%rbp), %rdi
callq 0xa370
leaq -0x130(%rbp), %rdi
callq 0xa250
leaq -0x50(%rbp), %rdi
callq 0xa250
movq -0x30(%rbp), %rdi
callq 0xa230
movq %r14, %rdi
callq 0xad00
nop