// File: ShootMe[P]Klondike-Solver/KlondikeSolver.cpp
// Function: main
int main(int argc, char * argv[]) {
	Solitaire s;
	s.Initialize();

	bool commandLoaded = false;
	int outputMethod = 0;
	int multiThreaded = 1;
	int maxClosedCount = 0;
	bool fastMode = false;
	string fileContents;
	bool replay = false;
	bool showMoves = false;

	for (int i = 1; i < argc; i++) {
		if (_stricmp(argv[i], "-draw") == 0 || _stricmp(argv[i], "/draw") == 0 || _stricmp(argv[i], "-dc") == 0 || _stricmp(argv[i], "/dc") == 0) {
			if (i + 1 >= argc) { cout << "You must specify draw count."; return 0; }
			int drawCount = atoi(argv[i + 1]);
			if (drawCount < 1 || drawCount > 12) { cout << "Please specify a valid draw count from 1 to 12."; return 0; }
			s.SetDrawCount(drawCount);
			i++;
		} else if (_stricmp(argv[i], "-deck") == 0 || _stricmp(argv[i], "/deck") == 0 || _stricmp(argv[i], "-d") == 0 || _stricmp(argv[i], "/d") == 0) {
			if (i + 1 >= argc) { cout << "You must specify deck to load."; return 0; }
			if (commandLoaded) { cout << "Only one method can be specified (deck/game/file)."; return 0; }
			if (!s.LoadSolitaire(argv[i + 1])) { cout << "Specified deck is invalid."; return 0; }
			commandLoaded = true;
			i++;
		} else if (_stricmp(argv[i], "-game") == 0 || _stricmp(argv[i], "/game") == 0 || _stricmp(argv[i], "-g") == 0 || _stricmp(argv[i], "/g") == 0) {
			if (i + 1 >= argc) { cout << "You must specify a game number to load. Any integeral number."; return 0; }
			if (commandLoaded) { cout << "Only one method can be specified (deck/game/file)."; return 0; }
			commandLoaded = true;
			s.Shuffle1(atoi(argv[i + 1]));
			i++;
		} else if (_stricmp(argv[i], "-out") == 0 || _stricmp(argv[i], "/out") == 0 || _stricmp(argv[i], "-o") == 0 || _stricmp(argv[i], "/o") == 0) {
			if (i + 1 >= argc) { cout << "You must specify a valid output method. 0 or 1."; return 0; }
			outputMethod = atoi(argv[i + 1]);
			if (outputMethod < 0 || outputMethod > 2) { cout << "You must specify a valid output method. 0, 1, or 2."; return 0; }
			i++;
		} else if (_stricmp(argv[i], "-states") == 0 || _stricmp(argv[i], "/states") == 0 || _stricmp(argv[i], "-s") == 0 || _stricmp(argv[i], "/s") == 0) {
			if (i + 1 >= argc) { cout << "You must specify max states."; return 0; }
			maxClosedCount = atoi(argv[i + 1]);
			if (maxClosedCount < 0) { cout << "You must specify a valid max number of states."; return 0; }
			i++;
		} else if (_stricmp(argv[i], "-fast") == 0 || _stricmp(argv[i], "/fast") == 0 || _stricmp(argv[i], "-f") == 0 || _stricmp(argv[i], "/f") == 0) {
			fastMode = true;
			if (maxClosedCount == 0) { maxClosedCount = 200000; }
		} else if (_stricmp(argv[i], "-m") == 0 || _stricmp(argv[i], "/m") == 0 || _stricmp(argv[i], "-multi") == 0 || _stricmp(argv[i], "/multi") == 0) {
			if (i + 1 >= argc) { cout << "You must specify number of threads."; return 0; }
			multiThreaded = atoi(argv[i + 1]);
			if (multiThreaded < 2 || multiThreaded > 99) { cout << "You must specify a valid number of threads."; return 0; }
			i++;
		} else if (_stricmp(argv[i], "-mvs") == 0 || _stricmp(argv[i], "/mvs") == 0 || _stricmp(argv[i], "-moves") == 0 || _stricmp(argv[i], "/moves") == 0) {
			showMoves = true;
		} else if (_stricmp(argv[i], "-r") == 0 || _stricmp(argv[i], "/r") == 0) {
			replay = true;
		} else if (_stricmp(argv[i], "-?") == 0 || _stricmp(argv[i], "/?") == 0 || _stricmp(argv[i], "?") == 0 || _stricmp(argv[i], "/help") == 0 || _stricmp(argv[i], "-help") == 0) {
			cout << "Klondike Solver V2.0\nSolves games of Klondike (Patience) solitaire minimally or a faster best try.\n\n";
			cout << "KlondikeSolver [/DC] [/D] [/G] [/O] [/M] [/S] [/F] [/R] [/MVS] [Path]\n\n";
			cout << "  /DRAW # [/DC #]       Sets the draw count to use when solving. Defaults to 1.\n\n";
			cout << "  /DECK str [/D str]    Loads the deck specified by the string.\n\n";
			cout << "  /GAME # [/G #]        Loads a random game with seed #.\n\n";
			cout << "  Path                  Solves deals specified in the file.\n\n";
			cout << "  /R                    Replays solution to output if one is found.\n\n";
			cout << "  /MULTI # [/M #]       Uses # threads to solve deals.\n";
			cout << "                        Only works when solving minimally.\n\n";
			cout << "  /OUT # [/O #]         Sets the output method of the solver.\n";
			cout << "                        Defaults to 0, 1 for Pysol, and 2 for minimal output.\n";
			cout << "  /MOVES [/MVS]         Will also output a compact list of moves made when a\n";
			cout << "                        solution is found.";
			cout << "  /STATES # [/S #]      Sets the maximum number of game states to evaluate\n";
			cout << "                        before terminating. Defaults to 5,000,000.\n\n";
			cout << "  /FAST [/F]            Run the solver in a best attempt mode, which is\n";
			cout << "                        faster, but not guaranteed to give minimal solution.\n";
			return 0;
		} else {
			if (commandLoaded) { cout << "Only one method can be specified (deck/game/file)."; return 0; }
			commandLoaded = true;
			ifstream file(argv[i], ios::in | ios::binary);
			if (!file) { cout << "You must specify a valid and accessible file."; return 0; }
			file.seekg(0, ios::end);
			fileContents.resize((unsigned int)file.tellg());
			file.seekg(0, ios::beg);
			file.read(&fileContents[0], fileContents.size());
			file.close();
		}
	}

	if (maxClosedCount == 0) { maxClosedCount = 5000000; }

	unsigned int fileIndex = 0;
	do {
		if (fileContents.size() > fileIndex) {
			if (!LoadGame(fileContents, s, fileIndex)) {
				continue;
			}
		}
		s.ResetGame();

		if (outputMethod == 0) {
			cout << s.GameDiagram() << "\n\n";
		} else if (outputMethod == 1) {
			cout << s.GameDiagramPysol() << "\n\n";
		}

		clock_t total = clock();
		SolveResult result = CouldNotComplete;
		if (fastMode) {
			int bestCount = 512;
			int bestFoundation = 0;
			result = s.SolveFast(maxClosedCount, 0, 0);
			if (result == SolvedMinimal || result == SolvedMayNotBeMinimal) {
				bestCount = s.MovesMadeNormalizedCount();
			}
			bestFoundation = s.FoundationCount();
			Solitaire best = s;
			s.ResetGame();
			result = s.SolveFast(maxClosedCount, 0, 4);
			if ((result == SolvedMinimal || result == SolvedMayNotBeMinimal) && s.MovesMadeNormalizedCount() < bestCount) {
				best = s; bestCount = s.MovesMadeNormalizedCount(); bestFoundation = s.FoundationCount();
			}
			if (s.FoundationCount() > bestFoundation) {
				best = s; bestFoundation = s.FoundationCount();
			}
			s.ResetGame();
			result = s.SolveFast(maxClosedCount, 1, 4);
			if ((result == SolvedMinimal || result == SolvedMayNotBeMinimal) && s.MovesMadeNormalizedCount() < bestCount) {
				best = s; bestCount = s.MovesMadeNormalizedCount(); bestFoundation = s.FoundationCount();
			}
			if (s.FoundationCount() > bestFoundation) {
				best = s; bestFoundation = s.FoundationCount();
			}
			s = best;
			if (bestFoundation == 52) { result = SolvedMayNotBeMinimal; }
		} else if (multiThreaded > 1) {
			result = s.SolveMinimalMultithreaded(multiThreaded, maxClosedCount);
		} else {
			result = s.SolveMinimal(maxClosedCount);
		}

		bool canReplay = false;
		if (result == SolvedMinimal) {
			cout << "Minimal solution in " << s.MovesMadeNormalizedCount() << " moves.";
			canReplay = true;
		} else if (result == SolvedMayNotBeMinimal) {
			cout << "Solved in " << s.MovesMadeNormalizedCount() << " moves.";
			canReplay = true;
		} else if (result == Impossible) {
			cout << "Impossible. Max cards in foundation " << s.FoundationCount() << " at " << s.MovesMadeNormalizedCount() << " moves.";
		} else if (result == CouldNotComplete) {
			cout << "Unknown. Max cards in foundation " << s.FoundationCount() << " at " << s.MovesMadeNormalizedCount() << " moves.";
		}
		cout << " Took " << (clock() - total) << " ms.\n";

		if (outputMethod < 2 && replay && canReplay) {
			int movesToMake = s.MovesMadeCount();
			s.ResetGame();
			for (int i = 0; i < movesToMake; i++) {
				cout << "----------------------------------------\n";
				cout << s.GetMoveInfo(s[i]) << "\n\n";
				s.MakeMove(s[i]);

				if (outputMethod == 0) {
					cout << s.GameDiagram() << "\n\n";
				} else {
					cout << s.GameDiagramPysol() << "\n\n";
				}
			}
			cout << "----------------------------------------\n";
		}
		if (showMoves && canReplay) {
			cout << s.MovesMade() << "\n\n";
		} else if (showMoves) {
			cout << "\n";
		}
	} while (fileContents.size() > fileIndex);

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3780, %rsp           # imm = 0x3780
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0x1928(%rbp), %rdi
callq 0x54d0
leaq -0x1928(%rbp), %rdi
callq 0xbeb0
movb $0x0, -0x1929(%rbp)
movl $0x0, -0x1930(%rbp)
movl $0x1, -0x1934(%rbp)
movl $0x0, -0x1938(%rbp)
movb $0x0, -0x1939(%rbp)
leaq -0x1960(%rbp), %rdi
callq 0x3320
movb $0x0, -0x1961(%rbp)
movb $0x0, -0x1962(%rbp)
movl $0x1, -0x1968(%rbp)
movl -0x1968(%rbp), %eax
cmpl -0x8(%rbp), %eax
jge 0x4935
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x1048e(%rip), %rsi     # 0x14004
callq 0x32a0
cmpl $0x0, %eax
je 0x3be4
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x10474(%rip), %rsi     # 0x1400a
callq 0x32a0
cmpl $0x0, %eax
je 0x3be4
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x1045a(%rip), %rsi     # 0x14010
callq 0x32a0
cmpl $0x0, %eax
je 0x3be4
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x1043e(%rip), %rsi     # 0x14014
callq 0x32a0
cmpl $0x0, %eax
jne 0x3cb8
movl -0x1968(%rbp), %eax
addl $0x1, %eax
cmpl -0x8(%rbp), %eax
jl 0x3c34
movq 0x173df(%rip), %rdi     # 0x1afd8
leaq 0x10418(%rip), %rsi     # 0x14018
callq 0x3230
jmp 0x3c07
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1970(%rbp)
movl %eax, -0x1974(%rbp)
jmp 0x54b8
movq -0x10(%rbp), %rax
movl -0x1968(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3370
movl %eax, -0x197c(%rbp)
cmpl $0x1, -0x197c(%rbp)
jl 0x3c65
cmpl $0xc, -0x197c(%rbp)
jle 0x3c90
movq 0x1736c(%rip), %rdi     # 0x1afd8
leaq 0x103c2(%rip), %rsi     # 0x14035
callq 0x3230
jmp 0x3c7a
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
movl -0x197c(%rbp), %esi
leaq -0x1928(%rbp), %rdi
callq 0xcd50
jmp 0x3ca4
movl -0x1968(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1968(%rbp)
jmp 0x491f
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x10397(%rip), %rsi     # 0x14065
callq 0x32a0
cmpl $0x0, %eax
je 0x3d3c
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x1037d(%rip), %rsi     # 0x1406b
callq 0x32a0
cmpl $0x0, %eax
je 0x3d3c
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x10363(%rip), %rsi     # 0x14071
callq 0x32a0
cmpl $0x0, %eax
je 0x3d3c
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x10346(%rip), %rsi     # 0x14074
callq 0x32a0
cmpl $0x0, %eax
jne 0x3ec5
movl -0x1968(%rbp), %eax
addl $0x1, %eax
cmpl -0x8(%rbp), %eax
jl 0x3d75
movq 0x17287(%rip), %rdi     # 0x1afd8
leaq 0x1031f(%rip), %rsi     # 0x14077
callq 0x3230
jmp 0x3d5f
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
testb $0x1, -0x1929(%rbp)
je 0x3da9
movq 0x17253(%rip), %rdi     # 0x1afd8
leaq 0x1030a(%rip), %rsi     # 0x14096
callq 0x3230
jmp 0x3d93
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq 0x8(%rax,%rcx,8), %rax
movq %rax, -0x35d8(%rbp)
leaq -0x19a1(%rbp), %rdi
movq %rdi, -0x35d0(%rbp)
callq 0x33e0
movq -0x35d8(%rbp), %rsi
movq -0x35d0(%rbp), %rdx
leaq -0x19a0(%rbp), %rdi
callq 0x5570
jmp 0x3def
leaq -0x1928(%rbp), %rdi
leaq -0x19a0(%rbp), %rsi
callq 0xbf50
movb %al, -0x35d9(%rbp)
jmp 0x3e0a
movb -0x35d9(%rbp), %al
xorb $-0x1, %al
movb %al, -0x35da(%rbp)
leaq -0x19a0(%rbp), %rdi
callq 0x3120
leaq -0x19a1(%rbp), %rdi
callq 0x3280
movb -0x35da(%rbp), %al
testb $0x1, %al
jne 0x3e3c
jmp 0x3eaa
movq 0x17195(%rip), %rdi     # 0x1afd8
leaq 0x1027f(%rip), %rsi     # 0x140c9
callq 0x3230
jmp 0x3e51
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1970(%rbp)
movl %eax, -0x1974(%rbp)
jmp 0x3e99
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1970(%rbp)
movl %eax, -0x1974(%rbp)
leaq -0x19a0(%rbp), %rdi
callq 0x3120
leaq -0x19a1(%rbp), %rdi
callq 0x3280
jmp 0x54b8
movb $0x1, -0x1929(%rbp)
movl -0x1968(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1968(%rbp)
jmp 0x491d
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x10209(%rip), %rsi     # 0x140e4
callq 0x32a0
cmpl $0x0, %eax
je 0x3f49
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x101ef(%rip), %rsi     # 0x140ea
callq 0x32a0
cmpl $0x0, %eax
je 0x3f49
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x101d5(%rip), %rsi     # 0x140f0
callq 0x32a0
cmpl $0x0, %eax
je 0x3f49
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x101b8(%rip), %rsi     # 0x140f3
callq 0x32a0
cmpl $0x0, %eax
jne 0x3ff6
movl -0x1968(%rbp), %eax
addl $0x1, %eax
cmpl -0x8(%rbp), %eax
jl 0x3f82
movq 0x1707a(%rip), %rdi     # 0x1afd8
leaq 0x10191(%rip), %rsi     # 0x140f6
callq 0x3230
jmp 0x3f6c
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
testb $0x1, -0x1929(%rbp)
je 0x3fb6
movq 0x17046(%rip), %rdi     # 0x1afd8
leaq 0x100fd(%rip), %rsi     # 0x14096
callq 0x3230
jmp 0x3fa0
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
movb $0x1, -0x1929(%rbp)
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq 0x8(%rax,%rcx,8), %rdi
callq 0x3370
movl %eax, %esi
leaq -0x1928(%rbp), %rdi
callq 0xbae0
jmp 0x3fe2
movl -0x1968(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1968(%rbp)
jmp 0x491b
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x10128(%rip), %rsi     # 0x14134
callq 0x32a0
cmpl $0x0, %eax
je 0x407a
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x1010d(%rip), %rsi     # 0x14139
callq 0x32a0
cmpl $0x0, %eax
je 0x407a
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x100f2(%rip), %rsi     # 0x1413e
callq 0x32a0
cmpl $0x0, %eax
je 0x407a
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x100d5(%rip), %rsi     # 0x14141
callq 0x32a0
cmpl $0x0, %eax
jne 0x4123
movl -0x1968(%rbp), %eax
addl $0x1, %eax
cmpl -0x8(%rbp), %eax
jl 0x40b3
movq 0x16f49(%rip), %rdi     # 0x1afd8
leaq 0x100ae(%rip), %rsi     # 0x14144
callq 0x3230
jmp 0x409d
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
movq -0x10(%rbp), %rax
movl -0x1968(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3370
movl %eax, -0x1930(%rbp)
cmpl $0x0, -0x1930(%rbp)
jl 0x40e4
cmpl $0x2, -0x1930(%rbp)
jle 0x410f
movq 0x16eed(%rip), %rdi     # 0x1afd8
leaq 0x10082(%rip), %rsi     # 0x14174
callq 0x3230
jmp 0x40f9
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
movl -0x1968(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1968(%rbp)
jmp 0x4919
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x1006f(%rip), %rsi     # 0x141a8
callq 0x32a0
cmpl $0x0, %eax
je 0x41a7
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x10057(%rip), %rsi     # 0x141b0
callq 0x32a0
cmpl $0x0, %eax
je 0x41a7
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x1003f(%rip), %rsi     # 0x141b8
callq 0x32a0
cmpl $0x0, %eax
je 0x41a7
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0x10022(%rip), %rsi     # 0x141bb
callq 0x32a0
cmpl $0x0, %eax
jne 0x4247
movl -0x1968(%rbp), %eax
addl $0x1, %eax
cmpl -0x8(%rbp), %eax
jl 0x41e0
movq 0x16e1c(%rip), %rdi     # 0x1afd8
leaq 0xfffb(%rip), %rsi      # 0x141be
callq 0x3230
jmp 0x41ca
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
movq -0x10(%rbp), %rax
movl -0x1968(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3370
movl %eax, -0x1938(%rbp)
cmpl $0x0, -0x1938(%rbp)
jge 0x4233
movq 0x16dc9(%rip), %rdi     # 0x1afd8
leaq 0xffc5(%rip), %rsi      # 0x141db
callq 0x3230
jmp 0x421d
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
movl -0x1968(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1968(%rbp)
jmp 0x4917
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xffad(%rip), %rsi      # 0x1420a
callq 0x32a0
cmpl $0x0, %eax
je 0x42c7
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xff93(%rip), %rsi      # 0x14210
callq 0x32a0
cmpl $0x0, %eax
je 0x42c7
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xff79(%rip), %rsi      # 0x14216
callq 0x32a0
cmpl $0x0, %eax
je 0x42c7
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xff5c(%rip), %rsi      # 0x14219
callq 0x32a0
cmpl $0x0, %eax
jne 0x42e6
movb $0x1, -0x1939(%rbp)
cmpl $0x0, -0x1938(%rbp)
jne 0x42e1
movl $0x30d40, -0x1938(%rbp) # imm = 0x30D40
jmp 0x4915
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xff20(%rip), %rsi      # 0x1421c
callq 0x32a0
cmpl $0x0, %eax
je 0x436a
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xff03(%rip), %rsi      # 0x1421f
callq 0x32a0
cmpl $0x0, %eax
je 0x436a
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfee6(%rip), %rsi      # 0x14222
callq 0x32a0
cmpl $0x0, %eax
je 0x436a
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfecd(%rip), %rsi      # 0x14229
callq 0x32a0
cmpl $0x0, %eax
jne 0x4413
movl -0x1968(%rbp), %eax
addl $0x1, %eax
cmpl -0x8(%rbp), %eax
jl 0x43a3
movq 0x16c59(%rip), %rdi     # 0x1afd8
leaq 0xfeaa(%rip), %rsi      # 0x14230
callq 0x3230
jmp 0x438d
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
movq -0x10(%rbp), %rax
movl -0x1968(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3370
movl %eax, -0x1934(%rbp)
cmpl $0x2, -0x1934(%rbp)
jl 0x43d4
cmpl $0x63, -0x1934(%rbp)
jle 0x43ff
movq 0x16bfd(%rip), %rdi     # 0x1afd8
leaq 0xfe72(%rip), %rsi      # 0x14254
callq 0x3230
jmp 0x43e9
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
movl -0x1968(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1968(%rbp)
jmp 0x4913
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfe57(%rip), %rsi      # 0x14280
callq 0x32a0
cmpl $0x0, %eax
je 0x4493
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfe3c(%rip), %rsi      # 0x14285
callq 0x32a0
cmpl $0x0, %eax
je 0x4493
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfe21(%rip), %rsi      # 0x1428a
callq 0x32a0
cmpl $0x0, %eax
je 0x4493
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfe08(%rip), %rsi      # 0x14291
callq 0x32a0
cmpl $0x0, %eax
jne 0x449f
movb $0x1, -0x1962(%rbp)
jmp 0x4911
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfde3(%rip), %rsi      # 0x14298
callq 0x32a0
cmpl $0x0, %eax
je 0x44df
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfdc6(%rip), %rsi      # 0x1429b
callq 0x32a0
cmpl $0x0, %eax
jne 0x44eb
movb $0x1, -0x1961(%rbp)
jmp 0x490f
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfd9d(%rip), %rsi      # 0x1429e
callq 0x32a0
cmpl $0x0, %eax
je 0x4593
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfd7c(%rip), %rsi      # 0x142a1
callq 0x32a0
cmpl $0x0, %eax
je 0x4593
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfd5a(%rip), %rsi      # 0x1429f
callq 0x32a0
cmpl $0x0, %eax
je 0x4593
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfd3f(%rip), %rsi      # 0x142a4
callq 0x32a0
cmpl $0x0, %eax
je 0x4593
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
leaq 0xfd25(%rip), %rsi      # 0x142aa
callq 0x32a0
cmpl $0x0, %eax
jne 0x470e
movq 0x16a3e(%rip), %rdi     # 0x1afd8
leaq 0xfd0f(%rip), %rsi      # 0x142b0
callq 0x3230
jmp 0x45a8
movq 0x16a29(%rip), %rdi     # 0x1afd8
leaq 0xfd5f(%rip), %rsi      # 0x14315
callq 0x3230
jmp 0x45bd
movq 0x16a14(%rip), %rdi     # 0x1afd8
leaq 0xfd92(%rip), %rsi      # 0x1435d
callq 0x3230
jmp 0x45d2
movq 0x169ff(%rip), %rdi     # 0x1afd8
leaq 0xfdcf(%rip), %rsi      # 0x143af
callq 0x3230
jmp 0x45e7
movq 0x169ea(%rip), %rdi     # 0x1afd8
leaq 0xfdfc(%rip), %rsi      # 0x143f1
callq 0x3230
jmp 0x45fc
movq 0x169d5(%rip), %rdi     # 0x1afd8
leaq 0xfe22(%rip), %rsi      # 0x1442c
callq 0x3230
jmp 0x4611
movq 0x169c0(%rip), %rdi     # 0x1afd8
leaq 0xfe4b(%rip), %rsi      # 0x1446a
callq 0x3230
jmp 0x4626
movq 0x169ab(%rip), %rdi     # 0x1afd8
leaq 0xfe7c(%rip), %rsi      # 0x144b0
callq 0x3230
jmp 0x463b
movq 0x16996(%rip), %rdi     # 0x1afd8
leaq 0xfe9f(%rip), %rsi      # 0x144e8
callq 0x3230
jmp 0x4650
movq 0x16981(%rip), %rdi     # 0x1afd8
leaq 0xfec7(%rip), %rsi      # 0x14525
callq 0x3230
jmp 0x4665
movq 0x1696c(%rip), %rdi     # 0x1afd8
leaq 0xfef1(%rip), %rsi      # 0x14564
callq 0x3230
jmp 0x467a
movq 0x16957(%rip), %rdi     # 0x1afd8
leaq 0xff2b(%rip), %rsi      # 0x145b3
callq 0x3230
jmp 0x468f
movq 0x16942(%rip), %rdi     # 0x1afd8
leaq 0xff64(%rip), %rsi      # 0x14601
callq 0x3230
jmp 0x46a4
movq 0x1692d(%rip), %rdi     # 0x1afd8
leaq 0xff7a(%rip), %rsi      # 0x1462c
callq 0x3230
jmp 0x46b9
movq 0x16918(%rip), %rdi     # 0x1afd8
leaq 0xffb1(%rip), %rsi      # 0x14678
callq 0x3230
jmp 0x46ce
movq 0x16903(%rip), %rdi     # 0x1afd8
leaq 0xffe1(%rip), %rsi      # 0x146bd
callq 0x3230
jmp 0x46e3
movq 0x168ee(%rip), %rdi     # 0x1afd8
leaq 0x10015(%rip), %rsi     # 0x14706
callq 0x3230
jmp 0x46f8
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
testb $0x1, -0x1929(%rbp)
je 0x4742
movq 0x168ba(%rip), %rdi     # 0x1afd8
leaq 0xf971(%rip), %rsi      # 0x14096
callq 0x3230
jmp 0x472c
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x54a0
movb $0x1, -0x1929(%rbp)
movq -0x10(%rbp), %rax
movslq -0x1968(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x35e8(%rbp)
movl $0x8, %edi
movl $0x4, %esi
callq 0x5620
movl %eax, -0x35e0(%rbp)
jmp 0x4776
movl -0x35e0(%rbp), %edx
movq -0x35e8(%rbp), %rsi
leaq -0x1bb0(%rbp), %rdi
callq 0x3410
jmp 0x4791
movq -0x1bb0(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x1bb0(%rbp,%rax), %rdi
callq 0x30e0
movb %al, -0x35e9(%rbp)
jmp 0x47b1
movb -0x35e9(%rbp), %al
testb $0x1, %al
jne 0x47bd
jmp 0x480b
movq 0x16814(%rip), %rdi     # 0x1afd8
leaq 0xff89(%rip), %rsi      # 0x14754
callq 0x3230
jmp 0x47d2
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
jmp 0x48ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1970(%rbp)
movl %eax, -0x1974(%rbp)
leaq -0x1bb0(%rbp), %rdi
callq 0x3070
jmp 0x54b8
xorl %eax, %eax
movl %eax, %esi
leaq -0x1bb0(%rbp), %rdi
movl $0x2, %edx
callq 0x3300
jmp 0x4822
leaq -0x1bb0(%rbp), %rdi
callq 0x33c0
movq %rdx, -0x3600(%rbp)
movq %rax, -0x35f8(%rbp)
jmp 0x483e
movq -0x3600(%rbp), %rax
movq -0x35f8(%rbp), %rcx
movq %rcx, -0x1bc0(%rbp)
movq %rax, -0x1bb8(%rbp)
leaq -0x1bc0(%rbp), %rdi
callq 0x5640
movq %rax, -0x3608(%rbp)
jmp 0x486f
movq -0x3608(%rbp), %rax
movl %eax, %eax
movl %eax, %esi
leaq -0x1960(%rbp), %rdi
callq 0x3310
jmp 0x4888
xorl %edx, %edx
movl %edx, %esi
leaq -0x1bb0(%rbp), %rdi
callq 0x3300
jmp 0x489a
xorl %eax, %eax
movl %eax, %esi
leaq -0x1960(%rbp), %rdi
callq 0x3440
movq %rax, -0x3610(%rbp)
jmp 0x48b3
leaq -0x1960(%rbp), %rdi
callq 0x3160
movq -0x3610(%rbp), %rsi
movq %rax, %rdx
leaq -0x1bb0(%rbp), %rdi
callq 0x32f0
jmp 0x48d7
leaq -0x1bb0(%rbp), %rdi
callq 0x3060
jmp 0x48e5
movl $0x0, -0x1978(%rbp)
leaq -0x1bb0(%rbp), %rdi
callq 0x3070
movl -0x1978(%rbp), %eax
testl %eax, %eax
jne 0x54a0
jmp 0x490b
jmp 0x490d
jmp 0x490f
jmp 0x4911
jmp 0x4913
jmp 0x4915
jmp 0x4917
jmp 0x4919
jmp 0x491b
jmp 0x491d
jmp 0x491f
jmp 0x4921
movl -0x1968(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1968(%rbp)
jmp 0x3b51
cmpl $0x0, -0x1938(%rbp)
jne 0x4948
movl $0x4c4b40, -0x1938(%rbp) # imm = 0x4C4B40
movl $0x0, -0x1bc4(%rbp)
leaq -0x1960(%rbp), %rdi
callq 0x3160
movl -0x1bc4(%rbp), %ecx
cmpq %rcx, %rax
jbe 0x499e
leaq -0x1960(%rbp), %rdi
leaq -0x1928(%rbp), %rsi
leaq -0x1bc4(%rbp), %rdx
callq 0x3590
movb %al, -0x3611(%rbp)
jmp 0x498b
movb -0x3611(%rbp), %al
testb $0x1, %al
jne 0x499c
jmp 0x4997
jmp 0x5474
jmp 0x499e
leaq -0x1928(%rbp), %rdi
callq 0x7120
jmp 0x49ac
cmpl $0x0, -0x1930(%rbp)
jne 0x4a2f
leaq -0x1be8(%rbp), %rdi
leaq -0x1928(%rbp), %rsi
callq 0xd880
jmp 0x49ca
movq 0x16607(%rip), %rdi     # 0x1afd8
leaq -0x1be8(%rbp), %rsi
callq 0x3200
movq %rax, -0x3620(%rbp)
jmp 0x49e6
movq -0x3620(%rbp), %rdi
leaq 0xfa35(%rip), %rsi      # 0x14429
callq 0x3230
jmp 0x49fb
leaq -0x1be8(%rbp), %rdi
callq 0x3120
jmp 0x4ab1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1970(%rbp)
movl %eax, -0x1974(%rbp)
leaq -0x1be8(%rbp), %rdi
callq 0x3120
jmp 0x54b8
cmpl $0x1, -0x1930(%rbp)
jne 0x4aaf
leaq -0x1c08(%rbp), %rdi
leaq -0x1928(%rbp), %rsi
callq 0xdc70
jmp 0x4a4d
movq 0x16584(%rip), %rdi     # 0x1afd8
leaq -0x1c08(%rbp), %rsi
callq 0x3200
movq %rax, -0x3628(%rbp)
jmp 0x4a69
movq -0x3628(%rbp), %rdi
leaq 0xf9b2(%rip), %rsi      # 0x14429
callq 0x3230
jmp 0x4a7e
leaq -0x1c08(%rbp), %rdi
callq 0x3120
jmp 0x4aaf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1970(%rbp)
movl %eax, -0x1974(%rbp)
leaq -0x1c08(%rbp), %rdi
callq 0x3120
jmp 0x54b8
jmp 0x4ab1
callq 0x3130
movq %rax, -0x1c10(%rbp)
movl $0xfffffffe, -0x1c14(%rbp) # imm = 0xFFFFFFFE
testb $0x1, -0x1939(%rbp)
je 0x4e19
movl $0x200, -0x1c18(%rbp)   # imm = 0x200
movl $0x0, -0x1c1c(%rbp)
movl -0x1938(%rbp), %esi
leaq -0x1928(%rbp), %rdi
xorl %ecx, %ecx
movl %ecx, %edx
callq 0x9bd0
movl %eax, -0x362c(%rbp)
jmp 0x4b06
movl -0x362c(%rbp), %eax
movl %eax, -0x1c14(%rbp)
cmpl $0x1, -0x1c14(%rbp)
je 0x4b24
cmpl $-0x1, -0x1c14(%rbp)
jne 0x4b44
leaq -0x1928(%rbp), %rdi
callq 0x7f50
movl %eax, -0x3630(%rbp)
jmp 0x4b38
movl -0x3630(%rbp), %eax
movl %eax, -0x1c18(%rbp)
leaq -0x1928(%rbp), %rdi
callq 0x80d0
movl %eax, -0x3634(%rbp)
jmp 0x4b58
movl -0x3634(%rbp), %eax
movl %eax, -0x1c1c(%rbp)
leaq -0x3534(%rbp), %rdi
leaq -0x1928(%rbp), %rsi
movq %rsi, -0x3640(%rbp)
movl $0x1918, %edx           # imm = 0x1918
callq 0x31d0
movq -0x3640(%rbp), %rdi
callq 0x7120
jmp 0x4b91
movl -0x1938(%rbp), %esi
leaq -0x1928(%rbp), %rdi
xorl %edx, %edx
movl $0x4, %ecx
callq 0x9bd0
movl %eax, -0x3644(%rbp)
jmp 0x4bb2
movl -0x3644(%rbp), %eax
movl %eax, -0x1c14(%rbp)
cmpl $0x1, -0x1c14(%rbp)
je 0x4bd4
cmpl $-0x1, -0x1c14(%rbp)
jne 0x4c55
leaq -0x1928(%rbp), %rdi
callq 0x7f50
movl %eax, -0x3648(%rbp)
jmp 0x4be8
movl -0x3648(%rbp), %eax
cmpl -0x1c18(%rbp), %eax
jge 0x4c55
leaq -0x3534(%rbp), %rdi
leaq -0x1928(%rbp), %rsi
movq %rsi, -0x3658(%rbp)
movl $0x1918, %edx           # imm = 0x1918
callq 0x31d0
movq -0x3658(%rbp), %rdi
callq 0x7f50
movl %eax, -0x364c(%rbp)
jmp 0x4c29
movl -0x364c(%rbp), %eax
movl %eax, -0x1c18(%rbp)
leaq -0x1928(%rbp), %rdi
callq 0x80d0
movl %eax, -0x365c(%rbp)
jmp 0x4c49
movl -0x365c(%rbp), %eax
movl %eax, -0x1c1c(%rbp)
leaq -0x1928(%rbp), %rdi
callq 0x80d0
movl %eax, -0x3660(%rbp)
jmp 0x4c69
movl -0x3660(%rbp), %eax
cmpl -0x1c1c(%rbp), %eax
jle 0x4cb6
leaq -0x3534(%rbp), %rdi
leaq -0x1928(%rbp), %rsi
movq %rsi, -0x3670(%rbp)
movl $0x1918, %edx           # imm = 0x1918
callq 0x31d0
movq -0x3670(%rbp), %rdi
callq 0x80d0
movl %eax, -0x3664(%rbp)
jmp 0x4caa
movl -0x3664(%rbp), %eax
movl %eax, -0x1c1c(%rbp)
leaq -0x1928(%rbp), %rdi
callq 0x7120
jmp 0x4cc4
movl -0x1938(%rbp), %esi
leaq -0x1928(%rbp), %rdi
movl $0x1, %edx
movl $0x4, %ecx
callq 0x9bd0
movl %eax, -0x3674(%rbp)
jmp 0x4ce8
movl -0x3674(%rbp), %eax
movl %eax, -0x1c14(%rbp)
cmpl $0x1, -0x1c14(%rbp)
je 0x4d0a
cmpl $-0x1, -0x1c14(%rbp)
jne 0x4d8b
leaq -0x1928(%rbp), %rdi
callq 0x7f50
movl %eax, -0x3678(%rbp)
jmp 0x4d1e
movl -0x3678(%rbp), %eax
cmpl -0x1c18(%rbp), %eax
jge 0x4d8b
leaq -0x3534(%rbp), %rdi
leaq -0x1928(%rbp), %rsi
movq %rsi, -0x3688(%rbp)
movl $0x1918, %edx           # imm = 0x1918
callq 0x31d0
movq -0x3688(%rbp), %rdi
callq 0x7f50
movl %eax, -0x367c(%rbp)
jmp 0x4d5f
movl -0x367c(%rbp), %eax
movl %eax, -0x1c18(%rbp)
leaq -0x1928(%rbp), %rdi
callq 0x80d0
movl %eax, -0x368c(%rbp)
jmp 0x4d7f
movl -0x368c(%rbp), %eax
movl %eax, -0x1c1c(%rbp)
leaq -0x1928(%rbp), %rdi
callq 0x80d0
movl %eax, -0x3690(%rbp)
jmp 0x4d9f
movl -0x3690(%rbp), %eax
cmpl -0x1c1c(%rbp), %eax
jle 0x4dec
leaq -0x3534(%rbp), %rdi
leaq -0x1928(%rbp), %rsi
movq %rsi, -0x36a0(%rbp)
movl $0x1918, %edx           # imm = 0x1918
callq 0x31d0
movq -0x36a0(%rbp), %rdi
callq 0x80d0
movl %eax, -0x3694(%rbp)
jmp 0x4de0
movl -0x3694(%rbp), %eax
movl %eax, -0x1c1c(%rbp)
leaq -0x1928(%rbp), %rdi
leaq -0x3534(%rbp), %rsi
movl $0x1918, %edx           # imm = 0x1918
callq 0x31d0
cmpl $0x34, -0x1c1c(%rbp)
jne 0x4e17
movl $0xffffffff, -0x1c14(%rbp) # imm = 0xFFFFFFFF
jmp 0x4e78
cmpl $0x1, -0x1934(%rbp)
jle 0x4e50
movl -0x1934(%rbp), %esi
movl -0x1938(%rbp), %edx
leaq -0x1928(%rbp), %rdi
callq 0xab80
movl %eax, -0x36a4(%rbp)
jmp 0x4e42
movl -0x36a4(%rbp), %eax
movl %eax, -0x1c14(%rbp)
jmp 0x4e76
movl -0x1938(%rbp), %esi
leaq -0x1928(%rbp), %rdi
callq 0xac10
movl %eax, -0x36a8(%rbp)
jmp 0x4e6a
movl -0x36a8(%rbp), %eax
movl %eax, -0x1c14(%rbp)
jmp 0x4e78
movb $0x0, -0x3535(%rbp)
cmpl $0x1, -0x1c14(%rbp)
jne 0x4ef4
movq 0x16149(%rip), %rdi     # 0x1afd8
leaq 0xf8ec(%rip), %rsi      # 0x14782
callq 0x3230
movq %rax, -0x36b0(%rbp)
jmp 0x4ea4
leaq -0x1928(%rbp), %rdi
callq 0x7f50
movl %eax, -0x36b4(%rbp)
jmp 0x4eb8
movl -0x36b4(%rbp), %esi
movq -0x36b0(%rbp), %rdi
callq 0x33b0
movq %rax, -0x36c0(%rbp)
jmp 0x4ed3
movq -0x36c0(%rbp), %rdi
leaq 0xf8b6(%rip), %rsi      # 0x14797
callq 0x3230
jmp 0x4ee8
movb $0x1, -0x3535(%rbp)
jmp 0x50e6
cmpl $-0x1, -0x1c14(%rbp)
jne 0x4f69
movq 0x160d4(%rip), %rdi     # 0x1afd8
leaq 0xf894(%rip), %rsi      # 0x1479f
callq 0x3230
movq %rax, -0x36c8(%rbp)
jmp 0x4f19
leaq -0x1928(%rbp), %rdi
callq 0x7f50
movl %eax, -0x36cc(%rbp)
jmp 0x4f2d
movl -0x36cc(%rbp), %esi
movq -0x36c8(%rbp), %rdi
callq 0x33b0
movq %rax, -0x36d8(%rbp)
jmp 0x4f48
movq -0x36d8(%rbp), %rdi
leaq 0xf841(%rip), %rsi      # 0x14797
callq 0x3230
jmp 0x4f5d
movb $0x1, -0x3535(%rbp)
jmp 0x50e4
cmpl $0x0, -0x1c14(%rbp)
jne 0x5026
movq 0x1605b(%rip), %rdi     # 0x1afd8
leaq 0xf826(%rip), %rsi      # 0x147aa
callq 0x3230
movq %rax, -0x36e0(%rbp)
jmp 0x4f92
leaq -0x1928(%rbp), %rdi
callq 0x80d0
movl %eax, -0x36e4(%rbp)
jmp 0x4fa6
movl -0x36e4(%rbp), %esi
movq -0x36e0(%rbp), %rdi
callq 0x33b0
movq %rax, -0x36f0(%rbp)
jmp 0x4fc1
movq -0x36f0(%rbp), %rdi
leaq 0xf800(%rip), %rsi      # 0x147cf
callq 0x3230
movq %rax, -0x36f8(%rbp)
jmp 0x4fdd
leaq -0x1928(%rbp), %rdi
callq 0x7f50
movl %eax, -0x36fc(%rbp)
jmp 0x4ff1
movl -0x36fc(%rbp), %esi
movq -0x36f8(%rbp), %rdi
callq 0x33b0
movq %rax, -0x3708(%rbp)
jmp 0x500c
movq -0x3708(%rbp), %rdi
leaq 0xf77d(%rip), %rsi      # 0x14797
callq 0x3230
jmp 0x5021
jmp 0x50e2
cmpl $-0x2, -0x1c14(%rbp)
jne 0x50e0
movq 0x15f9e(%rip), %rdi     # 0x1afd8
leaq 0xf793(%rip), %rsi      # 0x147d4
callq 0x3230
movq %rax, -0x3710(%rbp)
jmp 0x504f
leaq -0x1928(%rbp), %rdi
callq 0x80d0
movl %eax, -0x3714(%rbp)
jmp 0x5063
movl -0x3714(%rbp), %esi
movq -0x3710(%rbp), %rdi
callq 0x33b0
movq %rax, -0x3720(%rbp)
jmp 0x507e
movq -0x3720(%rbp), %rdi
leaq 0xf743(%rip), %rsi      # 0x147cf
callq 0x3230
movq %rax, -0x3728(%rbp)
jmp 0x509a
leaq -0x1928(%rbp), %rdi
callq 0x7f50
movl %eax, -0x372c(%rbp)
jmp 0x50ae
movl -0x372c(%rbp), %esi
movq -0x3728(%rbp), %rdi
callq 0x33b0
movq %rax, -0x3738(%rbp)
jmp 0x50c9
movq -0x3738(%rbp), %rdi
leaq 0xf6c0(%rip), %rsi      # 0x14797
callq 0x3230
jmp 0x50de
jmp 0x50e0
jmp 0x50e2
jmp 0x50e4
jmp 0x50e6
movq 0x15eeb(%rip), %rdi     # 0x1afd8
leaq 0xf702(%rip), %rsi      # 0x147f6
callq 0x3230
movq %rax, -0x3740(%rbp)
jmp 0x5102
callq 0x3130
movq -0x3740(%rbp), %rdi
movq %rax, %rsi
movq -0x1c10(%rbp), %rax
subq %rax, %rsi
callq 0x3400
movq %rax, -0x3748(%rbp)
jmp 0x5129
movq -0x3748(%rbp), %rdi
leaq 0xf6c6(%rip), %rsi      # 0x147fd
callq 0x3230
jmp 0x513e
cmpl $0x2, -0x1930(%rbp)
jge 0x53ca
testb $0x1, -0x1961(%rbp)
je 0x53ca
testb $0x1, -0x3535(%rbp)
je 0x53ca
leaq -0x1928(%rbp), %rdi
callq 0x80f0
movl %eax, -0x374c(%rbp)
jmp 0x5179
movl -0x374c(%rbp), %eax
movl %eax, -0x353c(%rbp)
leaq -0x1928(%rbp), %rdi
callq 0x7120
jmp 0x5193
movl $0x0, -0x3540(%rbp)
movl -0x3540(%rbp), %eax
cmpl -0x353c(%rbp), %eax
jge 0x53b3
movq 0x15e22(%rip), %rdi     # 0x1afd8
leaq 0xf646(%rip), %rsi      # 0x14803
callq 0x3230
jmp 0x51c4
movl -0x3540(%rbp), %esi
leaq -0x1928(%rbp), %rdi
callq 0x8110
movl %eax, -0x3750(%rbp)
jmp 0x51de
movl -0x3750(%rbp), %eax
movl %eax, -0x3564(%rbp)
movl -0x3564(%rbp), %edx
leaq -0x3560(%rbp), %rdi
leaq -0x1928(%rbp), %rsi
callq 0xcd70
jmp 0x5205
movq 0x15dcc(%rip), %rdi     # 0x1afd8
leaq -0x3560(%rbp), %rsi
callq 0x3200
movq %rax, -0x3758(%rbp)
jmp 0x5221
movq -0x3758(%rbp), %rdi
leaq 0xf1fa(%rip), %rsi      # 0x14429
callq 0x3230
jmp 0x5236
leaq -0x3560(%rbp), %rdi
callq 0x3120
movl -0x3540(%rbp), %esi
leaq -0x1928(%rbp), %rdi
callq 0x8110
movl %eax, -0x375c(%rbp)
jmp 0x525c
movl -0x375c(%rbp), %eax
movl %eax, -0x3568(%rbp)
movl -0x3568(%rbp), %esi
leaq -0x1928(%rbp), %rdi
callq 0x7150
jmp 0x527c
cmpl $0x0, -0x1930(%rbp)
jne 0x5326
leaq -0x3588(%rbp), %rdi
leaq -0x1928(%rbp), %rsi
callq 0xd880
jmp 0x529e
movq 0x15d33(%rip), %rdi     # 0x1afd8
leaq -0x3588(%rbp), %rsi
callq 0x3200
movq %rax, -0x3768(%rbp)
jmp 0x52ba
movq -0x3768(%rbp), %rdi
leaq 0xf161(%rip), %rsi      # 0x14429
callq 0x3230
jmp 0x52cf
leaq -0x3588(%rbp), %rdi
callq 0x3120
jmp 0x539d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1970(%rbp)
movl %eax, -0x1974(%rbp)
leaq -0x3560(%rbp), %rdi
callq 0x3120
jmp 0x54b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1970(%rbp)
movl %eax, -0x1974(%rbp)
leaq -0x3588(%rbp), %rdi
callq 0x3120
jmp 0x54b8
leaq -0x35a8(%rbp), %rdi
leaq -0x1928(%rbp), %rsi
callq 0xdc70
jmp 0x533b
movq 0x15c96(%rip), %rdi     # 0x1afd8
leaq -0x35a8(%rbp), %rsi
callq 0x3200
movq %rax, -0x3770(%rbp)
jmp 0x5357
movq -0x3770(%rbp), %rdi
leaq 0xf0c4(%rip), %rsi      # 0x14429
callq 0x3230
jmp 0x536c
leaq -0x35a8(%rbp), %rdi
callq 0x3120
jmp 0x539d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1970(%rbp)
movl %eax, -0x1974(%rbp)
leaq -0x35a8(%rbp), %rdi
callq 0x3120
jmp 0x54b8
jmp 0x539f
movl -0x3540(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3540(%rbp)
jmp 0x519d
movq 0x15c1e(%rip), %rdi     # 0x1afd8
leaq 0xf442(%rip), %rsi      # 0x14803
callq 0x3230
jmp 0x53c8
jmp 0x53ca
testb $0x1, -0x1962(%rbp)
je 0x5450
testb $0x1, -0x3535(%rbp)
je 0x5450
leaq -0x35c8(%rbp), %rdi
leaq -0x1928(%rbp), %rsi
callq 0xeba0
jmp 0x53f1
movq 0x15be0(%rip), %rdi     # 0x1afd8
leaq -0x35c8(%rbp), %rsi
callq 0x3200
movq %rax, -0x3778(%rbp)
jmp 0x540d
movq -0x3778(%rbp), %rdi
leaq 0xf00e(%rip), %rsi      # 0x14429
callq 0x3230
jmp 0x5422
leaq -0x35c8(%rbp), %rdi
callq 0x3120
jmp 0x5472
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1970(%rbp)
movl %eax, -0x1974(%rbp)
leaq -0x35c8(%rbp), %rdi
callq 0x3120
jmp 0x54b8
testb $0x1, -0x1962(%rbp)
je 0x5470
movq 0x15b78(%rip), %rdi     # 0x1afd8
leaq 0xefc3(%rip), %rsi      # 0x1442a
callq 0x3230
jmp 0x546e
jmp 0x5470
jmp 0x5472
jmp 0x5474
leaq -0x1960(%rbp), %rdi
callq 0x3160
movl -0x1bc4(%rbp), %ecx
cmpq %rcx, %rax
ja 0x4952
movl $0x0, -0x4(%rbp)
movl $0x1, -0x1978(%rbp)
leaq -0x1960(%rbp), %rdi
callq 0x3120
movl -0x4(%rbp), %eax
addq $0x3780, %rsp           # imm = 0x3780
popq %rbp
retq
leaq -0x1960(%rbp), %rdi
callq 0x3120
movq -0x1970(%rbp), %rdi
callq 0x33d0