// File: /workspace/github_cpp_makefile_star2_O3/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, 0x8(%rsp)
movl %edi, %r14d
leaq 0xf8(%rsp), %rdi
callq 0x495c
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, %r14d
je 0x471a
jle 0x3b30
movl $0x1, %ebx
movq $0x0, 0x18(%rsp)
movl $0x1, %eax
movq %rax, 0x20(%rsp)
movl $0x0, 0x14(%rsp)
movslq %ebx, %r12
movq 0x8(%rsp), %rax
movq (%rax,%r12,8), %r13
leaq 0xc89d(%rip), %rdi      # 0x101f6
movq %r13, %rsi
callq 0x3340
testl %eax, %eax
je 0x470e
movzbl (%r13), %ebp
leal -0x2d(%rbp), %r15d
negl %r15d
movl %r15d, %eax
cmpl $0x2d, %ebp
jne 0x39b0
movzbl 0x1(%r13), %eax
subl $0x6b, %eax
jne 0x398c
movzbl 0x2(%r13), %eax
negl %eax
testl %eax, %eax
je 0x3a92
movl %r15d, %eax
cmpb $0x2d, %bpl
jne 0x39b0
movzbl 0x1(%r13), %eax
subl $0x68, %eax
jne 0x39ae
movzbl 0x2(%r13), %eax
negl %eax
testl %eax, %eax
je 0x3a56
leaq 0xc83e(%rip), %rdi      # 0x101fd
movq %r13, %rsi
callq 0x3340
testl %eax, %eax
je 0x3a74
cmpb $0x2d, %bpl
jne 0x3a07
movzbl 0x1(%r13), %eax
subl $0x69, %eax
jne 0x39e4
movzbl 0x2(%r13), %eax
negl %eax
testl %eax, %eax
je 0x3b0f
cmpb $0x2d, %bpl
jne 0x3a07
movzbl 0x1(%r13), %r15d
subl $0x71, %r15d
jne 0x3a04
movzbl 0x2(%r13), %r15d
negl %r15d
testl %r15d, %r15d
je 0x3aad
leaq 0xc7ea(%rip), %rdi      # 0x10201
movq %r13, %rsi
callq 0x3340
testl %eax, %eax
je 0x3aea
movq 0x90(%rsp), %r12
movq %r13, %rdi
callq 0x3120
leaq 0x88(%rsp), %rdi
xorl %esi, %esi
movq %r12, %rdx
movq %r13, %rcx
movq %rax, %r8
callq 0x33b0
incl %ebx
jmp 0x3b18
addl $0x2, %ebx
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r12,8), %rdi
callq 0x33c0
movl %eax, 0xfc(%rsp)
jmp 0x3b18
addl $0x2, %ebx
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r12,8), %rdi
callq 0x33c0
movl %eax, 0x100(%rsp)
jmp 0x3b18
addl $0x2, %ebx
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r12,8), %rdi
callq 0x33c0
movl %eax, 0xf8(%rsp)
jmp 0x3b18
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r12,8), %r13
movq 0xc0(%rsp), %r12
movq %r13, %rdi
callq 0x3120
leaq 0xb8(%rsp), %rdi
xorl %esi, %esi
movq %r12, %rdx
movq %r13, %rcx
movq %rax, %r8
callq 0x33b0
addl $0x2, %ebx
movb $0x1, %al
movl %eax, 0x14(%rsp)
jmp 0x3b18
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r12,8), %rdi
callq 0x33c0
movq %rax, 0x20(%rsp)
addl $-0x4, %eax
cmpl $-0x4, %eax
jbe 0x4747
addl $0x2, %ebx
jmp 0x3b18
incl %ebx
movb $0x1, %al
movq %rax, 0x18(%rsp)
cmpl %r14d, %ebx
jl 0x3946
movq 0x88(%rsp), %rsi
movq 0x20(%rsp), %rbx
jmp 0x3b4e
movl $0x1, %ebx
movl $0x0, 0x14(%rsp)
leaq 0x98(%rsp), %rsi
movq $0x0, 0x18(%rsp)
leaq 0x38(%rsp), %r13
movq %r13, -0x10(%r13)
movq $0x0, -0x8(%r13)
movb $0x0, (%r13)
leaq 0x48(%rsp), %rdi
callq 0x48cc
leaq 0x28(%rsp), %rdi
leaq 0x48(%rsp), %r14
movq %r14, %rsi
callq 0x3310
movq (%r14), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x3b92
callq 0x3260
leaq 0xe8(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
addq %rsi, %rdx
leaq 0xd8(%rsp), %rdi
callq 0x4834
leaq 0xf8(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0x6732
movq 0xd8(%rsp), %rdi
cmpq %r14, %rdi
je 0x3bdf
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 0x4721
cmpl $0x3, %ebx
je 0x3c53
cmpl $0x2, %ebx
je 0x3c3c
cmpl $0x1, %ebx
jne 0x3c68
leaq 0xf8(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x4e02
jmp 0x3c68
leaq 0xf8(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x5832
jmp 0x3c68
leaq 0xf8(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x5a0c
leaq 0x200(%rsp), %rdi
callq 0x3070
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0x12352(%rip), %rdi     # 0x15fd8
callq 0x32e0
movq %rax, %rbx
leaq 0xc59a(%rip), %rsi      # 0x1022f
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 0x12300(%rip), %rdi     # 0x15fd8
leaq 0xc568(%rip), %rsi      # 0x10247
movl $0xb, %edx
callq 0x32e0
subq %r14, %rbx
cvtsi2sd %rbx, %xmm0
divsd 0xc30f(%rip), %xmm0     # 0x10008
movq 0x122d8(%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, 0x18(%rsp)
je 0x45bb
movq 0x12294(%rip), %rdi     # 0x15fd8
leaq 0xc508(%rip), %rsi      # 0x10253
movl $0x8, %edx
callq 0x32e0
movl 0xf8(%rsp), %esi
movq 0x12275(%rip), %rdi     # 0x15fd8
callq 0x3440
movq %rax, %r14
leaq 0xc4ea(%rip), %rsi      # 0x1025c
movl $0xe, %edx
movq %rax, %rdi
callq 0x32e0
movl 0xfc(%rsp), %esi
movq %r14, %rdi
callq 0x3440
movq %rax, %r14
leaq 0xc4d3(%rip), %rsi      # 0x1026b
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 0x6d04
callq 0x31b0
movq %rax, %r15
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0x121cc(%rip), %rdi     # 0x15fd8
callq 0x32e0
movq %rax, %r12
leaq 0xc45c(%rip), %rsi      # 0x10277
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 0x12181(%rip), %rdi     # 0x15fd8
leaq 0xc3e9(%rip), %rsi      # 0x10247
movl $0xb, %edx
callq 0x32e0
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xc190(%rip), %xmm0     # 0x10008
movq 0x12159(%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 0xacc2
callq 0x31b0
movq %rax, %r15
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0x120f3(%rip), %rdi     # 0x15fd8
callq 0x32e0
movq %rax, %r12
leaq 0xc39e(%rip), %rsi      # 0x10292
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 0x120a8(%rip), %rdi     # 0x15fd8
leaq 0xc310(%rip), %rsi      # 0x10247
movl $0xb, %edx
callq 0x32e0
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xc0b7(%rip), %xmm0     # 0x10008
movq 0x12080(%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 0x3fd5
movslq 0x104(%rsp), %rcx
testq %rcx, %rcx
jle 0x3fd5
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 0x3fbd
movq 0x11ffc(%rip), %rdi     # 0x15fd8
leaq 0xc2d1(%rip), %rsi      # 0x102b4
movl $0x16, %edx
callq 0x32e0
movq 0x11fe4(%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 0x8ecc
callq 0x31b0
movq %rax, %r15
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0x11f85(%rip), %rdi     # 0x15fd8
callq 0x32e0
movq %rax, %r12
leaq 0xc269(%rip), %rsi      # 0x102cb
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 0x11f3a(%rip), %rdi     # 0x15fd8
leaq 0xc1a2(%rip), %rsi      # 0x10247
movl $0xb, %edx
callq 0x32e0
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xbf49(%rip), %xmm0     # 0x10008
movq 0x11f12(%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 0x99e0
callq 0x31b0
movq %rax, %r15
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0x11eaf(%rip), %rdi     # 0x15fd8
callq 0x32e0
movq %rax, %r12
leaq 0xc1b1(%rip), %rsi      # 0x102e9
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 0x11e64(%rip), %rdi     # 0x15fd8
leaq 0xc0cc(%rip), %rsi      # 0x10247
movl $0xb, %edx
callq 0x32e0
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xbe73(%rip), %xmm0     # 0x10008
movq 0x11e3c(%rip), %rdi     # 0x15fd8
movsd %xmm0, 0x18(%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 0x900c
callq 0x31b0
movq %rax, %r15
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0x11dd9(%rip), %rdi     # 0x15fd8
callq 0x32e0
movq %rax, %r12
leaq 0xc0fb(%rip), %rsi      # 0x10309
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 0x11d8e(%rip), %rdi     # 0x15fd8
leaq 0xbff6(%rip), %rsi      # 0x10247
movl $0xb, %edx
callq 0x32e0
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xbd9d(%rip), %xmm0     # 0x10008
movq 0x11d66(%rip), %rdi     # 0x15fd8
movsd %xmm0, 0x20(%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 0x42fc
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 0x42d1
jmp 0x42ff
xorl %r14d, %r14d
movq 0x11cd2(%rip), %rdi     # 0x15fd8
leaq 0xc01d(%rip), %rsi      # 0x1032a
movl $0x16, %edx
callq 0x32e0
movq 0x11cba(%rip), %rdi     # 0x15fd8
movl %r14d, %esi
callq 0x3440
leaq 0x48(%rsp), %rsi
movb $0x28, (%rsi)
movl $0x1, %edx
movq %rax, %rdi
callq 0x32e0
xorps %xmm0, %xmm0
cvtsi2sd %r14d, %xmm0
mulsd 0xbcc5(%rip), %xmm0     # 0x10010
mulsd 0xbcc5(%rip), %xmm0     # 0x10018
movq %rax, %rdi
callq 0x33e0
movq %rax, %r15
leaq 0xbfdc(%rip), %rsi      # 0x10341
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 0x11c38(%rip), %rdi     # 0x15fd8
leaq 0xbf9f(%rip), %rsi      # 0x10346
movl $0x16, %edx
callq 0x32e0
addl %ebp, %r14d
movl 0x104(%rsp), %eax
leal (%r14,%rax,2), %esi
movq 0x11c12(%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 0x11bdc(%rip), %rdi     # 0x15fd8
leaq 0xbf5a(%rip), %rsi      # 0x1035d
movl $0x1c, %edx
callq 0x32e0
xorpd %xmm0, %xmm0
addsd 0x8(%rsp), %xmm0
addsd 0x18(%rsp), %xmm0
addsd 0x20(%rsp), %xmm0
movq 0x11bae(%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 0x11b78(%rip), %rdi     # 0x15fd8
leaq 0xbf13(%rip), %rsi      # 0x1037a
movl $0x11, %edx
callq 0x32e0
xorpd %xmm1, %xmm1
movsd 0xb0(%rsp), %xmm0
addsd %xmm1, %xmm0
addsd 0xa8(%rsp), %xmm0
addsd 0x8(%rsp), %xmm0
addsd 0x18(%rsp), %xmm0
addsd 0x20(%rsp), %xmm0
movq 0x11b34(%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 0x11afe(%rip), %rdi     # 0x15fd8
leaq 0xbeab(%rip), %rsi      # 0x1038c
movl $0x16, %edx
callq 0x32e0
addl 0x104(%rsp), %r14d
xorps %xmm0, %xmm0
cvtsi2sd %r14d, %xmm0
mulsd 0xbb0d(%rip), %xmm0     # 0x10010
mulsd 0xbb0d(%rip), %xmm0     # 0x10018
movq 0x11ac6(%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 0x78(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
addq %rsi, %rdx
leaq 0x68(%rsp), %rdi
callq 0x4834
leaq 0xbe3b(%rip), %rsi      # 0x103a3
leaq 0x68(%rsp), %rdi
callq 0x34b0
movq 0x68(%rsp), %rsi
leaq 0x48(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x3100
leaq 0xf8(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0xa012
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x45ac
callq 0x3260
movq 0x68(%rsp), %rdi
cmpq %r14, %rdi
je 0x45bb
callq 0x3260
testb $0x1, 0x14(%rsp)
je 0x4648
leaq 0x78(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
addq %rsi, %rdx
leaq 0x68(%rsp), %rdi
callq 0x4834
leaq 0xbdb6(%rip), %rsi      # 0x103a3
leaq 0x68(%rsp), %rdi
callq 0x34b0
movq 0x68(%rsp), %rsi
leaq 0x48(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x3100
leaq 0xf8(%rsp), %rdi
leaq 0x48(%rsp), %rsi
leaq 0xb8(%rsp), %rdx
callq 0xb24c
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x4639
callq 0x3260
movq 0x68(%rsp), %rdi
cmpq %r14, %rdi
je 0x4648
callq 0x3260
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x3280
movsbl %al, %esi
movq 0x11972(%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 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0x46ac
callq 0x3260
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x46c6
callq 0x3260
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x46e0
callq 0x3260
leaq 0x200(%rsp), %rdi
callq 0x3090
leaq 0xf8(%rsp), %rdi
callq 0x52ac
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 0x4713
movq 0x118b0(%rip), %rdi     # 0x15fd8
leaq 0xbae9(%rip), %rsi      # 0x10218
movl $0x16, %edx
callq 0x32e0
movq 0x11898(%rip), %rdi     # 0x15fd8
callq 0x3130
jmp 0x4713
movq 0x1188a(%rip), %rdi     # 0x15fd8
leaq 0xbab0(%rip), %rsi      # 0x10205
movl $0x12, %edx
callq 0x32e0
movq 0x11872(%rip), %rdi     # 0x15fd8
callq 0x3130
jmp 0x4713
jmp 0x4775
jmp 0x4790
jmp 0x4790
jmp 0x47cb
movq %rax, %rbx
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x4793
callq 0x3260
jmp 0x4793
jmp 0x4790
movq %rax, %rbx
movq 0x68(%rsp), %rdi
jmp 0x47a9
jmp 0x47cb
jmp 0x47c0
movq %rax, %rbx
movq 0xd8(%rsp), %rdi
cmpq %r14, %rdi
je 0x47ce
callq 0x3260
jmp 0x47ce
jmp 0x47cb
movq %rax, %rbx
jmp 0x481e
jmp 0x47c0
jmp 0x47cb
movq %rax, %rbx
jmp 0x47dd
jmp 0x47cb
jmp 0x47cb
jmp 0x47cb
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0x47dd
callq 0x3260
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x47f7
callq 0x3260
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x4811
callq 0x3260
leaq 0x200(%rsp), %rdi
callq 0x3090
leaq 0xf8(%rsp), %rdi
callq 0x52ac
movq %rbx, %rdi
callq 0x3460
nop