// File: fjamour[P]icentral/src/bcc_delta.cc
// Function: bcc_delta_t::i_iteration_2(unsigned int, unsigned int, unsigned int, int, int, std::tr1::unordered_map<unsigned int, double, std::tr1::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, double>>>&)
void bcc_delta_t::i_iteration_2(node_id_t s,
                        node_id_t src,
                        node_id_t dst,
                        int d_src,
                        int d_dst,
                        tr1_map_t(double)& bc_map)
{
        vector<vector<node_id_t> >&  P = bcc_fast_subgraph.P; 
        vector<int>&                 path_cnt_map = bcc_fast_subgraph.path_cnt_vec;
        vector<int>&                 path_cnt_inc_map = bcc_fast_subgraph.path_cnt_inc_vec;
        vector<int>&                 dist_map = bcc_fast_subgraph.dist_vec;
        vector<double>&              pair_dep_map = bcc_fast_subgraph.pair_dep_vec;
        vector<double>&              sigma_t_map = bcc_fast_subgraph.sigma_t_map;
        vector<bool>&                visited_vec = bcc_fast_subgraph.visited_vec;
        queue<node_id_t>&            Q = bcc_fast_subgraph.Q;
        vector<node_id_t>            S;
        
        bcc_fast_subgraph.init_maps();           

        path_cnt_map[s] = 1;
        dist_map[s] = 0;
        Q.push(s);
        while(!Q.empty()) {
            node_id_t v_i = Q.front(); Q.pop();
            S.push_back(v_i);
            for(int i = 0; i < bcc_fast_subgraph.nodes_vec[v_i].size(); ++i) {
                node_id_t v_n = bcc_fast_subgraph.nodes_vec[v_i][i];
                if(dist_map[v_n] < 0) {
                    Q.push(v_n);
                    dist_map[v_n] = dist_map[v_i] + 1;
                }
                if(dist_map[v_n] == dist_map[v_i] + 1) {
                    path_cnt_map[v_n] = path_cnt_map[v_n] + path_cnt_map[v_i];
                    P[v_n].push_back(v_i);
                }
            }
        }
        
        /*
         * steps:
         * 1. do the reverse BFS and subtract the olds
         * 2. compute the new counts
         * 3. fix the order of S
         * 4. add the new increments
         */
        //RBFS to subtract old pair dependency
        for(int i = S.size()-1; i >= 0; --i) {
            node_id_t v_n = S[i];
            if(   art_pt_map.find(s) != art_pt_map.end()
               && art_pt_map.find(v_n) != art_pt_map.end()
               ){//&& s != v_n) {
                int VG_s, VG_n;
                VG_s = accumulate(art_pt_map[s].begin(), art_pt_map[s].end(), 0);
                VG_n = accumulate(art_pt_map[v_n].begin(), art_pt_map[v_n].end(), 0);
                int c_t = VG_s*VG_n;
                sigma_t_map[v_n] =  sigma_t_map[v_n] + c_t;
                /*this guy must not change!*/
                //bc_map[v_n] = bc_map[v_n] - c_t;
            }
            for(int i = 0; i < P[v_n].size(); ++i) {
                node_id_t v_p = P[v_n][i];
                double sp_sn = ((double)path_cnt_map[v_p]/path_cnt_map[v_n]);
                pair_dep_map[v_p] = pair_dep_map[v_p] + sp_sn*(1+pair_dep_map[v_n]);
                if(art_pt_map.find(s) != art_pt_map.end()) {
                    sigma_t_map[v_p] = sigma_t_map[v_p] + sigma_t_map[v_n]*sp_sn;
                    
//                    node_id_t new_v_p = bcc_fast_subgraph.inout_label_map[v_p];
//                    bc_map[new_v_p] = bc_map[new_v_p] - sigma_t_map[v_n]*sp_sn/2.0;
                }
            }
            if(s != v_n) {
                node_id_t new_v_n = bcc_fast_subgraph.inout_label_map[v_n];
                bc_map[new_v_n] = bc_map[new_v_n] - pair_dep_map[v_n]/2.0;
            }
            if(art_pt_map.find(s) != art_pt_map.end()) {
                int VG_s = accumulate(art_pt_map[s].begin(), art_pt_map[s].end(), 0);
                
                node_id_t new_v_n = bcc_fast_subgraph.inout_label_map[v_n];
                bc_map[new_v_n] = bc_map[new_v_n] - pair_dep_map[v_n]*VG_s;
                
                bc_map[new_v_n] = bc_map[new_v_n] - sigma_t_map[v_n]/2.0;
            }
        }
                
        //Compute new path counts and paths
        if(dist_map[dst] != dist_map[src]+1) {
            P[dst].clear();
            P[dst].push_back(src);
            path_cnt_map[dst] = path_cnt_map[src];
        } else {
            P[dst].push_back(src);
            path_cnt_map[dst] += path_cnt_map[src];
        }
        
        
        Q.push(dst);
        dist_map[dst] = dist_map[src] + 1;
        //P[dst].clear();
        //P[dst].push_back(src);
        path_cnt_inc_map[dst] = path_cnt_map[src];
        //path_cnt_map[dst] = path_cnt_inc_map[dst];
        visited_vec[dst] = true;
        
        while (!Q.empty()) {
            node_id_t v = Q.front();
            Q.pop();
            vector<node_id_t> nbr_vec = bcc_fast_subgraph.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_map[w] > (dist_map[v] + 1)) {
                    dist_map[w] = dist_map[v] + 1;
                    P[w].clear();
                    P[w].push_back(v);
                    path_cnt_map[w] = 0;
                    path_cnt_inc_map[w] = path_cnt_inc_map[v];
                    path_cnt_map[w] += path_cnt_inc_map[w];
                    if(!visited_vec[w]) {
                        visited_vec[w] = true;
                        Q.push(w);
                    }
                } else if (dist_map[w] == (dist_map[v] + 1)) {
                    path_cnt_inc_map[w] += path_cnt_inc_map[v];
                    path_cnt_map[w] += path_cnt_inc_map[v];
                    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);
                    }
                }
            }
        }
        
    
        //fix order of S
        //IMP::THIS CAN BE MADE MUCH BETTER!
        //HEAP FOR EXAMPLE
        //EVEN THE SWAPPING CAN BE DONE MORE EFFICIENTLY
        //for now it's not a bottleneck
        for(int i = 1; i < S.size(); ++i) {
            if(dist_map[S[i-1]] > dist_map[S[i]]) {
                int j = i;
                while(dist_map[S[j-1]] > dist_map[S[j]]) {
                    node_id_t tmp = S[j-1];
                    S[j-1] = S[j];
                    S[j] = tmp;
                    --j;
                }
            }
        }

        //DBG
