// File: /workspace/github_cpp_makefile_star2_O3/jeffchan[P]blockchain-parser/BlockChain.cpp
// Function: BitcoinTransactionFactory::saveStatistics(bool)
void saveStatistics(bool record_addresses)
	{
		if ( record_addresses )
		{
			saveAddressesOverTime();
		}
		FILE *fph = fopen("stats.csv", "wb");
		if ( !fph ) 
		{
			printf("Failed to open statistics output file 'stats.csv' for write access.\r\n");
			return;
		}

// BitcoinAddress Summary Results first

		AgeStat ageStats[AM_LAST];

		// First compute how many bitcoin addresses have a balance over a minimum bitcoin size (we will start with just one)
		uint32_t plotCount = 0;
		for (uint32_t i=0; i<mAddresses.size(); i++) // print one in every 10,000 addresses (just for testing right now)
		{
			BitcoinAddress *ba = mAddresses.getKey(i);
			uint64_t balance = ba->mTotalReceived-ba->mTotalSent;

			uint32_t days = ba->getDaysSinceLastUsed();
			if ( days <= 1 )
			{
				ageStats[AM_ONE_DAY].addValue(balance);
			}
			else if ( days <= 7 )
			{
				ageStats[AM_ONE_WEEK].addValue(balance);
			}
			else if ( days <= 30 )
			{
				ageStats[AM_ONE_MONTH].addValue(balance);
			}
			else if ( days <= (30*3) )
			{
				ageStats[AM_THREE_MONTHS].addValue(balance);
			}
			else if ( days <= (30*6) )
			{
				ageStats[AM_SIX_MONTHS].addValue(balance);
			}
			else if ( days <= 365 )
			{
				ageStats[AM_ONE_YEAR].addValue(balance);
			}
			else if ( days <= 365*2 )
			{
				ageStats[AM_TWO_YEARS].addValue(balance);
			}
			else if ( days <= 365*3 )
			{
				ageStats[AM_THREE_YEARS].addValue(balance);
			}
			else if ( days <= 365*4 )
			{
				ageStats[AM_FOUR_YEARS].addValue(balance);
			}
			else
			{
				ageStats[AM_FIVE_YEARS].addValue(balance);
			}
			if ( balance >= ONE_BTC )
			{
				plotCount++;
			}
		}



		if ( plotCount )
		{
#define MAX_PLOT_COUNT 150000
			BitcoinAddress **sortPointers = new BitcoinAddress*[plotCount];
			uint32_t plotCount = 0;
			for (uint32_t i=0; i<mAddresses.size(); i++) // print one in every 10,000 addresses (just for testing right now)
			{
				BitcoinAddress *ba = mAddresses.getKey(i);
				uint64_t balance = ba->mTotalReceived-ba->mTotalSent;
				if ( balance >= ONE_BTC )
				{
					sortPointers[plotCount] = ba;
					plotCount++;
				}
			}
			uint32_t reportCount = plotCount;
			fprintf(fph,"\r\n");
			fprintf(fph,"\"BlockChain Statistics Report generated by: https://code.google.com/p/blockchain/ \"\r\n" );
			fprintf(fph,"\r\n");
			fprintf(fph,"\"Written by John W. Ratcliff mailto:jratcliffscarab@gmail.com\"\r\n" );
			fprintf(fph,"\"Website: http://codesuppository.blogspot.com/\"\r\n" );
			fprintf(fph,"\"TipJar Address: 1BT66EoaGySkbY9J6MugvQRhMMXDwPxPya\"\r\n" );

			fprintf(fph,"\r\n");
			fprintf(fph,"Bitcoin value distribution based on age.\r\n");
			fprintf(fph,"Age,Value,Count\r\n");
			for (uint32_t i=0; i<AM_LAST; i++)
			{
				AgeStat &as = ageStats[i];
				fprintf(fph,"%s,%d,%d\r\n", getAgeString((AgeMarker)i), (uint32_t)(as.mTotalValue/ONE_BTC), as.mCount );
			}
			fprintf(fph,"\r\n");


			fprintf(fph,"\"Found %s addreses with a bitcoin balance of 1btc or more.\"\r\n", formatNumber(plotCount));
			if ( plotCount > MAX_PLOT_COUNT )
			{
				reportCount = MAX_PLOT_COUNT;
				fprintf(fph,"\"Exceeded maximum plot count, so only reporting the first %s addresses.\"\r\n", formatNumber(reportCount));
			}
			{
				fprintf(fph,"\"Scatter Plot Data values of %s bitcoin address balances with over 1btc and number of days since last transaction. Sorted by Balance\"\r\n", formatNumber(plotCount));
				fprintf(fph,"Days,Value,FirstUsed,LastReceived,LastSpent,TotalSent,TotalReceived,TransactionCount,PublicKeyAddress\r\n");
				SortByBalance sb(sortPointers,plotCount);
				time_t currentTime;
				time(&currentTime); // get the current time.
				for (uint32_t i=0; i<reportCount; i++)
				{
					BitcoinAddress *ba = sortPointers[i];
					uint64_t balance = ba->mTotalReceived-ba->mTotalSent;
					uint32_t lastUsed = ba->mLastInputTime; // the last time we sent money (not received because anyone can send us money).
					if ( ba->mLastInputTime == 0 ) // if it has never had a spend.. then we use the time of first receive..
					{
						lastUsed = ba->mFirstOutputTime;
					}
					double seconds = difftime(currentTime,time_t(lastUsed));
					double minutes = seconds/60;
					double hours = minutes/60;
					uint32_t days = (uint32_t) (hours/24);
					uint32_t adr = mAddresses.getIndex(ba)+1;

					fprintf(fph,"%d,", days );
					fprintf(fph,"%d,", (uint32_t)( balance / ONE_BTC ));
					fprintf(fph,"\"%s\",", getTimeString(ba->mFirstOutputTime));
					fprintf(fph,"\"%s\",", getTimeString(ba->mLastOutputTime));
					fprintf(fph,"\"%s\",", getTimeString(ba->mLastInputTime));
					fprintf(fph,"%0.2f,", (float)ba->mTotalSent / ONE_BTC );
					fprintf(fph,"%0.2f,", (float) ba->mTotalReceived / ONE_BTC );
					fprintf(fph,"%d,", ba->mTransactionCount );
					fprintf(fph,"%s\r\n", getKey(adr) );

				}
				fprintf(fph,"\r\n");
			}
			{
				fprintf(fph,"\"Scatter Plot Data values of %s bitcoin address balances with over 1btc and number of days since last transaction. Sorted by Age\"\r\n", formatNumber(plotCount));
				fprintf(fph,"Days,Value,FirstUsed,LastReceived,LastSpent,TotalSent,TotalReceived,TransactionCount,PublicKeyAddress\r\n");

				SortByAge sb(sortPointers,plotCount);
				time_t currentTime;
				time(&currentTime); // get the current time.
				for (uint32_t i=0; i<reportCount; i++)
				{
					BitcoinAddress *ba = sortPointers[i];
					uint64_t balance = ba->mTotalReceived-ba->mTotalSent;
					uint32_t days = ba->getDaysSinceLastUsed();
					uint32_t adr = mAddresses.getIndex(ba)+1;
					fprintf(fph,"%d,", days );
					fprintf(fph,"%d,", (uint32_t)( balance / ONE_BTC ));
					fprintf(fph,"\"%s\",", getTimeString(ba->mFirstOutputTime));
					fprintf(fph,"\"%s\",", getTimeString(ba->mLastOutputTime));
					fprintf(fph,"\"%s\",", getTimeString(ba->mLastInputTime));
					fprintf(fph,"%0.2f,", (float)ba->mTotalSent / ONE_BTC );
					fprintf(fph,"%0.2f,", (float) ba->mTotalReceived / ONE_BTC );
					fprintf(fph,"%d,", ba->mTransactionCount );
					fprintf(fph,"%s\r\n", getKey(adr) );

				}
				fprintf(fph,"\r\n");
			}
			delete []sortPointers;
		}
//


		const char *months[12] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
		{
			fprintf(fph,"\r\n");
			fprintf(fph,"Summary statistics for %d months.\r\n", mStatCount );
			fprintf(fph,"\r\n");


			fprintf(fph,"Date,");					// Date of this row
			fprintf(fph,"ZombieValue,");			// The total value of all zombie addresses
			fprintf(fph,"ZombieCount,");			// The number of zombie addresses
			fprintf(fph,"TotalBTC,");				// Total BTC in circulation
			fprintf(fph,"TotalActiveBTC,");			// Total non-zombie BTC
			fprintf(fph,"AddressesUsed,");			// Total addresses used.
			fprintf(fph,"AddressesWithBalance,");	// Total non-zero addresses.
			fprintf(fph,"ZeroBalanceCount,");		// Number of zero balance addresses.
			fprintf(fph,"DustCount,");				// The number of dust addresses < 1mbtc
			fprintf(fph,"DustAmount,");				// The total amount in all dust addresses.
			fprintf(fph,"AddressOneBTCCount,");		// The number of addresses with at least 1btc or more.
			fprintf(fph,"AddressOneBTCValue,");		// The total value of all addresses with at least 1btc or more.
			fprintf(fph,"Address1KCount,");			// The number of addresses with more than 1,000 btc in them.
			fprintf(fph,"Address1KValue,");		// The total value of all addresses with more than 1,000 btc
			fprintf(fph,"NewAddressCount,");		// Number of new addresses with a non-zero balance created
			fprintf(fph,"ZeroAddressCount,");		// number of addresses who's balance went down to zero.
			fprintf(fph,"ChangeAddressCount,");		// number of addresses who had changes against them.
			fprintf(fph,"SameAddressCount,");		// The number of addresses with no change.
			fprintf(fph,"RiseFromDeadCount,");		// number of addresses which rose from the dead.
			fprintf(fph,"RiseFromDeadAmount\r\n");	// 

			for (uint32_t i=0; i<mStatCount; i++)
			{
				StatRow &row = mStatistics[i];
				time_t tnow(row.mTime);
				struct tm beg;
				beg = *localtime(&tnow);

				uint32_t addressUsed = row.mCount;
				uint32_t zeroCount = row.mStats[SS_ZERO].mCount;
				uint32_t addressWithBalance = addressUsed - zeroCount;

				uint32_t dustCount = row.mStats[SS_ONE_MBTC].mCount;
				uint64_t dustAmount = row.mStats[SS_ONE_MBTC].mValue;

				uint32_t addressOneBTCCount = 0;
				uint64_t addressOneBTCTotal = 0;
				uint32_t addressOneKCount = 0;
				uint64_t addressOneKTotal = 0;

				for (uint32_t i=SS_FIVE_BTC; i<SS_MAX_BTC; i++)
				{
					addressOneBTCCount+=row.mStats[i].mCount;
					addressOneBTCTotal+=row.mStats[i].mValue;
					if ( i > SS_ONE_THOUSAND_BTC )
					{
						addressOneKCount+=row.mStats[i].mCount;
						addressOneKTotal+=row.mStats[i].mValue;
					}
				}

				
				// Date
				fprintf(fph,"\"%s %d %d\",",months[beg.tm_mon], beg.tm_mday, beg.tm_year+1900); 
				fprintf(fph,"%d,", (uint32_t)(row.mZombieTotal/ONE_BTC) );
				fprintf(fph,"%d,", row.mZombieCount );

				fprintf(fph,"%d,", (uint32_t)(row.mValue / ONE_BTC) );
				fprintf(fph,"%d,", (uint32_t)((row.mValue-row.mZombieTotal)/ ONE_BTC) );

				fprintf(fph,"%d,", addressUsed );
				fprintf(fph,"%d,", addressWithBalance );
				fprintf(fph,"%d,", zeroCount );
				fprintf(fph,"%d,", dustCount );
				fprintf(fph,"%d,", (uint32_t)(dustAmount / ONE_BTC) );
				fprintf(fph,"%d,", addressOneBTCCount );
				fprintf(fph,"%d,", (uint32_t) (addressOneBTCTotal / ONE_BTC) );
				fprintf(fph,"%d,", addressOneKCount );
				fprintf(fph,"%d,", (uint32_t) (addressOneKTotal / ONE_BTC) );

				fprintf(fph,"%d,", row.mNewAddressCount );
				fprintf(fph,"%d,", row.mDeleteAddressCount );
				fprintf(fph,"%d,", row.mChangeAddressCount );
				fprintf(fph,"%d,", row.mSameAddressCount );
				fprintf(fph,"%d,", row.mRiseFromDeadCount );
				fprintf(fph,"%d,", row.mRiseFromDeadAmount );

				fprintf(fph,"\r\n");
			}

			fprintf(fph,"\r\n");
		}
	
		{
			fprintf(fph,"\r\n");
			fprintf(fph,"Bitcoin Public Key Address Distribution Count by balance.\r\n");
			fprintf(fph,"\r\n");
			fprintf(fph,",");
			for (uint32_t i=0; i<SS_COUNT; i++)
			{
				fprintf(fph,"\"%s\",", mStatLabel[i]);
			}
			fprintf(fph,"\r\n");
			for (uint32_t i=0; i<mStatCount; i++)
			{
				StatRow &row = mStatistics[i];
				time_t tnow(row.mTime);
				struct tm beg;
				beg = *localtime(&tnow);
				fprintf(fph,"\"%s %d %d\",", months[beg.tm_mon], beg.tm_mday, beg.tm_year+1900);
				for (uint32_t j=0; j<SS_COUNT; j++)
				{
					StatValue &v = row.mStats[j];
					fprintf(fph,"%d,",v.mCount);
				}
				fprintf(fph,"\r\n");
			}
			fprintf(fph,"\r\n");
		}

		{
			fprintf(fph,"\r\n");
			fprintf(fph,"Bitcoin Public Key Address Distribution Total Value by balance.\r\n");
			fprintf(fph,"\r\n");
			fprintf(fph,",");
			for (uint32_t i=0; i<SS_COUNT; i++)
			{
				fprintf(fph,"\"%s\",", mStatLabel[i]);
			}
			fprintf(fph,"\r\n");
			for (uint32_t i=0; i<mStatCount; i++)
			{
				StatRow &row = mStatistics[i];
				time_t tnow(row.mTime);
				struct tm beg;
				beg = *localtime(&tnow);
				fprintf(fph,"\"%s %d %d\",", months[beg.tm_mon], beg.tm_mday, beg.tm_year+1900);
				for (uint32_t j=0; j<SS_COUNT; j++)
				{
					StatValue &v = row.mStats[j];
					fprintf(fph,"%0.4f,",(float)v.mValue/ONE_BTC);
				}
				fprintf(fph,"\r\n");
			}
			fprintf(fph,"\r\n");
		}


		{
			fprintf(fph,"\r\n");
			fprintf(fph,"NORMALIZED : Bitcoin Public Key Address Distribution Count by balance.\r\n");
			fprintf(fph,"\r\n");
			fprintf(fph,",");
			for (uint32_t i=1; i<SS_COUNT; i++)
			{
				fprintf(fph,"\"%s\",", mStatLabel[i]);
			}
			fprintf(fph,"\r\n");
			for (uint32_t i=0; i<mStatCount; i++)
			{
				StatRow &row = mStatistics[i];
				time_t tnow(row.mTime);
				struct tm beg;
				beg = *localtime(&tnow);
				fprintf(fph,"\"%s %d\",", months[beg.tm_mon], beg.tm_year+1900);
				for (uint32_t j=1; j<SS_COUNT; j++)
				{
					StatValue &v = row.mStats[j];
					float value = (float)v.mCount*100.0f / (float)(row.mCount-row.mStats[0].mCount);
					fprintf(fph,"%0.4f,", value );
				}
				fprintf(fph,"\r\n");
			}
			fprintf(fph,"\r\n");
		}

		{
			fprintf(fph,"\r\n");
			fprintf(fph,"NORMALIZED: Bitcoin Public Key Address Distribution Total Value by balance.\r\n");
			fprintf(fph,"\r\n");
			fprintf(fph,",");
			for (uint32_t i=1; i<SS_COUNT; i++)
			{
				fprintf(fph,"\"%s\",", mStatLabel[i]);
			}
			fprintf(fph,"\r\n");
			for (uint32_t i=0; i<mStatCount; i++)
			{
				StatRow &row = mStatistics[i];
				time_t tnow(row.mTime);
				struct tm beg;
				beg = *localtime(&tnow);
				fprintf(fph,"\"%s %d\",", months[beg.tm_mon], beg.tm_year+1900);
				for (uint32_t j=1; j<SS_COUNT; j++)
				{
					StatValue &v = row.mStats[j];
					float value = (float)(v.mValue)*100.0f / (float)row.mValue;
					fprintf(fph,"%0.4f,",value);
				}
				fprintf(fph,"\r\n");
			}
			fprintf(fph,"\r\n");
		}


		fclose(fph);
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x148, %rsp            # imm = 0x148
movq %rdi, %r14
testl %esi, %esi
je 0xe491
movq %r14, %rdi
callq 0xfaba
leaq 0xa148(%rip), %rdi      # 0x185e0
leaq 0xa14b(%rip), %rsi      # 0x185ea
callq 0x21b0
testq %rax, %rax
je 0xe7f8
movq %rax, -0x38(%rbp)
movl $0x8, %eax
movq $0x0, -0x178(%rbp,%rax)
movl $0x0, -0x170(%rbp,%rax)
addq $0x10, %rax
cmpq $0xa8, %rax
jne 0xe4b6
cmpl $0x0, 0x2000000(%r14)
movq %r14, -0x60(%rbp)
je 0xee40
movq -0x170(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0xe0(%rbp), %rax
movq %rax, -0xa0(%rbp)
movl -0xd8(%rbp), %eax
movl %eax, -0x6c(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0xa8(%rbp)
movl -0xe8(%rbp), %eax
movl %eax, -0x70(%rbp)
movq -0x100(%rbp), %rax
movq %rax, -0xb0(%rbp)
movl -0xf8(%rbp), %eax
movl %eax, -0x74(%rbp)
movq -0x110(%rbp), %rax
movq %rax, -0xb8(%rbp)
movl -0x108(%rbp), %eax
movl %eax, -0x78(%rbp)
movq -0x120(%rbp), %rax
movq %rax, -0xc0(%rbp)
movl -0x118(%rbp), %eax
movl %eax, -0x7c(%rbp)
movq -0x130(%rbp), %rax
movq %rax, -0xc8(%rbp)
movl -0x128(%rbp), %eax
movl %eax, -0x88(%rbp)
movq -0x140(%rbp), %rax
movq %rax, -0x90(%rbp)
movl -0x138(%rbp), %eax
movl %eax, -0x3c(%rbp)
movq -0x150(%rbp), %rax
movq %rax, -0x98(%rbp)
movl -0x148(%rbp), %eax
movl %eax, -0x40(%rbp)
movq -0x160(%rbp), %rax
movq %rax, -0x68(%rbp)
movl -0x158(%rbp), %eax
movl %eax, -0x58(%rbp)
xorl %r12d, %r12d
movl -0x168(%rbp), %eax
movl %eax, -0x50(%rbp)
xorl %ebx, %ebx
xorl %r15d, %r15d
movq 0x2000008(%r14), %rax
leaq (%rax,%r12), %rdi
movq 0x28(%rax,%r12), %r13
subq 0x20(%rax,%r12), %r13
callq 0xff6c
xorl %ecx, %ecx
cmpq $0x5f5e100, %r13        # imm = 0x5F5E100
setae %cl
cmpl $0x1, %eax
ja 0xe60d
addq %r13, -0x30(%rbp)
addl %ecx, -0x50(%rbp)
jmp 0xe6ac
cmpl $0x7, %eax
ja 0xe61e
addq %r13, -0x68(%rbp)
addl %ecx, -0x58(%rbp)
jmp 0xe6ac
cmpl $0x1e, %eax
ja 0xe62f
addq %r13, -0x98(%rbp)
addl %ecx, -0x40(%rbp)
jmp 0xe6ac
cmpl $0x5a, %eax
ja 0xe640
addq %r13, -0x90(%rbp)
addl %ecx, -0x3c(%rbp)
jmp 0xe6ac
cmpl $0xb4, %eax
ja 0xe656
addq %r13, -0xc8(%rbp)
addl %ecx, -0x88(%rbp)
jmp 0xe6ac
cmpl $0x16d, %eax            # imm = 0x16D
ja 0xe669
addq %r13, -0xc0(%rbp)
addl %ecx, -0x7c(%rbp)
jmp 0xe6ac
cmpl $0x2da, %eax            # imm = 0x2DA
ja 0xe67c
addq %r13, -0xb8(%rbp)
addl %ecx, -0x78(%rbp)
jmp 0xe6ac
cmpl $0x447, %eax            # imm = 0x447
ja 0xe68f
addq %r13, -0xb0(%rbp)
addl %ecx, -0x74(%rbp)
jmp 0xe6ac
cmpl $0x5b4, %eax            # imm = 0x5B4
ja 0xe6a2
addq %r13, -0xa8(%rbp)
addl %ecx, -0x70(%rbp)
jmp 0xe6ac
addq %r13, -0xa0(%rbp)
addl %ecx, -0x6c(%rbp)
addl %ecx, %r15d
incq %rbx
movl 0x2000000(%r14), %r13d
addq $0x50, %r12
cmpq %r13, %rbx
jb 0xe5d6
movq -0xa0(%rbp), %rax
movq %rax, -0xe0(%rbp)
movl -0x6c(%rbp), %eax
movl %eax, -0xd8(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0xf0(%rbp)
movl -0x70(%rbp), %eax
movl %eax, -0xe8(%rbp)
movq -0xb0(%rbp), %rax
movq %rax, -0x100(%rbp)
movl -0x74(%rbp), %eax
movl %eax, -0xf8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x110(%rbp)
movl -0x78(%rbp), %eax
movl %eax, -0x108(%rbp)
movq -0xc0(%rbp), %rax
movq %rax, -0x120(%rbp)
movl -0x7c(%rbp), %eax
movl %eax, -0x118(%rbp)
movq -0xc8(%rbp), %rax
movq %rax, -0x130(%rbp)
movl -0x88(%rbp), %eax
movl %eax, -0x128(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0x140(%rbp)
movl -0x3c(%rbp), %eax
movl %eax, -0x138(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x150(%rbp)
movl -0x40(%rbp), %eax
movl %eax, -0x148(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x160(%rbp)
movl -0x58(%rbp), %eax
movl %eax, -0x158(%rbp)
movl -0x50(%rbp), %eax
movl %eax, -0x168(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x170(%rbp)
testl %r15d, %r15d
je 0xee40
movl %r15d, %edi
shlq $0x3, %rdi
callq 0x2040
movq %rax, -0x30(%rbp)
testq %r13, %r13
je 0xe815
movq 0x2000008(%r14), %rax
xorl %esi, %esi
movq -0x30(%rbp), %rdx
movq 0x28(%rax), %rcx
subq 0x20(%rax), %rcx
cmpq $0x5f5e100, %rcx        # imm = 0x5F5E100
jb 0xe7ed
movl %esi, %ecx
movq %rax, (%rdx,%rcx,8)
incl %esi
addq $0x50, %rax
decq %r13
jne 0xe7d4
jmp 0xe817
leaq 0xb2c5(%rip), %rdi      # 0x19ac4
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2260
xorl %esi, %esi
movl %esi, -0x68(%rbp)
leaq 0x9e1f(%rip), %rbx      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq -0x38(%rbp), %r13
movq %r13, %rcx
callq 0x22b0
leaq 0x9dac(%rip), %rdi      # 0x185ed
movl $0x55, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rcx
callq 0x22b0
leaq 0x9dd4(%rip), %rdi      # 0x18643
movl $0x40, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
leaq 0x9dfc(%rip), %rdi      # 0x18684
movl $0x31, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
leaq 0x9e15(%rip), %rdi      # 0x186b6
movl $0x36, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rcx
callq 0x22b0
leaq 0x9e1e(%rip), %rdi      # 0x186ed
movl $0x2a, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
leaq 0x9e30(%rip), %rdi      # 0x18718
movl $0x11, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
leaq 0x1036f(%rip), %r15     # 0x1ec70
movabsq $-0x543388ee7b9e3103, %r12 # imm = 0xABCC77118461CEFD
leaq 0x9e18(%rip), %rbx      # 0x1872a
xorl %r14d, %r14d
movq %r12, %rax
mulq -0x170(%rbp,%r14,2)
movq %rdx, %rcx
movq (%r14,%r15), %rdx
shrq $0x1a, %rcx
movl -0x168(%rbp,%r14,2), %r8d
movq %r13, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
addq $0x8, %r14
cmpq $0x50, %r14
jne 0xe915
leaq 0x9cef(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
movl -0x68(%rbp), %ebx
movl %ebx, %edi
callq 0xb535
leaq 0x9dc1(%rip), %rsi      # 0x18735
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movl %ebx, %r14d
cmpl $0x249f0, %ebx          # imm = 0x249F0
jbe 0xe9b0
movl $0x249f0, %r14d         # imm = 0x249F0
movl $0x249f0, %edi          # imm = 0x249F0
callq 0xb535
leaq 0x9dd0(%rip), %rsi      # 0x18773
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movl %ebx, %edi
callq 0xb535
leaq 0x9e00(%rip), %rsi      # 0x187be
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
leaq 0x9e74(%rip), %rdi      # 0x18846
movl $0x67, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
leaq 0x101f5(%rip), %rax     # 0x1ebe0
leaq -0x48(%rbp), %rdi
movq %rax, (%rdi)
movq -0x30(%rbp), %rsi
movl %ebx, %edx
callq 0xb2d4
leaq -0xd0(%rbp), %rdi
callq 0x2130
movl %r14d, %eax
movq %rax, -0x50(%rbp)
movl %r14d, -0x40(%rbp)
testl %r14d, %r14d
movq -0x60(%rbp), %r14
je 0xebf6
xorl %ecx, %ecx
movq -0x30(%rbp), %rax
movq %rcx, -0x58(%rbp)
movq (%rax,%rcx,8), %r12
movl 0x14(%r12), %eax
testl %eax, %eax
jne 0xea3d
movl 0x1c(%r12), %eax
movq 0x28(%r12), %rbx
subq 0x20(%r12), %rbx
movq -0xd0(%rbp), %rdi
movl %eax, %esi
callq 0x20a0
movsd 0x8d83(%rip), %xmm1     # 0x177e0
divsd %xmm1, %xmm0
divsd %xmm1, %xmm0
divsd 0x8d7b(%rip), %xmm0     # 0x177e8
cvttsd2si %xmm0, %rdx
movq %r12, %r13
subq 0x2000008(%r14), %r13
movq -0x38(%rbp), %r14
movq %r14, %rdi
leaq 0x9e24(%rip), %r15      # 0x188ae
movq %r15, %rsi
xorl %eax, %eax
callq 0x2230
movq %rbx, %rax
movabsq $-0x543388ee7b9e3103, %rcx # imm = 0xABCC77118461CEFD
mulq %rcx
shrq $0x1a, %rdx
movq %r14, %rdi
movq %r15, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x1c(%r12), %edi
callq 0xb616
movq %r14, %rdi
leaq 0x9de9(%rip), %rbx      # 0x188b2
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movl 0x18(%r12), %edi
callq 0xb616
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movl 0x14(%r12), %edi
callq 0xb616
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movq 0x20(%r12), %rax
testq %rax, %rax
js 0xeb1e
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0xeb36
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
leaq 0x9d7b(%rip), %r15      # 0x188b8
divss 0x8bcb(%rip), %xmm0     # 0x17710
cvtss2sd %xmm0, %xmm0
movq -0x38(%rbp), %rdi
movq %r15, %rsi
movb $0x1, %al
callq 0x2230
movq 0x28(%r12), %rax
testq %rax, %rax
movq -0x60(%rbp), %r14
js 0xeb6f
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0xeb87
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
shrq $0x4, %r13
imull $0xcccccccd, %r13d, %ebx # imm = 0xCCCCCCCD
incl %ebx
divss 0x8b74(%rip), %xmm0     # 0x17710
cvtss2sd %xmm0, %xmm0
movq -0x38(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
movb $0x1, %al
callq 0x2230
movl 0x3c(%r12), %edx
movq %r13, %rdi
leaq 0x9cee(%rip), %rsi      # 0x188ae
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
movl %ebx, %esi
callq 0xe002
movq %r13, %rdi
leaq 0x8fc0(%rip), %rsi      # 0x17b9b
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movq -0x58(%rbp), %rcx
incq %rcx
cmpq %rcx, -0x50(%rbp)
jne 0xea23
leaq 0x9a43(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
movl -0x68(%rbp), %ebx
movl %ebx, %edi
callq 0xb535
leaq 0x9c9f(%rip), %rsi      # 0x188bf
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
leaq 0x9c12(%rip), %rdi      # 0x18846
movl $0x67, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
leaq 0x10083(%rip), %rax     # 0x1ecd0
leaq -0x48(%rbp), %rdi
movq %rax, (%rdi)
movq -0x30(%rbp), %rsi
movl %ebx, %edx
callq 0xb2d4
leaq -0xd0(%rbp), %rdi
callq 0x2130
cmpl $0x0, -0x40(%rbp)
je 0xee1e
leaq 0x9c32(%rip), %rbx      # 0x188ae
xorl %ecx, %ecx
movq -0x30(%rbp), %rax
movq %rcx, -0x58(%rbp)
movq (%rax,%rcx,8), %r12
movq 0x28(%r12), %r13
subq 0x20(%r12), %r13
movq %r12, %rdi
callq 0xff6c
movq %r12, %r15
subq 0x2000008(%r14), %r15
movq -0x38(%rbp), %rdi
movq %rbx, %rsi
movl %eax, %edx
xorl %eax, %eax
callq 0x2230
movq %r13, %rax
movq -0x38(%rbp), %r14
movabsq $-0x543388ee7b9e3103, %rcx # imm = 0xABCC77118461CEFD
mulq %rcx
shrq $0x1a, %rdx
movq %r14, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x1c(%r12), %edi
callq 0xb616
movq %r14, %rdi
leaq 0x9bc3(%rip), %rbx      # 0x188b2
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movl 0x18(%r12), %edi
callq 0xb616
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movl 0x14(%r12), %edi
callq 0xb616
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movq 0x20(%r12), %rax
testq %rax, %rax
js 0xed41
cvtsi2ss %rax, %xmm0
jmp 0xed56
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
divss 0x89b2(%rip), %xmm0     # 0x17710
cvtss2sd %xmm0, %xmm0
movq %r14, %rdi
leaq 0x9b4c(%rip), %rsi      # 0x188b8
movb $0x1, %al
callq 0x2230
movq 0x28(%r12), %rax
testq %rax, %rax
js 0xed87
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0xed9f
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
shrq $0x4, %r15
imull $0xcccccccd, %r15d, %r13d # imm = 0xCCCCCCCD
incl %r13d
divss 0x895b(%rip), %xmm0     # 0x17710
cvtss2sd %xmm0, %xmm0
movq -0x38(%rbp), %r14
movq %r14, %rdi
leaq 0x9af1(%rip), %rsi      # 0x188b8
movb $0x1, %al
callq 0x2230
movl 0x3c(%r12), %edx
movq %r14, %rdi
leaq 0x9ad1(%rip), %rbx      # 0x188ae
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movq -0x60(%rbp), %rdi
movl %r13d, %esi
movq %r14, %r13
movq %rdi, %r14
callq 0xe002
movq %r13, %rdi
leaq 0x8d98(%rip), %rsi      # 0x17b9b
movq %rax, %rdx
xorl %eax, %eax
callq 0x2230
movq -0x58(%rbp), %rcx
incq %rcx
cmpq %rcx, -0x50(%rbp)
jne 0xec7e
leaq 0x981b(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
movq -0x30(%rbp), %rdi
callq 0x2200
leaq 0x97f9(%rip), %rbx      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq -0x38(%rbp), %r12
movq %r12, %rcx
callq 0x22b0
movl 0x2000050(%r14), %edx
leaq 0x9b2b(%rip), %rsi      # 0x18999
movq %r12, %rdi
xorl %eax, %eax
callq 0x2230
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
leaq 0x9b29(%rip), %rdi      # 0x189bd
movl $0x5, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9b16(%rip), %rdi      # 0x189c3
movl $0xc, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9b0a(%rip), %rdi      # 0x189d0
movl $0xc, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9afe(%rip), %rdi      # 0x189dd
movl $0x9, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9aef(%rip), %rdi      # 0x189e7
movl $0xf, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9ae6(%rip), %rdi      # 0x189f7
movl $0xe, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9adc(%rip), %rdi      # 0x18a06
movl $0x15, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9ad9(%rip), %rdi      # 0x18a1c
movl $0x11, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9ad2(%rip), %rdi      # 0x18a2e
movl $0xa, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9ac4(%rip), %rdi      # 0x18a39
movl $0xb, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9ab7(%rip), %rdi      # 0x18a45
movl $0x13, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9ab2(%rip), %rdi      # 0x18a59
movl $0x13, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9aad(%rip), %rdi      # 0x18a6d
movl $0xf, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9aa4(%rip), %rdi      # 0x18a7d
movl $0xf, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a9b(%rip), %rdi      # 0x18a8d
movl $0x10, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a93(%rip), %rdi      # 0x18a9e
movl $0x11, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a8c(%rip), %rdi      # 0x18ab0
movl $0x13, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a87(%rip), %rdi      # 0x18ac4
movl $0x11, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a80(%rip), %rdi      # 0x18ad6
movl $0x12, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
leaq 0x9a7a(%rip), %rdi      # 0x18ae9
movl $0x14, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
cmpl $0x0, 0x2000050(%r14)
je 0xf3b3
leaq 0x2000058(%r14), %rax
movq %rax, -0x88(%rbp)
leaq 0x2000100(%r14), %r13
xorl %ecx, %ecx
movq %rcx, -0x58(%rbp)
imulq $0x190, %rcx, %rbx      # imm = 0x190
movq -0x88(%rbp), %r14
leaq (%r14,%rbx), %rax
movq %rax, -0x30(%rbp)
movl 0xc(%r14,%rbx), %eax
movq %rax, -0x48(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x20e0
movl 0xc(%rax), %ecx
movl %ecx, -0x3c(%rbp)
movl 0x14(%rax), %r8d
movslq 0x10(%rax), %rcx
movl 0x10(%r14,%rbx), %eax
movl 0x20(%r14,%rbx), %r11d
movl 0x30(%r14,%rbx), %edx
movl %edx, -0x40(%rbp)
movq 0x38(%r14,%rbx), %rdx
movq %rdx, -0x68(%rbp)
xorl %r15d, %r15d
movl $0x8, %edx
movq %r13, -0x50(%rbp)
movq %r13, %rsi
xorl %r12d, %r12d
xorl %ebx, %ebx
xorl %r13d, %r13d
xorl %r10d, %r10d
movl -0x8(%rsi), %edi
addl %edi, %r15d
movq (%rsi), %r9
addq %r9, %r12
cmpq $0xe, %rdx
cmovbq %r10, %r9
cmovbl %r10d, %edi
addq %r9, %r13
addl %edi, %ebx
incq %rdx
addq $0x10, %rsi
cmpq $0x12, %rdx
jne 0xf115
movl %eax, -0x90(%rbp)
subl %r11d, %eax
movl %eax, -0x98(%rbp)
leaq 0xfabb(%rip), %rdx      # 0x1ec10
movq (%rdx,%rcx,8), %rdx
addl $0x76c, %r8d            # imm = 0x76C
movq -0x38(%rbp), %r14
movq %r14, %rdi
leaq 0x9990(%rip), %rsi      # 0x18afe
movl -0x3c(%rbp), %ecx
xorl %eax, %eax
movl %r11d, -0x3c(%rbp)
callq 0x2230
movabsq $-0x543388ee7b9e3103, %rax # imm = 0xABCC77118461CEFD
movq -0x30(%rbp), %rcx
mulq (%rcx)
shrq $0x1a, %rdx
movq %r14, %rdi
leaq 0x9713(%rip), %rsi      # 0x188ae
xorl %eax, %eax
callq 0x2230
movq -0x30(%rbp), %r14
movl 0x8(%r14), %edx
movq -0x38(%rbp), %rdi
leaq 0x96f9(%rip), %rsi      # 0x188ae
xorl %eax, %eax
callq 0x2230
movabsq $-0x543388ee7b9e3103, %rax # imm = 0xABCC77118461CEFD
mulq 0x18(%r14)
shrq $0x1a, %rdx
movq -0x38(%rbp), %r14
movq %r14, %rdi
leaq 0x96d2(%rip), %rsi      # 0x188ae
xorl %eax, %eax
callq 0x2230
movq -0x30(%rbp), %rcx
movq 0x18(%rcx), %rax
subq (%rcx), %rax
movabsq $-0x543388ee7b9e3103, %rcx # imm = 0xABCC77118461CEFD
mulq %rcx
shrq $0x1a, %rdx
movq %r14, %rdi
leaq 0x96a5(%rip), %rsi      # 0x188ae
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
leaq 0x9694(%rip), %rsi      # 0x188ae
movl -0x90(%rbp), %edx
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
leaq 0x967d(%rip), %rsi      # 0x188ae
movl -0x98(%rbp), %edx
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
leaq 0x9666(%rip), %rsi      # 0x188ae
movl -0x3c(%rbp), %edx
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
leaq 0x9652(%rip), %rsi      # 0x188ae
movl -0x40(%rbp), %edx
xorl %eax, %eax
callq 0x2230
movq -0x68(%rbp), %rax
movabsq $-0x543388ee7b9e3103, %rcx # imm = 0xABCC77118461CEFD
mulq %rcx
shrq $0x1a, %rdx
movq %r14, %rdi
leaq 0x9629(%rip), %rsi      # 0x188ae
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
leaq 0x9618(%rip), %rsi      # 0x188ae
movl %r15d, %edx
xorl %eax, %eax
callq 0x2230
movq %r12, %rax
movabsq $-0x543388ee7b9e3103, %r15 # imm = 0xABCC77118461CEFD
mulq %r15
shrq $0x1a, %rdx
movq %r14, %rdi
leaq 0x95f0(%rip), %r12      # 0x188ae
movq %r12, %rsi
xorl %eax, %eax
callq 0x2230
movq %r14, %rdi
movq %r12, %rsi
movl %ebx, %edx
xorl %eax, %eax
callq 0x2230
movq %r13, %rax
movq %r14, %r12
mulq %r15
shrq $0x1a, %rdx
movq %r14, %rdi
leaq 0x95c0(%rip), %rbx      # 0x188ae
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movq -0x30(%rbp), %r14
movl 0x160(%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x164(%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x168(%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x16c(%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x170(%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl 0x174(%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
movl $0x2, %esi
movl $0x1, %edx
leaq 0x92bb(%rip), %rdi      # 0x18640
movq %r12, %rcx
callq 0x22b0
movq -0x58(%rbp), %rcx
incq %rcx
movq -0x60(%rbp), %r14
movl 0x2000050(%r14), %eax
movq -0x50(%rbp), %r13
addq $0x190, %r13            # imm = 0x190
cmpq %rax, %rcx
jb 0xf0a6
leaq 0x9286(%rip), %rbx      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
leaq 0x9733(%rip), %rdi      # 0x18b1e
movl $0x3b, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
movl $0x2c, %edi
movq %r12, %rsi
callq 0x21e0
leaq 0x948c(%rip), %rbx      # 0x188b2
movq %r14, %r15
xorl %r14d, %r14d
movq 0x20d5e38(%r15,%r14,8), %rdx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
incq %r14
cmpq $0x13, %r14
jne 0xf42c
leaq 0x91ef(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
cmpl $0x0, 0x2000050(%r15)
movq %r15, %r14
je 0xf533
leaq 0x2000058(%r14), %rax
movq %rax, -0x30(%rbp)
leaq 0x2000078(%r14), %r15
leaq 0x9421(%rip), %rbx      # 0x188ae
xorl %r13d, %r13d
imulq $0x190, %r13, %rax      # imm = 0x190
movq -0x30(%rbp), %rcx
movl 0xc(%rcx,%rax), %eax
movq %rax, -0x48(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x20e0
movl 0xc(%rax), %ecx
movslq 0x10(%rax), %rdx
leaq 0xf756(%rip), %rsi      # 0x1ec10
movq (%rsi,%rdx,8), %rdx
movl 0x14(%rax), %r8d
movl $0x76c, %eax            # imm = 0x76C
addl %eax, %r8d
movq %r12, %rdi
leaq 0x962a(%rip), %rsi      # 0x18afe
xorl %eax, %eax
callq 0x2230
xorl %r14d, %r14d
movl (%r15,%r14), %edx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
addq $0x10, %r14
cmpq $0x130, %r14            # imm = 0x130
jne 0xf4de
movl $0x2, %esi
movl $0x1, %edx
leaq 0x9133(%rip), %rdi      # 0x18640
movq %r12, %rcx
callq 0x22b0
incq %r13
movq -0x60(%rbp), %r14
movl 0x2000050(%r14), %eax
addq $0x190, %r15            # imm = 0x190
cmpq %rax, %r13
jb 0xf490
leaq 0x9106(%rip), %rbx      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
leaq 0x9604(%rip), %rdi      # 0x18b6f
movl $0x41, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r12, %rcx
callq 0x22b0
movl $0x2c, %edi
movq %r12, %rsi
callq 0x21e0
leaq 0x930c(%rip), %rbx      # 0x188b2
movq %r14, %r15
xorl %r14d, %r14d
movq 0x20d5e38(%r15,%r14,8), %rdx
movq %r12, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
incq %r14
cmpq $0x13, %r14
jne 0xf5ac
leaq 0x906f(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r12, %rcx
callq 0x22b0
cmpl $0x0, 0x2000050(%r15)
movq %r15, %r14
movq %r12, %rbx
je 0xf6e9
leaq 0x2000058(%r14), %rax
movq %rax, -0x30(%rbp)
leaq 0x2000080(%r14), %r15
leaq 0x94fa(%rip), %r12      # 0x18b0a
xorl %r13d, %r13d
imulq $0x190, %r13, %rax      # imm = 0x190
movq -0x30(%rbp), %rcx
movl 0xc(%rcx,%rax), %eax
movq %rax, -0x48(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x20e0
movl 0xc(%rax), %ecx
movslq 0x10(%rax), %rdx
leaq 0xf5d3(%rip), %rsi      # 0x1ec10
movq (%rsi,%rdx,8), %rdx
movl 0x14(%rax), %r8d
movl $0x76c, %eax            # imm = 0x76C
addl %eax, %r8d
movq %rbx, %rdi
leaq 0x94a7(%rip), %rsi      # 0x18afe
xorl %eax, %eax
callq 0x2230
xorl %ebx, %ebx
movq (%r15,%rbx), %rax
testq %rax, %rax
js 0xf673
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0xf68b
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
divss 0x807d(%rip), %xmm0     # 0x17710
cvtss2sd %xmm0, %xmm0
movq -0x38(%rbp), %rdi
movq %r12, %rsi
movb $0x1, %al
callq 0x2230
addq $0x10, %rbx
cmpq $0x130, %rbx            # imm = 0x130
jne 0xf660
movl $0x2, %esi
movl $0x1, %edx
leaq 0x8f7d(%rip), %rdi      # 0x18640
movq -0x38(%rbp), %rbx
movq %rbx, %rcx
callq 0x22b0
incq %r13
movl 0x2000050(%r14), %eax
addq $0x190, %r15            # imm = 0x190
cmpq %rax, %r13
jb 0xf613
leaq 0x8f50(%rip), %r15      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r15, %rdi
movq %rbx, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %r15, %rdi
movq %rbx, %rcx
callq 0x22b0
leaq 0x93f0(%rip), %rdi      # 0x18b11
movl $0x48, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %r15, %rdi
movq %rbx, %rcx
callq 0x22b0
movl $0x2c, %edi
movq %rbx, %rsi
callq 0x21e0
leaq 0x9156(%rip), %r12      # 0x188b2
movq %r14, %r15
xorl %r14d, %r14d
movq 0x20d5e40(%r15,%r14,8), %rdx
movq %rbx, %rdi
movq %r12, %rsi
xorl %eax, %eax
callq 0x2230
incq %r14
cmpq $0x12, %r14
jne 0xf762
leaq 0x8eb9(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rcx
callq 0x22b0
cmpl $0x0, 0x2000050(%r15)
movq %r15, %r14
movq %rbx, %r13
je 0xf898
leaq 0x2000058(%r14), %rax
movq %rax, -0x50(%rbp)
leaq 0x2000088(%r14), %r15
leaq 0x9344(%rip), %r12      # 0x18b0a
xorl %ecx, %ecx
movq %rcx, -0x30(%rbp)
imulq $0x190, %rcx, %rax      # imm = 0x190
movq -0x50(%rbp), %rcx
leaq (%rcx,%rax), %rbx
movl 0xc(%rcx,%rax), %eax
movq %rax, -0x48(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x20e0
movslq 0x10(%rax), %rcx
leaq 0xf419(%rip), %rdx      # 0x1ec10
movq (%rdx,%rcx,8), %rdx
movl 0x14(%rax), %ecx
movl $0x76c, %eax            # imm = 0x76C
addl %eax, %ecx
movq %r13, %rdi
leaq 0x934b(%rip), %rsi      # 0x18b5a
xorl %eax, %eax
callq 0x2230
xorl %r14d, %r14d
movl (%r15,%r14), %eax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
movl 0x10(%rbx), %eax
subl 0x20(%rbx), %eax
xorps %xmm1, %xmm1
cvtsi2ss %rax, %xmm1
mulss 0x7fa1(%rip), %xmm0     # 0x177dc
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movq %r13, %rdi
movq %r12, %rsi
movb $0x1, %al
callq 0x2230
addq $0x10, %r14
cmpq $0x120, %r14            # imm = 0x120
jne 0xf819
movl $0x2, %esi
movl $0x1, %edx
leaq 0x8dd2(%rip), %rdi      # 0x18640
movq %r13, %rcx
callq 0x22b0
movq -0x30(%rbp), %rcx
incq %rcx
movq -0x60(%rbp), %r14
movl 0x2000050(%r14), %eax
addq $0x190, %r15            # imm = 0x190
cmpq %rax, %rcx
jb 0xf7c8
leaq 0x8da1(%rip), %rbx      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rcx
callq 0x22b0
leaq 0x9293(%rip), %rdi      # 0x18b63
movl $0x4d, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
movl $0x2, %esi
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rcx
callq 0x22b0
movl $0x2c, %edi
movq %r13, %rsi
callq 0x21e0
leaq 0x8fa7(%rip), %rbx      # 0x188b2
movq %r14, %r15
xorl %r14d, %r14d
movq 0x20d5e40(%r15,%r14,8), %rdx
movq %r13, %rdi
movq %rbx, %rsi
xorl %eax, %eax
callq 0x2230
incq %r14
cmpq $0x12, %r14
jne 0xf911
leaq 0x8d0a(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
cmpl $0x0, 0x2000050(%r15)
je 0xfa87
movq -0x60(%rbp), %rcx
leaq 0x2000058(%rcx), %rax
movq %rax, -0x30(%rbp)
leaq 0x2000090(%rcx), %r15
leaq 0x9197(%rip), %r12      # 0x18b0a
xorl %ecx, %ecx
movq %rcx, %r14
imulq $0x190, %rcx, %rax      # imm = 0x190
movq -0x30(%rbp), %rcx
leaq (%rcx,%rax), %rbx
movl 0xc(%rcx,%rax), %eax
movq %rax, -0x48(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x20e0
movslq 0x10(%rax), %rcx
leaq 0xf26d(%rip), %rdx      # 0x1ec10
movq (%rdx,%rcx,8), %rdx
movl 0x14(%rax), %ecx
movl $0x76c, %eax            # imm = 0x76C
addl %eax, %ecx
movq %r13, %rdi
leaq 0x919f(%rip), %rsi      # 0x18b5a
xorl %eax, %eax
callq 0x2230
xorl %r13d, %r13d
movq (%r15,%r13), %rax
testq %rax, %rax
js 0xf9d8
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0xf9f0
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
mulss 0x7de4(%rip), %xmm0     # 0x177dc
movq 0x18(%rbx), %rax
testq %rax, %rax
js 0xfa0b
xorps %xmm1, %xmm1
cvtsi2ss %rax, %xmm1
jmp 0xfa23
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm1, %xmm1
cvtsi2ss %rax, %xmm1
addss %xmm1, %xmm1
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x38(%rbp), %rdi
movq %r12, %rsi
movb $0x1, %al
callq 0x2230
addq $0x10, %r13
cmpq $0x120, %r13            # imm = 0x120
jne 0xf9c5
movl $0x2, %esi
movl $0x1, %edx
leaq 0x8be5(%rip), %rdi      # 0x18640
movq -0x38(%rbp), %r13
movq %r13, %rcx
callq 0x22b0
movq %r14, %rcx
incq %rcx
movq -0x60(%rbp), %rax
movl 0x2000050(%rax), %eax
addq $0x190, %r15            # imm = 0x190
cmpq %rax, %rcx
jb 0xf975
leaq 0x8bb2(%rip), %rdi      # 0x18640
movl $0x2, %esi
movl $0x1, %edx
movq %r13, %rcx
callq 0x22b0
movq %r13, %rdi
callq 0x2160
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq