// File: /workspace/github_cpp_makefile_star2_O1/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:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x408, %rsp            # imm = 0x408
movq %rsi, %r14
movl %edi, %ebp
leaq 0xf8(%rsp), %rdi
callq 0x490c
leaq 0x200(%rsp), %rdi
callq 0x32d0
leaq 0xc8(%rsp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x98(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
movabsq $0x200000002, %rax      # imm = 0x200000002
movq %rax, 0xf8(%rsp)
movl $0x64, 0x100(%rsp)
cmpl $0x1, %ebp
je 0x46d2
jle 0x3ae1
movl $0x1, %r15d
movq $0x0, 0x10(%rsp)
leaq 0xc8c5(%rip), %r12      # 0x101fd
movl $0x1, %eax
movq %rax, 0x8(%rsp)
movq $0x0, 0x38(%rsp)
movslq %r15d, %r13
movq (%r14,%r13,8), %rbx
leaq 0xc89d(%rip), %rdi      # 0x101f6
movq %rbx, %rsi
callq 0x3340
testl %eax, %eax
je 0x46c6
movq %r12, %rdi
movq %rbx, %rsi
callq 0x3340
testl %eax, %eax
je 0x3a1f
leaq 0xc87d(%rip), %rdi      # 0x10200
movq %rbx, %rsi
callq 0x3340
testl %eax, %eax
je 0x3a39
leaq 0xc869(%rip), %rdi      # 0x10203
movq %rbx, %rsi
callq 0x3340
testl %eax, %eax
je 0x3a50
leaq 0xc856(%rip), %rdi      # 0x10207
movq %rbx, %rsi
callq 0x3340
testl %eax, %eax
je 0x3a67
leaq 0xc842(%rip), %rdi      # 0x1020a
movq %rbx, %rsi
callq 0x3340
testl %eax, %eax
je 0x3a73
leaq 0xc82e(%rip), %rdi      # 0x1020d
movq %rbx, %rsi
callq 0x3340
testl %eax, %eax
je 0x3aad
movq 0x90(%rsp), %r13
movq %rbx, %rdi
callq 0x3120
leaq 0x88(%rsp), %rdi
xorl %esi, %esi
movq %r13, %rdx
movq %rbx, %rcx
movq %rax, %r8
callq 0x33b0
incl %r15d
jmp 0x3acc
addl $0x2, %r15d
movq 0x8(%r14,%r13,8), %rdi
callq 0x33c0
movl %eax, 0xf8(%rsp)
jmp 0x3acc
addl $0x2, %r15d
movq 0x8(%r14,%r13,8), %rdi
callq 0x33c0
movl %eax, 0xfc(%rsp)
jmp 0x3acc
addl $0x2, %r15d
movq 0x8(%r14,%r13,8), %rdi
callq 0x33c0
movl %eax, 0x100(%rsp)
jmp 0x3acc
incl %r15d
movb $0x1, %al
movq %rax, 0x10(%rsp)
jmp 0x3acc
movq 0x8(%r14,%r13,8), %rbx
movq 0xc0(%rsp), %r13
movq %rbx, %rdi
callq 0x3120
leaq 0xb8(%rsp), %rdi
xorl %esi, %esi
movq %r13, %rdx
movq %rbx, %rcx
movq %rax, %r8
callq 0x33b0
addl $0x2, %r15d
movb $0x1, %al
movq %rax, 0x38(%rsp)
jmp 0x3acc
movq 0x8(%r14,%r13,8), %rdi
callq 0x33c0
movq %rax, 0x8(%rsp)
addl $-0x4, %eax
cmpl $-0x4, %eax
jbe 0x46ff
addl $0x2, %r15d
cmpl %ebp, %r15d
jl 0x394b
movq 0x10(%rsp), %r15
movq 0x8(%rsp), %r12
jmp 0x3af3
movl $0x1, %r12d
movq $0x0, 0x38(%rsp)
xorl %r15d, %r15d
leaq 0x28(%rsp), %r13
movq %r13, -0x10(%r13)
movq $0x0, -0x8(%r13)
movb $0x0, (%r13)
movq 0x88(%rsp), %rsi
leaq 0x40(%rsp), %rdi
callq 0x487c
leaq 0x18(%rsp), %rdi
leaq 0x40(%rsp), %rbx
movq %rbx, %rsi
callq 0x3310
movq (%rbx), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x3b3f
callq 0x3260
leaq 0xe8(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
addq %rsi, %rdx
leaq 0xd8(%rsp), %rdi
callq 0x47ec
leaq 0xf8(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0x6752
movq 0xd8(%rsp), %rdi
cmpq %r14, %rdi
je 0x3b8c
callq 0x3260
callq 0x31b0
movq %rax, %r14
movq 0x88(%rsp), %rsi
leaq 0x200(%rsp), %rdi
movl $0x8, %edx
callq 0x3180
leaq 0x278(%rsp), %rdi
callq 0x3080
testb %al, %al
je 0x46d9
cmpl $0x3, %r12d
je 0x3c03
cmpl $0x2, %r12d
je 0x3bec
cmpl $0x1, %r12d
jne 0x3c18
leaq 0xf8(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x4df4
jmp 0x3c18
leaq 0xf8(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x5838
jmp 0x3c18
leaq 0xf8(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x5a10
leaq 0x200(%rsp), %rdi
callq 0x3070
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq 0x123a2(%rip), %rdi     # 0x15fd8
callq 0x32e0
movq %rax, %rbx
leaq 0xc5f6(%rip), %rsi      # 0x1023b
movl $0x17, %edx
movq %rax, %rdi
callq 0x32e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
callq 0x31b0
movq %rax, %rbx
movq 0x12350(%rip), %rdi     # 0x15fd8
leaq 0xc5c4(%rip), %rsi      # 0x10253
movl $0xb, %edx
callq 0x32e0
subq %r14, %rbx
cvtsi2sd %rbx, %xmm0
divsd 0xc35f(%rip), %xmm0     # 0x10008
movq 0x12328(%rip), %rbx     # 0x15fd8
movq %rbx, %rdi
callq 0x33e0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
testb $0x1, %r15b
je 0x4573
movq 0x122e5(%rip), %rdi     # 0x15fd8
leaq 0xc565(%rip), %rsi      # 0x1025f
movl $0x8, %edx
callq 0x32e0
movl 0xf8(%rsp), %esi
movq 0x122c6(%rip), %rdi     # 0x15fd8
callq 0x3440
movq %rax, %r14
leaq 0xc547(%rip), %rsi      # 0x10268
movl $0xe, %edx
movq %rax, %rdi
callq 0x32e0
movl 0xfc(%rsp), %esi
movq %r14, %rdi
callq 0x3440
movq %rax, %r14
leaq 0xc530(%rip), %rsi      # 0x10277
movl $0xb, %edx
movq %rax, %rdi
callq 0x32e0
movl 0x100(%rsp), %esi
movq %r14, %rdi
callq 0x3440
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
callq 0x31b0
movq %rax, %r14
leaq 0xf8(%rsp), %rdi
callq 0x6d2e
callq 0x31b0
movq %rax, %r15
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq 0x1221d(%rip), %rdi     # 0x15fd8
callq 0x32e0
movq %rax, %r12
leaq 0xc4b9(%rip), %rsi      # 0x10283
movl $0x1a, %edx
movq %rax, %rdi
callq 0x32e0
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r12, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
movq 0x121d2(%rip), %rdi     # 0x15fd8
leaq 0xc446(%rip), %rsi      # 0x10253
movl $0xb, %edx
callq 0x32e0
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xc1e1(%rip), %xmm0     # 0x10008
movq 0x121aa(%rip), %rdi     # 0x15fd8
movsd %xmm0, 0xb0(%rsp)
callq 0x33e0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
callq 0x31b0
movq %rax, %r14
leaq 0xf8(%rsp), %rdi
callq 0xad96
callq 0x31b0
movq %rax, %r15
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq 0x12144(%rip), %rdi     # 0x15fd8
callq 0x32e0
movq %rax, %r12
leaq 0xc3fb(%rip), %rsi      # 0x1029e
movl $0x21, %edx
movq %rax, %rdi
callq 0x32e0
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r12, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
movq 0x120f9(%rip), %rdi     # 0x15fd8
leaq 0xc36d(%rip), %rsi      # 0x10253
movl $0xb, %edx
callq 0x32e0
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xc108(%rip), %xmm0     # 0x10008
movq 0x120d1(%rip), %rdi     # 0x15fd8
movsd %xmm0, 0xa8(%rsp)
callq 0x33e0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
xorl %ebp, %ebp
cmpl $0x0, 0xfc(%rsp)
je 0x3f84
movslq 0x104(%rsp), %rcx
testq %rcx, %rcx
jle 0x3f84
movq 0x1e8(%rsp), %rax
shlq $0x3, %rcx
leaq (%rcx,%rcx,2), %rcx
xorl %edx, %edx
xorl %ebp, %ebp
movq 0x8(%rax,%rdx), %rsi
subq (%rax,%rdx), %rsi
shrq $0x2, %rsi
addl %esi, %ebp
addq $0x18, %rdx
cmpq %rdx, %rcx
jne 0x3f6c
movq 0x1204d(%rip), %rdi     # 0x15fd8
leaq 0xc32e(%rip), %rsi      # 0x102c0
movl $0x16, %edx
callq 0x32e0
movq 0x12035(%rip), %rdi     # 0x15fd8
movl %ebp, %esi
callq 0x3440
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
callq 0x31b0
movq %rax, %r14
leaq 0xf8(%rsp), %rdi
callq 0x8f30
callq 0x31b0
movq %rax, %r15
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq 0x11fd6(%rip), %rdi     # 0x15fd8
callq 0x32e0
movq %rax, %r12
leaq 0xc2c6(%rip), %rsi      # 0x102d7
movl $0x1d, %edx
movq %rax, %rdi
callq 0x32e0
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r12, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
movq 0x11f8b(%rip), %rdi     # 0x15fd8
leaq 0xc1ff(%rip), %rsi      # 0x10253
movl $0xb, %edx
callq 0x32e0
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xbf9a(%rip), %xmm0     # 0x10008
movq 0x11f63(%rip), %rdi     # 0x15fd8
movsd %xmm0, 0x10(%rsp)
callq 0x33e0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
callq 0x31b0
movq %rax, %r14
leaq 0xf8(%rsp), %rdi
callq 0x9ac4
callq 0x31b0
movq %rax, %r15
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq 0x11f00(%rip), %rdi     # 0x15fd8
callq 0x32e0
movq %rax, %r12
leaq 0xc20e(%rip), %rsi      # 0x102f5
movl $0x1f, %edx
movq %rax, %rdi
callq 0x32e0
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r12, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
movq 0x11eb5(%rip), %rdi     # 0x15fd8
leaq 0xc129(%rip), %rsi      # 0x10253
movl $0xb, %edx
callq 0x32e0
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xbec4(%rip), %xmm0     # 0x10008
movq 0x11e8d(%rip), %rdi     # 0x15fd8
movsd %xmm0, 0x8(%rsp)
callq 0x33e0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
callq 0x31b0
movq %rax, %r14
leaq 0xf8(%rsp), %rdi
callq 0x9068
callq 0x31b0
movq %rax, %r15
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq 0x11e2a(%rip), %rdi     # 0x15fd8
callq 0x32e0
movq %rax, %r12
leaq 0xc158(%rip), %rsi      # 0x10315
movl $0x20, %edx
movq %rax, %rdi
callq 0x32e0
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r12, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
movq 0x11ddf(%rip), %rdi     # 0x15fd8
leaq 0xc053(%rip), %rsi      # 0x10253
movl $0xb, %edx
callq 0x32e0
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xbdee(%rip), %xmm0     # 0x10008
movq 0x11db7(%rip), %rdi     # 0x15fd8
movsd %xmm0, 0x80(%rsp)
callq 0x33e0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
movslq 0x104(%rsp), %rdx
testq %rdx, %rdx
jle 0x42ae
movq 0x170(%rsp), %rax
movq 0x188(%rsp), %rcx
shlq $0x3, %rdx
leaq (%rdx,%rdx,2), %rdx
xorl %esi, %esi
xorl %r14d, %r14d
movq 0x8(%rax,%rsi), %rdi
subq (%rax,%rsi), %rdi
shrq $0x2, %rdi
addl %r14d, %edi
movq 0x8(%rcx,%rsi), %r14
subq (%rcx,%rsi), %r14
shrq $0x2, %r14
addl %edi, %r14d
addq $0x18, %rsi
cmpq %rsi, %rdx
jne 0x4283
jmp 0x42b1
xorl %r14d, %r14d
movq 0x11d20(%rip), %rdi     # 0x15fd8
leaq 0xc077(%rip), %rsi      # 0x10336
movl $0x16, %edx
callq 0x32e0
movq 0x11d08(%rip), %rdi     # 0x15fd8
movl %r14d, %esi
callq 0x3440
leaq 0x40(%rsp), %rsi
movb $0x28, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x32e0
xorps %xmm0, %xmm0
cvtsi2sd %r14d, %xmm0
mulsd 0xbd13(%rip), %xmm0     # 0x10010
mulsd 0xbd13(%rip), %xmm0     # 0x10018
movq %rax, %rdi
callq 0x33e0
movq %rax, %r15
leaq 0xc036(%rip), %rsi      # 0x1034d
movl $0x4, %edx
movq %rax, %rdi
callq 0x32e0
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r15, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
movq 0x11c86(%rip), %rdi     # 0x15fd8
leaq 0xbff9(%rip), %rsi      # 0x10352
movl $0x16, %edx
callq 0x32e0
addl %ebp, %r14d
movl 0x104(%rsp), %eax
leal (%r14,%rax,2), %esi
movq 0x11c60(%rip), %rdi     # 0x15fd8
callq 0x3440
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r15, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
movq 0x11c2a(%rip), %rdi     # 0x15fd8
leaq 0xbfb4(%rip), %rsi      # 0x10369
movl $0x1c, %edx
callq 0x32e0
xorpd %xmm0, %xmm0
addsd 0x10(%rsp), %xmm0
addsd 0x8(%rsp), %xmm0
addsd 0x80(%rsp), %xmm0
movq 0x11bf9(%rip), %rdi     # 0x15fd8
callq 0x33e0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r15, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
movq 0x11bc3(%rip), %rdi     # 0x15fd8
leaq 0xbf6a(%rip), %rsi      # 0x10386
movl $0x11, %edx
callq 0x32e0
xorpd %xmm1, %xmm1
movsd 0xb0(%rsp), %xmm0
addsd %xmm1, %xmm0
addsd 0xa8(%rsp), %xmm0
addsd 0x10(%rsp), %xmm0
addsd 0x8(%rsp), %xmm0
addsd 0x80(%rsp), %xmm0
movq 0x11b7c(%rip), %rdi     # 0x15fd8
callq 0x33e0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r15, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
movq 0x11b46(%rip), %rdi     # 0x15fd8
leaq 0xbeff(%rip), %rsi      # 0x10398
movl $0x16, %edx
callq 0x32e0
addl 0x104(%rsp), %r14d
xorps %xmm0, %xmm0
cvtsi2sd %r14d, %xmm0
mulsd 0xbb55(%rip), %xmm0     # 0x10010
mulsd 0xbb55(%rip), %xmm0     # 0x10018
movq 0x11b0e(%rip), %rdi     # 0x15fd8
callq 0x33e0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
leaq 0x70(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
addq %rsi, %rdx
leaq 0x60(%rsp), %rdi
callq 0x47ec
leaq 0xbe8f(%rip), %rsi      # 0x103af
leaq 0x60(%rsp), %rdi
callq 0x34b0
movq 0x60(%rsp), %rsi
leaq 0x40(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x3100
leaq 0xf8(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0xa11e
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x4564
callq 0x3260
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x4573
callq 0x3260
testb $0x1, 0x38(%rsp)
je 0x4600
leaq 0x70(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
addq %rsi, %rdx
leaq 0x60(%rsp), %rdi
callq 0x47ec
leaq 0xbe0a(%rip), %rsi      # 0x103af
leaq 0x60(%rsp), %rdi
callq 0x34b0
movq 0x60(%rsp), %rsi
leaq 0x40(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x3100
leaq 0xf8(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0xb8(%rsp), %rdx
callq 0xb31a
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x45f1
callq 0x3260
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x4600
callq 0x3260
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq 0x119ba(%rip), %rdi     # 0x15fd8
callq 0x3040
movq %rax, %rdi
callq 0x31d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31d0
movq 0x18(%rsp), %rdi
cmpq %r13, %rdi
je 0x4664
callq 0x3260
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x467e
callq 0x3260
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x4698
callq 0x3260
leaq 0x200(%rsp), %rdi
callq 0x3090
leaq 0xf8(%rsp), %rdi
callq 0x52ba
xorl %eax, %eax
addq $0x408, %rsp            # imm = 0x408
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x385c
xorl %edi, %edi
callq 0x3300
callq 0x385c
jmp 0x46cb
movq 0x118f8(%rip), %rdi     # 0x15fd8
leaq 0xbb3d(%rip), %rsi      # 0x10224
movl $0x16, %edx
callq 0x32e0
movq 0x118e0(%rip), %rdi     # 0x15fd8
callq 0x3130
jmp 0x46cb
movq 0x118d2(%rip), %rdi     # 0x15fd8
leaq 0xbb04(%rip), %rsi      # 0x10211
movl $0x12, %edx
callq 0x32e0
movq 0x118ba(%rip), %rdi     # 0x15fd8
callq 0x3130
jmp 0x46cb
jmp 0x472d
jmp 0x4748
jmp 0x4748
jmp 0x4783
movq %rax, %rbx
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x474b
callq 0x3260
jmp 0x474b
jmp 0x4748
movq %rax, %rbx
movq 0x60(%rsp), %rdi
jmp 0x4761
jmp 0x4783
jmp 0x4778
movq %rax, %rbx
movq 0xd8(%rsp), %rdi
cmpq %r14, %rdi
je 0x4786
callq 0x3260
jmp 0x4786
jmp 0x4783
movq %rax, %rbx
jmp 0x47d6
jmp 0x4778
jmp 0x4783
movq %rax, %rbx
jmp 0x4795
jmp 0x4783
jmp 0x4783
jmp 0x4783
movq %rax, %rbx
movq 0x18(%rsp), %rdi
cmpq %r13, %rdi
je 0x4795
callq 0x3260
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x47af
callq 0x3260
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x47c9
callq 0x3260
leaq 0x200(%rsp), %rdi
callq 0x3090
leaq 0xf8(%rsp), %rdi
callq 0x52ba
movq %rbx, %rdi
callq 0x3460
nop