//        printf("===========================\nSource: %d\n", s);
//        for(tr1_map_t(int)::iterator it = path_cnt_map.begin();
//                it != path_cnt_map.end();
//                ++it) {
//            printf("cnt[%d]: %d           ", it->first, it->second);
//            printf("# parents: %d\n", P[it->first].size());
//        }
        /////        
        //DBG
//        printf("========================\nSource: %d\n", s);
//        for(int i = S.size()-1; i >= 0; --i) {
//            printf("%d\n", S[i]);
//        }
        //////
        

        //DBG print all:
//        printf("===========================\nSource: %d\n", s);
//        for(tr1_map_t(int)::iterator it = path_cnt_map.begin();
//                it != path_cnt_map.end();
//                ++it) {
//            printf("cnt[%d]: %d\n", it->first, it->second);
//            for(int i = 0; i < P[it->first].size(); ++i) {
//                printf("        P[%d][%d]: %d\n", it->first, i, P[it->first][i]);
//            }
//        }
//        printf("S:  ");
//        for(int i = S.size()-1; i >= 0; --i) {
//            printf("%d  ", S[i]);
//        }
//        printf("\n");
        ///////////
        

        //DBG
//        printf("===========================\nSource: %d\n", s);
//        for(tr1_map_t(double)::iterator it = pair_dep_map.begin();
//                it != pair_dep_map.end();
//                ++it) {
//            printf("pd[%d]: %f           ", it->first, it->second);
//            printf("# parents: %d\n", P[it->first].size());
//        }
        //////
        
        bcc_fast_subgraph.i_fill_map<double>(pair_dep_map, 0);
        bcc_fast_subgraph.i_fill_map<double>(sigma_t_map, 0);
        //RBFS to add the new pair dependencies
        for(int i = S.size()-1; i >= 0; --i) {
            node_id_t v_n = S[i];
            if(   art_pt_map.find(s) != art_pt_map.end()
               && art_pt_map.find(v_n) != art_pt_map.end()
               ){//&& s != v_n) {
                int VG_s, VG_n;
                VG_s = accumulate(art_pt_map[s].begin(), art_pt_map[s].end(), 0);
                VG_n = accumulate(art_pt_map[v_n].begin(), art_pt_map[v_n].end(), 0);
                int c_t = VG_s*VG_n;
                sigma_t_map[v_n] =  sigma_t_map[v_n] + c_t;
                /*this guy must not change!*/
                //bc_map[v_n] = bc_map[v_n] + c_t;
            }
            for(int i = 0; i < P[v_n].size(); ++i) {
                node_id_t v_p = P[v_n][i];
                double sp_sn = ((double)path_cnt_map[v_p]/path_cnt_map[v_n]);
                pair_dep_map[v_p] = pair_dep_map[v_p] + sp_sn*(1+pair_dep_map[v_n]);
                if(art_pt_map.find(s) != art_pt_map.end()) {
                    sigma_t_map[v_p] = sigma_t_map[v_p] + sigma_t_map[v_n]*sp_sn;
                    
//                    node_id_t new_v_p = bcc_fast_subgraph.inout_label_map[v_p];
//                    bc_map[new_v_p] = bc_map[new_v_p] + sigma_t_map[v_n]*sp_sn/2.0;
                }
            }
            if(s != v_n) {
                node_id_t new_v_n = bcc_fast_subgraph.inout_label_map[v_n];
                bc_map[new_v_n] = bc_map[new_v_n] + pair_dep_map[v_n]/2.0;
            }
            if(art_pt_map.find(s) != art_pt_map.end()) {
                int VG_s = accumulate(art_pt_map[s].begin(), art_pt_map[s].end(), 0);
                
                node_id_t new_v_n = bcc_fast_subgraph.inout_label_map[v_n];
                bc_map[new_v_n] = bc_map[new_v_n] + pair_dep_map[v_n]*VG_s;
                
                bc_map[new_v_n] = bc_map[new_v_n] + sigma_t_map[v_n]/2.0;
            }
        }

}

