// File: YSRKEN[P]Shioi/I401/main.cpp
// Function: Board::FindNormalMove(unsigned long, bool)
Result FindNormalMove(const size_t depth, bool debug_flg = false) {
		vector<size_t> next_move;
		next_move.reserve(kBoardSize * kBoardSize);
		int max_score = -kScoreInf2;
		if (depth == 0) {
			if (turn_ == Stone::Black) {
				for (size_t p : rep(kBoardSize * kBoardSize)) {
					if (board_[p] != Stone::None) continue;
					// Judge valid move
					bool cho_ren_flg = false;
					size_t sum_4_strong = 0, sum_4_normal = 0, sum_3 = 0;
					for (uint8_t dir = 0; dir < Direction::Directions; ++dir) {
						auto move_pattern = GetPatternB(p, static_cast<Direction>(dir));
						if (Board_helper::IsChorenB(move_pattern)) {
							cho_ren_flg = true;
							break;
						}
						size_t s4s, s4n, s3;
						std::tie(s4s, s4n, s3) = CountRenB(move_pattern, p, static_cast<Direction>(dir));
						sum_4_strong += s4s;
						sum_4_normal += s4n;
						sum_3 += s3;
					}
					if (cho_ren_flg || sum_4_strong + sum_4_normal >= 2 || sum_3 >= 2) continue;
					if (sum_4_strong == 1) return Result(p, true);
					// Find enemy's Shioi
					board_[p] = turn_;
					auto result = FindShioiMove(EnemyTurn(turn_), kShioiDepth2);
					board_[p] = Stone::None;
					// Don't block Shioi : Normal Score
					const int score = (result.second) ? -kScoreInf : CalcScore(p, turn_);
					if (max_score < score) {
						max_score = score;
						if (debug_flg) std::cerr << endl << "  " << score << " : ";
						next_move.clear();
					}
					if (max_score == score) {
						if (debug_flg) std::cerr << PositionToString(p) << ", ";
						next_move.push_back(p);
					}
				}
			}else{
				for (size_t p : rep(kBoardSize * kBoardSize)) {
					if (board_[p] != Stone::None) continue;
					size_t sum_4_strong = 0, sum_4_normal = 0, sum_3 = 0;
					for (uint8_t dir = 0; dir < Direction::Directions; ++dir) {
						auto move_pattern = GetPatternB(p, static_cast<Direction>(dir));
						if (Board_helper::IsChorenB(move_pattern)) return Result(p, true);
						size_t s4s, s4n, s3;
						std::tie(s4s, s4n, s3) = CountRenB(move_pattern, p, static_cast<Direction>(dir));
						sum_4_strong += s4s;
						sum_4_normal += s4n;
						sum_3 += s3;
					}
					if (sum_4_strong >= 1 || sum_4_normal >= 2) return Result(p, true);
					// Find enemy's Shioi
					board_[p] = turn_;
					auto result = FindShioiMove(EnemyTurn(turn_), kShioiDepth2);
					board_[p] = Stone::None;
					// Don't block Shioi : Normal Score
					const int score = (result.second) ? -kScoreInf : CalcScore(p, turn_);
					if (max_score < score) {
						max_score = score;
						if (debug_flg) std::cerr << endl << "  " << score << " : ";
						next_move.clear();
					}
					if (max_score == score) {
						if (debug_flg) std::cerr << PositionToString(p) << ", ";
						next_move.push_back(p);
					}
				}
			}
		}
		else {
			vector<Score> next_move2;
			auto range = GetRange();
			if (turn_ == Stone::Black) {
				for (size_t y : rep(range[1], range[3])) {
					for (size_t x : rep(range[0], range[2])) {
						size_t p = ToPosition(x, y);
						if (board_[p] != Stone::None) continue;
						// Judge valid move
						bool cho_ren_flg = false;
						size_t sum_4_strong = 0, sum_4_normal = 0, sum_3 = 0;
						for (uint8_t dir = 0; dir < Direction::Directions; ++dir) {
							auto move_pattern = GetPatternB(p, static_cast<Direction>(dir));
							if (Board_helper::IsChorenB(move_pattern)) {
								cho_ren_flg = true;
								break;
							}
							size_t s4s, s4n, s3;
							std::tie(s4s, s4n, s3) = CountRenB(move_pattern, p, static_cast<Direction>(dir));
							sum_4_strong += s4s;
							sum_4_normal += s4n;
							sum_3 += s3;
						}
						if (cho_ren_flg || sum_4_strong + sum_4_normal >= 2 || sum_3 >= 2) continue;
						if (sum_4_strong == 1) return Result(p, true);
						// Find enemy's Shioi
						board_[p] = Stone::Black;
						auto result = FindShioiMove(Stone::White, kShioiDepth2);
						board_[p] = Stone::None;
						if (result.second) {
							// Don't block Shioi
							next_move2.emplace_back(p, -kScoreInf);
						}
						else {
							// Normal Score
							next_move2.emplace_back(p, kTenGenDist[p]);
						}
					}
				}
			}
			else {
				for (size_t y : rep(range[1], range[3])) {
					for (size_t x : rep(range[0], range[2])) {
						size_t p = ToPosition(x, y);
						if (board_[p] != Stone::None) continue;
						size_t sum_4_strong = 0, sum_4_normal = 0, sum_3 = 0;
						for (uint8_t dir = 0; dir < Direction::Directions; ++dir) {
							auto move_pattern = GetPatternB(p, static_cast<Direction>(dir));
							if (Board_helper::IsChorenB(move_pattern)) return Result(p, true);
							size_t s4s, s4n, s3;
							std::tie(s4s, s4n, s3) = CountRenB(move_pattern, p, static_cast<Direction>(dir));
							sum_4_strong += s4s;
							sum_4_normal += s4n;
							sum_3 += s3;
						}
						if (sum_4_strong >= 1 || sum_4_normal >= 2) return Result(p, true);
						// Find enemy's Shioi
						board_[p] = Stone::White;
						auto result = FindShioiMove(Stone::Black, kShioiDepth2);
						board_[p] = Stone::None;
						if (result.second) {
							// Don't block Shioi
							next_move2.emplace_back(p, -kScoreInf);
						}
						else {
							// Normal Score
							next_move2.emplace_back(p, kTenGenDist[p]);
						}
					}
				}
			}
			std::sort(next_move2.begin(), next_move2.end(), [](const Score &a, const Score &b) {return a.second > b.second; });
			for (auto &it : next_move2) {
				board_[it.first] = turn_;
				int score = -NegaMax(EnemyTurn(turn_), depth - 1, -kScoreInf2, kScoreInf2) + CalcScore(it.first, turn_);
				board_[it.first] = Stone::None;
				if (score == kScoreInf) return Result(it.first, true);
				if (max_score < score) {
					max_score = score;
					if (debug_flg) std::cerr << endl << "  " << score << " : ";
					next_move.clear();
				}
				if (max_score == score) {
					if (debug_flg) std::cerr << PositionToString(it.first) << ", ";
					next_move.push_back(it.first);
				}
			}
		}
		if (max_score == -kScoreInf) return Result(kBoardSize * kBoardSize, false);
		return (next_move.size() == 0 ? Result(0, false) : Result(next_move[RandInt(next_move.size())], true));
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x890, %rsp            # imm = 0x890
movb %dl, %al
movq %rdi, -0x18(%rbp)
movq %rsi, -0x20(%rbp)
andb $0x1, %al
movb %al, -0x21(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x780(%rbp)
leaq -0x40(%rbp), %rdi
movq %rdi, -0x778(%rbp)
callq 0x5880
movq -0x778(%rbp), %rdi
movl $0xe1, %esi
callq 0x18c30
jmp 0xc0e8
movl $0xfffffc17, -0x50(%rbp) # imm = 0xFFFFFC17
cmpq $0x0, -0x20(%rbp)
jne 0xc9de
movq -0x780(%rbp), %rax
movzbl 0xe1(%rax), %eax
cmpl $0x1, %eax
jne 0xc561
movl $0xe1, %edi
callq 0x54a0
movq %rax, -0x68(%rbp)
movq %rdx, -0x60(%rbp)
leaq -0x68(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rdi
callq 0x54e0
movq %rax, -0x70(%rbp)
movq -0x58(%rbp), %rdi
callq 0x5510
movq %rax, -0x78(%rbp)
leaq -0x70(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0xc15b
jmp 0xc55c
leaq -0x70(%rbp), %rdi
callq 0x5580
movq -0x780(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rsi
callq 0x5590
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0xc199
jmp 0xc54e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0xd6b9
movb $0x0, -0x81(%rbp)
movq $0x0, -0x90(%rbp)
movq $0x0, -0x98(%rbp)
movq $0x0, -0xa0(%rbp)
movb $0x0, -0xa1(%rbp)
movzbl -0xa1(%rbp), %eax
cmpl $0x4, %eax
jge 0xc2d2
movq -0x780(%rbp), %rsi
movq -0x80(%rbp), %rdx
movzbl -0xa1(%rbp), %ecx
leaq -0x148(%rbp), %rdi
callq 0xed20
jmp 0xc1f8
leaq -0x148(%rbp), %rdi
callq 0xef70
movb %al, -0x781(%rbp)
jmp 0xc20c
movb -0x781(%rbp), %al
testb $0x1, %al
jne 0xc218
jmp 0xc224
movb $0x1, -0x81(%rbp)
jmp 0xc2d2
movq -0x780(%rbp), %rsi
movq -0x80(%rbp), %rcx
movzbl -0xa1(%rbp), %r8d
leaq -0x178(%rbp), %rdi
leaq -0x148(%rbp), %rdx
callq 0xf430
jmp 0xc24c
leaq -0x190(%rbp), %rdi
leaq -0x150(%rbp), %rsi
leaq -0x158(%rbp), %rdx
leaq -0x160(%rbp), %rcx
callq 0x11390
leaq -0x190(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x113d0
movq -0x150(%rbp), %rax
addq -0x90(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x158(%rbp), %rax
addq -0x98(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x160(%rbp), %rax
addq -0xa0(%rbp), %rax
movq %rax, -0xa0(%rbp)
movb -0xa1(%rbp), %al
addb $0x1, %al
movb %al, -0xa1(%rbp)
jmp 0xc1c8
testb $0x1, -0x81(%rbp)
jne 0xc2f9
movq -0x90(%rbp), %rax
addq -0x98(%rbp), %rax
cmpq $0x2, %rax
jae 0xc2f9
cmpq $0x2, -0xa0(%rbp)
jb 0xc2fe
jmp 0xc54e
cmpq $0x1, -0x90(%rbp)
jne 0xc334
movb $0x1, -0x191(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x80(%rbp), %rsi
leaq -0x191(%rbp), %rdx
callq 0xec80
jmp 0xc325
movl $0x1, -0x198(%rbp)
jmp 0xd6a0
movq -0x780(%rbp), %rdi
movb 0xe1(%rdi), %al
movb %al, -0x792(%rbp)
movq -0x80(%rbp), %rsi
callq 0x5590
movb -0x792(%rbp), %dl
movq %rax, %rcx
movq -0x780(%rbp), %rax
movb %dl, (%rcx)
movzbl 0xe1(%rax), %edi
callq 0x68d0
movq -0x780(%rbp), %rdi
movzbl %al, %esi
movl $0x3, %edx
callq 0xb0b0
movb %dl, -0x791(%rbp)
movq %rax, -0x790(%rbp)
jmp 0xc391
movq -0x780(%rbp), %rdi
movb -0x791(%rbp), %al
movq -0x790(%rbp), %rcx
movq %rcx, -0x1b8(%rbp)
movb %al, -0x1b0(%rbp)
movq -0x1b8(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movb -0x1b0(%rbp), %al
movb %al, -0x1a0(%rbp)
movq -0x80(%rbp), %rsi
callq 0x5590
movb $0x0, (%rax)
testb $0x1, -0x1a0(%rbp)
je 0xc3ee
movl $0xfffffc18, %eax       # imm = 0xFFFFFC18
movl %eax, -0x798(%rbp)
jmp 0xc41b
movq -0x780(%rbp), %rdi
movq -0x80(%rbp), %rsi
movzbl 0xe1(%rdi), %edx
callq 0x18d30
movl %eax, -0x79c(%rbp)
jmp 0xc40d
movl -0x79c(%rbp), %eax
movl %eax, -0x798(%rbp)
jmp 0xc41b
movl -0x798(%rbp), %eax
movl %eax, -0x1bc(%rbp)
movl -0x50(%rbp), %eax
cmpl -0x1bc(%rbp), %eax
jge 0xc4b8
movl -0x1bc(%rbp), %eax
movl %eax, -0x50(%rbp)
testb $0x1, -0x21(%rbp)
je 0xc4af
movq 0x1ab9c(%rip), %rdi     # 0x26fe8
movq 0x1ab35(%rip), %rsi     # 0x26f88
callq 0x2220
movq %rax, -0x7a8(%rbp)
jmp 0xc461
movq -0x7a8(%rbp), %rdi
leaq 0x11efe(%rip), %rsi     # 0x1e36d
callq 0x21f0
movq %rax, -0x7b0(%rbp)
jmp 0xc47d
movq -0x7b0(%rbp), %rdi
movl -0x1bc(%rbp), %esi
callq 0x2360
movq %rax, -0x7b8(%rbp)
jmp 0xc498
movq -0x7b8(%rbp), %rdi
leaq 0x11cbf(%rip), %rsi     # 0x1e165
callq 0x21f0
jmp 0xc4ad
jmp 0xc4af
leaq -0x40(%rbp), %rdi
callq 0x191d0
movl -0x50(%rbp), %eax
cmpl -0x1bc(%rbp), %eax
jne 0xc54c
testb $0x1, -0x21(%rbp)
je 0xc53b
movq -0x80(%rbp), %rsi
leaq -0x1e0(%rbp), %rdi
callq 0x25b0
jmp 0xc4df
movq 0x1ab02(%rip), %rdi     # 0x26fe8
leaq -0x1e0(%rbp), %rsi
callq 0x21d0
movq %rax, -0x7c0(%rbp)
jmp 0xc4fb
movq -0x7c0(%rbp), %rdi
leaq 0x11e67(%rip), %rsi     # 0x1e370
callq 0x21f0
jmp 0xc510
leaq -0x1e0(%rbp), %rdi
callq 0x2160
jmp 0xc53b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x2160
jmp 0xd6b9
leaq -0x40(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x191f0
jmp 0xc54a
jmp 0xc54c
jmp 0xc54e
leaq -0x70(%rbp), %rdi
callq 0x55c0
jmp 0xc145
jmp 0xc9d9
movl $0xe1, %edi
callq 0x54a0
movq %rax, -0x1f8(%rbp)
movq %rdx, -0x1f0(%rbp)
leaq -0x1f8(%rbp), %rax
movq %rax, -0x1e8(%rbp)
movq -0x1e8(%rbp), %rdi
callq 0x54e0
movq %rax, -0x200(%rbp)
movq -0x1e8(%rbp), %rdi
callq 0x5510
movq %rax, -0x208(%rbp)
leaq -0x200(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0xc5c9
jmp 0xc9d7
leaq -0x200(%rbp), %rdi
callq 0x5580
movq -0x780(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x210(%rbp)
movq -0x210(%rbp), %rsi
callq 0x5590
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0xc5ff
jmp 0xc9c6
movq $0x0, -0x218(%rbp)
movq $0x0, -0x220(%rbp)
movq $0x0, -0x228(%rbp)
movb $0x0, -0x229(%rbp)
movzbl -0x229(%rbp), %eax
cmpl $0x4, %eax
jge 0xc75a
movq -0x780(%rbp), %rsi
movq -0x210(%rbp), %rdx
movzbl -0x229(%rbp), %ecx
leaq -0x2d0(%rbp), %rdi
callq 0xed20
jmp 0xc65a
leaq -0x2d0(%rbp), %rdi
callq 0xef70
movb %al, -0x7c1(%rbp)
jmp 0xc66e
movb -0x7c1(%rbp), %al
testb $0x1, %al
jne 0xc67a
jmp 0xc6a9
movb $0x1, -0x2d1(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x210(%rbp), %rsi
leaq -0x2d1(%rbp), %rdx
callq 0xec80
jmp 0xc69a
movl $0x1, -0x198(%rbp)
jmp 0xd6a0
movq -0x780(%rbp), %rsi
movq -0x210(%rbp), %rcx
movzbl -0x229(%rbp), %r8d
leaq -0x308(%rbp), %rdi
leaq -0x2d0(%rbp), %rdx
callq 0xf430
jmp 0xc6d4
leaq -0x320(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
leaq -0x2e8(%rbp), %rdx
leaq -0x2f0(%rbp), %rcx
callq 0x11390
leaq -0x320(%rbp), %rdi
leaq -0x308(%rbp), %rsi
callq 0x113d0
movq -0x2e0(%rbp), %rax
addq -0x218(%rbp), %rax
movq %rax, -0x218(%rbp)
movq -0x2e8(%rbp), %rax
addq -0x220(%rbp), %rax
movq %rax, -0x220(%rbp)
movq -0x2f0(%rbp), %rax
addq -0x228(%rbp), %rax
movq %rax, -0x228(%rbp)
movb -0x229(%rbp), %al
addb $0x1, %al
movb %al, -0x229(%rbp)
jmp 0xc627
cmpq $0x1, -0x218(%rbp)
jae 0xc76e
cmpq $0x2, -0x220(%rbp)
jb 0xc79d
movb $0x1, -0x321(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x210(%rbp), %rsi
leaq -0x321(%rbp), %rdx
callq 0xec80
jmp 0xc78e
movl $0x1, -0x198(%rbp)
jmp 0xd6a0
movq -0x780(%rbp), %rdi
movb 0xe1(%rdi), %al
movb %al, -0x7d2(%rbp)
movq -0x210(%rbp), %rsi
callq 0x5590
movb -0x7d2(%rbp), %dl
movq %rax, %rcx
movq -0x780(%rbp), %rax
movb %dl, (%rcx)
movzbl 0xe1(%rax), %edi
callq 0x68d0
movq -0x780(%rbp), %rdi
movzbl %al, %esi
movl $0x3, %edx
callq 0xb0b0
movb %dl, -0x7d1(%rbp)
movq %rax, -0x7d0(%rbp)
jmp 0xc7fd
movq -0x780(%rbp), %rdi
movb -0x7d1(%rbp), %al
movq -0x7d0(%rbp), %rcx
movq %rcx, -0x348(%rbp)
movb %al, -0x340(%rbp)
movq -0x348(%rbp), %rax
movq %rax, -0x338(%rbp)
movb -0x340(%rbp), %al
movb %al, -0x330(%rbp)
movq -0x210(%rbp), %rsi
callq 0x5590
movb $0x0, (%rax)
testb $0x1, -0x330(%rbp)
je 0xc85d
movl $0xfffffc18, %eax       # imm = 0xFFFFFC18
movl %eax, -0x7d8(%rbp)
jmp 0xc88d
movq -0x780(%rbp), %rdi
movq -0x210(%rbp), %rsi
movzbl 0xe1(%rdi), %edx
callq 0x18d30
movl %eax, -0x7dc(%rbp)
jmp 0xc87f
movl -0x7dc(%rbp), %eax
movl %eax, -0x7d8(%rbp)
jmp 0xc88d
movl -0x7d8(%rbp), %eax
movl %eax, -0x34c(%rbp)
movl -0x50(%rbp), %eax
cmpl -0x34c(%rbp), %eax
jge 0xc92a
movl -0x34c(%rbp), %eax
movl %eax, -0x50(%rbp)
testb $0x1, -0x21(%rbp)
je 0xc921
movq 0x1a72a(%rip), %rdi     # 0x26fe8
movq 0x1a6c3(%rip), %rsi     # 0x26f88
callq 0x2220
movq %rax, -0x7e8(%rbp)
jmp 0xc8d3
movq -0x7e8(%rbp), %rdi
leaq 0x11a8c(%rip), %rsi     # 0x1e36d
callq 0x21f0
movq %rax, -0x7f0(%rbp)
jmp 0xc8ef
movq -0x7f0(%rbp), %rdi
movl -0x34c(%rbp), %esi
callq 0x2360
movq %rax, -0x7f8(%rbp)
jmp 0xc90a
movq -0x7f8(%rbp), %rdi
leaq 0x1184d(%rip), %rsi     # 0x1e165
callq 0x21f0
jmp 0xc91f
jmp 0xc921
leaq -0x40(%rbp), %rdi
callq 0x191d0
movl -0x50(%rbp), %eax
cmpl -0x34c(%rbp), %eax
jne 0xc9c4
testb $0x1, -0x21(%rbp)
je 0xc9b0
movq -0x210(%rbp), %rsi
leaq -0x370(%rbp), %rdi
callq 0x25b0
jmp 0xc954
movq 0x1a68d(%rip), %rdi     # 0x26fe8
leaq -0x370(%rbp), %rsi
callq 0x21d0
movq %rax, -0x800(%rbp)
jmp 0xc970
movq -0x800(%rbp), %rdi
leaq 0x119f2(%rip), %rsi     # 0x1e370
callq 0x21f0
jmp 0xc985
leaq -0x370(%rbp), %rdi
callq 0x2160
jmp 0xc9b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x2160
jmp 0xd6b9
leaq -0x40(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x191f0
jmp 0xc9c2
jmp 0xc9c4
jmp 0xc9c6
leaq -0x200(%rbp), %rdi
callq 0x55c0
jmp 0xc5ad
jmp 0xc9d9
jmp 0xd5d0
leaq -0x388(%rbp), %rdi
callq 0x19260
movq -0x780(%rbp), %rsi
leaq -0x3a8(%rbp), %rdi
callq 0x126b0
movq -0x780(%rbp), %rax
movzbl 0xe1(%rax), %eax
cmpl $0x1, %eax
jne 0xce6f
leaq -0x3a8(%rbp), %rdi
movl $0x1, %esi
callq 0x12a70
movq %rax, -0x808(%rbp)
leaq -0x3a8(%rbp), %rdi
movl $0x3, %esi
callq 0x12a70
movq -0x808(%rbp), %rdi
movq %rax, %rsi
callq 0xec40
movq %rax, -0x3c0(%rbp)
movq %rdx, -0x3b8(%rbp)
leaq -0x3c0(%rbp), %rax
movq %rax, -0x3b0(%rbp)
movq -0x3b0(%rbp), %rdi
callq 0x54e0
movq %rax, -0x3c8(%rbp)
movq -0x3b0(%rbp), %rdi
callq 0x5510
movq %rax, -0x3d0(%rbp)
leaq -0x3c8(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0xcaaa
jmp 0xce6a
leaq -0x3c8(%rbp), %rdi
callq 0x5580
movq (%rax), %rax
movq %rax, -0x3d8(%rbp)
leaq -0x3a8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x12a70
movq %rax, -0x810(%rbp)
leaq -0x3a8(%rbp), %rdi
movl $0x2, %esi
callq 0x12a70
movq -0x810(%rbp), %rdi
movq %rax, %rsi
callq 0xec40
movq %rax, -0x3f0(%rbp)
movq %rdx, -0x3e8(%rbp)
leaq -0x3f0(%rbp), %rax
movq %rax, -0x3e0(%rbp)
movq -0x3e0(%rbp), %rdi
callq 0x54e0
movq %rax, -0x3f8(%rbp)
movq -0x3e0(%rbp), %rdi
callq 0x5510
movq %rax, -0x400(%rbp)
leaq -0x3f8(%rbp), %rdi
leaq -0x400(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0xcb55
jmp 0xce57
leaq -0x3f8(%rbp), %rdi
callq 0x5580
movq (%rax), %rax
movq %rax, -0x408(%rbp)
movq -0x408(%rbp), %rdi
movq -0x3d8(%rbp), %rsi
callq 0x3100
movq -0x780(%rbp), %rdi
movq %rax, -0x410(%rbp)
movq -0x410(%rbp), %rsi
callq 0x5590
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0xcba5
jmp 0xce46
movb $0x0, -0x411(%rbp)
movq $0x0, -0x420(%rbp)
movq $0x0, -0x428(%rbp)
movq $0x0, -0x430(%rbp)
movb $0x0, -0x431(%rbp)
movzbl -0x431(%rbp), %eax
cmpl $0x4, %eax
jge 0xccf5
movq -0x780(%rbp), %rsi
movq -0x410(%rbp), %rdx
movzbl -0x431(%rbp), %ecx
leaq -0x4d8(%rbp), %rdi
callq 0xed20
jmp 0xcc07
leaq -0x4d8(%rbp), %rdi
callq 0xef70
movb %al, -0x811(%rbp)
jmp 0xcc1b
movb -0x811(%rbp), %al
testb $0x1, %al
jne 0xcc27
jmp 0xcc44
movb $0x1, -0x411(%rbp)
jmp 0xccf5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0xd5bf
movq -0x780(%rbp), %rsi
movq -0x410(%rbp), %rcx
movzbl -0x431(%rbp), %r8d
leaq -0x508(%rbp), %rdi
leaq -0x4d8(%rbp), %rdx
callq 0xf430
jmp 0xcc6f
leaq -0x520(%rbp), %rdi
leaq -0x4e0(%rbp), %rsi
leaq -0x4e8(%rbp), %rdx
leaq -0x4f0(%rbp), %rcx
callq 0x11390
leaq -0x520(%rbp), %rdi
leaq -0x508(%rbp), %rsi
callq 0x113d0
movq -0x4e0(%rbp), %rax
addq -0x420(%rbp), %rax
movq %rax, -0x420(%rbp)
movq -0x4e8(%rbp), %rax
addq -0x428(%rbp), %rax
movq %rax, -0x428(%rbp)
movq -0x4f0(%rbp), %rax
addq -0x430(%rbp), %rax
movq %rax, -0x430(%rbp)
movb -0x431(%rbp), %al
addb $0x1, %al
movb %al, -0x431(%rbp)
jmp 0xcbd4
testb $0x1, -0x411(%rbp)
jne 0xcd1c
movq -0x420(%rbp), %rax
addq -0x428(%rbp), %rax
cmpq $0x2, %rax
jae 0xcd1c
cmpq $0x2, -0x430(%rbp)
jb 0xcd21
jmp 0xce46
cmpq $0x1, -0x420(%rbp)
jne 0xcd5a
movb $0x1, -0x521(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x410(%rbp), %rsi
leaq -0x521(%rbp), %rdx
callq 0xec80
jmp 0xcd4b
movl $0x1, -0x198(%rbp)
jmp 0xd5a1
movq -0x780(%rbp), %rdi
movq -0x410(%rbp), %rsi
callq 0x5590
movq -0x780(%rbp), %rdi
movb $0x1, (%rax)
movl $0x2, %esi
movl $0x3, %edx
callq 0xb0b0
movb %dl, -0x821(%rbp)
movq %rax, -0x820(%rbp)
jmp 0xcd95
movq -0x780(%rbp), %rdi
movb -0x821(%rbp), %al
movq -0x820(%rbp), %rcx
movq %rcx, -0x548(%rbp)
movb %al, -0x540(%rbp)
movq -0x548(%rbp), %rax
movq %rax, -0x538(%rbp)
movb -0x540(%rbp), %al
movb %al, -0x530(%rbp)
movq -0x410(%rbp), %rsi
callq 0x5590
movb $0x0, (%rax)
testb $0x1, -0x530(%rbp)
je 0xce10
movl $0xfffffc18, -0x54c(%rbp) # imm = 0xFFFFFC18
leaq -0x388(%rbp), %rdi
leaq -0x410(%rbp), %rsi
leaq -0x54c(%rbp), %rdx
callq 0x19280
jmp 0xce0e
jmp 0xce44
movq -0x780(%rbp), %rdi
addq $0x3928, %rdi           # imm = 0x3928
movq -0x410(%rbp), %rsi
callq 0x5670
movq %rax, %rdx
leaq -0x388(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0x19300
jmp 0xce42
jmp 0xce44
jmp 0xce46
leaq -0x3f8(%rbp), %rdi
callq 0x55c0
jmp 0xcb39
jmp 0xce59
leaq -0x3c8(%rbp), %rdi
callq 0x55c0
jmp 0xca8e
jmp 0xd2b0
leaq -0x3a8(%rbp), %rdi
movl $0x1, %esi
callq 0x12a70
movq %rax, -0x830(%rbp)
leaq -0x3a8(%rbp), %rdi
movl $0x3, %esi
callq 0x12a70
movq -0x830(%rbp), %rdi
movq %rax, %rsi
callq 0xec40
movq %rax, -0x568(%rbp)
movq %rdx, -0x560(%rbp)
leaq -0x568(%rbp), %rax
movq %rax, -0x558(%rbp)
movq -0x558(%rbp), %rdi
callq 0x54e0
movq %rax, -0x570(%rbp)
movq -0x558(%rbp), %rdi
callq 0x5510
movq %rax, -0x578(%rbp)
leaq -0x570(%rbp), %rdi
leaq -0x578(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0xcf05
jmp 0xd2ae
leaq -0x570(%rbp), %rdi
callq 0x5580
movq (%rax), %rax
movq %rax, -0x580(%rbp)
leaq -0x3a8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x12a70
movq %rax, -0x838(%rbp)
leaq -0x3a8(%rbp), %rdi
movl $0x2, %esi
callq 0x12a70
movq -0x838(%rbp), %rdi
movq %rax, %rsi
callq 0xec40
movq %rax, -0x598(%rbp)
movq %rdx, -0x590(%rbp)
leaq -0x598(%rbp), %rax
movq %rax, -0x588(%rbp)
movq -0x588(%rbp), %rdi
callq 0x54e0
movq %rax, -0x5a0(%rbp)
movq -0x588(%rbp), %rdi
callq 0x5510
movq %rax, -0x5a8(%rbp)
leaq -0x5a0(%rbp), %rdi
leaq -0x5a8(%rbp), %rsi
callq 0x5550
testb $0x1, %al
jne 0xcfb0
jmp 0xd29b
leaq -0x5a0(%rbp), %rdi
callq 0x5580
movq (%rax), %rax
movq %rax, -0x5b0(%rbp)
movq -0x5b0(%rbp), %rdi
movq -0x580(%rbp), %rsi
callq 0x3100
movq -0x780(%rbp), %rdi
movq %rax, -0x5b8(%rbp)
movq -0x5b8(%rbp), %rsi
callq 0x5590
movzbl (%rax), %eax
cmpl $0x0, %eax
je 0xd000
jmp 0xd28a
movq $0x0, -0x5c0(%rbp)
movq $0x0, -0x5c8(%rbp)
movq $0x0, -0x5d0(%rbp)
movb $0x0, -0x5d1(%rbp)
movzbl -0x5d1(%rbp), %eax
cmpl $0x4, %eax
jge 0xd15b
movq -0x780(%rbp), %rsi
movq -0x5b8(%rbp), %rdx
movzbl -0x5d1(%rbp), %ecx
leaq -0x678(%rbp), %rdi
callq 0xed20
jmp 0xd05b
leaq -0x678(%rbp), %rdi
callq 0xef70
movb %al, -0x839(%rbp)
jmp 0xd06f
movb -0x839(%rbp), %al
testb $0x1, %al
jne 0xd07b
jmp 0xd0aa
movb $0x1, -0x679(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
leaq -0x679(%rbp), %rdx
callq 0xec80
jmp 0xd09b
movl $0x1, -0x198(%rbp)
jmp 0xd5a1
movq -0x780(%rbp), %rsi
movq -0x5b8(%rbp), %rcx
movzbl -0x5d1(%rbp), %r8d
leaq -0x6b0(%rbp), %rdi
leaq -0x678(%rbp), %rdx
callq 0xf430
jmp 0xd0d5
leaq -0x6c8(%rbp), %rdi
leaq -0x688(%rbp), %rsi
leaq -0x690(%rbp), %rdx
leaq -0x698(%rbp), %rcx
callq 0x11390
leaq -0x6c8(%rbp), %rdi
leaq -0x6b0(%rbp), %rsi
callq 0x113d0
movq -0x688(%rbp), %rax
addq -0x5c0(%rbp), %rax
movq %rax, -0x5c0(%rbp)
movq -0x690(%rbp), %rax
addq -0x5c8(%rbp), %rax
movq %rax, -0x5c8(%rbp)
movq -0x698(%rbp), %rax
addq -0x5d0(%rbp), %rax
movq %rax, -0x5d0(%rbp)
movb -0x5d1(%rbp), %al
addb $0x1, %al
movb %al, -0x5d1(%rbp)
jmp 0xd028
cmpq $0x1, -0x5c0(%rbp)
jae 0xd16f
cmpq $0x2, -0x5c8(%rbp)
jb 0xd19e
movb $0x1, -0x6c9(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
leaq -0x6c9(%rbp), %rdx
callq 0xec80
jmp 0xd18f
movl $0x1, -0x198(%rbp)
jmp 0xd5a1
movq -0x780(%rbp), %rdi
movq -0x5b8(%rbp), %rsi
callq 0x5590
movq -0x780(%rbp), %rdi
movb $0x2, (%rax)
movl $0x1, %esi
movl $0x3, %edx
callq 0xb0b0
movb %dl, -0x849(%rbp)
movq %rax, -0x848(%rbp)
jmp 0xd1d9
movq -0x780(%rbp), %rdi
movb -0x849(%rbp), %al
movq -0x848(%rbp), %rcx
movq %rcx, -0x6f0(%rbp)
movb %al, -0x6e8(%rbp)
movq -0x6f0(%rbp), %rax
movq %rax, -0x6e0(%rbp)
movb -0x6e8(%rbp), %al
movb %al, -0x6d8(%rbp)
movq -0x5b8(%rbp), %rsi
callq 0x5590
movb $0x0, (%rax)
testb $0x1, -0x6d8(%rbp)
je 0xd254
movl $0xfffffc18, -0x6f4(%rbp) # imm = 0xFFFFFC18
leaq -0x388(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
leaq -0x6f4(%rbp), %rdx
callq 0x19280
jmp 0xd252
jmp 0xd288
movq -0x780(%rbp), %rdi
addq $0x3928, %rdi           # imm = 0x3928
movq -0x5b8(%rbp), %rsi
callq 0x5670
movq %rax, %rdx
leaq -0x388(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
callq 0x19300
jmp 0xd286
jmp 0xd288
jmp 0xd28a
leaq -0x5a0(%rbp), %rdi
callq 0x55c0
jmp 0xcf94
jmp 0xd29d
leaq -0x570(%rbp), %rdi
callq 0x55c0
jmp 0xcee9
jmp 0xd2b0
leaq -0x388(%rbp), %rdi
movq %rdi, -0x858(%rbp)
callq 0x193c0
movq -0x858(%rbp), %rdi
movq %rax, -0x700(%rbp)
callq 0x193f0
movq %rax, -0x708(%rbp)
movq -0x700(%rbp), %rdi
movq -0x708(%rbp), %rsi
callq 0x19380
jmp 0xd2f2
leaq -0x388(%rbp), %rax
movq %rax, -0x718(%rbp)
movq -0x718(%rbp), %rdi
callq 0x193c0
movq %rax, -0x720(%rbp)
movq -0x718(%rbp), %rdi
callq 0x193f0
movq %rax, -0x728(%rbp)
leaq -0x720(%rbp), %rdi
leaq -0x728(%rbp), %rsi
callq 0x19420
testb $0x1, %al
jne 0xd342
jmp 0xd597
leaq -0x720(%rbp), %rdi
callq 0x19460
movq -0x780(%rbp), %rdi
movq %rax, -0x730(%rbp)
movb 0xe1(%rdi), %al
movb %al, -0x85d(%rbp)
movq -0x730(%rbp), %rax
movq (%rax), %rsi
callq 0x5590
movb -0x85d(%rbp), %dl
movq %rax, %rcx
movq -0x780(%rbp), %rax
movb %dl, (%rcx)
movzbl 0xe1(%rax), %edi
callq 0x68d0
movq -0x780(%rbp), %rdi
movq -0x20(%rbp), %rdx
decq %rdx
movzbl %al, %esi
movl $0xfffffc17, %ecx       # imm = 0xFFFFFC17
movl $0x3e9, %r8d            # imm = 0x3E9
callq 0x19480
movl %eax, -0x85c(%rbp)
jmp 0xd3be
movq -0x780(%rbp), %rdi
movl -0x85c(%rbp), %eax
negl %eax
movl %eax, -0x868(%rbp)
movq -0x730(%rbp), %rax
movq (%rax), %rsi
movzbl 0xe1(%rdi), %edx
callq 0x18d30
movl %eax, -0x864(%rbp)
jmp 0xd3f1
movq -0x780(%rbp), %rdi
movl -0x864(%rbp), %ecx
movl -0x868(%rbp), %eax
addl %ecx, %eax
movl %eax, -0x734(%rbp)
movq -0x730(%rbp), %rax
movq (%rax), %rsi
callq 0x5590
movb $0x0, (%rax)
cmpl $0x3e8, -0x734(%rbp)    # imm = 0x3E8
jne 0xd459
movq -0x730(%rbp), %rsi
movb $0x1, -0x735(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x735(%rbp), %rdx
callq 0xec80
jmp 0xd44a
movl $0x1, -0x198(%rbp)
jmp 0xd5a1
movl -0x50(%rbp), %eax
cmpl -0x734(%rbp), %eax
jge 0xd4ea
movl -0x734(%rbp), %eax
movl %eax, -0x50(%rbp)
testb $0x1, -0x21(%rbp)
je 0xd4e1
movq 0x19b6a(%rip), %rdi     # 0x26fe8
movq 0x19b03(%rip), %rsi     # 0x26f88
callq 0x2220
movq %rax, -0x870(%rbp)
jmp 0xd493
movq -0x870(%rbp), %rdi
leaq 0x10ecc(%rip), %rsi     # 0x1e36d
callq 0x21f0
movq %rax, -0x878(%rbp)
jmp 0xd4af
movq -0x878(%rbp), %rdi
movl -0x734(%rbp), %esi
callq 0x2360
movq %rax, -0x880(%rbp)
jmp 0xd4ca
movq -0x880(%rbp), %rdi
leaq 0x10c8d(%rip), %rsi     # 0x1e165
callq 0x21f0
jmp 0xd4df
jmp 0xd4e1
leaq -0x40(%rbp), %rdi
callq 0x191d0
movl -0x50(%rbp), %eax
cmpl -0x734(%rbp), %eax
jne 0xd584
testb $0x1, -0x21(%rbp)
je 0xd570
movq -0x730(%rbp), %rax
movq (%rax), %rsi
leaq -0x758(%rbp), %rdi
callq 0x25b0
jmp 0xd517
movq 0x19aca(%rip), %rdi     # 0x26fe8
leaq -0x758(%rbp), %rsi
callq 0x21d0
movq %rax, -0x888(%rbp)
jmp 0xd533
movq -0x888(%rbp), %rdi
leaq 0x10e2f(%rip), %rsi     # 0x1e370
callq 0x21f0
jmp 0xd548
leaq -0x758(%rbp), %rdi
callq 0x2160
jmp 0xd570
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x758(%rbp), %rdi
callq 0x2160
jmp 0xd5bf
movq -0x730(%rbp), %rsi
leaq -0x40(%rbp), %rdi
callq 0x191f0
jmp 0xd582
jmp 0xd584
jmp 0xd586
leaq -0x720(%rbp), %rdi
callq 0x1a4b0
jmp 0xd326
movl $0x0, -0x198(%rbp)
leaq -0x388(%rbp), %rdi
callq 0x1a4d0
movl -0x198(%rbp), %eax
testl %eax, %eax
jne 0xd6a0
jmp 0xd5bd
jmp 0xd5d0
leaq -0x388(%rbp), %rdi
callq 0x1a4d0
jmp 0xd6b9
cmpl $0xfffffc18, -0x50(%rbp) # imm = 0xFFFFFC18
jne 0xd613
movq $0xe1, -0x760(%rbp)
movb $0x0, -0x761(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x760(%rbp), %rsi
leaq -0x761(%rbp), %rdx
callq 0xdec0
jmp 0xd604
movl $0x1, -0x198(%rbp)
jmp 0xd6a0
leaq -0x40(%rbp), %rdi
callq 0x63a0
cmpq $0x0, %rax
jne 0xd64e
movl $0x0, -0x768(%rbp)
movb $0x0, -0x769(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x768(%rbp), %rsi
leaq -0x769(%rbp), %rdx
callq 0xecc0
jmp 0xd64c
jmp 0xd696
leaq -0x40(%rbp), %rdi
callq 0x63a0
movq %rax, %rdi
callq 0x9aa0
movq %rax, -0x890(%rbp)
jmp 0xd668
movq -0x890(%rbp), %rsi
leaq -0x40(%rbp), %rdi
callq 0x9a80
movq %rax, %rsi
movb $0x1, -0x76a(%rbp)
leaq -0x10(%rbp), %rdi
leaq -0x76a(%rbp), %rdx
callq 0xec80
jmp 0xd694
jmp 0xd696
movl $0x1, -0x198(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x5cb0
movq -0x10(%rbp), %rax
movb -0x8(%rbp), %dl
addq $0x890, %rsp            # imm = 0x890
popq %rbp
retq
leaq -0x40(%rbp), %rdi
callq 0x5cb0
movq -0x48(%rbp), %rdi
callq 0x2370
nopl (%rax,%rax)