// File: datourat[P]IP-label-for-graph-reachability/main.cpp
// Function: main
int main(int argc, char* argv[]){
	Graph g;
	ifstream input;
	string queryfilename;
	string filename;
	bool IndexConstruction=false;
	bool Query=false;
	bool tf=false, pwah8=false, ferrari=false;
	bool dag=false;
	int input_method=1;
	clock_t start, end;

	g.KEYNUM=g.HUGENODENUM=2;
	g.hugenode=100;

	if(argc==1){
		usage();
		exit(0);
	}

	int i=1;
	while(i<argc){
		if (strcmp("--help", argv[i]) == 0) {
                        usage();
                        exit(0);
                }
                if (strcmp("-k", argv[i]) == 0) {
                        i++;
                        g.KEYNUM = atoi(argv[i++]);
                }
                else if (strcmp("-h", argv[i]) == 0) {
                        i++;
                        g.HUGENODENUM = atoi(argv[i++]);
                }
                else if (strcmp("-mu", argv[i]) == 0) {
                        i++;
                        g.hugenode = atoi(argv[i++]);
                }
                else if (strcmp("-i", argv[i]) == 0) {
                        IndexConstruction = true;
                        i++;
                }
                else if (strcmp("-q", argv[i]) == 0) {
                        i++;
			Query = true;
			queryfilename=argv[i++];
                }
		else if (strcmp("-in", argv[i]) == 0) {
			i++;
                        input_method = atoi(argv[i++]);
			if(input_method!=1 && input_method!=2 && input_method!=3){
				cout << "Wrong input method" << endl;
				exit(0);
			}
                }
		else {
                        filename = argv[i++];
                }
	}

	string name;
	name=extractFilename(filename.c_str());
	g.setFilename(name);

	start=clock();
	input.open(filename.c_str());
	if(!input.is_open()){
		cout << "Fail to open the file." << endl;
		exit(0);
	}
	if(input_method==1)
		g.readGraph(input);
	else if(input_method==2)
		g.readGraph2(input);
	else if(input_method==3)
		g.readGraph3(input);
	input.close();
	cout << name << " readGraph is complete." << endl;
	end=clock();
	cout << "Time Cost: " << (double)(end-start)/CLOCKS_PER_SEC << endl;


	double timesum=0;
	if(IndexConstruction){
                cout << "KEYNUM: " << g.KEYNUM << "\tHUGENODENUM: " << g.HUGENODENUM << "\thugenode: " << g.hugenode << endl;
                start=clock();
                g.ComputeLayerLabel();
                end=clock();
                cout << name << " ComputeLayer is complete." << endl;
                cout << "Time Cost: " << (double)(end-start)/CLOCKS_PER_SEC << endl;
                timesum+=(double)(end-start)/CLOCKS_PER_SEC;

                int count1=0;

                start=clock();
                g.ComputeHugeNodeList();
                end=clock();
                cout << name << " ComputeHugeNodeList is complete." << endl;
                cout << "Time Cost: " << (double)(end-start)/CLOCKS_PER_SEC << endl;
                timesum+=(double)(end-start)/CLOCKS_PER_SEC;

                if(g.HUGENODENUM!=0){
                        for(int i=0; i<g.vsize; i++){
                                count1+=g.HugeNodeList[i].size();
                        }
                }
                cout << "Number of HugeNode is " << count1 << endl;

                double timeprolabel=0;
                start=clock();
                g.InitialProLabel();
                end=clock();
                cout << name << " InitialProLabel is complete." << endl;
                cout << "Time Cost: " << (double)(end-start)/CLOCKS_PER_SEC << endl;
                timesum+=(double)(end-start)/CLOCKS_PER_SEC;
                timeprolabel+=(double)(end-start)/CLOCKS_PER_SEC;


                start=clock();
                g.ComputeProLabelIn();
                end=clock();
                cout << name << " ComputeProLabelIn is complete." << endl;
                cout << "Time Cost: " << (double)(end-start)/CLOCKS_PER_SEC << endl;
                timesum+=(double)(end-start)/CLOCKS_PER_SEC;
                timeprolabel+=(double)(end-start)/CLOCKS_PER_SEC;

                start=clock();
                g.ComputeProLabelOut();
                end=clock();
                cout << name << " ComputeProLabelOut is complete." << endl;
                cout << "Time Cost: " << (double)(end-start)/CLOCKS_PER_SEC << endl;
                timesum+=(double)(end-start)/CLOCKS_PER_SEC;
                timeprolabel+=(double)(end-start)/CLOCKS_PER_SEC;

                int count2=0;
                for(int i=0; i<g.vsize; i++){
                        count2+=g.ProLabelOut[i].size();
                        count2+=g.ProLabelIn[i].size();
                }
                
                cout << "Number of ProLabel is " << count2 << '(' << (double)count2*4/(1024*1024) << " MB)" << endl;
                cout << "Number of index item: " << count1+count2+2*g.vsize << endl;
                cout << "Constructing ProLabel Time: " << timeprolabel << endl;
                cout << "Total Time Used: " << timesum << endl;
                cout << "Total Index Size(MB): " << (double)4*(count1+count2+g.vsize)/(1024*1024) << endl;
                g.PrintIndex((name+".index").c_str());

	}

	if(Query){
		g.IndexQueryTest((name+".index").c_str(), queryfilename);
	}

	cout << endl << endl;
}

