// File: sjain12[P]CliqueCounting/tests/../Escape/CliquesTuranShadow.h
// Function: turan_shadow(Escape::CGraph&, CDAG&, std::basic_ofstream<char, std::char_traits<char>>&, 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, int)
void turan_shadow(CGraph &CG, CDAG &DG, ofstream &of, string gname, string fname, int runs, int num_samples, int clique_size)
{    
    high_resolution_clock::time_point treegen_s = high_resolution_clock::now();

    double num_cliques = 0, num_leaves = 0;
    double non_leaf_cliques = 0;
    double discarded_leaves = 0;
    int k = 0; 
    double succ_ratio = 0, leaf_samples = 0, leaf_size = 0, density = 0, leaf_cliques = 0;
    VertexIdx psize = 0, nsize = 0;
    PartialClique *pc = NULL;
    VertexIdx arr[10000];  // array for storing numbers 0 through leaf_size, which will be used by the random number generator
    VertexIdx rng[10000]; // will be used for the random number generator
    double N = 0;    

    vector<int> leafk;
    vector<int> leafn;
    int leaves_inc = 10000000;
    int max_leaves = leaves_inc;
    leafk.resize(leaves_inc);
    leafn.resize(leaves_inc);
    double internal = 0;


    for (int i=0; i<10000; i++)
        arr[i] = i;

    double internal_nodes = 0;
	double shadow_size = 0;
    srand(time(NULL));
    
    Stack *stack = newStack();
    vector <VertexSet*> leaves;
    vector <int> leafExperiments;
    leafExperiments.resize(leaves_inc);
    leaves.resize(leaves_inc);

    for (VertexIdx i=0; i<CG.nVertices; i++)
    {
    	VertexSet *path = newVertexSet(1);
    	path->vertices[0] = i;
    	VertexSet *nbrs = newVertexSet(DG.outlist.offsets[i+1] - DG.outlist.offsets[i]);
    	std::copy(DG.outlist.nbors+DG.outlist.offsets[i], DG.outlist.nbors+DG.outlist.offsets[i+1], nbrs->vertices);
    	pc = newPartialClique(path, nbrs);
    	stack->push(pc);

        StackItem* si = stack->pop();
        int flag = 0;
    	EdgeIdx num_edges = 0;
        while (si != NULL)  // unraveling the stack
        {
            VertexSet *path = si->pc->path;
            VertexSet *nbrs = si->pc->nbrs;  // get the current path and its nbrs
            psize = path->nVertices;
            nsize = nbrs->nVertices;
            flag = 0;

    	    k = clique_size - psize;
            density = get_density(CG, nbrs,num_edges);
    				
            if (psize + nsize < clique_size) 
            {
                discarded_leaves++;
                flag = 1;
            }
            else if (psize == clique_size)
            {
                num_cliques++;
                non_leaf_cliques++;
                flag = 1;
            }
            else if (psize == clique_size - 1)
            {
                num_cliques += nbrs->nVertices;
                non_leaf_cliques += nbrs->nVertices;
                flag = 1;
            }
            else if (k == 2)
    		{
    				non_leaf_cliques += num_edges;
    				flag = 1;
    		}
    		else
    		{
                double thresh_dens = 1.0 - pow((k-1), -1);
                if (density >= thresh_dens)
                {
                    leaves[num_leaves] = nbrs;
                    leafExperiments[num_leaves] = nCr[nsize][k];
                    leafk[num_leaves] = k;
                    leafn[num_leaves] = nsize;
                    N += nCr[nsize][k];
                  
                    shadow_size += nsize;

                    num_leaves++;
                    if (num_leaves == max_leaves) 
                    {
                        max_leaves += leaves_inc;
                        leaves.resize(max_leaves);
                        leafExperiments.resize(max_leaves);
                        leafk.resize(max_leaves);
                        leafn.resize(max_leaves);
                    }
                }
                else
                {
                    internal++;
                    for (int i=0; i<nbrs->nVertices-1; i++)
                    {
                        VertexSet *new_path = newVertexSet(1);
                        new_path->nVertices = path->nVertices + 1;
                        VertexSet *new_nbrs = newVertexSet(nsize);

                        int c = 0;
                        for (int j=i+1; j<nbrs->nVertices; j++)
                        {
                            if (CG.isEdge(nbrs->vertices[i], nbrs->vertices[j]) != -1)
                            {
                                new_nbrs->vertices[c] = nbrs->vertices[j];
                                c++;
                            }
                        }
                        new_nbrs->nVertices = c;
    			
                        PartialClique *pc1 = newPartialClique(new_path, new_nbrs);
                        stack->push(pc1);
                    }

                    flag = 1;
                }
            }
            if (flag == 1)
            {
                if (nbrs->nVertices >= 0) delete[] nbrs->vertices;
                delete nbrs;
                
            }
            if (path->nVertices > 0) delete[] path->vertices;
            delete path;
            delete si->pc;
            delete si;
            si = stack->pop();
            continue;
        }

    }
	high_resolution_clock::time_point treegen_e = high_resolution_clock::now();
    auto duration_treegen = std::chrono::duration_cast<std::chrono::microseconds>( treegen_e - treegen_s ).count();

    cout << "internal = " << internal << endl;
    cout << "leaves = " << num_leaves << endl;
    cout << "discarded_leaves = " << discarded_leaves << endl;
    cout << "internal + leaves + discarded_leaves = " << internal + num_leaves + discarded_leaves << endl;

    string datfile(gname + "_" + to_string(num_samples) + "_" + to_string(clique_size) + "_" + to_string(runs) + "_data");
    std::string dfname = "../results/cliques/" + datfile;
    std::cout << dfname << std::endl;
    std::ofstream df;
    df.open(dfname);
    if (!df.is_open())
    {
        std::cout << "Could not open output file." << std::endl;
        exit(1);
    }
    printf("Output File: %s\n", dfname.c_str());
    df << "estimate,succ_ratio,time," << endl;
    df.precision(2);
    double est;

	if (num_leaves != 0)
	{
		std::default_random_engine generator;
		std::discrete_distribution<int> distribution (leafExperiments.begin(), leafExperiments.end());
	
    	for (int r=0; r<runs; r++)
    	{
        
        	high_resolution_clock::time_point sampling_s = high_resolution_clock::now();
        	auto duration_sampling = std::chrono::duration_cast<std::chrono::microseconds>(sampling_s - sampling_s).count();
        	leaf_cliques = 0;
        	for (int i=0; i<num_samples; ++i) 
        	{
            	int leaf = distribution(generator);
            	k = leafk[leaf];
            	VertexSet *l = leaves[leaf];
            	std::copy(arr, arr+l->nVertices, rng);
            	std::random_shuffle ( rng, rng+l->nVertices);
            	VertexIdx *sample = (VertexIdx *) calloc(k,sizeof(VertexIdx)); 
            	for (int j = 0; j < k; j++)
                	sample[j] = l->vertices[rng[j]];

            	if (isClique(sample, k, CG)) 
            	{
                	leaf_cliques++; //experiment was a success. Sampled set of vertices do form a clique
            	}

            	free(sample);
        	}

        	high_resolution_clock::time_point sampling_e = high_resolution_clock::now();
        	duration_sampling = std::chrono::duration_cast<std::chrono::microseconds>( sampling_e - sampling_s ).count();
        	modf((leaf_cliques * N / num_samples)+non_leaf_cliques, &est);
        	succ_ratio = leaf_cliques / num_samples;
        	df << est << "," <<  succ_ratio << "," << duration_sampling << "," << endl;
    	}
    }
	else 
     	df << "0,0,0," << endl;
    		
	df.close();

    string outfile(gname + "_" + to_string(num_samples) + "_" + to_string(clique_size) + "_params");
    std::string ofname = "../results/cliques/" + outfile;
    std::cout << ofname << std::endl;
    std::ofstream ofparams;
    ofparams.open(ofname);
    if (!ofparams.is_open())
    {
        std::cout << "Could not open output file." << std::endl;
        exit(1);
    }
    printf("Output File: %s\n", ofname.c_str());

    ofparams << "internal," << "leaves," << "discarded leaves,"  << "shadow size," << "N,";
    ofparams << "tree_t," << "num_samples," << endl;
    ofparams << internal << "," << num_leaves << "," << discarded_leaves << "," << shadow_size << "," << N << ",";
    ofparams << duration_treegen << "," << num_samples << "," << endl;
    ofparams << endl;
    ofparams.close();
   
	for (int i=0; i<num_leaves; i++)
	{
		if (leaves[i]->nVertices >= 0) delete[] leaves[i]->vertices;
            delete leaves[i];
            
	} 
    cout << "clique_size = " << clique_size << endl;;
    cout << "Num of leaves = " << num_leaves << endl;
    cout << "Num of discarded leaves = " << discarded_leaves << endl;
    cout << "Number of non_leaf_cliques = " << non_leaf_cliques << endl;
    cout << "Estimated number of cliques = " << est << endl;
    cout << "N = " << N << endl;
    cout << "time reqd to build tree: " << duration_treegen << endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x27d10, %rsp          # imm = 0x27D10
movq %rcx, -0x27a28(%rbp)
movl 0x18(%rbp), %eax
movl 0x10(%rbp), %eax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movl %r9d, -0x2c(%rbp)
callq 0x3060
movq %rax, -0x38(%rbp)
movq $0x0, -0x40(%rbp)
movq $0x0, -0x48(%rbp)
movq $0x0, -0x50(%rbp)
movq $0x0, -0x58(%rbp)
movl $0x0, -0x5c(%rbp)
movq $0x0, -0x68(%rbp)
movq $0x0, -0x70(%rbp)
movq $0x0, -0x78(%rbp)
movq $0x0, -0x80(%rbp)
movq $0x0, -0x88(%rbp)
movq $0x0, -0x90(%rbp)
movq $0x0, -0x98(%rbp)
movq $0x0, -0xa0(%rbp)
movq $0x0, -0x271a8(%rbp)
leaq -0x271c0(%rbp), %rdi
movq %rdi, -0x27a20(%rbp)
callq 0x7260
leaq -0x271d8(%rbp), %rdi
callq 0x7260
movq -0x27a20(%rbp), %rdi
movl $0x989680, -0x271dc(%rbp) # imm = 0x989680
movl -0x271dc(%rbp), %eax
movl %eax, -0x271e0(%rbp)
movslq -0x271dc(%rbp), %rsi
callq 0x7280
jmp 0x49a1
movslq -0x271dc(%rbp), %rsi
leaq -0x271d8(%rbp), %rdi
callq 0x7280
jmp 0x49b6
xorps %xmm0, %xmm0
movsd %xmm0, -0x271f8(%rbp)
movl $0x0, -0x271fc(%rbp)
cmpl $0x2710, -0x271fc(%rbp) # imm = 0x2710
jge 0x4a15
movslq -0x271fc(%rbp), %rcx
movslq -0x271fc(%rbp), %rax
movq %rcx, -0x13920(%rbp,%rax,8)
movl -0x271fc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x271fc(%rbp)
jmp 0x49cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x66b5
movq $0x0, -0x27208(%rbp)
movq $0x0, -0x27210(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x32c0
movl %eax, %edi
callq 0x32e0
callq 0x43a0
movq %rax, -0x27a30(%rbp)
jmp 0x4a49
movq -0x27a30(%rbp), %rax
movq %rax, -0x27218(%rbp)
leaq -0x27230(%rbp), %rdi
callq 0x7310
leaq -0x27248(%rbp), %rdi
movq %rdi, -0x27a38(%rbp)
callq 0x7260
movq -0x27a38(%rbp), %rdi
movslq -0x271dc(%rbp), %rsi
callq 0x7280
jmp 0x4a8b
movslq -0x271dc(%rbp), %rsi
leaq -0x27230(%rbp), %rdi
callq 0x7330
jmp 0x4aa0
movq $0x0, -0x27250(%rbp)
movq -0x27250(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq (%rcx), %rax
jge 0x531e
movl $0x1, %edi
callq 0x4020
movq %rax, -0x27a40(%rbp)
jmp 0x4ad2
movq -0x27a40(%rbp), %rax
movq %rax, -0x27258(%rbp)
movq -0x27250(%rbp), %rcx
movq -0x27258(%rbp), %rax
movq 0x8(%rax), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x27250(%rbp), %rdx
movq (%rcx,%rdx,8), %rax
movq 0x8(%rcx,%rdx,8), %rdi
subq %rax, %rdi
callq 0x4020
movq %rax, -0x27a48(%rbp)
jmp 0x4b1e
movq -0x27a48(%rbp), %rax
movq %rax, -0x27260(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rcx
movq 0x18(%rax), %rax
movq -0x27250(%rbp), %rsi
movq (%rcx,%rsi,8), %rdx
movq 0x8(%rcx,%rsi,8), %rcx
leaq (%rax,%rdx,8), %rdi
leaq (%rax,%rcx,8), %rsi
movq -0x27260(%rbp), %rax
movq 0x8(%rax), %rdx
callq 0x73c0
jmp 0x4b62
movq -0x27258(%rbp), %rdi
movq -0x27260(%rbp), %rsi
callq 0x42c0
movq %rax, -0x27a50(%rbp)
jmp 0x4b7e
movq -0x27a50(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x27218(%rbp), %rdi
movq -0xa0(%rbp), %rsi
callq 0x4440
jmp 0x4ba1
movq -0x27218(%rbp), %rdi
callq 0x44a0
movq %rax, -0x27268(%rbp)
movl $0x0, -0x2726c(%rbp)
movq $0x0, -0x27278(%rbp)
cmpq $0x0, -0x27268(%rbp)
je 0x5305
movq -0x27268(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rax
movq %rax, -0x27280(%rbp)
movq -0x27268(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x27288(%rbp)
movq -0x27280(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x90(%rbp)
movq -0x27288(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x98(%rbp)
movl $0x0, -0x2726c(%rbp)
movl 0x18(%rbp), %eax
movl -0x90(%rbp), %ecx
subl %ecx, %eax
movl %eax, -0x5c(%rbp)
movq -0x8(%rbp), %rax
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movaps %xmm1, -0x272a0(%rbp)
movaps %xmm0, -0x272b0(%rbp)
movq -0x27288(%rbp), %rdi
movaps -0x272b0(%rbp), %xmm0
movaps -0x272a0(%rbp), %xmm1
movq %rsp, %rax
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x27278(%rbp), %rsi
callq 0x45d0
movsd %xmm0, -0x27a58(%rbp)
jmp 0x4c88
movsd -0x27a58(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movq -0x90(%rbp), %rax
addq -0x98(%rbp), %rax
movslq 0x18(%rbp), %rcx
cmpq %rcx, %rax
jge 0x4ce4
movsd 0x14354(%rip), %xmm0    # 0x19008
addsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movl $0x1, -0x2726c(%rbp)
jmp 0x51e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x669d
movq -0x90(%rbp), %rax
movslq 0x18(%rbp), %rcx
cmpq %rcx, %rax
jne 0x4d27
movsd 0x1430c(%rip), %xmm0    # 0x19008
addsd -0x40(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
movsd 0x142fa(%rip), %xmm0    # 0x19008
addsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movl $0x1, -0x2726c(%rbp)
jmp 0x51e3
movq -0x90(%rbp), %rax
movl 0x18(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
cmpq %rcx, %rax
jne 0x4d77
movq -0x27288(%rbp), %rax
cvtsi2sdq (%rax), %xmm0
addsd -0x40(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
movq -0x27288(%rbp), %rax
cvtsi2sdq (%rax), %xmm0
addsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movl $0x1, -0x2726c(%rbp)
jmp 0x51e1
cmpl $0x2, -0x5c(%rbp)
jne 0x4d9f
cvtsi2sdq -0x27278(%rbp), %xmm0
addsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movl $0x1, -0x2726c(%rbp)
jmp 0x51df
movl -0x5c(%rbp), %edi
decl %edi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0x7400
movsd %xmm0, -0x27a60(%rbp)
jmp 0x4db8
movsd -0x27a60(%rbp), %xmm1
movsd 0x14240(%rip), %xmm0    # 0x19008
subsd %xmm1, %xmm0
movsd %xmm0, -0x272b8(%rbp)
movsd -0x80(%rbp), %xmm0
ucomisd -0x272b8(%rbp), %xmm0
jb 0x5014
movq -0x27288(%rbp), %rax
movq %rax, -0x27a80(%rbp)
movsd -0x48(%rbp), %xmm0
movsd 0x1420e(%rip), %xmm2    # 0x19010
movsd %xmm2, -0x27a70(%rbp)
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rsi
movq %rsi, %rcx
sarq $0x3f, %rcx
andq %rcx, %rax
orq %rax, %rsi
leaq -0x27230(%rbp), %rdi
callq 0x7430
movq -0x27a80(%rbp), %rcx
movsd -0x27a70(%rbp), %xmm2
movq %rcx, (%rax)
movq -0x98(%rbp), %rax
imulq $0x328, %rax, %rcx      # imm = 0x328
leaq 0x1f505(%rip), %rax     # 0x24360
addq %rcx, %rax
movslq -0x5c(%rbp), %rcx
cvttsd2si (%rax,%rcx,8), %eax
movl %eax, -0x27a78(%rbp)
movsd -0x48(%rbp), %xmm0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rsi
movq %rsi, %rcx
sarq $0x3f, %rcx
andq %rcx, %rax
orq %rax, %rsi
leaq -0x27248(%rbp), %rdi
callq 0x7450
movl -0x27a78(%rbp), %ecx
movsd -0x27a70(%rbp), %xmm2
movl %ecx, (%rax)
movl -0x5c(%rbp), %eax
movl %eax, -0x27a74(%rbp)
movsd -0x48(%rbp), %xmm0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rsi
movq %rsi, %rcx
sarq $0x3f, %rcx
andq %rcx, %rax
orq %rax, %rsi
leaq -0x271c0(%rbp), %rdi
callq 0x7450
movl -0x27a74(%rbp), %ecx
movsd -0x27a70(%rbp), %xmm2
movl %ecx, (%rax)
movl -0x98(%rbp), %eax
movl %eax, -0x27a64(%rbp)
movsd -0x48(%rbp), %xmm0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rsi
movq %rsi, %rcx
sarq $0x3f, %rcx
andq %rcx, %rax
orq %rax, %rsi
leaq -0x271d8(%rbp), %rdi
callq 0x7450
movl -0x27a64(%rbp), %ecx
movl %ecx, (%rax)
leaq 0x1f422(%rip), %rax     # 0x24360
imulq $0x328, -0x98(%rbp), %rcx # imm = 0x328
addq %rcx, %rax
movslq -0x5c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
addsd -0x271a8(%rbp), %xmm0
movsd %xmm0, -0x271a8(%rbp)
cvtsi2sdq -0x98(%rbp), %xmm0
addsd -0x27210(%rbp), %xmm0
movsd %xmm0, -0x27210(%rbp)
movsd 0x14082(%rip), %xmm0    # 0x19008
addsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x48(%rbp), %xmm0
cvtsi2sdl -0x271e0(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jne 0x500f
jp 0x500f
movl -0x271dc(%rbp), %ecx
movl -0x271e0(%rbp), %eax
addl %ecx, %eax
movl %eax, -0x271e0(%rbp)
movslq -0x271e0(%rbp), %rsi
leaq -0x27230(%rbp), %rdi
callq 0x7330
jmp 0x4fce
movslq -0x271e0(%rbp), %rsi
leaq -0x27248(%rbp), %rdi
callq 0x7280
jmp 0x4fe3
movslq -0x271e0(%rbp), %rsi
leaq -0x271c0(%rbp), %rdi
callq 0x7280
jmp 0x4ff8
movslq -0x271e0(%rbp), %rsi
leaq -0x271d8(%rbp), %rdi
callq 0x7280
jmp 0x500d
jmp 0x500f
jmp 0x51dd
movsd 0x13fec(%rip), %xmm0    # 0x19008
addsd -0x271f8(%rbp), %xmm0
movsd %xmm0, -0x271f8(%rbp)
movl $0x0, -0x272bc(%rbp)
movslq -0x272bc(%rbp), %rax
movq -0x27288(%rbp), %rcx
movq (%rcx), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jge 0x51d3
movl $0x1, %edi
callq 0x4020
movq %rax, -0x27a88(%rbp)
jmp 0x5067
movq -0x27a88(%rbp), %rax
movq %rax, -0x272c8(%rbp)
movq -0x27280(%rbp), %rax
movq (%rax), %rcx
incq %rcx
movq -0x272c8(%rbp), %rax
movq %rcx, (%rax)
movq -0x98(%rbp), %rdi
callq 0x4020
movq %rax, -0x27a90(%rbp)
jmp 0x50a1
movq -0x27a90(%rbp), %rax
movq %rax, -0x272d0(%rbp)
movl $0x0, -0x272d4(%rbp)
movl -0x272bc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x272d8(%rbp)
movslq -0x272d8(%rbp), %rax
movq -0x27288(%rbp), %rcx
cmpq (%rcx), %rax
jge 0x516d
movq -0x8(%rbp), %rdi
movq -0x27288(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x272bc(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
movslq -0x272d8(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
callq 0xda80
movl %eax, -0x27a94(%rbp)
jmp 0x5111
movl -0x27a94(%rbp), %eax
cmpl $-0x1, %eax
je 0x5157
movq -0x27288(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x272d8(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
movq -0x272d0(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x272d4(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl -0x272d4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x272d4(%rbp)
jmp 0x5159
movl -0x272d8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x272d8(%rbp)
jmp 0x50c8
movslq -0x272d4(%rbp), %rcx
movq -0x272d0(%rbp), %rax
movq %rcx, (%rax)
movq -0x272c8(%rbp), %rdi
movq -0x272d0(%rbp), %rsi
callq 0x42c0
movq %rax, -0x27aa0(%rbp)
jmp 0x519a
movq -0x27aa0(%rbp), %rax
movq %rax, -0x272e0(%rbp)
movq -0x27218(%rbp), %rdi
movq -0x272e0(%rbp), %rsi
callq 0x4440
jmp 0x51bd
jmp 0x51bf
movl -0x272bc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x272bc(%rbp)
jmp 0x5036
movl $0x1, -0x2726c(%rbp)
jmp 0x51df
jmp 0x51e1
jmp 0x51e3
jmp 0x51e5
cmpl $0x1, -0x2726c(%rbp)
jne 0x5248
movq -0x27288(%rbp), %rax
cmpq $0x0, (%rax)
jl 0x5221
movq -0x27288(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x27aa8(%rbp)
cmpq $0x0, %rax
je 0x521f
movq -0x27aa8(%rbp), %rdi
callq 0x3400
jmp 0x5221
movq -0x27288(%rbp), %rax
movq %rax, -0x27ab0(%rbp)
cmpq $0x0, %rax
je 0x5246
movq -0x27ab0(%rbp), %rdi
movl $0x10, %esi
callq 0x3330
jmp 0x5248
movq -0x27280(%rbp), %rax
cmpq $0x0, (%rax)
jle 0x527b
movq -0x27280(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x27ab8(%rbp)
cmpq $0x0, %rax
je 0x5279
movq -0x27ab8(%rbp), %rdi
callq 0x3400
jmp 0x527b
movq -0x27280(%rbp), %rax
movq %rax, -0x27ac0(%rbp)
cmpq $0x0, %rax
je 0x52a0
movq -0x27ac0(%rbp), %rdi
movl $0x10, %esi
callq 0x3330
movq -0x27268(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x27ac8(%rbp)
cmpq $0x0, %rax
je 0x52c8
movq -0x27ac8(%rbp), %rdi
movl $0x10, %esi
callq 0x3330
movq -0x27268(%rbp), %rax
movq %rax, -0x27ad0(%rbp)
cmpq $0x0, %rax
je 0x52ed
movq -0x27ad0(%rbp), %rdi
movl $0x10, %esi
callq 0x3330
movq -0x27218(%rbp), %rdi
callq 0x44a0
movq %rax, -0x27268(%rbp)
jmp 0x4bc9
jmp 0x5307
movq -0x27250(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x27250(%rbp)
jmp 0x4aab
callq 0x3060
movq %rax, -0x272e8(%rbp)
leaq -0x272e8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x74a0
movq %rax, -0x27ad8(%rbp)
jmp 0x5343
movq -0x27ad8(%rbp), %rax
movq %rax, -0x27300(%rbp)
leaq -0x27300(%rbp), %rdi
callq 0x7470
movq %rax, -0x27ae0(%rbp)
jmp 0x5366
movq -0x27ae0(%rbp), %rax
movq %rax, -0x272f8(%rbp)
leaq -0x272f8(%rbp), %rdi
callq 0x74f0
movq %rax, -0x27ae8(%rbp)
jmp 0x5389
movq -0x27ae8(%rbp), %rax
movq %rax, -0x272f0(%rbp)
movq 0x1ec32(%rip), %rdi     # 0x23fd0
leaq 0x13dc3(%rip), %rsi     # 0x19168
callq 0x3300
movq %rax, -0x27af0(%rbp)
jmp 0x53b3
movq -0x27af0(%rbp), %rdi
movsd -0x271f8(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27af8(%rbp)
jmp 0x53d0
movq -0x27af8(%rbp), %rdi
movq 0x1ebda(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x53e5
movq 0x1ebe4(%rip), %rdi     # 0x23fd0
leaq 0x13e71(%rip), %rsi     # 0x19264
callq 0x3300
movq %rax, -0x27b00(%rbp)
jmp 0x5401
movq -0x27b00(%rbp), %rdi
movsd -0x48(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27b08(%rbp)
jmp 0x541b
movq -0x27b08(%rbp), %rdi
movq 0x1eb8f(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x5430
movq 0x1eb99(%rip), %rdi     # 0x23fd0
leaq 0x13d4a(%rip), %rsi     # 0x19188
callq 0x3300
movq %rax, -0x27b10(%rbp)
jmp 0x544c
movq -0x27b10(%rbp), %rdi
movsd -0x58(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27b18(%rbp)
jmp 0x5466
movq -0x27b18(%rbp), %rdi
movq 0x1eb44(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x547b
movq 0x1eb4e(%rip), %rdi     # 0x23fd0
leaq 0x13ceb(%rip), %rsi     # 0x19174
callq 0x3300
movq %rax, -0x27b20(%rbp)
jmp 0x5497
movq -0x27b20(%rbp), %rdi
movsd -0x271f8(%rbp), %xmm0
movsd -0x48(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd -0x58(%rbp), %xmm1
addsd %xmm1, %xmm0
callq 0x35f0
movq %rax, -0x27b28(%rbp)
jmp 0x54c6
movq -0x27b28(%rbp), %rdi
movq 0x1eae4(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x54db
movq -0x27a28(%rbp), %rsi
leaq 0x13cb3(%rip), %rdx     # 0x1919c
leaq -0x273e0(%rbp), %rdi
callq 0x7630
jmp 0x54f7
movl 0x10(%rbp), %esi
leaq -0x27400(%rbp), %rdi
callq 0x76b0
jmp 0x5508
leaq -0x273c0(%rbp), %rdi
leaq -0x273e0(%rbp), %rsi
leaq -0x27400(%rbp), %rdx
callq 0x7560
jmp 0x5524
leaq 0x13c71(%rip), %rdx     # 0x1919c
leaq -0x273a0(%rbp), %rdi
leaq -0x273c0(%rbp), %rsi
callq 0x7510
jmp 0x5540
movl 0x18(%rbp), %esi
leaq -0x27420(%rbp), %rdi
callq 0x76b0
jmp 0x5551
leaq -0x27380(%rbp), %rdi
leaq -0x273a0(%rbp), %rsi
leaq -0x27420(%rbp), %rdx
callq 0x7560
jmp 0x556d
leaq 0x13c28(%rip), %rdx     # 0x1919c
leaq -0x27360(%rbp), %rdi
leaq -0x27380(%rbp), %rsi
callq 0x7510
jmp 0x5589
movl -0x2c(%rbp), %esi
leaq -0x27440(%rbp), %rdi
callq 0x76b0
jmp 0x559a
leaq -0x27340(%rbp), %rdi
leaq -0x27360(%rbp), %rsi
leaq -0x27440(%rbp), %rdx
callq 0x7560
jmp 0x55b6
leaq 0x13be1(%rip), %rdx     # 0x1919e
leaq -0x27320(%rbp), %rdi
leaq -0x27340(%rbp), %rsi
callq 0x7510
jmp 0x55d2
leaq -0x27340(%rbp), %rdi
callq 0x31c0
leaq -0x27440(%rbp), %rdi
callq 0x31c0
leaq -0x27360(%rbp), %rdi
callq 0x31c0
leaq -0x27380(%rbp), %rdi
callq 0x31c0
leaq -0x27420(%rbp), %rdi
callq 0x31c0
leaq -0x273a0(%rbp), %rdi
callq 0x31c0
leaq -0x273c0(%rbp), %rdi
callq 0x31c0
leaq -0x27400(%rbp), %rdi
callq 0x31c0
leaq -0x273e0(%rbp), %rdi
callq 0x31c0
leaq 0x13b5f(%rip), %rsi     # 0x191a4
leaq -0x27460(%rbp), %rdi
leaq -0x27320(%rbp), %rdx
callq 0x77d0
jmp 0x565a
movq 0x1e96f(%rip), %rdi     # 0x23fd0
leaq -0x27460(%rbp), %rsi
callq 0x32b0
movq %rax, -0x27b30(%rbp)
jmp 0x5676
movq -0x27b30(%rbp), %rdi
movq 0x1e934(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x568b
leaq -0x27660(%rbp), %rdi
callq 0x3540
jmp 0x5699
leaq -0x27660(%rbp), %rdi
leaq -0x27460(%rbp), %rsi
movl $0x10, %edx
callq 0x3160
jmp 0x56b3
leaq -0x27660(%rbp), %rdi
callq 0x3240
movb %al, -0x27b31(%rbp)
jmp 0x56c7
movb -0x27b31(%rbp), %al
testb $0x1, %al
jne 0x5886
jmp 0x56d7
movq 0x1e8f2(%rip), %rdi     # 0x23fd0
leaq 0x13a44(%rip), %rsi     # 0x19129
callq 0x3300
movq %rax, -0x27b40(%rbp)
jmp 0x56f3
movq -0x27b40(%rbp), %rdi
movq 0x1e8b7(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x5708
movl $0x1, %edi
callq 0x33e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x5830
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x5824
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x5818
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x580c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x5800
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x57f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x57e8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x57dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
leaq -0x27340(%rbp), %rdi
callq 0x31c0
leaq -0x27440(%rbp), %rdi
callq 0x31c0
leaq -0x27360(%rbp), %rdi
callq 0x31c0
leaq -0x27380(%rbp), %rdi
callq 0x31c0
leaq -0x27420(%rbp), %rdi
callq 0x31c0
leaq -0x273a0(%rbp), %rdi
callq 0x31c0
leaq -0x273c0(%rbp), %rdi
callq 0x31c0
leaq -0x27400(%rbp), %rdi
callq 0x31c0
leaq -0x273e0(%rbp), %rdi
callq 0x31c0
jmp 0x669d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x6691
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x6685
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x6679
leaq -0x27460(%rbp), %rdi
callq 0x3130
movq %rax, %rsi
leaq 0x1391c(%rip), %rdi     # 0x191b8
xorl %eax, %eax
callq 0x3050
jmp 0x58a5
leaq 0x1391d(%rip), %rsi     # 0x191c9
leaq -0x27660(%rbp), %rdi
callq 0x3300
movq %rax, -0x27b48(%rbp)
jmp 0x58c1
movq -0x27b48(%rbp), %rdi
movq 0x1e6e9(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x58d6
movq -0x27660(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x27660(%rbp,%rax), %rdi
movl $0x2, %esi
callq 0x78e0
jmp 0x58f5
movsd -0x48(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x590a
jp 0x590a
jmp 0x5d4a
leaq -0x27670(%rbp), %rdi
callq 0x7910
jmp 0x5918
leaq -0x27248(%rbp), %rdi
movq %rdi, -0x27b50(%rbp)
callq 0x7930
movq -0x27b50(%rbp), %rdi
movq %rax, -0x276a8(%rbp)
callq 0x7960
movq %rax, -0x276b0(%rbp)
movq -0x276a8(%rbp), %rsi
movq -0x276b0(%rbp), %rdx
leaq -0x276a0(%rbp), %rdi
callq 0x7990
jmp 0x5961
movl $0x0, -0x276b4(%rbp)
movl -0x276b4(%rbp), %eax
cmpl -0x2c(%rbp), %eax
jge 0x5d3c
callq 0x3060
movq %rax, -0x276c0(%rbp)
leaq -0x276c0(%rbp), %rsi
movq %rsi, %rdi
callq 0x74a0
movq %rax, -0x27b58(%rbp)
jmp 0x599e
movq -0x27b58(%rbp), %rax
movq %rax, -0x276d8(%rbp)
leaq -0x276d8(%rbp), %rdi
callq 0x7470
movq %rax, -0x27b60(%rbp)
jmp 0x59c1
movq -0x27b60(%rbp), %rax
movq %rax, -0x276d0(%rbp)
leaq -0x276d0(%rbp), %rdi
callq 0x74f0
movq %rax, -0x27b68(%rbp)
jmp 0x59e4
movq -0x27b68(%rbp), %rax
movq %rax, -0x276c8(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x88(%rbp)
movl $0x0, -0x276dc(%rbp)
movl -0x276dc(%rbp), %eax
cmpl 0x10(%rbp), %eax
jge 0x5ba6
leaq -0x276a0(%rbp), %rdi
leaq -0x27670(%rbp), %rsi
callq 0x79d0
movl %eax, -0x27b6c(%rbp)
jmp 0x5a31
movl -0x27b6c(%rbp), %eax
movl %eax, -0x276e0(%rbp)
movslq -0x276e0(%rbp), %rsi
leaq -0x271c0(%rbp), %rdi
callq 0x7450
movl (%rax), %eax
movl %eax, -0x5c(%rbp)
movslq -0x276e0(%rbp), %rsi
leaq -0x27230(%rbp), %rdi
callq 0x7430
movq (%rax), %rax
movq %rax, -0x276e8(%rbp)
movq -0x276e8(%rbp), %rax
movq (%rax), %rax
leaq -0x13920(%rbp,%rax,8), %rsi
leaq -0x13920(%rbp), %rdi
leaq -0x271a0(%rbp), %rdx
callq 0x73c0
jmp 0x5a99
movq -0x276e8(%rbp), %rax
movq (%rax), %rax
leaq -0x271a0(%rbp,%rax,8), %rsi
leaq -0x271a0(%rbp), %rdi
callq 0x7a00
jmp 0x5ab9
movslq -0x5c(%rbp), %rdi
movl $0x8, %esi
callq 0x31d0
movq %rax, -0x276f0(%rbp)
movl $0x0, -0x276f4(%rbp)
movl -0x276f4(%rbp), %eax
cmpl -0x5c(%rbp), %eax
jge 0x5b47
movq -0x276e8(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x276f4(%rbp), %rcx
movq -0x271a0(%rbp,%rcx,8), %rcx
movq (%rax,%rcx,8), %rdx
movq -0x276f0(%rbp), %rax
movslq -0x276f4(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl -0x276f4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x276f4(%rbp)
jmp 0x5ad8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
leaq -0x276a0(%rbp), %rdi
callq 0x7aa0
jmp 0x6679
movq -0x276f0(%rbp), %rdi
movl -0x5c(%rbp), %esi
movq -0x8(%rbp), %rdx
callq 0x4540
movb %al, -0x27b6d(%rbp)
jmp 0x5b62
movb -0x27b6d(%rbp), %al
testb $0x1, %al
jne 0x5b6e
jmp 0x5b86
movsd 0x13492(%rip), %xmm0    # 0x19008
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movq -0x276f0(%rbp), %rdi
callq 0x33d0
movl -0x276dc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x276dc(%rbp)
jmp 0x5a07
callq 0x3060
movq %rax, -0x27700(%rbp)
leaq -0x27700(%rbp), %rdi
leaq -0x276c0(%rbp), %rsi
callq 0x74a0
movq %rax, -0x27b78(%rbp)
jmp 0x5bce
movq -0x27b78(%rbp), %rax
movq %rax, -0x27710(%rbp)
leaq -0x27710(%rbp), %rdi
callq 0x7470
movq %rax, -0x27b80(%rbp)
jmp 0x5bf1
movq -0x27b80(%rbp), %rax
movq %rax, -0x27708(%rbp)
leaq -0x27708(%rbp), %rdi
callq 0x74f0
movq %rax, -0x27b88(%rbp)
jmp 0x5c14
movq -0x27b88(%rbp), %rax
movq %rax, -0x276c8(%rbp)
movsd -0x88(%rbp), %xmm0
movsd -0x271a8(%rbp), %xmm1
mulsd %xmm1, %xmm0
cvtsi2sdl 0x10(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd -0x50(%rbp), %xmm1
addsd %xmm1, %xmm0
leaq -0x27668(%rbp), %rdi
callq 0x35a0
movsd -0x88(%rbp), %xmm0
cvtsi2sdl 0x10(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x68(%rbp)
movsd -0x27668(%rbp), %xmm0
leaq -0x27660(%rbp), %rdi
callq 0x35f0
movq %rax, -0x27b90(%rbp)
jmp 0x5c87
movq -0x27b90(%rbp), %rdi
leaq 0x13553(%rip), %rsi     # 0x191e8
callq 0x3300
movq %rax, -0x27b98(%rbp)
jmp 0x5ca3
movq -0x27b98(%rbp), %rdi
movsd -0x68(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27ba0(%rbp)
jmp 0x5cbd
movq -0x27ba0(%rbp), %rdi
leaq 0x1351d(%rip), %rsi     # 0x191e8
callq 0x3300
movq %rax, -0x27ba8(%rbp)
jmp 0x5cd9
movq -0x27ba8(%rbp), %rdi
movq -0x276c8(%rbp), %rsi
callq 0x35c0
movq %rax, -0x27bb0(%rbp)
jmp 0x5cf5
movq -0x27bb0(%rbp), %rdi
leaq 0x134e5(%rip), %rsi     # 0x191e8
callq 0x3300
movq %rax, -0x27bb8(%rbp)
jmp 0x5d11
movq -0x27bb8(%rbp), %rdi
movq 0x1e299(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x5d26
jmp 0x5d28
movl -0x276b4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x276b4(%rbp)
jmp 0x596b
leaq -0x276a0(%rbp), %rdi
callq 0x7aa0
jmp 0x5d7d
leaq 0x13492(%rip), %rsi     # 0x191e3
leaq -0x27660(%rbp), %rdi
callq 0x3300
movq %rax, -0x27bc0(%rbp)
jmp 0x5d66
movq -0x27bc0(%rbp), %rdi
movq 0x1e244(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x5d7b
jmp 0x5d7d
leaq -0x27660(%rbp), %rdi
callq 0x3440
jmp 0x5d8b
movq -0x27a28(%rbp), %rsi
leaq 0x13403(%rip), %rdx     # 0x1919c
leaq -0x277b0(%rbp), %rdi
callq 0x7630
jmp 0x5da7
movl 0x10(%rbp), %esi
leaq -0x277d0(%rbp), %rdi
callq 0x76b0
jmp 0x5db8
leaq -0x27790(%rbp), %rdi
leaq -0x277b0(%rbp), %rsi
leaq -0x277d0(%rbp), %rdx
callq 0x7560
jmp 0x5dd4
leaq 0x133c1(%rip), %rdx     # 0x1919c
leaq -0x27770(%rbp), %rdi
leaq -0x27790(%rbp), %rsi
callq 0x7510
jmp 0x5df0
movl 0x18(%rbp), %esi
leaq -0x277f0(%rbp), %rdi
callq 0x76b0
jmp 0x5e01
leaq -0x27750(%rbp), %rdi
leaq -0x27770(%rbp), %rsi
leaq -0x277f0(%rbp), %rdx
callq 0x7560
jmp 0x5e1d
leaq 0x133c6(%rip), %rdx     # 0x191ea
leaq -0x27730(%rbp), %rdi
leaq -0x27750(%rbp), %rsi
callq 0x7510
jmp 0x5e39
leaq -0x27750(%rbp), %rdi
callq 0x31c0
leaq -0x277f0(%rbp), %rdi
callq 0x31c0
leaq -0x27770(%rbp), %rdi
callq 0x31c0
leaq -0x27790(%rbp), %rdi
callq 0x31c0
leaq -0x277d0(%rbp), %rdi
callq 0x31c0
leaq -0x277b0(%rbp), %rdi
callq 0x31c0
leaq 0x1331c(%rip), %rsi     # 0x191a4
leaq -0x27810(%rbp), %rdi
leaq -0x27730(%rbp), %rdx
callq 0x77d0
jmp 0x5e9d
movq 0x1e12c(%rip), %rdi     # 0x23fd0
leaq -0x27810(%rbp), %rsi
callq 0x32b0
movq %rax, -0x27bc8(%rbp)
jmp 0x5eb9
movq -0x27bc8(%rbp), %rdi
movq 0x1e0f1(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x5ece
leaq -0x27a10(%rbp), %rdi
callq 0x3540
jmp 0x5edc
leaq -0x27a10(%rbp), %rdi
leaq -0x27810(%rbp), %rsi
movl $0x10, %edx
callq 0x3160
jmp 0x5ef6
leaq -0x27a10(%rbp), %rdi
callq 0x3240
movb %al, -0x27bc9(%rbp)
jmp 0x5f0a
movb -0x27bc9(%rbp), %al
testb $0x1, %al
jne 0x606c
jmp 0x5f1a
movq 0x1e0af(%rip), %rdi     # 0x23fd0
leaq 0x13201(%rip), %rsi     # 0x19129
callq 0x3300
movq %rax, -0x27bd8(%rbp)
jmp 0x5f36
movq -0x27bd8(%rbp), %rdi
movq 0x1e074(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x5f4b
movl $0x1, %edi
callq 0x33e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x600a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x5ffe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x5ff2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x5fe6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x5fda
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
leaq -0x27750(%rbp), %rdi
callq 0x31c0
leaq -0x277f0(%rbp), %rdi
callq 0x31c0
leaq -0x27770(%rbp), %rdi
callq 0x31c0
leaq -0x27790(%rbp), %rdi
callq 0x31c0
leaq -0x277d0(%rbp), %rdi
callq 0x31c0
leaq -0x277b0(%rbp), %rdi
callq 0x31c0
jmp 0x6679
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x666d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
jmp 0x6661
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x271e8(%rbp)
movl %eax, -0x271ec(%rbp)
leaq -0x27a10(%rbp), %rdi
callq 0x3470
jmp 0x6661
leaq -0x27810(%rbp), %rdi
callq 0x3130
movq %rax, %rsi
leaq 0x13136(%rip), %rdi     # 0x191b8
xorl %eax, %eax
callq 0x3050
jmp 0x608b
leaq 0x13160(%rip), %rsi     # 0x191f2
leaq -0x27a10(%rbp), %rdi
callq 0x3300
movq %rax, -0x27be0(%rbp)
jmp 0x60a7
movq -0x27be0(%rbp), %rdi
leaq 0x13151(%rip), %rsi     # 0x19206
callq 0x3300
movq %rax, -0x27be8(%rbp)
jmp 0x60c3
movq -0x27be8(%rbp), %rdi
leaq 0x1312b(%rip), %rsi     # 0x191fc
callq 0x3300
movq %rax, -0x27bf0(%rbp)
jmp 0x60df
movq -0x27bf0(%rbp), %rdi
leaq 0x13121(%rip), %rsi     # 0x1920e
callq 0x3300
movq %rax, -0x27bf8(%rbp)
jmp 0x60fb
movq -0x27bf8(%rbp), %rdi
leaq 0x13112(%rip), %rsi     # 0x1921b
callq 0x3300
jmp 0x6110
leaq 0x13107(%rip), %rsi     # 0x1921e
leaq -0x27a10(%rbp), %rdi
callq 0x3300
movq %rax, -0x27c00(%rbp)
jmp 0x612c
movq -0x27c00(%rbp), %rdi
leaq 0x130ec(%rip), %rsi     # 0x19226
callq 0x3300
movq %rax, -0x27c08(%rbp)
jmp 0x6148
movq -0x27c08(%rbp), %rdi
movq 0x1de62(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x615d
movsd -0x271f8(%rbp), %xmm0
leaq -0x27a10(%rbp), %rdi
callq 0x35f0
movq %rax, -0x27c10(%rbp)
jmp 0x617a
movq -0x27c10(%rbp), %rdi
leaq 0x13060(%rip), %rsi     # 0x191e8
callq 0x3300
movq %rax, -0x27c18(%rbp)
jmp 0x6196
movq -0x27c18(%rbp), %rdi
movsd -0x48(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27c20(%rbp)
jmp 0x61b0
movq -0x27c20(%rbp), %rdi
leaq 0x1302a(%rip), %rsi     # 0x191e8
callq 0x3300
movq %rax, -0x27c28(%rbp)
jmp 0x61cc
movq -0x27c28(%rbp), %rdi
movsd -0x58(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27c30(%rbp)
jmp 0x61e6
movq -0x27c30(%rbp), %rdi
leaq 0x12ff4(%rip), %rsi     # 0x191e8
callq 0x3300
movq %rax, -0x27c38(%rbp)
jmp 0x6202
movq -0x27c38(%rbp), %rdi
movsd -0x27210(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27c40(%rbp)
jmp 0x621f
movq -0x27c40(%rbp), %rdi
leaq 0x12fbb(%rip), %rsi     # 0x191e8
callq 0x3300
movq %rax, -0x27c48(%rbp)
jmp 0x623b
movq -0x27c48(%rbp), %rdi
movsd -0x271a8(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27c50(%rbp)
jmp 0x6258
movq -0x27c50(%rbp), %rdi
leaq 0x12f82(%rip), %rsi     # 0x191e8
callq 0x3300
jmp 0x626d
movq -0x272f0(%rbp), %rsi
leaq -0x27a10(%rbp), %rdi
callq 0x35c0
movq %rax, -0x27c58(%rbp)
jmp 0x6289
movq -0x27c58(%rbp), %rdi
leaq 0x12f51(%rip), %rsi     # 0x191e8
callq 0x3300
movq %rax, -0x27c60(%rbp)
jmp 0x62a5
movq -0x27c60(%rbp), %rdi
movl 0x10(%rbp), %esi
callq 0x3560
movq %rax, -0x27c68(%rbp)
jmp 0x62bd
movq -0x27c68(%rbp), %rdi
leaq 0x12f1d(%rip), %rsi     # 0x191e8
callq 0x3300
movq %rax, -0x27c70(%rbp)
jmp 0x62d9
movq -0x27c70(%rbp), %rdi
movq 0x1dcd1(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x62ee
movq 0x1dcc3(%rip), %rsi     # 0x23fb8
leaq -0x27a10(%rbp), %rdi
callq 0x3350
jmp 0x6303
leaq -0x27a10(%rbp), %rdi
callq 0x3440
jmp 0x6311
movl $0x0, -0x27a14(%rbp)
cvtsi2sdl -0x27a14(%rbp), %xmm1
movsd -0x48(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x63cd
movslq -0x27a14(%rbp), %rsi
leaq -0x27230(%rbp), %rdi
callq 0x7430
movq (%rax), %rax
cmpq $0x0, (%rax)
jl 0x6383
movslq -0x27a14(%rbp), %rsi
leaq -0x27230(%rbp), %rdi
callq 0x7430
movq (%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x27c78(%rbp)
cmpq $0x0, %rax
je 0x6381
movq -0x27c78(%rbp), %rdi
callq 0x3400
jmp 0x6383
movslq -0x27a14(%rbp), %rsi
leaq -0x27230(%rbp), %rdi
callq 0x7430
movq (%rax), %rax
movq %rax, -0x27c80(%rbp)
cmpq $0x0, %rax
je 0x63b7
movq -0x27c80(%rbp), %rdi
movl $0x10, %esi
callq 0x3330
jmp 0x63b9
movl -0x27a14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x27a14(%rbp)
jmp 0x631b
movq 0x1dbfc(%rip), %rdi     # 0x23fd0
leaq 0x12e58(%rip), %rsi     # 0x19233
callq 0x3300
movq %rax, -0x27c88(%rbp)
jmp 0x63e9
movq -0x27c88(%rbp), %rdi
movl 0x18(%rbp), %esi
callq 0x3560
movq %rax, -0x27c90(%rbp)
jmp 0x6401
movq -0x27c90(%rbp), %rdi
movq 0x1dba9(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x6416
movq 0x1dbb3(%rip), %rdi     # 0x23fd0
leaq 0x12e1e(%rip), %rsi     # 0x19242
callq 0x3300
movq %rax, -0x27c98(%rbp)
jmp 0x6432
movq -0x27c98(%rbp), %rdi
movsd -0x48(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27ca0(%rbp)
jmp 0x644c
movq -0x27ca0(%rbp), %rdi
movq 0x1db5e(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x6461
movq 0x1db68(%rip), %rdi     # 0x23fd0
leaq 0x12de4(%rip), %rsi     # 0x19253
callq 0x3300
movq %rax, -0x27ca8(%rbp)
jmp 0x647d
movq -0x27ca8(%rbp), %rdi
movsd -0x58(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27cb0(%rbp)
jmp 0x6497
movq -0x27cb0(%rbp), %rdi
movq 0x1db13(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x64ac
movq 0x1db1d(%rip), %rdi     # 0x23fd0
leaq 0x12db4(%rip), %rsi     # 0x1926e
callq 0x3300
movq %rax, -0x27cb8(%rbp)
jmp 0x64c8
movq -0x27cb8(%rbp), %rdi
movsd -0x50(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27cc0(%rbp)
jmp 0x64e2
movq -0x27cc0(%rbp), %rdi
movq 0x1dac8(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x64f7
movq 0x1dad2(%rip), %rdi     # 0x23fd0
leaq 0x12d87(%rip), %rsi     # 0x1928c
callq 0x3300
movq %rax, -0x27cc8(%rbp)
jmp 0x6513
movq -0x27cc8(%rbp), %rdi
movsd -0x27668(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27cd0(%rbp)
jmp 0x6530
movq -0x27cd0(%rbp), %rdi
movq 0x1da7a(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x6545
movq 0x1da84(%rip), %rdi     # 0x23fd0
leaq 0x12d58(%rip), %rsi     # 0x192ab
callq 0x3300
movq %rax, -0x27cd8(%rbp)
jmp 0x6561
movq -0x27cd8(%rbp), %rdi
movsd -0x271a8(%rbp), %xmm0
callq 0x35f0
movq %rax, -0x27ce0(%rbp)
jmp 0x657e
movq -0x27ce0(%rbp), %rdi
movq 0x1da2c(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x6593
movq 0x1da36(%rip), %rdi     # 0x23fd0
leaq 0x12d0f(%rip), %rsi     # 0x192b0
callq 0x3300
movq %rax, -0x27ce8(%rbp)
jmp 0x65af
movq -0x27ce8(%rbp), %rdi
movq -0x272f0(%rbp), %rsi
callq 0x35c0
movq %rax, -0x27cf0(%rbp)
jmp 0x65cb
movq -0x27cf0(%rbp), %rdi
movq 0x1d9df(%rip), %rsi     # 0x23fb8
callq 0x3350
jmp 0x65e0
leaq -0x27a10(%rbp), %rdi
callq 0x3470
leaq -0x27810(%rbp), %rdi
callq 0x31c0
leaq -0x27730(%rbp), %rdi
callq 0x31c0
leaq -0x27660(%rbp), %rdi
callq 0x3470
leaq -0x27460(%rbp), %rdi
callq 0x31c0
leaq -0x27320(%rbp), %rdi
callq 0x31c0
leaq -0x27248(%rbp), %rdi
callq 0x7ac0
leaq -0x27230(%rbp), %rdi
callq 0x7b20
leaq -0x271d8(%rbp), %rdi
callq 0x7ac0
leaq -0x271c0(%rbp), %rdi
callq 0x7ac0
addq $0x27d10, %rsp          # imm = 0x27D10
popq %rbp
retq
leaq -0x27810(%rbp), %rdi
callq 0x31c0
leaq -0x27730(%rbp), %rdi
callq 0x31c0
leaq -0x27660(%rbp), %rdi
callq 0x3470
leaq -0x27460(%rbp), %rdi
callq 0x31c0
leaq -0x27320(%rbp), %rdi
callq 0x31c0
leaq -0x27248(%rbp), %rdi
callq 0x7ac0
leaq -0x27230(%rbp), %rdi
callq 0x7b20
leaq -0x271d8(%rbp), %rdi
callq 0x7ac0
leaq -0x271c0(%rbp), %rdi
callq 0x7ac0
movq -0x271e8(%rbp), %rdi
callq 0x3580
nopl (%rax)