// File: /workspace/github_cpp_makefile_star2_O3/fjamour[P]icentral/src/bc.cc
// Function: brandes_delta_iter(graph_t&, unsigned int, unsigned int, unsigned int, int, int, std::vector<double, std::allocator<double>>&)
void brandes_delta_iter(graph_t& graph_in,
        node_id_t s,
        node_id_t src,
        node_id_t dst,
        int d_src,
        int d_dst,
        vector<double>& bc_vec)
{
    //make sure that @src is the closer to source node
    if(d_src > d_dst) {
        node_id_t       tmp_v;
        int             tmp_i;
        tmp_v = src; src = dst; dst = tmp_v;
        tmp_i = d_src; d_src = d_dst; d_dst = tmp_i;
        
    }
    
    //case 1: d_dst - d_src = 1 (the sort of easier case)
    if(d_dst - d_src == 1) {//if(d_dst - d_src == 1) {
        stack<node_id_t> S;
        vector<vector<node_id_t> > P;
        vector<int> old_path_cnt_vec;
        vector<int> new_path_cnt_vec; //NEW
        vector<int> dist_vec;
        queue<node_id_t> Q;
        vector<double> old_pair_dep_vec;
        vector<double> new_pair_dep_vec;//NEW

        P.resize(graph_in.size());
        new_path_cnt_vec.resize(graph_in.size());
        old_path_cnt_vec.resize(graph_in.size());
        dist_vec.resize(graph_in.size());
        fill(old_path_cnt_vec.begin(), old_path_cnt_vec.end(), 0);
        fill(new_path_cnt_vec.begin(), new_path_cnt_vec.end(), 0);
        fill(dist_vec.begin(), dist_vec.end(), -1);
        old_path_cnt_vec[s] = 1;
        new_path_cnt_vec[s] = 1;
        dist_vec[s] = 0;
        old_pair_dep_vec.resize(graph_in.size());
        new_pair_dep_vec.resize(graph_in.size());
        fill(old_pair_dep_vec.begin(), old_pair_dep_vec.end(), 0.0);
        fill(new_pair_dep_vec.begin(), new_pair_dep_vec.end(), 0.0);

        Q.push(s);

        while (!Q.empty()) {
            node_id_t v = Q.front();
            Q.pop();
            S.push(v);
            if(v == dst) {//NEW
                new_path_cnt_vec[v] += old_path_cnt_vec[src];
            }
            vector<node_id_t> nbr_vec = graph_in.get_nbrs(v);
            for (int nbr_idx = 0; nbr_idx < nbr_vec.size(); ++nbr_idx) {
                node_id_t w = nbr_vec[nbr_idx];
                if (dist_vec[w] < 0) {
                    Q.push(w);
                    dist_vec[w] = dist_vec[v] + 1;
                }
                if (dist_vec[w] == dist_vec[v] + 1) {
                    old_path_cnt_vec[w] += old_path_cnt_vec[v];
                    new_path_cnt_vec[w] += new_path_cnt_vec[v];//NEW
                    P[w].push_back(v);
                }
            }
        }

        while (!S.empty()) {
            node_id_t w = S.top();
            S.pop();
            for (int idx = 0; idx < P[w].size(); ++idx) {
                node_id_t v = P[w][idx];
                old_pair_dep_vec[v] += (((double) old_path_cnt_vec[v] / old_path_cnt_vec[w]) * (1 + old_pair_dep_vec[w]));
                new_pair_dep_vec[v] += (((double) new_path_cnt_vec[v] / new_path_cnt_vec[w]) * (1 + new_pair_dep_vec[w]));
            }
            //IMP: this is the only change that happens to P, @src should be added as parent for dst
            if(w == dst) {
                node_id_t v = src;
                new_pair_dep_vec[v] += (((double) new_path_cnt_vec[v] / new_path_cnt_vec[w]) * (1 + new_pair_dep_vec[w]));
            }
            if (w != s) {
                bc_vec[w] += (new_pair_dep_vec[w] - old_pair_dep_vec[w])/2.0;
                //bc_vec[w] += (0 - old_pair_dep_vec[w])/2.0;
            }
        }
    } else {
        vector<vector<node_id_t> > P;
        vector<int> path_cnt_vec;
        vector<int> path_cnt_inc_vec;
        vector<int> dist_vec;
        vector<double> pair_dep_vec;
        vector<bool>& visited_vec = graph_in.tmp_bool_vec;
        queue<node_id_t> Q;
        vector<node_id_t> S;
        
        P.resize(graph_in.size());
        dist_vec.resize(graph_in.size());
        path_cnt_vec.resize(graph_in.size());
        pair_dep_vec.resize(graph_in.size());
        path_cnt_inc_vec.resize(graph_in.size());
        
        fill(path_cnt_vec.begin(), path_cnt_vec.end(), 0);
        path_cnt_vec[s] = 1;
        fill(dist_vec.begin(), dist_vec.end(), -1);
        dist_vec[s] = 0;
        fill(pair_dep_vec.begin(), pair_dep_vec.end(), 0.0);
        fill(path_cnt_inc_vec.begin(), path_cnt_inc_vec.end(), 0);
        
        Q.push(s);
        while (!Q.empty()) {
            node_id_t v = Q.front();
            Q.pop();
            //S.push(v);
            S.push_back(v);
            vector<node_id_t> nbr_vec = graph_in.get_nbrs(v);
            for (int nbr_idx = 0; nbr_idx < nbr_vec.size(); ++nbr_idx) {
                node_id_t w = nbr_vec[nbr_idx];
                if (dist_vec[w] < 0) {
                    Q.push(w);
                    dist_vec[w] = dist_vec[v] + 1;
                }
                if (dist_vec[w] == dist_vec[v] + 1) {
                    path_cnt_vec[w] += path_cnt_vec[v];
                    P[w].push_back(v);
                }
            }
        }

        for(int i = S.size()-1; i >= 0; --i) {
            node_id_t w = S[i];
            for (int idx = 0; idx < P[w].size(); ++idx) {
                node_id_t v = P[w][idx];
                pair_dep_vec[v] += (((double) path_cnt_vec[v] / path_cnt_vec[w]) * (1 + pair_dep_vec[w]));
            }
            if (w != s) {
                bc_vec[w] -= pair_dep_vec[w]/2.0;
            }
        }

        //vector<int> old_dist_vec = dist_vec;    
        Q.push(dst);
        dist_vec[dst] = dist_vec[src] + 1;
        P[dst].clear();
        P[dst].push_back(src);
        path_cnt_inc_vec[dst] = path_cnt_vec[src];
        path_cnt_vec[dst] = path_cnt_inc_vec[dst];
        //tr1::unordered_set<node_id_t> visited_set;
        
        //visited_vec.resize(graph_in.size());
        fill(visited_vec.begin(), visited_vec.end(), false);
        visited_vec[dst] = true;
        //visited_set.insert(dst);
        
        while (!Q.empty()) {
            node_id_t v = Q.front();
            Q.pop();
            //S.push(v);
            vector<node_id_t> nbr_vec = graph_in.get_nbrs(v);
            for (int nbr_idx = 0; nbr_idx < nbr_vec.size(); ++nbr_idx) {
                node_id_t w = nbr_vec[nbr_idx];
                if (dist_vec[w] > (dist_vec[v] + 1)) {
                    dist_vec[w] = dist_vec[v] + 1;
                    P[w].clear();
                    P[w].push_back(v);
                    path_cnt_vec[w] = 0;
                    path_cnt_inc_vec[w] = path_cnt_inc_vec[v];
                    path_cnt_vec[w] += path_cnt_inc_vec[w];
//                    if(!visited_vec[w]) {
//                        visited_vec[w] = true;
//                        Q.push(w);
//                    }
                } else if (dist_vec[w] == (dist_vec[v] + 1)) {
                    path_cnt_inc_vec[w] += path_cnt_inc_vec[v];
                    path_cnt_vec[w] += path_cnt_inc_vec[v];
                    //if(old_dist_vec[w] == old_dist_vec[v] || v == dst) {
                    if(find(P[w].begin(), P[w].end(), v) == P[w].end()) {
                        P[w].push_back(v);
                    } 
//                    if(!visited_vec[w]) {
//                        visited_vec[w] = true;
//                        Q.push(w);
//                    }
                }
                if(!visited_vec[w]) {
                    visited_vec[w] = true;
                    Q.push(w);
                }
            }
        }
        
        
        //IMP::THIS CAN BE MADE MUCH BETTER!
        //HEAP FOR EXAMPLE
        //EVEN THE SWAPPING CAN BE DONE MORE EFFICIENTLY
        for(int i = 1; i < S.size(); ++i) {
            if(dist_vec[S[i-1]] > dist_vec[S[i]]) {
                int j = i;
                while(dist_vec[S[j-1]] > dist_vec[S[j]]) {
                    node_id_t tmp = S[j-1];
                    S[j-1] = S[j];
                    S[j] = tmp;
                    --j;
                }
            }
        }
        
        fill(pair_dep_vec.begin(), pair_dep_vec.end(), 0.0);
        for(int i = S.size()-1; i >= 0; --i) {
            node_id_t w = S[i];
            for (int idx = 0; idx < P[w].size(); ++idx) {
                node_id_t v = P[w][idx];
                pair_dep_vec[v] += (((double) path_cnt_vec[v] / path_cnt_vec[w]) * (1 + pair_dep_vec[w]));
            }
            if (w != s) {
                bc_vec[w] += pair_dep_vec[w]/2.0;
            }
        }
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x198, %rsp            # imm = 0x198
movq %rdi, %rbx
movl %esi, 0x10(%rsp)
movl %edx, 0x18(%rsp)
movl %ecx, 0x14(%rsp)
cmpl %r9d, %r8d
jle 0xbaf1
movl %ecx, 0x18(%rsp)
movl %edx, 0x14(%rsp)
movl %r8d, %eax
jmp 0xbaf7
movl %r9d, %eax
movl %r8d, %r9d
subl %r9d, %eax
xorpd %xmm0, %xmm0
cmpl $0x1, %eax
jne 0xbd63
leaq 0xf0(%rsp), %rdi
movapd %xmm0, 0x40(%rdi)
movapd %xmm0, 0x30(%rdi)
movapd %xmm0, 0x20(%rdi)
movapd %xmm0, 0x10(%rdi)
movapd %xmm0, (%rdi)
xorl %r14d, %r14d
xorl %esi, %esi
callq 0x6ad0
movq %r14, 0xe0(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq %r14, 0x90(%rsp)
movapd %xmm0, 0x80(%rsp)
movq %r14, 0x50(%rsp)
movapd %xmm0, 0x40(%rsp)
movq %r14, 0xb0(%rsp)
movapd %xmm0, 0xa0(%rsp)
leaq 0x140(%rsp), %rdi
movapd %xmm0, 0x40(%rdi)
movapd %xmm0, 0x30(%rdi)
movapd %xmm0, 0x20(%rdi)
movapd %xmm0, 0x10(%rdi)
movapd %xmm0, (%rdi)
xorl %esi, %esi
callq 0x6ad0
xorpd %xmm0, %xmm0
movapd %xmm0, 0x60(%rsp)
xorl %eax, %eax
movq %rax, 0x70(%rsp)
movq %rax, 0x30(%rsp)
movapd %xmm0, 0x20(%rsp)
movq %rbx, %rdi
callq 0x1dfcc
leaq 0xd0(%rsp), %rdi
movq %rax, %rsi
callq 0x5e32
movq %rbx, %rdi
callq 0x1dfcc
leaq 0x40(%rsp), %rdi
movq %rax, %rsi
callq 0xd848
movq %rbx, %rdi
callq 0x1dfcc
leaq 0x80(%rsp), %rdi
movq %rax, %rsi
callq 0xd848
movq %rbx, %rdi
callq 0x1dfcc
leaq 0xa0(%rsp), %rdi
movq %rax, %rsi
callq 0xd848
movq 0x80(%rsp), %r14
movq 0x88(%rsp), %rdx
cmpq %rdx, %r14
je 0xbc41
subq %r14, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x2110
movq 0x40(%rsp), %r15
movq 0x48(%rsp), %rdx
cmpq %rdx, %r15
je 0xbc69
subq %r15, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
movq %r15, %rdi
xorl %esi, %esi
callq 0x2110
movq 0xa0(%rsp), %r12
movq 0xa8(%rsp), %rdx
cmpq %rdx, %r12
je 0xbc9a
subq %r12, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
movq %r12, %rdi
movl $0xff, %esi
callq 0x2110
movl 0x10(%rsp), %eax
movl $0x1, %ecx
movl %ecx, (%r14,%rax,4)
movl 0x10(%rsp), %eax
movl %ecx, (%r15,%rax,4)
movl 0x10(%rsp), %eax
movl $0x0, (%r12,%rax,4)
movq %rbx, %rdi
callq 0x1dfcc
leaq 0x60(%rsp), %rdi
movq %rax, %rsi
callq 0x5be8
movq %rbx, %rdi
callq 0x1dfcc
leaq 0x20(%rsp), %rdi
movq %rax, %rsi
callq 0x5be8
movq 0x60(%rsp), %rdi
movq 0x68(%rsp), %rdx
cmpq %rdx, %rdi
je 0xbd0a
subq %rdi, %rdx
addq $-0x8, %rdx
andq $-0x8, %rdx
addq $0x8, %rdx
xorl %esi, %esi
callq 0x2110
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rdx
cmpq %rdx, %rdi
je 0xbd2f
subq %rdi, %rdx
addq $-0x8, %rdx
andq $-0x8, %rdx
addq $0x8, %rdx
xorl %esi, %esi
callq 0x2110
movq 0x170(%rsp), %rcx
movq 0x180(%rsp), %rax
addq $-0x4, %rax
cmpq %rax, %rcx
je 0xc275
movl 0x10(%rsp), %eax
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x170(%rsp)
jmp 0xc28f
movapd %xmm0, 0x140(%rsp)
xorl %eax, %eax
movq %rax, 0x150(%rsp)
movq %rax, 0xe0(%rsp)
movapd %xmm0, 0xd0(%rsp)
movq %rax, 0x90(%rsp)
movapd %xmm0, 0x80(%rsp)
movq %rax, 0x50(%rsp)
movapd %xmm0, 0x40(%rsp)
movq %rax, 0xb0(%rsp)
movapd %xmm0, 0xa0(%rsp)
leaq 0xf0(%rsp), %rdi
movapd %xmm0, 0x40(%rdi)
movapd %xmm0, 0x30(%rdi)
movapd %xmm0, 0x20(%rdi)
movapd %xmm0, 0x10(%rdi)
movapd %xmm0, (%rdi)
xorl %esi, %esi
callq 0x6ad0
xorpd %xmm0, %xmm0
movapd %xmm0, 0x60(%rsp)
movq $0x0, 0x70(%rsp)
movq %rbx, %rdi
callq 0x1dfcc
leaq 0x140(%rsp), %rdi
movq %rax, %rsi
callq 0x5e32
movq %rbx, %rdi
callq 0x1dfcc
leaq 0x40(%rsp), %rdi
movq %rax, %rsi
callq 0xd848
movq %rbx, %rdi
callq 0x1dfcc
leaq 0xd0(%rsp), %rdi
movq %rax, %rsi
callq 0xd848
movq %rbx, %rdi
callq 0x1dfcc
leaq 0xa0(%rsp), %rdi
movq %rax, %rsi
callq 0x5be8
movq %rbx, %rdi
callq 0x1dfcc
leaq 0x80(%rsp), %rdi
movq %rax, %rsi
callq 0xd848
movq 0xd0(%rsp), %r14
movq 0xd8(%rsp), %rdx
cmpq %rdx, %r14
je 0xbe91
subq %r14, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x2110
movl 0x10(%rsp), %eax
movl $0x1, (%r14,%rax,4)
movq 0x40(%rsp), %r14
movq 0x48(%rsp), %rdx
cmpq %rdx, %r14
je 0xbec8
subq %r14, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
movq %r14, %rdi
movl $0xff, %esi
callq 0x2110
movl 0x10(%rsp), %eax
movl $0x0, (%r14,%rax,4)
movq 0xa0(%rsp), %rdi
movq 0xa8(%rsp), %rdx
cmpq %rdx, %rdi
je 0xbeff
subq %rdi, %rdx
addq $-0x8, %rdx
andq $-0x8, %rdx
addq $0x8, %rdx
xorl %esi, %esi
callq 0x2110
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rdx
cmpq %rdx, %rdi
je 0xbf2a
subq %rdi, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
xorl %esi, %esi
callq 0x2110
movq 0x120(%rsp), %rax
movq 0x130(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xbf57
movl 0x10(%rsp), %ecx
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x120(%rsp)
jmp 0xbf71
leaq 0xf0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x75be
movq 0x120(%rsp), %rax
movq 0x100(%rsp), %rcx
cmpq %rcx, %rax
je 0xc168
leaq 0xb8(%rsp), %r15
leaq 0x20(%rsp), %r12
leaq 0xf0(%rsp), %r13
leaq 0xc(%rsp), %rbp
movl (%rcx), %eax
movl %eax, 0xb8(%rsp)
movq 0x110(%rsp), %rax
addq $-0x4, %rax
cmpq %rax, %rcx
je 0xbfbc
addq $0x4, %rcx
jmp 0xbffd
movq 0x108(%rsp), %rdi
movl $0x200, %esi            # imm = 0x200
callq 0x2250
movq 0x118(%rsp), %rax
leaq 0x8(%rax), %rcx
movq %rcx, 0x118(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x108(%rsp)
leaq 0x200(%rcx), %rax
movq %rax, 0x110(%rsp)
movq %rcx, 0x100(%rsp)
movq 0x68(%rsp), %rax
cmpq 0x70(%rsp), %rax
je 0xc025
movl 0xb8(%rsp), %esi
movl %esi, (%rax)
addq $0x4, %rax
movq %rax, 0x68(%rsp)
jmp 0xc03c
leaq 0x60(%rsp), %rdi
movq %rax, %rsi
movq %r15, %rdx
callq 0x6f14
movl 0xb8(%rsp), %esi
movq %rbx, %rdi
callq 0x1dc78
movq %r12, %rdi
movq %rax, %rsi
callq 0x6112
movq 0x20(%rsp), %rdi
cmpq %rdi, 0x28(%rsp)
je 0xc13d
xorl %r14d, %r14d
movl (%rdi,%r14,4), %eax
movl %eax, 0xc(%rsp)
movq 0x40(%rsp), %rcx
movl (%rcx,%rax,4), %edx
testl %edx, %edx
jns 0xc0c9
movq 0x120(%rsp), %rcx
movq 0x130(%rsp), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rcx
je 0xc09f
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x120(%rsp)
jmp 0xc0aa
movq %r13, %rdi
movq %rbp, %rsi
callq 0x75be
movl 0xb8(%rsp), %eax
movq 0x40(%rsp), %rcx
movl (%rcx,%rax,4), %eax
incl %eax
movl 0xc(%rsp), %edx
movl %eax, (%rcx,%rdx,4)
movl 0xc(%rsp), %eax
movl (%rcx,%rax,4), %edx
movl 0xb8(%rsp), %esi
movl (%rcx,%rsi,4), %ecx
incl %ecx
cmpl %ecx, %edx
jne 0xc120
movq 0xd0(%rsp), %rcx
movl (%rcx,%rsi,4), %edx
addl %edx, (%rcx,%rax,4)
movl 0xc(%rsp), %eax
movq 0x140(%rsp), %rcx
leaq (%rax,%rax,2), %rax
leaq (%rcx,%rax,8), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0xc118
movl 0xb8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0xc120
movq %r15, %rdx
callq 0x6f14
incq %r14
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rax
subq %rdi, %rax
sarq $0x2, %rax
cmpq %r14, %rax
ja 0xc062
testq %rdi, %rdi
je 0xc14f
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x100(%rsp), %rcx
movq 0x120(%rsp), %rax
cmpq %rcx, %rax
jne 0xbf9c
movq 0x60(%rsp), %rcx
movq 0x68(%rsp), %r10
subq %rcx, %r10
shrq $0x2, %r10
decl %r10d
js 0xc249
movq 0x140(%rsp), %rdx
movq 0xd0(%rsp), %rsi
movq 0xa0(%rsp), %rdi
movl 0x10(%rsp), %r8d
movq 0x1d0(%rsp), %r9
movq (%r9), %r9
movl %r10d, %r10d
movsd 0x23e8b(%rip), %xmm0    # 0x30040
movsd 0x23e73(%rip), %xmm1    # 0x30030
movl (%rcx,%r10,4), %r11d
leaq (%r11,%r11,2), %r15
movq (%rdx,%r15,8), %r14
movq 0x8(%rdx,%r15,8), %r15
subq %r14, %r15
je 0xc21e
sarq $0x2, %r15
xorps %xmm2, %xmm2
cvtsi2sdl (%rsi,%r11,4), %xmm2
cmpq $0x1, %r15
adcq $0x0, %r15
xorl %r12d, %r12d
movl (%r14,%r12,4), %r13d
xorps %xmm3, %xmm3
cvtsi2sdl (%rsi,%r13,4), %xmm3
divsd %xmm2, %xmm3
movsd (%rdi,%r11,8), %xmm4
addsd %xmm1, %xmm4
mulsd %xmm3, %xmm4
addsd (%rdi,%r13,8), %xmm4
movsd %xmm4, (%rdi,%r13,8)
incq %r12
cmpq %r12, %r15
jne 0xc1eb
cmpl %r8d, %r11d
je 0xc239
movsd (%rdi,%r11,8), %xmm2
mulsd %xmm0, %xmm2
addsd (%r9,%r11,8), %xmm2
movsd %xmm2, (%r9,%r11,8)
leaq -0x1(%r10), %r11
testq %r10, %r10
movq %r11, %r10
jg 0xc1bd
movq 0x130(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xc746
movl 0x14(%rsp), %ecx
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x120(%rsp)
jmp 0xc75c
leaq 0x140(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x75be
movq 0x170(%rsp), %rcx
movq 0x150(%rsp), %rax
cmpq %rax, %rcx
je 0xc4cc
leaq 0xc(%rsp), %r15
leaq 0xb8(%rsp), %r12
leaq 0x140(%rsp), %r13
leaq 0x1c(%rsp), %rbp
movl (%rax), %ecx
movl %ecx, 0xc(%rsp)
movq 0x160(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xc2d7
addq $0x4, %rax
jmp 0xc318
movq 0x158(%rsp), %rdi
movl $0x200, %esi            # imm = 0x200
callq 0x2250
movq 0x168(%rsp), %rax
leaq 0x8(%rax), %rcx
movq %rcx, 0x168(%rsp)
movq 0x8(%rax), %rax
movq %rax, 0x158(%rsp)
leaq 0x200(%rax), %rcx
movq %rcx, 0x160(%rsp)
movq %rax, 0x150(%rsp)
movq 0x120(%rsp), %rax
movq 0x130(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xc34d
movl 0xc(%rsp), %esi
movl %esi, (%rax)
addq $0x4, %rax
movq %rax, 0x120(%rsp)
jmp 0xc361
leaq 0xf0(%rsp), %rdi
movq %r15, %rsi
callq 0x75be
movl 0xc(%rsp), %esi
cmpl 0x14(%rsp), %esi
jne 0xc384
movl 0x18(%rsp), %eax
movq 0x80(%rsp), %rcx
movl (%rcx,%rax,4), %eax
movl %esi, %ecx
movq 0x40(%rsp), %rdx
addl %eax, (%rdx,%rcx,4)
movl 0xc(%rsp), %esi
movq %rbx, %rdi
callq 0x1dc78
movq %r12, %rdi
movq %rax, %rsi
callq 0x6112
movq 0xb8(%rsp), %rdi
cmpq %rdi, 0xc0(%rsp)
je 0xc4a1
xorl %r14d, %r14d
movl (%rdi,%r14,4), %eax
movl %eax, 0x1c(%rsp)
movq 0xa0(%rsp), %rcx
movl (%rcx,%rax,4), %edx
testl %edx, %edx
jns 0xc41a
movq 0x170(%rsp), %rcx
movq 0x180(%rsp), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rcx
je 0xc3f0
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x170(%rsp)
jmp 0xc3fb
movq %r13, %rdi
movq %rbp, %rsi
callq 0x75be
movl 0xc(%rsp), %eax
movq 0xa0(%rsp), %rcx
movl (%rcx,%rax,4), %eax
incl %eax
movl 0x1c(%rsp), %edx
movl %eax, (%rcx,%rdx,4)
movl 0x1c(%rsp), %eax
movl (%rcx,%rax,4), %edx
movl 0xc(%rsp), %esi
movl (%rcx,%rsi,4), %ecx
incl %ecx
cmpl %ecx, %edx
jne 0xc47e
movq 0x80(%rsp), %rcx
movl (%rcx,%rsi,4), %edx
addl %edx, (%rcx,%rax,4)
movl 0xc(%rsp), %eax
movq 0x40(%rsp), %rcx
movl (%rcx,%rax,4), %eax
movl 0x1c(%rsp), %edx
addl %eax, (%rcx,%rdx,4)
movl 0x1c(%rsp), %eax
movq 0xd0(%rsp), %rcx
leaq (%rax,%rax,2), %rax
leaq (%rcx,%rax,8), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0xc476
movl 0xc(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0xc47e
movq %r15, %rdx
callq 0x6f14
incq %r14
movq 0xb8(%rsp), %rdi
movq 0xc0(%rsp), %rax
subq %rdi, %rax
sarq $0x2, %rax
cmpq %r14, %rax
ja 0xc3b0
testq %rdi, %rdi
je 0xc4b6
movq 0xc8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x150(%rsp), %rax
cmpq %rax, 0x170(%rsp)
jne 0xc2ba
movq 0x120(%rsp), %rax
cmpq 0x100(%rsp), %rax
movq 0x1d0(%rsp), %r12
je 0xc69b
movq 0x128(%rsp), %rdi
movl $0x1fc, %ebx            # imm = 0x1FC
movsd 0x23b31(%rip), %xmm4    # 0x30030
cmpq %rdi, %rax
je 0xc50d
movl -0x4(%rax), %ebp
addq $-0x4, %rax
jmp 0xc564
movq 0x138(%rsp), %rax
movq -0x8(%rax), %rax
movl 0x1fc(%rax), %ebp
movl $0x200, %esi            # imm = 0x200
callq 0x2250
movsd 0x23aff(%rip), %xmm4    # 0x30030
movq 0x138(%rsp), %rax
leaq -0x8(%rax), %rcx
movq %rcx, 0x138(%rsp)
movq -0x8(%rax), %rdi
movq %rdi, 0x128(%rsp)
leaq 0x200(%rdi), %rax
movq %rax, 0x130(%rsp)
leaq (%rdi,%rbx), %rax
movq %rax, 0x120(%rsp)
movl %ebp, %ecx
movq 0xd0(%rsp), %rsi
leaq (%rcx,%rcx,2), %r8
movq (%rsi,%r8,8), %rdx
movq 0x8(%rsi,%r8,8), %rsi
subq %rdx, %rsi
je 0xc61e
sarq $0x2, %rsi
movq 0x80(%rsp), %r8
xorps %xmm0, %xmm0
cvtsi2sdl (%r8,%rcx,4), %xmm0
movq 0x60(%rsp), %r9
movq 0x40(%rsp), %r10
xorps %xmm1, %xmm1
cvtsi2sdl (%r10,%rcx,4), %xmm1
movq 0x20(%rsp), %r11
cmpq $0x1, %rsi
adcq $0x0, %rsi
xorl %r14d, %r14d
movl (%rdx,%r14,4), %r15d
xorps %xmm2, %xmm2
cvtsi2sdl (%r8,%r15,4), %xmm2
divsd %xmm0, %xmm2
movsd (%r9,%rcx,8), %xmm3
addsd %xmm4, %xmm3
mulsd %xmm2, %xmm3
addsd (%r9,%r15,8), %xmm3
movsd %xmm3, (%r9,%r15,8)
xorps %xmm2, %xmm2
cvtsi2sdl (%r10,%r15,4), %xmm2
divsd %xmm1, %xmm2
movsd (%r11,%rcx,8), %xmm3
addsd %xmm4, %xmm3
mulsd %xmm2, %xmm3
addsd (%r11,%r15,8), %xmm3
movsd %xmm3, (%r11,%r15,8)
incq %r14
cmpq %r14, %rsi
jne 0xc5c4
cmpl 0x14(%rsp), %ecx
jne 0xc65d
movl 0x18(%rsp), %edx
movq 0x40(%rsp), %rsi
xorps %xmm0, %xmm0
cvtsi2sdl (%rsi,%rdx,4), %xmm0
xorps %xmm1, %xmm1
cvtsi2sdl (%rsi,%rcx,4), %xmm1
divsd %xmm1, %xmm0
movq 0x20(%rsp), %rsi
movsd (%rsi,%rcx,8), %xmm1
addsd %xmm4, %xmm1
mulsd %xmm0, %xmm1
addsd (%rsi,%rdx,8), %xmm1
movsd %xmm1, (%rsi,%rdx,8)
cmpl 0x10(%rsp), %ecx
je 0xc68d
movq 0x20(%rsp), %rdx
movsd (%rdx,%rcx,8), %xmm0
movq 0x60(%rsp), %rdx
subsd (%rdx,%rcx,8), %xmm0
mulsd 0x239b9(%rip), %xmm0    # 0x30038
movq (%r12), %rdx
addsd (%rdx,%rcx,8), %xmm0
movsd %xmm0, (%rdx,%rcx,8)
cmpq 0x100(%rsp), %rax
jne 0xc4ff
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0xc6b2
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0xc6c9
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0x140(%rsp), %rdi
callq 0x690a
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0xc6f3
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0xc70a
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0xc727
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0xd0(%rsp), %rdi
callq 0x6034
leaq 0xf0(%rsp), %rdi
callq 0x690a
jmp 0xcce6
leaq 0xf0(%rsp), %rdi
leaq 0x14(%rsp), %rsi
callq 0x75be
movl 0x14(%rsp), %ecx
movl 0x18(%rsp), %eax
movq 0x40(%rsp), %rdx
movl (%rdx,%rax,4), %eax
incl %eax
movl %ecx, %ecx
movl %eax, (%rdx,%rcx,4)
movl 0x14(%rsp), %eax
movq 0x140(%rsp), %rcx
leaq (%rax,%rax,2), %rax
leaq (%rcx,%rax,8), %rdi
movq (%rdi), %rax
movq 0x8(%rdi), %rsi
cmpq %rax, %rsi
je 0xc796
movq %rax, 0x8(%rdi)
movq %rax, %rsi
cmpq 0x10(%rdi), %rsi
je 0xc7ac
movl 0x18(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0xc7ba
leaq 0x18(%rsp), %rdx
callq 0x6f14
movl 0x18(%rsp), %eax
movl %eax, %eax
movq 0xd0(%rsp), %rcx
movl (%rcx,%rax,4), %eax
movl 0x14(%rsp), %edx
movq 0x80(%rsp), %rsi
movl %eax, (%rsi,%rdx,4)
movl 0x14(%rsp), %eax
movl (%rsi,%rax,4), %edx
movl %edx, (%rcx,%rax,4)
movq 0x90(%rbx), %rdi
movq 0xa0(%rbx), %r14
movl 0xa8(%rbx), %ebp
cmpq %r14, %rdi
je 0xc808
movq %r14, %rdx
subq %rdi, %rdx
xorl %esi, %esi
callq 0x2110
jmp 0xc80b
movq %rdi, %r14
testl %ebp, %ebp
je 0xc824
negb %bpl
movq $-0x1, %rax
movl %ebp, %ecx
shrq %cl, %rax
notq %rax
andq %rax, (%r14)
movl 0x14(%rsp), %ecx
movq 0x90(%rbx), %rax
movl %ecx, %edx
movl $0x1, %esi
shlq %cl, %rsi
shrl $0x6, %edx
orq %rsi, (%rax,%rdx,8)
movq 0x100(%rsp), %rax
cmpq %rax, 0x120(%rsp)
je 0xcae4
leaq 0x20(%rsp), %r14
leaq 0xb8(%rsp), %r15
leaq 0xf0(%rsp), %r12
leaq 0xc(%rsp), %r13
movl (%rax), %esi
movl %esi, 0xb8(%rsp)
movq 0x110(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xc890
addq $0x4, %rax
jmp 0xc8d8
movq 0x108(%rsp), %rdi
movl $0x200, %esi            # imm = 0x200
callq 0x2250
movq 0x118(%rsp), %rax
leaq 0x8(%rax), %rcx
movq %rcx, 0x118(%rsp)
movq 0x8(%rax), %rax
movq %rax, 0x108(%rsp)
leaq 0x200(%rax), %rcx
movq %rcx, 0x110(%rsp)
movl 0xb8(%rsp), %esi
movq %rax, 0x100(%rsp)
movq %rbx, %rdi
callq 0x1dc78
movq %r14, %rdi
movq %rax, %rsi
callq 0x6112
movq 0x20(%rsp), %rdi
cmpq %rdi, 0x28(%rsp)
je 0xcabc
xorl %ebp, %ebp
movl (%rdi,%rbp,4), %eax
movl %eax, 0xc(%rsp)
movq 0x40(%rsp), %rdx
movl 0xb8(%rsp), %ecx
movl (%rdx,%rcx,4), %esi
incl %esi
cmpl %esi, (%rdx,%rax,4)
jle 0xc96c
movl %esi, (%rdx,%rax,4)
movl 0xc(%rsp), %eax
movq 0x140(%rsp), %rcx
leaq (%rax,%rax,2), %rax
leaq (%rcx,%rax,8), %rdi
movq (%rdi), %rax
movq 0x8(%rdi), %rsi
cmpq %rax, %rsi
je 0xc94c
movq %rax, 0x8(%rdi)
movq %rax, %rsi
cmpq 0x10(%rdi), %rsi
je 0xc9f5
movl 0xb8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0xc9fd
jne 0xca33
movq 0x80(%rsp), %rdx
movl (%rdx,%rcx,4), %ecx
addl %ecx, (%rdx,%rax,4)
movl 0xb8(%rsp), %eax
movl (%rdx,%rax,4), %eax
movl 0xc(%rsp), %ecx
movq 0xd0(%rsp), %rdx
addl %eax, (%rdx,%rcx,4)
movl 0xc(%rsp), %eax
movq 0x140(%rsp), %rcx
leaq (%rax,%rax,2), %rax
movq (%rcx,%rax,8), %rdi
movq 0x8(%rcx,%rax,8), %rsi
movq %r15, %rdx
callq 0x7b97
movl 0xc(%rsp), %edx
movq 0x140(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
movq 0x8(%rcx,%rdx,8), %rsi
cmpq %rsi, %rax
jne 0xca33
leaq (%rcx,%rdx,8), %rdi
cmpq 0x10(%rdi), %rax
je 0xcaaf
movl 0xb8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0xca33
movq %r15, %rdx
callq 0x6f14
movl 0xc(%rsp), %eax
movq 0xd0(%rsp), %rcx
movl $0x0, (%rcx,%rax,4)
movl 0xb8(%rsp), %eax
movq 0x80(%rsp), %rdx
movl (%rdx,%rax,4), %eax
movl 0xc(%rsp), %esi
movl %eax, (%rdx,%rsi,4)
movl 0xc(%rsp), %eax
movl (%rdx,%rax,4), %edx
addl %edx, (%rcx,%rax,4)
movl 0xc(%rsp), %ecx
movq 0x90(%rbx), %rax
movl $0x1, %edx
shlq %cl, %rdx
movl %ecx, %esi
shrl $0x6, %esi
movq (%rax,%rsi,8), %rdi
btq %rcx, %rdi
jb 0xca90
orq %rdi, %rdx
movq %rdx, (%rax,%rsi,8)
movq 0x120(%rsp), %rax
movq 0x130(%rsp), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rax
je 0xca85
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x120(%rsp)
jmp 0xca90
movq %r12, %rdi
movq %r13, %rsi
callq 0x75be
incq %rbp
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rax
subq %rdi, %rax
sarq $0x2, %rax
cmpq %rbp, %rax
ja 0xc905
jmp 0xcabc
movq %r15, %rdx
callq 0x6f14
jmp 0xca33
testq %rdi, %rdi
je 0xcace
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x100(%rsp), %rax
cmpq %rax, 0x120(%rsp)
jne 0xc870
movq 0x60(%rsp), %rbx
movq 0x68(%rsp), %r15
subq %rbx, %r15
sarq $0x2, %r15
cmpq $0x2, %r15
movq 0x1d0(%rsp), %r12
jb 0xcb5b
movq 0x40(%rsp), %rax
leaq -0x2(%r15), %rcx
movl $0x1, %edx
xorl %edi, %edi
movq %rbx, %rsi
movl -0x4(%rbx,%rdx,4), %r9d
movl (%rbx,%rdx,4), %r8d
movl (%rax,%r9,4), %r10d
cmpl (%rax,%r8,4), %r10d
jle 0xcb48
movl %r8d, %r10d
movq %rsi, %r11
movl %r8d, (%r11)
movl %r9d, 0x4(%r11)
movl -0x4(%r11), %r9d
addq $-0x4, %r11
movl (%rax,%r9,4), %ebp
cmpl (%rax,%r10,4), %ebp
jg 0xcb2f
incq %rdx
leaq 0x1(%rdi), %r8
addq $0x4, %rsi
cmpq %rcx, %rdi
movq %r8, %rdi
jne 0xcb16
movq 0xa0(%rsp), %r14
movq 0xa8(%rsp), %rdx
cmpq %rdx, %r14
je 0xcb89
subq %r14, %rdx
addq $-0x8, %rdx
andq $-0x8, %rdx
addq $0x8, %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x2110
decl %r15d
js 0xcc49
movq 0x140(%rsp), %rax
movq 0xd0(%rsp), %rcx
movl 0x10(%rsp), %edx
movq (%r12), %rsi
movl %r15d, %edi
movsd 0x23483(%rip), %xmm0    # 0x30038
movsd 0x23473(%rip), %xmm1    # 0x30030
movl (%rbx,%rdi,4), %r8d
leaq (%r8,%r8,2), %r10
movq (%rax,%r10,8), %r9
movq 0x8(%rax,%r10,8), %r10
subq %r9, %r10
je 0xcc1e
sarq $0x2, %r10
xorps %xmm2, %xmm2
cvtsi2sdl (%rcx,%r8,4), %xmm2
cmpq $0x1, %r10
adcq $0x0, %r10
xorl %r11d, %r11d
movl (%r9,%r11,4), %r15d
xorps %xmm3, %xmm3
cvtsi2sdl (%rcx,%r15,4), %xmm3
divsd %xmm2, %xmm3
movsd (%r14,%r8,8), %xmm4
addsd %xmm1, %xmm4
mulsd %xmm3, %xmm4
addsd (%r14,%r15,8), %xmm4
movsd %xmm4, (%r14,%r15,8)
incq %r11
cmpq %r11, %r10
jne 0xcbeb
cmpl %edx, %r8d
je 0xcc39
movsd (%r14,%r8,8), %xmm2
mulsd %xmm0, %xmm2
addsd (%rsi,%r8,8), %xmm2
movsd %xmm2, (%rsi,%r8,8)
leaq -0x1(%rdi), %r8
testq %rdi, %rdi
movq %r8, %rdi
jg 0xcbbd
testq %rbx, %rbx
je 0xcc5e
movq 0x70(%rsp), %rsi
subq %rbx, %rsi
movq %rbx, %rdi
callq 0x2250
leaq 0xf0(%rsp), %rdi
callq 0x690a
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0xcc88
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0xcc9f
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0xccbc
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0xccd9
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0x140(%rsp), %rdi
callq 0x6034
addq $0x198, %rsp            # imm = 0x198
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
jmp 0xce2c
movq %rax, %rbx
jmp 0xcd7c
jmp 0xcd0f
jmp 0xcd14
jmp 0xcd14
jmp 0xcd0f
jmp 0xcd14
movq %rax, %rbx
jmp 0xcd41
movq %rax, %rbx
jmp 0xce08
jmp 0xcdee
movq %rax, %rbx
movq 0xb8(%rsp), %rdi
testq %rdi, %rdi
je 0xcd41
movq 0xc8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0xcd58
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0xcd6f
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0x140(%rsp), %rdi
callq 0x690a
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0xcd99
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0xcdb0
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0xcdcd
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0xd0(%rsp), %rdi
callq 0x6034
leaq 0xf0(%rsp), %rdi
callq 0x690a
jmp 0xcea7
jmp 0xcdee
movq %rax, %rbx
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0xce08
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0xce1f
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0xf0(%rsp), %rdi
callq 0x690a
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0xce49
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0xce60
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0xce7d
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0xce9a
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0x140(%rsp), %rdi
callq 0x6034
movq %rbx, %rdi
callq 0x23b0