// Assembly:
subq $0x758, %rsp            # imm = 0x758
movq 0x760(%rsp), %rax
movq %rdi, 0x750(%rsp)
movl %esi, 0x74c(%rsp)
movl %edx, 0x748(%rsp)
movl %ecx, 0x744(%rsp)
movl %r8d, 0x740(%rsp)
movl %r9d, 0x73c(%rsp)
movq 0x750(%rsp), %rax
movq %rax, 0x430(%rsp)
movq %rax, %rcx
addq $0x2d8, %rcx            # imm = 0x2D8
movq %rcx, 0x438(%rsp)
movq %rax, %rcx
addq $0x368, %rcx            # imm = 0x368
movq %rcx, 0x730(%rsp)
movq %rax, %rcx
addq $0x380, %rcx            # imm = 0x380
movq %rcx, 0x728(%rsp)
movq %rax, %rcx
addq $0x3f8, %rcx            # imm = 0x3F8
movq %rcx, 0x720(%rsp)
movq %rax, %rcx
addq $0x3b0, %rcx            # imm = 0x3B0
movq %rcx, 0x718(%rsp)
movq %rax, %rcx
addq $0x3c8, %rcx            # imm = 0x3C8
movq %rcx, 0x710(%rsp)
movq %rax, %rcx
addq $0x410, %rcx            # imm = 0x410
movq %rcx, 0x708(%rsp)
movq %rax, %rcx
addq $0x440, %rcx            # imm = 0x440
movq %rcx, 0x700(%rsp)
addq $0x480, %rax            # imm = 0x480
movq %rax, 0x6f8(%rsp)
leaq 0x6e0(%rsp), %rdi
callq 0xfcd0
movq 0x438(%rsp), %rdi
callq 0x76f80
jmp 0x36e26
movq 0x728(%rsp), %rdi
movl 0x74c(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl $0x1, (%rax)
movq 0x718(%rsp), %rdi
movl 0x74c(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl $0x0, (%rax)
movq 0x6f8(%rsp), %rdi
leaq 0x74c(%rsp), %rsi
callq 0x105b0
jmp 0x36e75
jmp 0x36e77
movq 0x6f8(%rsp), %rdi
callq 0x105e0
movb %al, 0x42f(%rsp)
jmp 0x36e8d
movb 0x42f(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x36e9f
jmp 0x37101
movq 0x6f8(%rsp), %rdi
callq 0x10600
movq %rax, 0x420(%rsp)
jmp 0x36eb6
movq 0x420(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x6d0(%rsp)
movq 0x6f8(%rsp), %rdi
callq 0x10610
jmp 0x36ed6
leaq 0x6e0(%rsp), %rdi
leaq 0x6d0(%rsp), %rsi
callq 0xfce0
jmp 0x36eed
movl $0x0, 0x6cc(%rsp)
movq 0x430(%rsp), %rdi
movslq 0x6cc(%rsp), %rax
movq %rax, 0x418(%rsp)
addq $0x2d8, %rdi            # imm = 0x2D8
movl 0x6d0(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x418(%rsp), %rax
cmpq %rcx, %rax
jae 0x370fc
movq 0x430(%rsp), %rdi
addq $0x2d8, %rdi            # imm = 0x2D8
movl 0x6d0(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
movslq 0x6cc(%rsp), %rsi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x6c8(%rsp)
movq 0x718(%rsp), %rdi
movl 0x6c8(%rsp), %eax
movl %eax, %esi
callq 0xfc50
cmpl $0x0, (%rax)
jge 0x37005
movq 0x6f8(%rsp), %rdi
leaq 0x6c8(%rsp), %rsi
callq 0x105b0
jmp 0x36fa9
movq 0x718(%rsp), %rdi
movl 0x6d0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
addl $0x1, %eax
movl %eax, 0x414(%rsp)
movq 0x718(%rsp), %rdi
movl 0x6c8(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x414(%rsp), %ecx
movl %ecx, (%rax)
jmp 0x37005
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x6d8(%rsp)
movl %eax, 0x6d4(%rsp)
jmp 0x38ef8
movq 0x718(%rsp), %rdi
movl 0x6c8(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x410(%rsp)
movq 0x718(%rsp), %rdi
movl 0x6d0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movq %rax, %rcx
movl 0x410(%rsp), %eax
movl (%rcx), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jne 0x370e4
movq 0x728(%rsp), %rdi
movl 0x6c8(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x408(%rsp)
movq 0x728(%rsp), %rdi
movl 0x6d0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movq %rax, %rcx
movl 0x408(%rsp), %eax
movl (%rcx), %ecx
addl %ecx, %eax
movl %eax, 0x40c(%rsp)
movq 0x728(%rsp), %rdi
movl 0x6c8(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x40c(%rsp), %ecx
movl %ecx, (%rax)
movq 0x730(%rsp), %rdi
movl 0x6c8(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
leaq 0x6d0(%rsp), %rsi
callq 0xfce0
jmp 0x370e2
jmp 0x370e4
jmp 0x370e6
movl 0x6cc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x6cc(%rsp)
jmp 0x36ef8
jmp 0x36e77
leaq 0x6e0(%rsp), %rdi
callq 0xfd50
subq $0x1, %rax
movl %eax, 0x6c4(%rsp)
cmpl $0x0, 0x6c4(%rsp)
jl 0x37aca
movslq 0x6c4(%rsp), %rsi
leaq 0x6e0(%rsp), %rdi
callq 0xfbc0
movq 0x430(%rsp), %rdi
movl (%rax), %eax
movl %eax, 0x6c0(%rsp)
leaq 0x74c(%rsp), %rsi
callq 0x10650
movq %rdx, 0x3f8(%rsp)
movq %rax, 0x400(%rsp)
jmp 0x3716c
movq 0x430(%rsp), %rdi
movq 0x3f8(%rsp), %rax
movq 0x400(%rsp), %rcx
movq %rcx, 0x6b0(%rsp)
movq %rax, 0x6b8(%rsp)
callq 0x10710
movq %rdx, 0x3e8(%rsp)
movq %rax, 0x3f0(%rsp)
jmp 0x371ab
movq 0x3e8(%rsp), %rax
movq 0x3f0(%rsp), %rcx
movq %rcx, 0x6a0(%rsp)
movq %rax, 0x6a8(%rsp)
leaq 0x6b0(%rsp), %rdi
leaq 0x6a0(%rsp), %rsi
callq 0x10630
movb %al, 0x3e7(%rsp)
jmp 0x371e9
movb 0x3e7(%rsp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x3e6(%rsp)
jne 0x37203
jmp 0x372b7
movq 0x430(%rsp), %rdi
leaq 0x6c0(%rsp), %rsi
callq 0x10650
movq %rdx, 0x3d0(%rsp)
movq %rax, 0x3d8(%rsp)
jmp 0x3722a
movq 0x430(%rsp), %rdi
movq 0x3d0(%rsp), %rax
movq 0x3d8(%rsp), %rcx
movq %rcx, 0x690(%rsp)
movq %rax, 0x698(%rsp)
callq 0x10710
movq %rdx, 0x3c0(%rsp)
movq %rax, 0x3c8(%rsp)
jmp 0x37269
movq 0x3c0(%rsp), %rax
movq 0x3c8(%rsp), %rcx
movq %rcx, 0x680(%rsp)
movq %rax, 0x688(%rsp)
leaq 0x690(%rsp), %rdi
leaq 0x680(%rsp), %rsi
callq 0x10630
movb %al, 0x3bf(%rsp)
jmp 0x372a7
movb 0x3bf(%rsp), %al
movb %al, 0x3e6(%rsp)
jmp 0x372b7
movb 0x3e6(%rsp), %al
testb $0x1, %al
jne 0x372c7
jmp 0x3745c
movq 0x430(%rsp), %rdi
leaq 0x74c(%rsp), %rsi
callq 0x107b0
movq %rax, 0x3b0(%rsp)
jmp 0x372e6
movq 0x3b0(%rsp), %rdi
callq 0x109f0
movq 0x430(%rsp), %rdi
movq %rax, 0x670(%rsp)
leaq 0x74c(%rsp), %rsi
callq 0x107b0
movq %rax, 0x3a8(%rsp)
jmp 0x3731a
movq 0x3a8(%rsp), %rdi
callq 0x10a20
movq %rax, 0x668(%rsp)
movq 0x670(%rsp), %rdi
movq 0x668(%rsp), %rsi
xorl %edx, %edx
callq 0x10750
movl %eax, 0x3a4(%rsp)
jmp 0x3734f
movq 0x430(%rsp), %rdi
movl 0x3a4(%rsp), %eax
movl %eax, 0x67c(%rsp)
leaq 0x6c0(%rsp), %rsi
callq 0x107b0
movq %rax, 0x398(%rsp)
jmp 0x3737c
movq 0x398(%rsp), %rdi
callq 0x109f0
movq 0x430(%rsp), %rdi
movq %rax, 0x660(%rsp)
leaq 0x6c0(%rsp), %rsi
callq 0x107b0
movq %rax, 0x390(%rsp)
jmp 0x373b0
movq 0x390(%rsp), %rdi
callq 0x10a20
movq %rax, 0x658(%rsp)
movq 0x660(%rsp), %rdi
movq 0x658(%rsp), %rsi
xorl %edx, %edx
callq 0x10750
movl %eax, 0x38c(%rsp)
jmp 0x373e5
movl 0x38c(%rsp), %eax
movl %eax, 0x678(%rsp)
movl 0x67c(%rsp), %eax
imull 0x678(%rsp), %eax
movl %eax, 0x654(%rsp)
movq 0x708(%rsp), %rdi
movl 0x6c0(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
cvtsi2sdl 0x654(%rsp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x380(%rsp)
movq 0x708(%rsp), %rdi
movl 0x6c0(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x380(%rsp), %xmm0
movsd %xmm0, (%rax)
movl $0x0, 0x650(%rsp)
movslq 0x650(%rsp), %rax
movq %rax, 0x378(%rsp)
movq 0x730(%rsp), %rdi
movl 0x6c0(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x378(%rsp), %rax
cmpq %rcx, %rax
jae 0x3771b
movq 0x730(%rsp), %rdi
movl 0x6c0(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
movslq 0x650(%rsp), %rsi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x64c(%rsp)
movq 0x728(%rsp), %rdi
movl 0x64c(%rsp), %eax
movl %eax, %esi
callq 0xfc50
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, 0x348(%rsp)
movq 0x728(%rsp), %rdi
movl 0x6c0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movsd 0x348(%rsp), %xmm0
cvtsi2sdl (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x640(%rsp)
movq 0x710(%rsp), %rdi
movl 0x64c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
movsd %xmm0, 0x358(%rsp)
movsd 0x640(%rsp), %xmm0
movsd %xmm0, 0x350(%rsp)
movq 0x710(%rsp), %rdi
movl 0x6c0(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x350(%rsp), %xmm0
movsd 0x358(%rsp), %xmm1
movsd (%rax), %xmm2
movsd 0x43a7c(%rip), %xmm3    # 0x7b010
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x360(%rsp)
movq 0x710(%rsp), %rdi
movl 0x64c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x360(%rsp), %xmm0
movq 0x430(%rsp), %rdi
movsd %xmm0, (%rax)
leaq 0x74c(%rsp), %rsi
callq 0x10650
movq %rdx, 0x368(%rsp)
movq %rax, 0x370(%rsp)
jmp 0x375f3
movq 0x430(%rsp), %rdi
movq 0x368(%rsp), %rax
movq 0x370(%rsp), %rcx
movq %rcx, 0x630(%rsp)
movq %rax, 0x638(%rsp)
callq 0x10710
movq %rdx, 0x338(%rsp)
movq %rax, 0x340(%rsp)
jmp 0x37632
movq 0x338(%rsp), %rax
movq 0x340(%rsp), %rcx
movq %rcx, 0x620(%rsp)
movq %rax, 0x628(%rsp)
leaq 0x630(%rsp), %rdi
leaq 0x620(%rsp), %rsi
callq 0x10630
movb %al, 0x337(%rsp)
jmp 0x37670
movb 0x337(%rsp), %al
testb $0x1, %al
jne 0x37680
jmp 0x37703
movq 0x708(%rsp), %rdi
movl 0x64c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
movsd %xmm0, 0x320(%rsp)
movq 0x708(%rsp), %rdi
movl 0x6c0(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x320(%rsp), %xmm1
movsd (%rax), %xmm0
movsd 0x640(%rsp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x328(%rsp)
movq 0x708(%rsp), %rdi
movl 0x64c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x328(%rsp), %xmm0
movsd %xmm0, (%rax)
jmp 0x37705
movl 0x650(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x650(%rsp)
jmp 0x37467
movl 0x74c(%rsp), %eax
cmpl 0x6c0(%rsp), %eax
je 0x377f9
movq 0x430(%rsp), %rdi
addq $0x320, %rdi            # imm = 0x320
movl 0x6c0(%rsp), %eax
movl %eax, %esi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x61c(%rsp)
movq 0x760(%rsp), %rdi
leaq 0x61c(%rsp), %rsi
callq 0x2d310
movq %rax, 0x318(%rsp)
jmp 0x37774
movq 0x318(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x300(%rsp)
movq 0x710(%rsp), %rdi
movl 0x6c0(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x300(%rsp), %xmm0
movsd (%rax), %xmm1
movsd 0x43ab4(%rip), %xmm2    # 0x7b268
mulsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x308(%rsp)
movq 0x760(%rsp), %rdi
leaq 0x61c(%rsp), %rsi
callq 0x2d310
movq %rax, 0x310(%rsp)
jmp 0x377e4
movq 0x310(%rsp), %rax
movsd 0x308(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x430(%rsp), %rdi
leaq 0x74c(%rsp), %rsi
callq 0x10650
movq %rdx, 0x2f0(%rsp)
movq %rax, 0x2f8(%rsp)
jmp 0x37820
movq 0x430(%rsp), %rdi
movq 0x2f0(%rsp), %rax
movq 0x2f8(%rsp), %rcx
movq %rcx, 0x608(%rsp)
movq %rax, 0x610(%rsp)
callq 0x10710
movq %rdx, 0x2e0(%rsp)
movq %rax, 0x2e8(%rsp)
jmp 0x3785f
movq 0x2e0(%rsp), %rax
movq 0x2e8(%rsp), %rcx
movq %rcx, 0x5f8(%rsp)
movq %rax, 0x600(%rsp)
leaq 0x608(%rsp), %rdi
leaq 0x5f8(%rsp), %rsi
callq 0x10630
movb %al, 0x2df(%rsp)
jmp 0x3789d
movb 0x2df(%rsp), %al
testb $0x1, %al
jne 0x378ad
jmp 0x37ab2
movq 0x430(%rsp), %rdi
leaq 0x74c(%rsp), %rsi
callq 0x107b0
movq %rax, 0x2d0(%rsp)
jmp 0x378cc
movq 0x2d0(%rsp), %rdi
callq 0x109f0
movq 0x430(%rsp), %rdi
movq %rax, 0x5e8(%rsp)
leaq 0x74c(%rsp), %rsi
callq 0x107b0
movq %rax, 0x2c8(%rsp)
jmp 0x37900
movq 0x2c8(%rsp), %rdi
callq 0x10a20
movq %rax, 0x5e0(%rsp)
movq 0x5e8(%rsp), %rdi
movq 0x5e0(%rsp), %rsi
xorl %edx, %edx
callq 0x10750
movl %eax, 0x2c4(%rsp)
jmp 0x37935
movq 0x430(%rsp), %rdi
movl 0x2c4(%rsp), %eax
movl %eax, 0x5f4(%rsp)
addq $0x320, %rdi            # imm = 0x320
movl 0x6c0(%rsp), %eax
movl %eax, %esi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x5dc(%rsp)
movq 0x760(%rsp), %rdi
leaq 0x5dc(%rsp), %rsi
callq 0x2d310
movq %rax, 0x2b8(%rsp)
jmp 0x37988
movq 0x2b8(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x2a0(%rsp)
movq 0x710(%rsp), %rdi
movl 0x6c0(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x2a0(%rsp), %xmm0
movsd (%rax), %xmm1
cvtsi2sdl 0x5f4(%rsp), %xmm2
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, 0x2a8(%rsp)
movq 0x760(%rsp), %rdi
leaq 0x5dc(%rsp), %rsi
callq 0x2d310
movq %rax, 0x2b0(%rsp)
jmp 0x379f9
movq 0x2b0(%rsp), %rax
movsd 0x2a8(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x760(%rsp), %rdi
leaq 0x5dc(%rsp), %rsi
callq 0x2d310
movq %rax, 0x298(%rsp)
jmp 0x37a2d
movq 0x298(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x280(%rsp)
movq 0x708(%rsp), %rdi
movl 0x6c0(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x280(%rsp), %xmm0
movsd (%rax), %xmm1
movsd 0x437fb(%rip), %xmm2    # 0x7b268
mulsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x288(%rsp)
movq 0x760(%rsp), %rdi
leaq 0x5dc(%rsp), %rsi
callq 0x2d310
movq %rax, 0x290(%rsp)
jmp 0x37a9d
movq 0x290(%rsp), %rax
movsd 0x288(%rsp), %xmm0
movsd %xmm0, (%rax)
jmp 0x37ab4
movl 0x6c4(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x6c4(%rsp)
jmp 0x37119
movq 0x718(%rsp), %rdi
movl 0x744(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x27c(%rsp)
movq 0x718(%rsp), %rdi
movl 0x748(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movq %rax, %rcx
movl 0x27c(%rsp), %eax
movl (%rcx), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
je 0x37b9c
movq 0x730(%rsp), %rdi
movl 0x744(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
callq 0x10a50
movq 0x730(%rsp), %rdi
movl 0x744(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
leaq 0x748(%rsp), %rsi
callq 0xfce0
jmp 0x37b5c
movq 0x728(%rsp), %rdi
movl 0x748(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x278(%rsp)
movq 0x728(%rsp), %rdi
movl 0x744(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x278(%rsp), %ecx
movl %ecx, (%rax)
jmp 0x37c04
movq 0x730(%rsp), %rdi
movl 0x744(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
leaq 0x748(%rsp), %rsi
callq 0xfce0
jmp 0x37bc4
movq 0x728(%rsp), %rdi
movl 0x748(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x274(%rsp)
movq 0x728(%rsp), %rdi
movl 0x744(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x274(%rsp), %ecx
addl (%rax), %ecx
movl %ecx, (%rax)
movq 0x6f8(%rsp), %rdi
leaq 0x744(%rsp), %rsi
callq 0x105b0
jmp 0x37c1b
movq 0x718(%rsp), %rdi
movl 0x748(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
incl %eax
movl %eax, 0x258(%rsp)
movq 0x718(%rsp), %rdi
movl 0x744(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x258(%rsp), %ecx
movl %ecx, (%rax)
movq 0x728(%rsp), %rdi
movl 0x748(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x25c(%rsp)
movq 0x720(%rsp), %rdi
movl 0x744(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x25c(%rsp), %ecx
movl %ecx, (%rax)
movq 0x700(%rsp), %rdi
movl 0x744(%rsp), %eax
movl %eax, %esi
callq 0x10a70
movq %rdx, 0x260(%rsp)
movq %rax, 0x268(%rsp)
jmp 0x37cc1
movq 0x260(%rsp), %rax
movq 0x268(%rsp), %rcx
movq %rcx, 0x5c8(%rsp)
movq %rax, 0x5d0(%rsp)
leaq 0x5c8(%rsp), %rdi
movl $0x1, %esi
callq 0x10ad0
movq 0x6f8(%rsp), %rdi
callq 0x105e0
movb %al, 0x257(%rsp)
jmp 0x37d09
movb 0x257(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x37d1b
jmp 0x38310
movq 0x6f8(%rsp), %rdi
callq 0x10600
movq %rax, 0x248(%rsp)
jmp 0x37d32
movq 0x248(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x5c4(%rsp)
movq 0x6f8(%rsp), %rdi
callq 0x10610
jmp 0x37d52
movq 0x430(%rsp), %rdi
addq $0x2d8, %rdi            # imm = 0x2D8
movl 0x5c4(%rsp), %esi
callq 0x76f50
movq %rax, 0x240(%rsp)
jmp 0x37d77
movq 0x240(%rsp), %rsi
leaq 0x5a8(%rsp), %rdi
callq 0x10b20
jmp 0x37d8e
movl $0x0, 0x5a4(%rsp)
movslq 0x5a4(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x5a8(%rsp), %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x238(%rsp), %rax
cmpq %rcx, %rax
jae 0x382fe
movslq 0x5a4(%rsp), %rsi
leaq 0x5a8(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x5a0(%rsp)
movq 0x718(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x234(%rsp)
movq 0x718(%rsp), %rdi
movl 0x5c4(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movq %rax, %rcx
movl 0x234(%rsp), %eax
movl (%rcx), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jle 0x38054
movq 0x718(%rsp), %rdi
movl 0x5c4(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
incl %eax
movl %eax, 0x230(%rsp)
movq 0x718(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x230(%rsp), %ecx
movl %ecx, (%rax)
movq 0x730(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
callq 0x10a50
movq 0x730(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
leaq 0x5c4(%rsp), %rsi
callq 0xfce0
jmp 0x37eba
movq 0x728(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl $0x0, (%rax)
movq 0x720(%rsp), %rdi
movl 0x5c4(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x218(%rsp)
movq 0x720(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x218(%rsp), %ecx
movl %ecx, (%rax)
movq 0x720(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x21c(%rsp)
movq 0x728(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x21c(%rsp), %edx
movl (%rax), %ecx
addl %edx, %ecx
movl %ecx, (%rax)
movq 0x700(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0x10a70
movq %rdx, 0x220(%rsp)
movq %rax, 0x228(%rsp)
jmp 0x37f7e
movq 0x220(%rsp), %rax
movq 0x228(%rsp), %rcx
movq %rcx, 0x590(%rsp)
movq %rax, 0x598(%rsp)
leaq 0x590(%rsp), %rdi
callq 0x10c20
xorb $-0x1, %al
testb $0x1, %al
jne 0x37fb6
jmp 0x3804f
movq 0x700(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0x10a70
movq %rdx, 0x208(%rsp)
movq %rax, 0x210(%rsp)
jmp 0x37fde
movq 0x208(%rsp), %rax
movq 0x210(%rsp), %rcx
movq %rcx, 0x580(%rsp)
movq %rax, 0x588(%rsp)
leaq 0x580(%rsp), %rdi
movl $0x1, %esi
callq 0x10ad0
movq 0x6f8(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x105b0
jmp 0x38027
jmp 0x3804f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x6d8(%rsp)
movl %eax, 0x6d4(%rsp)
leaq 0x5a8(%rsp), %rdi
callq 0x10520
jmp 0x38ef8
jmp 0x382e6
movq 0x718(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x204(%rsp)
movq 0x718(%rsp), %rdi
movl 0x5c4(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movq %rax, %rcx
movl 0x204(%rsp), %eax
movl (%rcx), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jne 0x382e4
movq 0x720(%rsp), %rdi
movl 0x5c4(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x1f0(%rsp)
movq 0x720(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x1f0(%rsp), %edx
movl (%rax), %ecx
addl %edx, %ecx
movl %ecx, (%rax)
movq 0x720(%rsp), %rdi
movl 0x5c4(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x1f4(%rsp)
movq 0x728(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x1f4(%rsp), %edx
movl (%rax), %ecx
addl %edx, %ecx
movl %ecx, (%rax)
movq 0x730(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
callq 0x10cf0
movq %rax, 0x570(%rsp)
movq 0x730(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
callq 0x10d20
movq %rax, 0x568(%rsp)
movq 0x570(%rsp), %rdi
movq 0x568(%rsp), %rsi
leaq 0x5c4(%rsp), %rdx
callq 0x10c90
movq %rax, 0x1f8(%rsp)
jmp 0x38197
movq 0x1f8(%rsp), %rax
movq %rax, 0x578(%rsp)
movq 0x730(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
callq 0x10d20
movq %rax, 0x560(%rsp)
leaq 0x578(%rsp), %rdi
leaq 0x560(%rsp), %rsi
callq 0x10c50
testb $0x1, %al
jne 0x381e8
jmp 0x38212
movq 0x730(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
leaq 0x5c4(%rsp), %rsi
callq 0xfce0
jmp 0x38210
jmp 0x38212
movq 0x700(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0x10a70
movq %rdx, 0x1e0(%rsp)
movq %rax, 0x1e8(%rsp)
jmp 0x3823a
movq 0x1e0(%rsp), %rax
movq 0x1e8(%rsp), %rcx
movq %rcx, 0x550(%rsp)
movq %rax, 0x558(%rsp)
leaq 0x550(%rsp), %rdi
callq 0x10c20
xorb $-0x1, %al
testb $0x1, %al
jne 0x3826f
jmp 0x382e2
movq 0x700(%rsp), %rdi
movl 0x5a0(%rsp), %eax
movl %eax, %esi
callq 0x10a70
movq %rdx, 0x1d0(%rsp)
movq %rax, 0x1d8(%rsp)
jmp 0x38297
movq 0x1d0(%rsp), %rax
movq 0x1d8(%rsp), %rcx
movq %rcx, 0x540(%rsp)
movq %rax, 0x548(%rsp)
leaq 0x540(%rsp), %rdi
movl $0x1, %esi
callq 0x10ad0
movq 0x6f8(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0x105b0
jmp 0x382e0
jmp 0x382e2
jmp 0x382e4
jmp 0x382e6
jmp 0x382e8
movl 0x5a4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x5a4(%rsp)
jmp 0x37d99
leaq 0x5a8(%rsp), %rdi
callq 0x10520
jmp 0x37cf3
movl $0x1, 0x53c(%rsp)
movslq 0x53c(%rsp), %rax
movq %rax, 0x1c8(%rsp)
leaq 0x6e0(%rsp), %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x1c8(%rsp), %rax
cmpq %rcx, %rax
jae 0x38532
movq 0x718(%rsp), %rax
movq %rax, 0x1b0(%rsp)
movl 0x53c(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq 0x6e0(%rsp), %rdi
callq 0xfbc0
movq 0x1b0(%rsp), %rdi
movl (%rax), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x1c4(%rsp)
movq 0x718(%rsp), %rax
movq %rax, 0x1b8(%rsp)
movslq 0x53c(%rsp), %rsi
leaq 0x6e0(%rsp), %rdi
callq 0xfbc0
movq 0x1b8(%rsp), %rdi
movl (%rax), %eax
movl %eax, %esi
callq 0xfc50
movq %rax, %rcx
movl 0x1c4(%rsp), %eax
cmpl (%rcx), %eax
jle 0x3851a
movl 0x53c(%rsp), %eax
movl %eax, 0x538(%rsp)
movq 0x718(%rsp), %rax
movq %rax, 0x198(%rsp)
movl 0x538(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq 0x6e0(%rsp), %rdi
callq 0xfbc0
movq 0x198(%rsp), %rdi
movl (%rax), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x1ac(%rsp)
movq 0x718(%rsp), %rax
movq %rax, 0x1a0(%rsp)
movslq 0x538(%rsp), %rsi
leaq 0x6e0(%rsp), %rdi
callq 0xfbc0
movq 0x1a0(%rsp), %rdi
movl (%rax), %eax
movl %eax, %esi
callq 0xfc50
movq %rax, %rcx
movl 0x1ac(%rsp), %eax
cmpl (%rcx), %eax
jle 0x38518
movl 0x538(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq 0x6e0(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x534(%rsp)
movslq 0x538(%rsp), %rsi
leaq 0x6e0(%rsp), %rdi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x190(%rsp)
movl 0x538(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq 0x6e0(%rsp), %rdi
callq 0xfbc0
movl 0x190(%rsp), %ecx
movl %ecx, (%rax)
movl 0x534(%rsp), %eax
movl %eax, 0x194(%rsp)
movslq 0x538(%rsp), %rsi
leaq 0x6e0(%rsp), %rdi
callq 0xfbc0
movl 0x194(%rsp), %ecx
movl %ecx, (%rax)
movl 0x538(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x538(%rsp)
jmp 0x383e6
jmp 0x3851a
jmp 0x3851c
movl 0x53c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x53c(%rsp)
jmp 0x3831b
movq 0x430(%rsp), %rdi
addq $0x2d8, %rdi            # imm = 0x2D8
movq 0x710(%rsp), %rsi
xorps %xmm0, %xmm0
callq 0x78370
jmp 0x38553
movq 0x430(%rsp), %rdi
addq $0x2d8, %rdi            # imm = 0x2D8
movq 0x708(%rsp), %rsi
xorps %xmm0, %xmm0
callq 0x78370
jmp 0x38574
leaq 0x6e0(%rsp), %rdi
callq 0xfd50
subq $0x1, %rax
movl %eax, 0x530(%rsp)
cmpl $0x0, 0x530(%rsp)
jl 0x38ee3
movslq 0x530(%rsp), %rsi
leaq 0x6e0(%rsp), %rdi
callq 0xfbc0
movq 0x430(%rsp), %rdi
movl (%rax), %eax
movl %eax, 0x52c(%rsp)
leaq 0x74c(%rsp), %rsi
callq 0x10650
movq %rdx, 0x180(%rsp)
movq %rax, 0x188(%rsp)
jmp 0x385df
movq 0x430(%rsp), %rdi
movq 0x180(%rsp), %rax
movq 0x188(%rsp), %rcx
movq %rcx, 0x518(%rsp)
movq %rax, 0x520(%rsp)
callq 0x10710
movq %rdx, 0x170(%rsp)
movq %rax, 0x178(%rsp)
jmp 0x3861e
movq 0x170(%rsp), %rax
movq 0x178(%rsp), %rcx
movq %rcx, 0x508(%rsp)
movq %rax, 0x510(%rsp)
leaq 0x518(%rsp), %rdi
leaq 0x508(%rsp), %rsi
callq 0x10630
movb %al, 0x16f(%rsp)
jmp 0x3865c
movb 0x16f(%rsp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x16e(%rsp)
jne 0x38676
jmp 0x3872a
movq 0x430(%rsp), %rdi
leaq 0x52c(%rsp), %rsi
callq 0x10650
movq %rdx, 0x158(%rsp)
movq %rax, 0x160(%rsp)
jmp 0x3869d
movq 0x430(%rsp), %rdi
movq 0x158(%rsp), %rax
movq 0x160(%rsp), %rcx
movq %rcx, 0x4f8(%rsp)
movq %rax, 0x500(%rsp)
callq 0x10710
movq %rdx, 0x148(%rsp)
movq %rax, 0x150(%rsp)
jmp 0x386dc
movq 0x148(%rsp), %rax
movq 0x150(%rsp), %rcx
movq %rcx, 0x4e8(%rsp)
movq %rax, 0x4f0(%rsp)
leaq 0x4f8(%rsp), %rdi
leaq 0x4e8(%rsp), %rsi
callq 0x10630
movb %al, 0x147(%rsp)
jmp 0x3871a
movb 0x147(%rsp), %al
movb %al, 0x16e(%rsp)
jmp 0x3872a
movb 0x16e(%rsp), %al
testb $0x1, %al
jne 0x3873a
jmp 0x388cf
movq 0x430(%rsp), %rdi
leaq 0x74c(%rsp), %rsi
callq 0x107b0
movq %rax, 0x138(%rsp)
jmp 0x38759
movq 0x138(%rsp), %rdi
callq 0x109f0
movq 0x430(%rsp), %rdi
movq %rax, 0x4d8(%rsp)
leaq 0x74c(%rsp), %rsi
callq 0x107b0
movq %rax, 0x130(%rsp)
jmp 0x3878d
movq 0x130(%rsp), %rdi
callq 0x10a20
movq %rax, 0x4d0(%rsp)
movq 0x4d8(%rsp), %rdi
movq 0x4d0(%rsp), %rsi
xorl %edx, %edx
callq 0x10750
movl %eax, 0x12c(%rsp)
jmp 0x387c2
movq 0x430(%rsp), %rdi
movl 0x12c(%rsp), %eax
movl %eax, 0x4e4(%rsp)
leaq 0x52c(%rsp), %rsi
callq 0x107b0
movq %rax, 0x120(%rsp)
jmp 0x387ef
movq 0x120(%rsp), %rdi
callq 0x109f0
movq 0x430(%rsp), %rdi
movq %rax, 0x4c8(%rsp)
leaq 0x52c(%rsp), %rsi
callq 0x107b0
movq %rax, 0x118(%rsp)
jmp 0x38823
movq 0x118(%rsp), %rdi
callq 0x10a20
movq %rax, 0x4c0(%rsp)
movq 0x4c8(%rsp), %rdi
movq 0x4c0(%rsp), %rsi
xorl %edx, %edx
callq 0x10750
movl %eax, 0x114(%rsp)
jmp 0x38858
movl 0x114(%rsp), %eax
movl %eax, 0x4e0(%rsp)
movl 0x4e4(%rsp), %eax
imull 0x4e0(%rsp), %eax
movl %eax, 0x4bc(%rsp)
movq 0x708(%rsp), %rdi
movl 0x52c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
cvtsi2sdl 0x4bc(%rsp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x108(%rsp)
movq 0x708(%rsp), %rdi
movl 0x52c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x108(%rsp), %xmm0
movsd %xmm0, (%rax)
movl $0x0, 0x4b8(%rsp)
movslq 0x4b8(%rsp), %rax
movq %rax, 0x100(%rsp)
movq 0x730(%rsp), %rdi
movl 0x52c(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x100(%rsp), %rax
cmpq %rcx, %rax
jae 0x38b8e
movq 0x730(%rsp), %rdi
movl 0x52c(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
movslq 0x4b8(%rsp), %rsi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x4b4(%rsp)
movq 0x728(%rsp), %rdi
movl 0x4b4(%rsp), %eax
movl %eax, %esi
callq 0xfc50
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, 0xd0(%rsp)
movq 0x728(%rsp), %rdi
movl 0x52c(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movsd 0xd0(%rsp), %xmm0
cvtsi2sdl (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x4a8(%rsp)
movq 0x710(%rsp), %rdi
movl 0x4b4(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
movsd %xmm0, 0xe0(%rsp)
movsd 0x4a8(%rsp), %xmm0
movsd %xmm0, 0xd8(%rsp)
movq 0x710(%rsp), %rdi
movl 0x52c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0xd8(%rsp), %xmm0
movsd 0xe0(%rsp), %xmm1
movsd (%rax), %xmm2
movsd 0x42609(%rip), %xmm3    # 0x7b010
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0xe8(%rsp)
movq 0x710(%rsp), %rdi
movl 0x4b4(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0xe8(%rsp), %xmm0
movq 0x430(%rsp), %rdi
movsd %xmm0, (%rax)
leaq 0x74c(%rsp), %rsi
callq 0x10650
movq %rdx, 0xf0(%rsp)
movq %rax, 0xf8(%rsp)
jmp 0x38a66
movq 0x430(%rsp), %rdi
movq 0xf0(%rsp), %rax
movq 0xf8(%rsp), %rcx
movq %rcx, 0x498(%rsp)
movq %rax, 0x4a0(%rsp)
callq 0x10710
movq %rdx, 0xc0(%rsp)
movq %rax, 0xc8(%rsp)
jmp 0x38aa5
movq 0xc0(%rsp), %rax
movq 0xc8(%rsp), %rcx
movq %rcx, 0x488(%rsp)
movq %rax, 0x490(%rsp)
leaq 0x498(%rsp), %rdi
leaq 0x488(%rsp), %rsi
callq 0x10630
movb %al, 0xbf(%rsp)
jmp 0x38ae3
movb 0xbf(%rsp), %al
testb $0x1, %al
jne 0x38af3
jmp 0x38b76
movq 0x708(%rsp), %rdi
movl 0x4b4(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
movsd %xmm0, 0xa8(%rsp)
movq 0x708(%rsp), %rdi
movl 0x52c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0xa8(%rsp), %xmm1
movsd (%rax), %xmm0
movsd 0x4a8(%rsp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0xb0(%rsp)
movq 0x708(%rsp), %rdi
movl 0x4b4(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0xb0(%rsp), %xmm0
movsd %xmm0, (%rax)
jmp 0x38b78
movl 0x4b8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4b8(%rsp)
jmp 0x388da
movl 0x74c(%rsp), %eax
cmpl 0x52c(%rsp), %eax
je 0x38c6c
movq 0x430(%rsp), %rdi
addq $0x320, %rdi            # imm = 0x320
movl 0x52c(%rsp), %eax
movl %eax, %esi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x484(%rsp)
movq 0x760(%rsp), %rdi
leaq 0x484(%rsp), %rsi
callq 0x2d310
movq %rax, 0xa0(%rsp)
jmp 0x38be7
movq 0xa0(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x88(%rsp)
movq 0x710(%rsp), %rdi
movl 0x52c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x88(%rsp), %xmm0
movsd (%rax), %xmm1
movsd 0x42619(%rip), %xmm2    # 0x7b240
mulsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x90(%rsp)
movq 0x760(%rsp), %rdi
leaq 0x484(%rsp), %rsi
callq 0x2d310
movq %rax, 0x98(%rsp)
jmp 0x38c57
movq 0x98(%rsp), %rax
movsd 0x90(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x430(%rsp), %rdi
leaq 0x74c(%rsp), %rsi
callq 0x10650
movq %rdx, 0x78(%rsp)
movq %rax, 0x80(%rsp)
jmp 0x38c90
movq 0x430(%rsp), %rdi
movq 0x78(%rsp), %rax
movq 0x80(%rsp), %rcx
movq %rcx, 0x470(%rsp)
movq %rax, 0x478(%rsp)
callq 0x10710
movq %rdx, 0x68(%rsp)
movq %rax, 0x70(%rsp)
jmp 0x38cc6
movq 0x68(%rsp), %rax
movq 0x70(%rsp), %rcx
movq %rcx, 0x460(%rsp)
movq %rax, 0x468(%rsp)
leaq 0x470(%rsp), %rdi
leaq 0x460(%rsp), %rsi
callq 0x10630
movb %al, 0x67(%rsp)
jmp 0x38cfb
movb 0x67(%rsp), %al
testb $0x1, %al
jne 0x38d08
jmp 0x38ecb
movq 0x430(%rsp), %rdi
leaq 0x74c(%rsp), %rsi
callq 0x107b0
movq %rax, 0x58(%rsp)
jmp 0x38d24
movq 0x58(%rsp), %rdi
callq 0x109f0
movq 0x430(%rsp), %rdi
movq %rax, 0x450(%rsp)
leaq 0x74c(%rsp), %rsi
callq 0x107b0
movq %rax, 0x50(%rsp)
jmp 0x38d52
movq 0x50(%rsp), %rdi
callq 0x10a20
movq %rax, 0x448(%rsp)
movq 0x450(%rsp), %rdi
movq 0x448(%rsp), %rsi
xorl %edx, %edx
callq 0x10750
movl %eax, 0x4c(%rsp)
jmp 0x38d81
movq 0x430(%rsp), %rdi
movl 0x4c(%rsp), %eax
movl %eax, 0x45c(%rsp)
addq $0x320, %rdi            # imm = 0x320
movl 0x52c(%rsp), %eax
movl %eax, %esi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x444(%rsp)
movq 0x760(%rsp), %rdi
leaq 0x444(%rsp), %rsi
callq 0x2d310
movq %rax, 0x40(%rsp)
jmp 0x38dce
movq 0x40(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x28(%rsp)
movq 0x710(%rsp), %rdi
movl 0x52c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x28(%rsp), %xmm1
movsd (%rax), %xmm0
cvtsi2sdl 0x45c(%rsp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x30(%rsp)
movq 0x760(%rsp), %rdi
leaq 0x444(%rsp), %rsi
callq 0x2d310
movq %rax, 0x38(%rsp)
jmp 0x38e30
movq 0x38(%rsp), %rax
movsd 0x30(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x760(%rsp), %rdi
leaq 0x444(%rsp), %rsi
callq 0x2d310
movq %rax, 0x20(%rsp)
jmp 0x38e5b
movq 0x20(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movq 0x708(%rsp), %rdi
movl 0x52c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x8(%rsp), %xmm0
movsd (%rax), %xmm1
movsd 0x423ae(%rip), %xmm2    # 0x7b240
mulsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x10(%rsp)
movq 0x760(%rsp), %rdi
leaq 0x444(%rsp), %rsi
callq 0x2d310
movq %rax, 0x18(%rsp)
jmp 0x38ebc
movq 0x18(%rsp), %rax
movsd 0x10(%rsp), %xmm0
movsd %xmm0, (%rax)
jmp 0x38ecd
movl 0x530(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x530(%rsp)
jmp 0x3858c
leaq 0x6e0(%rsp), %rdi
callq 0x10520
addq $0x758, %rsp            # imm = 0x758
retq
leaq 0x6e0(%rsp), %rdi
callq 0x10520
movq 0x6d8(%rsp), %rdi
callq 0x9cf0
nopw %cs:(%rax,%rax)