// Assembly:
subq $0x668, %rsp            # imm = 0x668
movl $0x0, 0x664(%rsp)
movl %edi, 0x660(%rsp)
movq %rsi, 0x658(%rsp)
leaq 0x550(%rsp), %rdi
callq 0x4dc0
leaq 0x348(%rsp), %rdi
callq 0x3330
jmp 0x37bd
leaq 0x318(%rsp), %rdi
callq 0x33e0
leaq 0x2f8(%rsp), %rdi
callq 0x33e0
movb $0x0, 0x2f7(%rsp)
movb $0x0, 0x2f6(%rsp)
movb $0x0, 0x2f5(%rsp)
movb $0x0, 0x2f4(%rsp)
movb $0x0, 0x2f3(%rsp)
movb $0x0, 0x2f2(%rsp)
movl $0x1, 0x2ec(%rsp)
movl $0x2, 0x554(%rsp)
movl $0x2, 0x550(%rsp)
movl $0x64, 0x558(%rsp)
cmpl $0x1, 0x660(%rsp)
jne 0x387d
callq 0x3750
jmp 0x3844
xorl %edi, %edi
callq 0x3360
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x340(%rsp)
movl %eax, 0x33c(%rsp)
jmp 0x4bcc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x340(%rsp)
movl %eax, 0x33c(%rsp)
jmp 0x4ba5
movl $0x1, 0x2d4(%rsp)
movl 0x2d4(%rsp), %eax
cmpl 0x660(%rsp), %eax
jge 0x3bbe
movq 0x658(%rsp), %rax
movslq 0x2d4(%rsp), %rcx
movq (%rax,%rcx,8), %rsi
leaq 0x2493f(%rip), %rdi     # 0x281f6
callq 0x33f0
cmpl $0x0, %eax
jne 0x38cf
callq 0x3750
jmp 0x38c8
xorl %edi, %edi
callq 0x3360
movq 0x658(%rsp), %rax
movslq 0x2d4(%rsp), %rcx
movq (%rax,%rcx,8), %rsi
leaq 0x24913(%rip), %rdi     # 0x281fd
callq 0x33f0
cmpl $0x0, %eax
jne 0x3938
movl 0x2d4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2d4(%rsp)
movq 0x658(%rsp), %rax
movl 0x2d4(%rsp), %ecx
movl %ecx, %edx
addl $0x1, %edx
movl %edx, 0x2d4(%rsp)
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3440
movl %eax, 0x550(%rsp)
jmp 0x3bb9
movq 0x658(%rsp), %rax
movslq 0x2d4(%rsp), %rcx
movq (%rax,%rcx,8), %rsi
leaq 0x248ad(%rip), %rdi     # 0x28200
callq 0x33f0
cmpl $0x0, %eax
jne 0x39a1
movl 0x2d4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2d4(%rsp)
movq 0x658(%rsp), %rax
movl 0x2d4(%rsp), %ecx
movl %ecx, %edx
addl $0x1, %edx
movl %edx, 0x2d4(%rsp)
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3440
movl %eax, 0x554(%rsp)
jmp 0x3bb7
movq 0x658(%rsp), %rax
movslq 0x2d4(%rsp), %rcx
movq (%rax,%rcx,8), %rsi
leaq 0x24847(%rip), %rdi     # 0x28203
callq 0x33f0
cmpl $0x0, %eax
jne 0x3a0a
movl 0x2d4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2d4(%rsp)
movq 0x658(%rsp), %rax
movl 0x2d4(%rsp), %ecx
movl %ecx, %edx
addl $0x1, %edx
movl %edx, 0x2d4(%rsp)
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3440
movl %eax, 0x558(%rsp)
jmp 0x3bb5
movq 0x658(%rsp), %rax
movslq 0x2d4(%rsp), %rcx
movq (%rax,%rcx,8), %rsi
leaq 0x247e2(%rip), %rdi     # 0x28207
callq 0x33f0
cmpl $0x0, %eax
jne 0x3a4d
movb $0x1, 0x2f7(%rsp)
movl 0x2d4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2d4(%rsp)
jmp 0x3bb3
movq 0x658(%rsp), %rax
movslq 0x2d4(%rsp), %rcx
movq (%rax,%rcx,8), %rsi
leaq 0x247a2(%rip), %rdi     # 0x2820a
callq 0x33f0
cmpl $0x0, %eax
jne 0x3abd
movl 0x2d4(%rsp), %eax
incl %eax
movl %eax, 0x2d4(%rsp)
movb $0x1, 0x2f6(%rsp)
movq 0x658(%rsp), %rax
movslq 0x2d4(%rsp), %rcx
movl %ecx, %edx
incl %edx
movl %edx, 0x2d4(%rsp)
movq (%rax,%rcx,8), %rsi
leaq 0x318(%rsp), %rdi
callq 0x33c0
jmp 0x3ab8
jmp 0x3bb1
movq 0x658(%rsp), %rax
movslq 0x2d4(%rsp), %rcx
movq (%rax,%rcx,8), %rsi
leaq 0x24735(%rip), %rdi     # 0x2820d
callq 0x33f0
cmpl $0x0, %eax
jne 0x3b7f
movl 0x2d4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2d4(%rsp)
movq 0x658(%rsp), %rax
movl 0x2d4(%rsp), %ecx
movl %ecx, %edx
addl $0x1, %edx
movl %edx, 0x2d4(%rsp)
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3440
movl %eax, 0x2ec(%rsp)
cmpl $0x1, 0x2ec(%rsp)
je 0x3b7d
cmpl $0x2, 0x2ec(%rsp)
je 0x3b7d
cmpl $0x3, 0x2ec(%rsp)
je 0x3b7d
movq 0x3148e(%rip), %rdi     # 0x34fd8
leaq 0x246c0(%rip), %rsi     # 0x28211
callq 0x32c0
movq %rax, 0x1b8(%rsp)
jmp 0x3b60
movq 0x1b8(%rsp), %rdi
movq 0x31459(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x3b76
xorl %edi, %edi
callq 0x3360
jmp 0x3baf
movq 0x658(%rsp), %rax
movslq 0x2d4(%rsp), %rcx
movl %ecx, %edx
incl %edx
movl %edx, 0x2d4(%rsp)
movq (%rax,%rcx,8), %rsi
leaq 0x2f8(%rsp), %rdi
callq 0x33c0
jmp 0x3bad
jmp 0x3baf
jmp 0x3bb1
jmp 0x3bb3
jmp 0x3bb5
jmp 0x3bb7
jmp 0x3bb9
jmp 0x3888
leaq 0x2b0(%rsp), %rdi
callq 0x33e0
leaq 0x2f8(%rsp), %rdi
callq 0x3120
movq %rax, %rsi
leaq 0x290(%rsp), %rdi
callq 0x4cc0
jmp 0x3bea
leaq 0x2b0(%rsp), %rdi
movq %rdi, 0x1b0(%rsp)
leaq 0x290(%rsp), %rsi
movq %rsi, 0x1a8(%rsp)
callq 0x3370
movq 0x1a8(%rsp), %rdi
callq 0x31b0
movq 0x1b0(%rsp), %rsi
leaq 0x270(%rsp), %rdi
callq 0x3130
jmp 0x3c33
leaq 0x550(%rsp), %rdi
leaq 0x270(%rsp), %rsi
callq 0x7790
jmp 0x3c4a
leaq 0x270(%rsp), %rdi
callq 0x31b0
callq 0x31f0
movq %rax, 0x2e0(%rsp)
leaq 0x2f8(%rsp), %rdi
callq 0x3120
movq %rax, %rsi
leaq 0x348(%rsp), %rdi
movl $0x8, %edx
callq 0x31c0
jmp 0x3c88
leaq 0x348(%rsp), %rdi
callq 0x3460
movb %al, 0x1a7(%rsp)
jmp 0x3c9e
movb 0x1a7(%rsp), %al
testb $0x1, %al
jne 0x3d24
jmp 0x3cab
movq 0x31326(%rip), %rdi     # 0x34fd8
leaq 0x2456b(%rip), %rsi     # 0x28224
callq 0x32c0
movq %rax, 0x198(%rsp)
jmp 0x3cc8
movq 0x198(%rsp), %rdi
movq 0x312f1(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x3cde
xorl %edi, %edi
callq 0x3360
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x340(%rsp)
movl %eax, 0x33c(%rsp)
jmp 0x4b98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x340(%rsp)
movl %eax, 0x33c(%rsp)
leaq 0x270(%rsp), %rdi
callq 0x31b0
jmp 0x4b98
cmpl $0x1, 0x2ec(%rsp)
jne 0x3d47
leaq 0x550(%rsp), %rdi
leaq 0x348(%rsp), %rsi
callq 0x54f0
jmp 0x3d45
jmp 0x3d91
cmpl $0x2, 0x2ec(%rsp)
jne 0x3d6a
leaq 0x550(%rsp), %rdi
leaq 0x348(%rsp), %rsi
callq 0x6270
jmp 0x3d68
jmp 0x3d8f
cmpl $0x3, 0x2ec(%rsp)
jne 0x3d8d
leaq 0x550(%rsp), %rdi
leaq 0x348(%rsp), %rsi
callq 0x6470
jmp 0x3d8b
jmp 0x3d8d
jmp 0x3d8f
jmp 0x3d91
leaq 0x348(%rsp), %rdi
callq 0x3080
jmp 0x3da0
movq 0x31231(%rip), %rdi     # 0x34fd8
leaq 0x2b0(%rsp), %rsi
callq 0x3270
movq %rax, 0x190(%rsp)
jmp 0x3dbe
movq 0x190(%rsp), %rdi
leaq 0x2446e(%rip), %rsi     # 0x2823b
callq 0x32c0
movq %rax, 0x188(%rsp)
jmp 0x3ddc
movq 0x188(%rsp), %rdi
movq 0x311dd(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x3df2
callq 0x31f0
movq %rax, 0x2d8(%rsp)
movq 0x311d2(%rip), %rdi     # 0x34fd8
leaq 0x24446(%rip), %rsi     # 0x28253
callq 0x32c0
movq %rax, 0x180(%rsp)
jmp 0x3e1c
movq 0x180(%rsp), %rdi
movq 0x2d8(%rsp), %rax
movq 0x2e0(%rsp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm0
movsd 0x241c4(%rip), %xmm1    # 0x28008
divsd %xmm1, %xmm0
callq 0x3540
movq %rax, 0x178(%rsp)
jmp 0x3e57
movq 0x178(%rsp), %rdi
movq 0x31162(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x3e6d
xorps %xmm0, %xmm0
movsd %xmm0, 0x268(%rsp)
testb $0x1, 0x2f7(%rsp)
je 0x4a17
movq 0x3114a(%rip), %rdi     # 0x34fd8
leaq 0x243ca(%rip), %rsi     # 0x2825f
callq 0x32c0
movq %rax, 0x170(%rsp)
jmp 0x3ea4
movq 0x170(%rsp), %rdi
movl 0x550(%rsp), %esi
callq 0x34d0
movq %rax, 0x168(%rsp)
jmp 0x3ec2
movq 0x168(%rsp), %rdi
leaq 0x24397(%rip), %rsi     # 0x28268
callq 0x32c0
movq %rax, 0x160(%rsp)
jmp 0x3ee0
movq 0x160(%rsp), %rdi
movl 0x554(%rsp), %esi
callq 0x34d0
movq %rax, 0x158(%rsp)
jmp 0x3efe
movq 0x158(%rsp), %rdi
leaq 0x2436a(%rip), %rsi     # 0x28277
callq 0x32c0
movq %rax, 0x150(%rsp)
jmp 0x3f1c
movq 0x150(%rsp), %rdi
movl 0x558(%rsp), %esi
callq 0x34d0
movq %rax, 0x148(%rsp)
jmp 0x3f3a
movq 0x148(%rsp), %rdi
movq 0x3107f(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x3f50
callq 0x31f0
movq %rax, 0x2e0(%rsp)
leaq 0x550(%rsp), %rdi
callq 0x8300
jmp 0x3f6c
callq 0x31f0
movq %rax, 0x2d8(%rsp)
movq 0x31058(%rip), %rdi     # 0x34fd8
leaq 0x2b0(%rsp), %rsi
callq 0x3270
movq %rax, 0x140(%rsp)
jmp 0x3f97
movq 0x140(%rsp), %rdi
leaq 0x242dd(%rip), %rsi     # 0x28283
callq 0x32c0
movq %rax, 0x138(%rsp)
jmp 0x3fb5
movq 0x138(%rsp), %rdi
movq 0x31004(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x3fcb
movq 0x31006(%rip), %rdi     # 0x34fd8
leaq 0x2427a(%rip), %rsi     # 0x28253
callq 0x32c0
movq %rax, 0x130(%rsp)
jmp 0x3fe8
movq 0x130(%rsp), %rdi
movq 0x2d8(%rsp), %rax
movq 0x2e0(%rsp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm0
movsd 0x23ff8(%rip), %xmm1    # 0x28008
divsd %xmm1, %xmm0
callq 0x3540
movq %rax, 0x128(%rsp)
jmp 0x4023
movq 0x128(%rsp), %rdi
movq 0x30f96(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x4039
movq 0x2d8(%rsp), %rax
movq 0x2e0(%rsp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm1
movsd 0x23faf(%rip), %xmm0    # 0x28008
divsd %xmm0, %xmm1
movsd 0x268(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x268(%rsp)
movl $0x0, 0x264(%rsp)
callq 0x31f0
movq %rax, 0x2e0(%rsp)
leaq 0x550(%rsp), %rdi
callq 0xec30
jmp 0x409a
callq 0x31f0
movq %rax, 0x2d8(%rsp)
movq 0x30f2a(%rip), %rdi     # 0x34fd8
leaq 0x2b0(%rsp), %rsi
callq 0x3270
movq %rax, 0x120(%rsp)
jmp 0x40c5
movq 0x120(%rsp), %rdi
leaq 0x241ca(%rip), %rsi     # 0x2829e
callq 0x32c0
movq %rax, 0x118(%rsp)
jmp 0x40e3
movq 0x118(%rsp), %rdi
movq 0x30ed6(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x40f9
movq 0x30ed8(%rip), %rdi     # 0x34fd8
leaq 0x2414c(%rip), %rsi     # 0x28253
callq 0x32c0
movq %rax, 0x110(%rsp)
jmp 0x4116
movq 0x110(%rsp), %rdi
movq 0x2d8(%rsp), %rax
movq 0x2e0(%rsp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm0
movsd 0x23eca(%rip), %xmm1    # 0x28008
divsd %xmm1, %xmm0
callq 0x3540
movq %rax, 0x108(%rsp)
jmp 0x4151
movq 0x108(%rsp), %rdi
movq 0x30e68(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x4167
movq 0x2d8(%rsp), %rax
subq 0x2e0(%rsp), %rax
cvtsi2sd %rax, %xmm0
movsd 0x23e84(%rip), %xmm1    # 0x28008
divsd %xmm1, %xmm0
addsd 0x268(%rsp), %xmm0
movsd %xmm0, 0x268(%rsp)
cmpl $0x0, 0x554(%rsp)
je 0x420d
movl $0x0, 0x260(%rsp)
movl 0x260(%rsp), %eax
cmpl 0x55c(%rsp), %eax
jge 0x420b
leaq 0x550(%rsp), %rdi
addq $0xf0, %rdi
movslq 0x260(%rsp), %rsi
callq 0x4bf0
movq %rax, %rdi
callq 0x4c10
movq %rax, %rcx
movslq 0x264(%rsp), %rax
addq %rcx, %rax
movl %eax, 0x264(%rsp)
movl 0x260(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x260(%rsp)
jmp 0x41af
jmp 0x420d
movq 0x30dc4(%rip), %rdi     # 0x34fd8
leaq 0x240a5(%rip), %rsi     # 0x282c0
callq 0x32c0
movq %rax, 0x100(%rsp)
jmp 0x422a
movq 0x100(%rsp), %rdi
movl 0x264(%rsp), %esi
callq 0x34d0
movq %rax, 0xf8(%rsp)
jmp 0x4248
movq 0xf8(%rsp), %rdi
movq 0x30d71(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x425e
movq $0x0, 0x258(%rsp)
callq 0x31f0
movq %rax, 0x2e0(%rsp)
leaq 0x550(%rsp), %rdi
callq 0xb940
jmp 0x4286
callq 0x31f0
movq %rax, 0x2d8(%rsp)
movq 0x30d3e(%rip), %rdi     # 0x34fd8
leaq 0x2b0(%rsp), %rsi
callq 0x3270
movq %rax, 0xf0(%rsp)
jmp 0x42b1
movq 0xf0(%rsp), %rdi
leaq 0x24017(%rip), %rsi     # 0x282d7
callq 0x32c0
movq %rax, 0xe8(%rsp)
jmp 0x42cf
movq 0xe8(%rsp), %rdi
movq 0x30cea(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x42e5
movq 0x30cec(%rip), %rdi     # 0x34fd8
leaq 0x23f60(%rip), %rsi     # 0x28253
callq 0x32c0
movq %rax, 0xe0(%rsp)
jmp 0x4302
movq 0xe0(%rsp), %rdi
movq 0x2d8(%rsp), %rax
movq 0x2e0(%rsp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm0
movsd 0x23cde(%rip), %xmm1    # 0x28008
divsd %xmm1, %xmm0
callq 0x3540
movq %rax, 0xd8(%rsp)
jmp 0x433d
movq 0xd8(%rsp), %rdi
movq 0x30c7c(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x4353
movq 0x2d8(%rsp), %rax
movq 0x2e0(%rsp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm2
movsd 0x23c95(%rip), %xmm0    # 0x28008
divsd %xmm0, %xmm2
movsd 0x268(%rsp), %xmm1
addsd %xmm2, %xmm1
movsd %xmm1, 0x268(%rsp)
movq 0x2d8(%rsp), %rax
movq 0x2e0(%rsp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm1
divsd %xmm0, %xmm1
movsd 0x258(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x258(%rsp)
callq 0x31f0
movq %rax, 0x2e0(%rsp)
leaq 0x550(%rsp), %rdi
callq 0xd250
jmp 0x43db
callq 0x31f0
movq %rax, 0x2d8(%rsp)
movq 0x30be9(%rip), %rdi     # 0x34fd8
leaq 0x2b0(%rsp), %rsi
callq 0x3270
movq %rax, 0xd0(%rsp)
jmp 0x4406
movq 0xd0(%rsp), %rdi
leaq 0x23ee0(%rip), %rsi     # 0x282f5
callq 0x32c0
movq %rax, 0xc8(%rsp)
jmp 0x4424
movq 0xc8(%rsp), %rdi
movq 0x30b95(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x443a
movq 0x30b97(%rip), %rdi     # 0x34fd8
leaq 0x23e0b(%rip), %rsi     # 0x28253
callq 0x32c0
movq %rax, 0xc0(%rsp)
jmp 0x4457
movq 0xc0(%rsp), %rdi
movq 0x2d8(%rsp), %rax
movq 0x2e0(%rsp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm0
movsd 0x23b89(%rip), %xmm1    # 0x28008
divsd %xmm1, %xmm0
callq 0x3540
movq %rax, 0xb8(%rsp)
jmp 0x4492
movq 0xb8(%rsp), %rdi
movq 0x30b27(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x44a8
movq 0x2d8(%rsp), %rax
movq 0x2e0(%rsp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm2
movsd 0x23b40(%rip), %xmm0    # 0x28008
divsd %xmm0, %xmm2
movsd 0x268(%rsp), %xmm1
addsd %xmm2, %xmm1
movsd %xmm1, 0x268(%rsp)
movq 0x2d8(%rsp), %rax
movq 0x2e0(%rsp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm1
divsd %xmm0, %xmm1
movsd 0x258(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x258(%rsp)
callq 0x31f0
movq %rax, 0x2e0(%rsp)
leaq 0x550(%rsp), %rdi
callq 0xbae0
jmp 0x4530
callq 0x31f0
movq %rax, 0x2d8(%rsp)
movq 0x30a94(%rip), %rdi     # 0x34fd8
leaq 0x2b0(%rsp), %rsi
callq 0x3270
movq %rax, 0xb0(%rsp)
jmp 0x455b
movq 0xb0(%rsp), %rdi
leaq 0x23dab(%rip), %rsi     # 0x28315
callq 0x32c0
movq %rax, 0xa8(%rsp)
jmp 0x4579
movq 0xa8(%rsp), %rdi
movq 0x30a40(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x458f
movq 0x30a42(%rip), %rdi     # 0x34fd8
leaq 0x23cb6(%rip), %rsi     # 0x28253
callq 0x32c0
movq %rax, 0xa0(%rsp)
jmp 0x45ac
movq 0xa0(%rsp), %rdi
movq 0x2d8(%rsp), %rax
movq 0x2e0(%rsp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm0
movsd 0x23a34(%rip), %xmm1    # 0x28008
divsd %xmm1, %xmm0
callq 0x3540
movq %rax, 0x98(%rsp)
jmp 0x45e7
movq 0x98(%rsp), %rdi
movq 0x309d2(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x45fd
movq 0x2d8(%rsp), %rax
subq 0x2e0(%rsp), %rax
cvtsi2sd %rax, %xmm0
movsd 0x239ee(%rip), %xmm1    # 0x28008
divsd %xmm1, %xmm0
addsd 0x268(%rsp), %xmm0
movsd %xmm0, 0x268(%rsp)
movq 0x2d8(%rsp), %rax
subq 0x2e0(%rsp), %rax
cvtsi2sd %rax, %xmm0
movsd 0x239bb(%rip), %xmm1    # 0x28008
divsd %xmm1, %xmm0
addsd 0x258(%rsp), %xmm0
movsd %xmm0, 0x258(%rsp)
movl $0x0, 0x254(%rsp)
movl $0x0, 0x250(%rsp)
movl 0x250(%rsp), %eax
cmpl 0x55c(%rsp), %eax
jge 0x4712
leaq 0x550(%rsp), %rdi
addq $0x78, %rdi
movslq 0x250(%rsp), %rsi
callq 0x4bf0
movq %rax, %rdi
callq 0x4c10
movq %rax, %rcx
movslq 0x254(%rsp), %rax
addq %rcx, %rax
movl %eax, 0x254(%rsp)
leaq 0x550(%rsp), %rdi
addq $0x90, %rdi
movslq 0x250(%rsp), %rsi
callq 0x4bf0
movq %rax, %rdi
callq 0x4c10
movq %rax, %rcx
movslq 0x254(%rsp), %rax
addq %rcx, %rax
movl %eax, 0x254(%rsp)
movl 0x250(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x250(%rsp)
jmp 0x4679
movq 0x308bf(%rip), %rdi     # 0x34fd8
leaq 0x23c16(%rip), %rsi     # 0x28336
callq 0x32c0
movq %rax, 0x90(%rsp)
jmp 0x472f
movq 0x90(%rsp), %rdi
movl 0x254(%rsp), %esi
callq 0x34d0
movq %rax, 0x88(%rsp)
jmp 0x474d
movq 0x88(%rsp), %rdi
movl $0x28, %esi
callq 0x3350
movq %rax, 0x80(%rsp)
jmp 0x4769
movq 0x80(%rsp), %rdi
cvtsi2sdl 0x254(%rsp), %xmm0
movsd 0x2388e(%rip), %xmm1    # 0x28010
mulsd %xmm1, %xmm0
movsd 0x2388a(%rip), %xmm1    # 0x28018
mulsd %xmm1, %xmm0
callq 0x3540
movq %rax, 0x78(%rsp)
jmp 0x479e
movq 0x78(%rsp), %rdi
leaq 0x23ba3(%rip), %rsi     # 0x2834d
callq 0x32c0
movq %rax, 0x70(%rsp)
jmp 0x47b6
movq 0x70(%rsp), %rdi
movq 0x30806(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x47c9
movq 0x30808(%rip), %rdi     # 0x34fd8
leaq 0x23b7b(%rip), %rsi     # 0x28352
callq 0x32c0
movq %rax, 0x68(%rsp)
jmp 0x47e3
movq 0x68(%rsp), %rdi
movl 0x264(%rsp), %edx
movl 0x254(%rsp), %eax
addl %eax, %edx
movl 0x55c(%rsp), %eax
movl %eax, %ecx
movl %edx, %eax
leal (%rax,%rcx,2), %esi
callq 0x34d0
movq %rax, 0x60(%rsp)
jmp 0x4812
movq 0x60(%rsp), %rdi
movq 0x307aa(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x4825
movq 0x307ac(%rip), %rdi     # 0x34fd8
leaq 0x23b36(%rip), %rsi     # 0x28369
callq 0x32c0
movq %rax, 0x58(%rsp)
jmp 0x483f
movq 0x58(%rsp), %rdi
movsd 0x258(%rsp), %xmm0
callq 0x3540
movq %rax, 0x50(%rsp)
jmp 0x4859
movq 0x50(%rsp), %rdi
movq 0x30763(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x486c
movq 0x30765(%rip), %rdi     # 0x34fd8
leaq 0x23b0c(%rip), %rsi     # 0x28386
callq 0x32c0
movq %rax, 0x48(%rsp)
jmp 0x4886
movq 0x48(%rsp), %rdi
movsd 0x268(%rsp), %xmm0
callq 0x3540
movq %rax, 0x40(%rsp)
jmp 0x48a0
movq 0x40(%rsp), %rdi
movq 0x3071c(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x48b3
movq 0x3071e(%rip), %rdi     # 0x34fd8
leaq 0x23ad7(%rip), %rsi     # 0x28398
callq 0x32c0
movq %rax, 0x38(%rsp)
jmp 0x48cd
movq 0x38(%rsp), %rdi
movl 0x264(%rsp), %eax
movl 0x254(%rsp), %ecx
addl %ecx, %eax
movl 0x55c(%rsp), %ecx
addl %ecx, %eax
cvtsi2sd %eax, %xmm0
movsd 0x23719(%rip), %xmm1    # 0x28010
mulsd %xmm1, %xmm0
movsd 0x23715(%rip), %xmm1    # 0x28018
mulsd %xmm1, %xmm0
callq 0x3540
movq %rax, 0x30(%rsp)
jmp 0x4913
movq 0x30(%rsp), %rdi
movq 0x306a9(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x4926
leaq 0x23a82(%rip), %rdx     # 0x283af
leaq 0x210(%rsp), %rdi
leaq 0x2b0(%rsp), %rsi
callq 0x4c30
jmp 0x4944
leaq 0x210(%rsp), %rdi
callq 0x3120
movq %rax, 0x20(%rsp)
leaq 0x20f(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x34f0
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
leaq 0x230(%rsp), %rdi
callq 0x33d0
jmp 0x4981
leaq 0x550(%rsp), %rdi
leaq 0x230(%rsp), %rsi
callq 0xdc00
jmp 0x4998
leaq 0x230(%rsp), %rdi
callq 0x31b0
leaq 0x20f(%rsp), %rdi
callq 0x3310
leaq 0x210(%rsp), %rdi
callq 0x31b0
jmp 0x4a17
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x340(%rsp)
movl %eax, 0x33c(%rsp)
jmp 0x49f8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x340(%rsp)
movl %eax, 0x33c(%rsp)
leaq 0x230(%rsp), %rdi
callq 0x31b0
leaq 0x20f(%rsp), %rdi
callq 0x3310
leaq 0x210(%rsp), %rdi
callq 0x31b0
jmp 0x4b98
testb $0x1, 0x2f6(%rsp)
je 0x4b1b
leaq 0x23983(%rip), %rdx     # 0x283af
leaq 0x1c8(%rsp), %rdi
leaq 0x2b0(%rsp), %rsi
callq 0x4c30
jmp 0x4a43
leaq 0x1c8(%rsp), %rdi
callq 0x3120
movq %rax, 0x10(%rsp)
leaq 0x1c7(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x34f0
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rdx
leaq 0x1e8(%rsp), %rdi
callq 0x33d0
jmp 0x4a80
leaq 0x550(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
leaq 0x318(%rsp), %rdx
callq 0xfb20
jmp 0x4a9f
leaq 0x1e8(%rsp), %rdi
callq 0x31b0
leaq 0x1c7(%rsp), %rdi
callq 0x3310
leaq 0x1c8(%rsp), %rdi
callq 0x31b0
jmp 0x4b1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x340(%rsp)
movl %eax, 0x33c(%rsp)
jmp 0x4aff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x340(%rsp)
movl %eax, 0x33c(%rsp)
leaq 0x1e8(%rsp), %rdi
callq 0x31b0
leaq 0x1c7(%rsp), %rdi
callq 0x3310
leaq 0x1c8(%rsp), %rdi
callq 0x31b0
jmp 0x4b98
movq 0x304b6(%rip), %rdi     # 0x34fd8
movq 0x3049f(%rip), %rsi     # 0x34fc8
callq 0x3300
movq %rax, 0x8(%rsp)
jmp 0x4b35
movq 0x8(%rsp), %rdi
movq 0x30487(%rip), %rsi     # 0x34fc8
callq 0x3300
jmp 0x4b48
leaq 0x2b0(%rsp), %rdi
callq 0x31b0
leaq 0x2f8(%rsp), %rdi
callq 0x31b0
leaq 0x318(%rsp), %rdi
callq 0x31b0
leaq 0x348(%rsp), %rdi
callq 0x30b0
leaq 0x550(%rsp), %rdi
callq 0x5af0
movl 0x664(%rsp), %eax
addq $0x668, %rsp            # imm = 0x668
retq
leaq 0x2b0(%rsp), %rdi
callq 0x31b0
leaq 0x2f8(%rsp), %rdi
callq 0x31b0
leaq 0x318(%rsp), %rdi
callq 0x31b0
leaq 0x348(%rsp), %rdi
callq 0x30b0
leaq 0x550(%rsp), %rdi
callq 0x5af0
movq 0x340(%rsp), %rdi
callq 0x34e0
nopw %cs:(%rax,%rax)