// File: rpavlik[P]edid-decode/parse-displayid-block.cpp
// Function: edid_state::parse_displayid_block(unsigned char const*)
void edid_state::parse_displayid_block(const unsigned char *x)
{
	unsigned version = x[1];
	unsigned length = x[2];
	unsigned prod_type = x[3]; // future check: based on type, check for required data blocks
	unsigned ext_count = x[4];
	unsigned i;

	printf("  Version: %u.%u\n  Extension Count: %u\n",
	       version >> 4, version & 0xf, ext_count);

	if (dispid.is_base_block) {
		dispid.version = version;
		printf("  %s: %s\n", product_type(prod_type, true).c_str(),
		       product_type(prod_type, false).c_str());
		if (!prod_type)
			fail("DisplayID Base Block has no product type.\n");
		if (ext_count != dispid.preparsed_displayid_blocks - 1)
			fail("Expected %u DisplayID Extension Block%s, but got %u.\n",
			     ext_count,
			     ext_count > 1 ? "s" : "",
			     dispid.preparsed_displayid_blocks - 1);
	} else {
		if (prod_type)
			fail("Product Type should be 0 in extension block.\n");
		if (ext_count)
			fail("Extension Count should be 0 in extension block.\n");
		if (version != dispid.version)
			fail("Got version %u.%u, expected %u.%u.\n",
			     version >> 4, version & 0xf,
			     dispid.version >> 4, dispid.version & 0xf);
	}

	if (length > 121) {
		fail("DisplayID length %d is greater than 121.\n", length);
		length = 121;
	}

	unsigned offset = 5;
	bool first_data_block = true;
	while (length > 0) {
		unsigned tag = x[offset];
		unsigned oui = 0;

		switch (tag) {
		// DisplayID 1.3:
		case 0x00: data_block = "Product Identification Data Block (" + utohex(tag) + ")"; break;
		case 0x01: data_block = "Display Parameters Data Block (" + utohex(tag) + ")"; break;
		case 0x02: data_block = "Color Characteristics Data Block"; break;
		case 0x03: data_block = "Video Timing Modes Type 1 - Detailed Timings Data Block"; break;
		case 0x04: data_block = "Video Timing Modes Type 2 - Detailed Timings Data Block"; break;
		case 0x05: data_block = "Video Timing Modes Type 3 - Short Timings Data Block"; break;
		case 0x06: data_block = "Video Timing Modes Type 4 - DMT Timings Data Block"; break;
		case 0x07: data_block = "Supported Timing Modes Type 1 - VESA DMT Timings Data Block"; break;
		case 0x08: data_block = "Supported Timing Modes Type 2 - CTA-861 Timings Data Block"; break;
		case 0x09: data_block = "Video Timing Range Data Block"; break;
		case 0x0a: data_block = "Product Serial Number Data Block"; break;
		case 0x0b: data_block = "GP ASCII String Data Block"; break;
		case 0x0c: data_block = "Display Device Data Data Block"; break;
		case 0x0d: data_block = "Interface Power Sequencing Data Block"; break;
		case 0x0e: data_block = "Transfer Characteristics Data Block"; break;
		case 0x0f: data_block = "Display Interface Data Block"; break;
		case 0x10: data_block = "Stereo Display Interface Data Block (" + utohex(tag) + ")"; break;
		case 0x11: data_block = "Video Timing Modes Type 5 - Short Timings Data Block"; break;
		case 0x12: data_block = "Tiled Display Topology Data Block (" + utohex(tag) + ")"; break;
		case 0x13: data_block = "Video Timing Modes Type 6 - Detailed Timings Data Block"; break;
		// 0x14 .. 0x7e RESERVED for Additional VESA-defined Data Blocks
		// DisplayID 2.0
		case 0x20: data_block = "Product Identification Data Block (" + utohex(tag) + ")"; break;
		case 0x21: data_block = "Display Parameters Data Block (" + utohex(tag) + ")"; break;
		case 0x22: data_block = "Video Timing Modes Type 7 - Detailed Timings Data Block"; break;
		case 0x23: data_block = "Video Timing Modes Type 8 - Enumerated Timing Codes Data Block"; break;
		case 0x24: data_block = "Video Timing Modes Type 9 - Formula-based Timings Data Block"; break;
		case 0x25: data_block = "Dynamic Video Timing Range Limits Data Block"; break;
		case 0x26: data_block = "Display Interface Features Data Block"; break;
		case 0x27: data_block = "Stereo Display Interface Data Block (" + utohex(tag) + ")"; break;
		case 0x28: data_block = "Tiled Display Topology Data Block (" + utohex(tag) + ")"; break;
		case 0x29: data_block = "ContainerID Data Block"; break;
		case 0x32: data_block = "Video Timing Modes Type 10 - Formula-based Timings Data Block"; break;
		// 0x2a .. 0x7d RESERVED for Additional VESA-defined Data Blocks
		case 0x7e: // DisplayID 2.0
		case 0x7f: // DisplayID 1.3
			if ((tag == 0x7e && version >= 0x20) ||
			    (tag == 0x7f && version < 0x20)) {
				oui = (x[offset + 3] << 16) + (x[offset + 4] << 8) + x[offset + 5];
				const char *name = oui_name(oui);
				bool reversed = false;

				if (!name) {
					name = oui_name(oui, true);
					if (name)
						reversed = true;
				}
				if (name)
					data_block = std::string("Vendor-Specific Data Block (") + name + ")";
				else
					data_block = "Vendor-Specific Data Block, OUI " + ouitohex(oui);
				if (reversed)
					fail((std::string("OUI ") + ouitohex(oui) + " is in the wrong byte order.\n").c_str());
			} else {
				data_block = "Unknown DisplayID Data Block (" + utohex(tag) + ")";
			}
			break;
		// 0x80 RESERVED
		case 0x81: data_block = "CTA-861 DisplayID Data Block (" + utohex(tag) + ")"; break;
		// 0x82 .. 0xff RESERVED
		default:   data_block = "Unknown DisplayID Data Block (" + utohex(tag) + ")"; break;
		}

		if (version >= 0x20 && (tag < 0x20 || tag == 0x7f))
			fail("Use of DisplayID v1.x tag for DisplayID v%u.%u.\n",
			     version >> 4, version & 0xf);
		if (version < 0x20 && tag >= 0x20 && tag <= 0x7e)
			fail("Use of DisplayID v2.0 tag for DisplayID v%u.%u.\n",
			     version >> 4, version & 0xf);

		if (length < 3) {
			// report a problem when the remaining bytes are not 0.
			if (tag || x[offset + 1]) {
				fail("Not enough bytes remain (%d) for a DisplayID data block or the DisplayID filler is non-0.\n", length);
			}
			break;
		}

		unsigned block_rev = x[offset + 1] & 0x07;
		unsigned len = x[offset + 2];

		if (length < len + 3) {
			fail("The length of this DisplayID data block (%d) exceeds the number of bytes remaining (%d).\n", len + 3, length);
			break;
		}

		if (!tag && !len) {
			// A Product Identification Data Block with no payload bytes is not valid - assume this is the end.
			if (!memchk(x + offset, length)) {
				fail("Non-0 filler bytes in the DisplayID block.\n");
			}
			break;
		}

		printf("  %s:\n", data_block.c_str());

		switch (tag) {
		case 0x00: parse_displayid_product_id(x + offset); break;
		case 0x01: parse_displayid_parameters(x + offset); break;
		case 0x02: parse_displayid_color_characteristics(x + offset); break;
		case 0x03:
			   check_displayid_datablock_revision(x[offset + 1], 0, block_rev & 1);
			   for (i = 0; i < len / 20; i++)
				   parse_displayid_type_1_7_timing(&x[offset + 3 + (i * 20)], false, block_rev);
			   break;
		case 0x04:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len / 11; i++)
				   parse_displayid_type_2_timing(&x[offset + 3 + (i * 11)]);
			   break;
		case 0x05:
			   check_displayid_datablock_revision(x[offset + 1], 0, block_rev & 1);
			   for (i = 0; i < len / 3; i++)
				   parse_displayid_type_3_timing(&x[offset + 3 + (i * 3)]);
			   break;
		case 0x06:
			   check_displayid_datablock_revision(x[offset + 1], 0xc0, 1);
			   for (i = 0; i < len; i++)
				   parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6, x[offset + 3 + i]);
			   break;
		case 0x07:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < min(len, 10) * 8; i++)
				   if (x[offset + 3 + i / 8] & (1 << (i % 8))) {
					   char type[16];
					   sprintf(type, "DMT 0x%02x", i + 1);
					   print_timings("    ", find_dmt_id(i + 1), type);
				   }
			   break;
		case 0x08:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < min(len, 8) * 8; i++)
				   if (x[offset + 3 + i / 8] & (1 << (i % 8))) {
					   char type[16];
					   sprintf(type, "VIC %3u", i + 1);
					   print_timings("    ", find_vic_id(i + 1), type);
				   }
			   break;
		case 0x09: parse_displayid_video_timing_range_limits(x + offset); break;
		case 0x0a:
		case 0x0b: parse_displayid_string(x + offset); break;
		case 0x0c: parse_displayid_display_device(x + offset); break;
		case 0x0d: parse_displayid_intf_power_sequencing(x + offset); break;
		case 0x0e: parse_displayid_transfer_characteristics(x + offset); break;
		case 0x0f: parse_displayid_display_intf(x + offset); break;
		case 0x10: parse_displayid_stereo_display_intf(x + offset); break;
		case 0x11:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len / 7; i++)
				   parse_displayid_type_5_timing(&x[offset + 3 + (i * 7)]);
			   break;
		case 0x12: parse_displayid_tiled_display_topology(x + offset, false); break;
		case 0x13:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len; i += (x[offset + 3 + i + 2] & 0x40) ? 17 : 14)
				   parse_displayid_type_6_timing(&x[offset + 3 + i]);
			   break;
		case 0x20: parse_displayid_product_id(x + offset); break;
		case 0x21:
			   if (block_rev >= 1)
				   check_displayid_datablock_revision(x[offset + 1], 0x80, 1);
			   else
				   check_displayid_datablock_revision(x[offset + 1], 0x80, 0);
			   parse_displayid_parameters_v2(x + offset, block_rev);
			   break;
		case 0x22: {
			   unsigned sz = 20;

			   if (block_rev >= 2)
				   check_displayid_datablock_revision(x[offset + 1], 0x08, 2);
			   else if (block_rev == 1)
				   check_displayid_datablock_revision(x[offset + 1], 0x08, 1);
			   else
				   check_displayid_datablock_revision(x[offset + 1]);
			   sz += (x[offset + 1] & 0x70) >> 4;
			   if (block_rev >= 1 && (x[offset + 1] & 0x08))
				   printf("    These timings support DSC pass-through\n");
			   for (i = 0; i < len / sz; i++)
				   parse_displayid_type_1_7_timing(&x[offset + 3 + i * sz], true, block_rev);
			   break;
		}
		case 0x23:
			   if (block_rev)
				   check_displayid_datablock_revision(x[offset + 1], 0xe8, 1);
			   else
				   check_displayid_datablock_revision(x[offset + 1], 0xc8);
			   if (x[offset + 1] & 0x08) {
				   for (i = 0; i < len / 2; i++)
					   parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6,
									   x[offset + 3 + i * 2] |
									   (x[offset + 4 + i * 2] << 8));
			   } else {
				   for (i = 0; i < len; i++)
					   parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6,
									   x[offset + 3 + i]);
			   }
			   break;
		case 0x24:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len / 6; i++)
				   parse_displayid_type_9_timing(&x[offset + 3 + i * 6]);
			   break;
		case 0x25: parse_displayid_dynamic_video_timings_range_limits(x + offset); break;
		case 0x26: parse_displayid_interface_features(x + offset); break;
		case 0x27: parse_displayid_stereo_display_intf(x + offset); break;
		case 0x28: parse_displayid_tiled_display_topology(x + offset, true); break;
		case 0x29: parse_displayid_ContainerID(x + offset); break;
		case 0x32: {
			   unsigned sz = 6 + ((x[offset + 1] & 0x70) >> 4);

			   check_displayid_datablock_revision(x[offset + 1], 0x10);
			   for (i = 0; i < len / sz; i++)
				   parse_displayid_type_10_timing(&x[offset + 3 + i * sz]);
			   break;
		}
		case 0x81: parse_displayid_cta_data_block(x + offset); break;
		case 0x7e:
			if (oui == 0x3a0292) {
				parse_displayid_vesa(x + offset);
				break;
			}
			// fall-through
		default: hex_block("    ", x + offset + 3, len); break;
		}

		if ((tag == 0x00 || tag == 0x20) &&
		    (!dispid.is_base_block || !first_data_block))
			fail("%s is required to be the first DisplayID Data Block.\n",
			     data_block.c_str());
		length -= len + 3;
		offset += len + 3;
		first_data_block = false;
	}

	/*
	 * DisplayID length field is number of following bytes
	 * but checksum is calculated over the entire structure
	 * (excluding DisplayID-in-EDID magic byte)
	 */
	data_block.clear();
	do_checksum("  ", x + 1, x[2] + 5);

	if (!memchk(x + 1 + x[2] + 5, 0x7f - (1 + x[2] + 5))) {
		data_block = "Padding";
		fail("DisplayID padding contains non-zero bytes.\n");
	}
	dispid.is_base_block = false;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x6f0, %rsp            # imm = 0x6F0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x620(%rbp)
movq -0x10(%rbp), %rax
movzbl 0x1(%rax), %eax
movl %eax, -0x14(%rbp)
movq -0x10(%rbp), %rax
movzbl 0x2(%rax), %eax
movl %eax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movzbl 0x3(%rax), %eax
movl %eax, -0x1c(%rbp)
movq -0x10(%rbp), %rax
movzbl 0x4(%rax), %eax
movl %eax, -0x20(%rbp)
movl -0x14(%rbp), %esi
shrl $0x4, %esi
movl -0x14(%rbp), %edx
andl $0xf, %edx
movl -0x20(%rbp), %ecx
leaq 0x17c14(%rip), %rdi     # 0x404e4
movb $0x0, %al
callq 0x4050
movq -0x620(%rbp), %rax
testb $0x1, 0x91c(%rax)
je 0x28a13
movq -0x620(%rbp), %rsi
movb -0x14(%rbp), %al
movb %al, 0x910(%rsi)
movzbl -0x1c(%rbp), %edx
leaq -0x48(%rbp), %rdi
movq %rdi, -0x630(%rbp)
movl $0x1, %ecx
callq 0x27e50
movq -0x630(%rbp), %rdi
callq 0x4150
movq -0x620(%rbp), %rsi
movq %rax, -0x628(%rbp)
movzbl -0x1c(%rbp), %edx
leaq -0x68(%rbp), %rdi
xorl %ecx, %ecx
callq 0x27e50
jmp 0x2893f
leaq -0x68(%rbp), %rdi
callq 0x4150
movq -0x628(%rbp), %rsi
movq %rax, %rdx
leaq 0x17bb3(%rip), %rdi     # 0x4050c
xorl %eax, %eax
callq 0x4050
jmp 0x28962
leaq -0x68(%rbp), %rdi
callq 0x41f0
leaq -0x48(%rbp), %rdi
callq 0x41f0
cmpl $0x0, -0x1c(%rbp)
jne 0x289bd
xorl %edi, %edi
leaq 0x17b93(%rip), %rsi     # 0x40516
movb $0x0, %al
callq 0x47d0
jmp 0x289bd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x289af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x41f0
leaq -0x48(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
movq -0x620(%rbp), %rcx
movl -0x20(%rbp), %eax
movl 0x918(%rcx), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
je 0x28a11
movq -0x620(%rbp), %rax
movl -0x20(%rbp), %edx
movl -0x20(%rbp), %edi
leaq 0x74d1(%rip), %rcx      # 0x2feb9
leaq 0x75ce(%rip), %rsi      # 0x2ffbd
cmpl $0x1, %edi
cmovaq %rsi, %rcx
movl 0x918(%rax), %r8d
subl $0x1, %r8d
xorl %edi, %edi
leaq 0x17b37(%rip), %rsi     # 0x40541
movb $0x0, %al
callq 0x47d0
jmp 0x28a91
cmpl $0x0, -0x1c(%rbp)
je 0x28a29
xorl %edi, %edi
leaq 0x17b55(%rip), %rsi     # 0x40577
movb $0x0, %al
callq 0x47d0
cmpl $0x0, -0x20(%rbp)
je 0x28a3f
xorl %edi, %edi
leaq 0x17b6d(%rip), %rsi     # 0x405a5
movb $0x0, %al
callq 0x47d0
movq -0x620(%rbp), %rcx
movl -0x14(%rbp), %eax
movzbl 0x910(%rcx), %ecx
cmpl %ecx, %eax
je 0x28a8f
movq -0x620(%rbp), %rax
movl -0x14(%rbp), %edx
shrl $0x4, %edx
movl -0x14(%rbp), %ecx
andl $0xf, %ecx
movzbl 0x910(%rax), %r8d
sarl $0x4, %r8d
movzbl 0x910(%rax), %r9d
andl $0xf, %r9d
xorl %edi, %edi
leaq 0x17b4e(%rip), %rsi     # 0x405d6
movb $0x0, %al
callq 0x47d0
jmp 0x28a91
cmpl $0x79, -0x18(%rbp)
jbe 0x28ab1
movl -0x18(%rbp), %edx
xorl %edi, %edi
leaq 0x17b57(%rip), %rsi     # 0x405fa
movb $0x0, %al
callq 0x47d0
movl $0x79, -0x18(%rbp)
movl $0x5, -0x78(%rbp)
movb $0x1, -0x79(%rbp)
cmpl $0x0, -0x18(%rbp)
jbe 0x2a76f
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
movzbl (%rax,%rcx), %eax
movl %eax, -0x80(%rbp)
movl $0x0, -0x84(%rbp)
movl -0x80(%rbp), %eax
movq %rax, -0x638(%rbp)
subq $0x81, %rax
ja 0x298ff
movq -0x638(%rbp), %rax
leaq 0x1534a(%rip), %rcx     # 0x3de4c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movzbl -0x80(%rbp), %esi
leaq -0xe8(%rbp), %rdi
movq %rdi, -0x640(%rbp)
callq 0x7530
movq -0x640(%rbp), %rdx
leaq 0x17af4(%rip), %rsi     # 0x40624
leaq -0xc8(%rbp), %rdi
callq 0x14870
jmp 0x28b3e
leaq 0x13dd0(%rip), %rdx     # 0x3c915
leaq -0xa8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0xb4c0
jmp 0x28b5a
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0xa8(%rbp), %rsi
callq 0x43d0
leaq -0xa8(%rbp), %rdi
callq 0x41f0
leaq -0xc8(%rbp), %rdi
callq 0x41f0
leaq -0xe8(%rbp), %rdi
callq 0x41f0
jmp 0x299c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x28bc0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x41f0
leaq -0xe8(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
movzbl -0x80(%rbp), %esi
leaq -0x148(%rbp), %rdi
movq %rdi, -0x648(%rbp)
callq 0x7530
movq -0x648(%rbp), %rdx
leaq 0x17a52(%rip), %rsi     # 0x40648
leaq -0x128(%rbp), %rdi
callq 0x14870
jmp 0x28c04
leaq 0x13d0a(%rip), %rdx     # 0x3c915
leaq -0x108(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0xb4c0
jmp 0x28c20
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0x108(%rbp), %rsi
callq 0x43d0
leaq -0x108(%rbp), %rdi
callq 0x41f0
leaq -0x128(%rbp), %rdi
callq 0x41f0
leaq -0x148(%rbp), %rdi
callq 0x41f0
jmp 0x299c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x28c86
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x41f0
leaq -0x148(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x179bf(%rip), %rsi     # 0x40668
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x179c4(%rip), %rsi     # 0x40689
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x179e0(%rip), %rsi     # 0x406c1
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x179fc(%rip), %rsi     # 0x406f9
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x17a15(%rip), %rsi     # 0x4072e
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x17a2c(%rip), %rsi     # 0x40761
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x17a4c(%rip), %rsi     # 0x4079d
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x17a6b(%rip), %rsi     # 0x407d8
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x17a6d(%rip), %rsi     # 0x407f6
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x17a72(%rip), %rsi     # 0x40817
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x17a71(%rip), %rsi     # 0x40832
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x17a74(%rip), %rsi     # 0x40851
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x11e41(%rip), %rsi     # 0x3ac3a
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x17a62(%rip), %rsi     # 0x40877
callq 0x4420
jmp 0x299c2
movzbl -0x80(%rbp), %esi
leaq -0x1a8(%rbp), %rdi
movq %rdi, -0x650(%rbp)
callq 0x7530
movq -0x650(%rbp), %rdx
leaq 0x17a50(%rip), %rsi     # 0x40894
leaq -0x188(%rbp), %rdi
callq 0x14870
jmp 0x28e52
leaq 0x13abc(%rip), %rdx     # 0x3c915
leaq -0x168(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0xb4c0
jmp 0x28e6e
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0x168(%rbp), %rsi
callq 0x43d0
leaq -0x168(%rbp), %rdi
callq 0x41f0
leaq -0x188(%rbp), %rdi
callq 0x41f0
leaq -0x1a8(%rbp), %rdi
callq 0x41f0
jmp 0x299c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x28ed4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x41f0
leaq -0x1a8(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x179c3(%rip), %rsi     # 0x408ba
callq 0x4420
jmp 0x299c2
movzbl -0x80(%rbp), %esi
leaq -0x208(%rbp), %rdi
movq %rdi, -0x658(%rbp)
callq 0x7530
movq -0x658(%rbp), %rdx
leaq 0x179c9(%rip), %rsi     # 0x408ef
leaq -0x1e8(%rbp), %rdi
callq 0x14870
jmp 0x28f34
leaq 0x139da(%rip), %rdx     # 0x3c915
leaq -0x1c8(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0xb4c0
jmp 0x28f50
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x43d0
leaq -0x1c8(%rbp), %rdi
callq 0x41f0
leaq -0x1e8(%rbp), %rdi
callq 0x41f0
leaq -0x208(%rbp), %rdi
callq 0x41f0
jmp 0x299c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x28fb6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x41f0
leaq -0x208(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x1793a(%rip), %rsi     # 0x40913
callq 0x4420
jmp 0x299c2
movzbl -0x80(%rbp), %esi
leaq -0x268(%rbp), %rdi
movq %rdi, -0x660(%rbp)
callq 0x7530
movq -0x660(%rbp), %rdx
leaq 0x1761c(%rip), %rsi     # 0x40624
leaq -0x248(%rbp), %rdi
callq 0x14870
jmp 0x29016
leaq 0x138f8(%rip), %rdx     # 0x3c915
leaq -0x228(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0xb4c0
jmp 0x29032
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0x228(%rbp), %rsi
callq 0x43d0
leaq -0x228(%rbp), %rdi
callq 0x41f0
leaq -0x248(%rbp), %rdi
callq 0x41f0
leaq -0x268(%rbp), %rdi
callq 0x41f0
jmp 0x299c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x29098
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x248(%rbp), %rdi
callq 0x41f0
leaq -0x268(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
movzbl -0x80(%rbp), %esi
leaq -0x2c8(%rbp), %rdi
movq %rdi, -0x668(%rbp)
callq 0x7530
movq -0x668(%rbp), %rdx
leaq 0x1757a(%rip), %rsi     # 0x40648
leaq -0x2a8(%rbp), %rdi
callq 0x14870
jmp 0x290dc
leaq 0x13832(%rip), %rdx     # 0x3c915
leaq -0x288(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
callq 0xb4c0
jmp 0x290f8
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0x288(%rbp), %rsi
callq 0x43d0
leaq -0x288(%rbp), %rdi
callq 0x41f0
leaq -0x2a8(%rbp), %rdi
callq 0x41f0
leaq -0x2c8(%rbp), %rdi
callq 0x41f0
jmp 0x299c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2915e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x2a8(%rbp), %rdi
callq 0x41f0
leaq -0x2c8(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x177ca(%rip), %rsi     # 0x4094b
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x177e6(%rip), %rsi     # 0x40983
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x17809(%rip), %rsi     # 0x409c2
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x1782a(%rip), %rsi     # 0x409ff
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x1783b(%rip), %rsi     # 0x40a2c
callq 0x4420
jmp 0x299c2
movzbl -0x80(%rbp), %esi
leaq -0x328(%rbp), %rdi
movq %rdi, -0x670(%rbp)
callq 0x7530
movq -0x670(%rbp), %rdx
leaq 0x17674(%rip), %rsi     # 0x40894
leaq -0x308(%rbp), %rdi
callq 0x14870
jmp 0x2922e
leaq 0x136e0(%rip), %rdx     # 0x3c915
leaq -0x2e8(%rbp), %rdi
leaq -0x308(%rbp), %rsi
callq 0xb4c0
jmp 0x2924a
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0x2e8(%rbp), %rsi
callq 0x43d0
leaq -0x2e8(%rbp), %rdi
callq 0x41f0
leaq -0x308(%rbp), %rdi
callq 0x41f0
leaq -0x328(%rbp), %rdi
callq 0x41f0
jmp 0x299c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x292b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x308(%rbp), %rdi
callq 0x41f0
leaq -0x328(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
movzbl -0x80(%rbp), %esi
leaq -0x388(%rbp), %rdi
movq %rdi, -0x678(%rbp)
callq 0x7530
movq -0x678(%rbp), %rdx
leaq 0x17609(%rip), %rsi     # 0x408ef
leaq -0x368(%rbp), %rdi
callq 0x14870
jmp 0x292f4
leaq 0x1361a(%rip), %rdx     # 0x3c915
leaq -0x348(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0xb4c0
jmp 0x29310
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0x348(%rbp), %rsi
callq 0x43d0
leaq -0x348(%rbp), %rdi
callq 0x41f0
leaq -0x368(%rbp), %rdi
callq 0x41f0
leaq -0x388(%rbp), %rdi
callq 0x41f0
jmp 0x299c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x29376
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x41f0
leaq -0x388(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x176b9(%rip), %rsi     # 0x40a52
callq 0x4420
jmp 0x299c2
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x176b4(%rip), %rsi     # 0x40a69
callq 0x4420
jmp 0x299c2
cmpl $0x7e, -0x80(%rbp)
jne 0x293cb
cmpl $0x20, -0x14(%rbp)
jae 0x293df
cmpl $0x7f, -0x80(%rbp)
jne 0x29771
cmpl $0x20, -0x14(%rbp)
jae 0x29771
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x3, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
shll $0x10, %eax
movq -0x10(%rbp), %rcx
movl -0x78(%rbp), %edx
addl $0x4, %edx
movl %edx, %edx
movzbl (%rcx,%rdx), %ecx
shll $0x8, %ecx
addl %ecx, %eax
movq -0x10(%rbp), %rcx
movl -0x78(%rbp), %edx
addl $0x5, %edx
movl %edx, %edx
movzbl (%rcx,%rdx), %ecx
addl %ecx, %eax
movl %eax, -0x84(%rbp)
movl -0x84(%rbp), %edi
xorl %esi, %esi
callq 0x75c0
movq %rax, -0x390(%rbp)
movb $0x0, -0x391(%rbp)
cmpq $0x0, -0x390(%rbp)
jne 0x2946e
movl -0x84(%rbp), %edi
movl $0x1, %esi
callq 0x75c0
movq %rax, -0x390(%rbp)
cmpq $0x0, -0x390(%rbp)
je 0x2946c
movb $0x1, -0x391(%rbp)
jmp 0x2946e
cmpq $0x0, -0x390(%rbp)
je 0x29580
leaq -0x3f9(%rbp), %rdi
movq %rdi, -0x680(%rbp)
callq 0x4560
movq -0x680(%rbp), %rdx
leaq 0x116df(%rip), %rsi     # 0x3ab7c
leaq -0x3f8(%rbp), %rdi
callq 0xb510
jmp 0x294ab
movq -0x390(%rbp), %rdx
leaq -0x3d8(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0xb4c0
jmp 0x294c7
leaq 0x13447(%rip), %rdx     # 0x3c915
leaq -0x3b8(%rbp), %rdi
leaq -0x3d8(%rbp), %rsi
callq 0xb4c0
jmp 0x294e3
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0x3b8(%rbp), %rsi
callq 0x43d0
leaq -0x3b8(%rbp), %rdi
callq 0x41f0
leaq -0x3d8(%rbp), %rdi
callq 0x41f0
leaq -0x3f8(%rbp), %rdi
callq 0x41f0
leaq -0x3f9(%rbp), %rdi
callq 0x4370
jmp 0x29603
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2956f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x29563
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x3d8(%rbp), %rdi
callq 0x41f0
leaq -0x3f8(%rbp), %rdi
callq 0x41f0
leaq -0x3f9(%rbp), %rdi
callq 0x4370
jmp 0x2a818
movl -0x84(%rbp), %esi
leaq -0x440(%rbp), %rdi
movq %rdi, -0x688(%rbp)
callq 0x7770
movq -0x688(%rbp), %rdx
leaq 0x17500(%rip), %rsi     # 0x40aa7
leaq -0x420(%rbp), %rdi
callq 0x14870
jmp 0x295b5
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0x420(%rbp), %rsi
callq 0x43d0
leaq -0x420(%rbp), %rdi
callq 0x41f0
leaq -0x440(%rbp), %rdi
callq 0x41f0
jmp 0x29603
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x440(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
testb $0x1, -0x391(%rbp)
je 0x2976c
leaq -0x4a1(%rbp), %rdi
movq %rdi, -0x690(%rbp)
callq 0x4560
movq -0x690(%rbp), %rdx
leaq 0x17492(%rip), %rsi     # 0x40ac3
leaq -0x4a0(%rbp), %rdi
callq 0xb510
jmp 0x2963f
movl -0x84(%rbp), %esi
leaq -0x4c8(%rbp), %rdi
callq 0x7770
jmp 0x29653
leaq -0x480(%rbp), %rdi
leaq -0x4a0(%rbp), %rsi
leaq -0x4c8(%rbp), %rdx
callq 0xb7b0
jmp 0x2966f
leaq 0x17452(%rip), %rdx     # 0x40ac8
leaq -0x460(%rbp), %rdi
leaq -0x480(%rbp), %rsi
callq 0xb4c0
jmp 0x2968b
leaq -0x460(%rbp), %rdi
callq 0x4150
movq %rax, %rsi
xorl %edi, %edi
movb %dil, %al
callq 0x47d0
jmp 0x296a6
leaq -0x460(%rbp), %rdi
callq 0x41f0
leaq -0x480(%rbp), %rdi
callq 0x41f0
leaq -0x4c8(%rbp), %rdi
callq 0x41f0
leaq -0x4a0(%rbp), %rdi
callq 0x41f0
leaq -0x4a1(%rbp), %rdi
callq 0x4370
jmp 0x2976c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2975b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2974f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x29743
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x29737
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x460(%rbp), %rdi
callq 0x41f0
leaq -0x480(%rbp), %rdi
callq 0x41f0
leaq -0x4c8(%rbp), %rdi
callq 0x41f0
leaq -0x4a0(%rbp), %rdi
callq 0x41f0
leaq -0x4a1(%rbp), %rdi
callq 0x4370
jmp 0x2a818
jmp 0x29834
movzbl -0x80(%rbp), %esi
leaq -0x528(%rbp), %rdi
movq %rdi, -0x698(%rbp)
callq 0x7530
movq -0x698(%rbp), %rdx
leaq 0x17350(%rip), %rsi     # 0x40ae6
leaq -0x508(%rbp), %rdi
callq 0x14870
jmp 0x297a4
leaq 0x1316a(%rip), %rdx     # 0x3c915
leaq -0x4e8(%rbp), %rdi
leaq -0x508(%rbp), %rsi
callq 0xb4c0
jmp 0x297c0
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0x4e8(%rbp), %rsi
callq 0x43d0
leaq -0x4e8(%rbp), %rdi
callq 0x41f0
leaq -0x508(%rbp), %rdi
callq 0x41f0
leaq -0x528(%rbp), %rdi
callq 0x41f0
jmp 0x29834
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x29823
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x508(%rbp), %rdi
callq 0x41f0
leaq -0x528(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
jmp 0x299c2
movzbl -0x80(%rbp), %esi
leaq -0x588(%rbp), %rdi
movq %rdi, -0x6a0(%rbp)
callq 0x7530
movq -0x6a0(%rbp), %rdx
leaq 0x172a7(%rip), %rsi     # 0x40b05
leaq -0x568(%rbp), %rdi
callq 0x14870
jmp 0x2986c
leaq 0x130a2(%rip), %rdx     # 0x3c915
leaq -0x548(%rbp), %rdi
leaq -0x568(%rbp), %rsi
callq 0xb4c0
jmp 0x29888
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0x548(%rbp), %rsi
callq 0x43d0
leaq -0x548(%rbp), %rdi
callq 0x41f0
leaq -0x568(%rbp), %rdi
callq 0x41f0
leaq -0x588(%rbp), %rdi
callq 0x41f0
jmp 0x299c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x298ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x568(%rbp), %rdi
callq 0x41f0
leaq -0x588(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
movzbl -0x80(%rbp), %esi
leaq -0x5e8(%rbp), %rdi
movq %rdi, -0x6a8(%rbp)
callq 0x7530
movq -0x6a8(%rbp), %rdx
leaq 0x171c2(%rip), %rsi     # 0x40ae6
leaq -0x5c8(%rbp), %rdi
callq 0x14870
jmp 0x29932
leaq 0x12fdc(%rip), %rdx     # 0x3c915
leaq -0x5a8(%rbp), %rdi
leaq -0x5c8(%rbp), %rsi
callq 0xb4c0
jmp 0x2994e
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq -0x5a8(%rbp), %rsi
callq 0x43d0
leaq -0x5a8(%rbp), %rdi
callq 0x41f0
leaq -0x5c8(%rbp), %rdi
callq 0x41f0
leaq -0x5e8(%rbp), %rdi
callq 0x41f0
jmp 0x299c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x299b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x5c8(%rbp), %rdi
callq 0x41f0
leaq -0x5e8(%rbp), %rdi
callq 0x41f0
jmp 0x2a818
cmpl $0x20, -0x14(%rbp)
jb 0x299f0
cmpl $0x20, -0x80(%rbp)
jb 0x299d4
cmpl $0x7f, -0x80(%rbp)
jne 0x299f0
movl -0x14(%rbp), %edx
shrl $0x4, %edx
movl -0x14(%rbp), %ecx
andl $0xf, %ecx
xorl %edi, %edi
leaq 0x1713b(%rip), %rsi     # 0x40b24
movb $0x0, %al
callq 0x47d0
cmpl $0x20, -0x14(%rbp)
jae 0x29a1e
cmpl $0x20, -0x80(%rbp)
jb 0x29a1e
cmpl $0x7e, -0x80(%rbp)
ja 0x29a1e
movl -0x14(%rbp), %edx
shrl $0x4, %edx
movl -0x14(%rbp), %ecx
andl $0xf, %ecx
xorl %edi, %edi
leaq 0x1713e(%rip), %rsi     # 0x40b55
movb $0x0, %al
callq 0x47d0
cmpl $0x3, -0x18(%rbp)
jae 0x29a54
cmpl $0x0, -0x80(%rbp)
jne 0x29a3c
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
cmpb $0x0, (%rax,%rcx)
je 0x29a4f
movl -0x18(%rbp), %edx
xorl %edi, %edi
leaq 0x1713e(%rip), %rsi     # 0x40b86
movb $0x0, %al
callq 0x47d0
jmp 0x2a76f
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
andl $0x7, %eax
movl %eax, -0x5ec(%rbp)
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x2, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
movl %eax, -0x5f0(%rbp)
movl -0x18(%rbp), %eax
movl -0x5f0(%rbp), %ecx
addl $0x3, %ecx
cmpl %ecx, %eax
jae 0x29ab4
movl -0x5f0(%rbp), %edx
addl $0x3, %edx
movl -0x18(%rbp), %ecx
xorl %edi, %edi
leaq 0x17139(%rip), %rsi     # 0x40be1
movb $0x0, %al
callq 0x47d0
jmp 0x2a76f
cmpl $0x0, -0x80(%rbp)
jne 0x29af0
cmpl $0x0, -0x5f0(%rbp)
jne 0x29af0
movq -0x10(%rbp), %rdi
movl -0x78(%rbp), %eax
addq %rax, %rdi
movl -0x18(%rbp), %esi
xorl %edx, %edx
callq 0x7810
testb $0x1, %al
jne 0x29aeb
xorl %edi, %edi
leaq 0x17157(%rip), %rsi     # 0x40c3b
movb $0x0, %al
callq 0x47d0
jmp 0x2a76f
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
callq 0x4150
movq %rax, %rsi
leaq 0xa5e7(%rip), %rdi      # 0x340f1
xorl %eax, %eax
callq 0x4050
movl -0x80(%rbp), %eax
movq %rax, -0x6b0(%rbp)
subq $0x81, %rax
ja 0x2a6d6
movq -0x6b0(%rbp), %rax
leaq 0x1451f(%rip), %rcx     # 0x3e054
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x21b90
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x21dd0
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x22100
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movb (%rax,%rcx), %cl
movl -0x5ec(%rbp), %eax
andl $0x1, %eax
xorl %edx, %edx
movzbl %cl, %esi
movzbl %al, %ecx
callq 0x21b00
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x6b4(%rbp)
movl -0x5f0(%rbp), %eax
movl $0x14, %ecx
xorl %edx, %edx
divl %ecx
movl %eax, %ecx
movl -0x6b4(%rbp), %eax
cmpl %ecx, %eax
jae 0x29c1e
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addl $0x3, %eax
imull $0x14, -0x24(%rbp), %ecx
addl %ecx, %eax
movl %eax, %eax
addq %rax, %rsi
movl -0x5ec(%rbp), %ecx
xorl %r8d, %r8d
movl %r8d, %edx
callq 0x22420
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x29bc2
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
movzbl (%rax,%rdx), %esi
movl %ecx, %edx
callq 0x21b00
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x6b8(%rbp)
movl -0x5f0(%rbp), %eax
movl $0xb, %ecx
xorl %edx, %edx
divl %ecx
movl %eax, %ecx
movl -0x6b8(%rbp), %eax
cmpl %ecx, %eax
jae 0x29c9c
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addl $0x3, %eax
imull $0xb, -0x24(%rbp), %ecx
addl %ecx, %eax
movl %eax, %eax
addq %rax, %rsi
callq 0x22dc0
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x29c4c
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movb (%rax,%rcx), %cl
movl -0x5ec(%rbp), %eax
andl $0x1, %eax
xorl %edx, %edx
movzbl %cl, %esi
movzbl %al, %ecx
callq 0x21b00
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x6bc(%rbp)
movl -0x5f0(%rbp), %eax
movl $0x3, %ecx
xorl %edx, %edx
divl %ecx
movl %eax, %ecx
movl -0x6bc(%rbp), %eax
cmpl %ecx, %eax
jae 0x29d24
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addl $0x3, %eax
imull $0x3, -0x24(%rbp), %ecx
addl %ecx, %eax
movl %eax, %eax
addq %rax, %rsi
callq 0x23330
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x29cd4
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %esi
movl $0xc0, %edx
movl $0x1, %ecx
movzbl (%rax,%rsi), %esi
callq 0x21b00
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
cmpl -0x5f0(%rbp), %eax
jae 0x29daf
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
andl $0xc0, %eax
sarl $0x6, %eax
movb %al, %dl
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x3, %ecx
addl -0x24(%rbp), %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
xorl %ecx, %ecx
movzbl %dl, %esi
movzwl %ax, %edx
callq 0x237b0
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x29d58
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
movzbl (%rax,%rdx), %esi
movl %ecx, %edx
callq 0x21b00
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x6c0(%rbp)
cmpl $0xa, -0x5f0(%rbp)
jae 0x29dfd
movl -0x5f0(%rbp), %eax
movl %eax, -0x6c4(%rbp)
jmp 0x29e0a
movl $0xa, %eax
movl %eax, -0x6c4(%rbp)
jmp 0x29e0a
movl -0x6c0(%rbp), %eax
movl -0x6c4(%rbp), %ecx
shll $0x3, %ecx
cmpl %ecx, %eax
jae 0x29eb6
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x3, %ecx
movl -0x24(%rbp), %edx
shrl $0x3, %edx
addl %edx, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
movl -0x24(%rbp), %ecx
andl $0x7, %ecx
movl $0x1, %edx
shll %cl, %edx
movl %edx, %ecx
andl %ecx, %eax
cmpl $0x0, %eax
je 0x29ea6
leaq -0x600(%rbp), %rdi
movl -0x24(%rbp), %edx
addl $0x1, %edx
leaq 0x5c56(%rip), %rsi      # 0x2fab9
movb $0x0, %al
callq 0x40a0
movl -0x24(%rbp), %eax
addl $0x1, %eax
movzbl %al, %edi
callq 0xe6b0
movq -0x620(%rbp), %rdi
movq %rax, %rdx
leaq -0x600(%rbp), %rcx
leaq 0xa94f(%rip), %rsi      # 0x347df
leaq 0x6022(%rip), %r8       # 0x2feb9
xorl %r9d, %r9d
movl $0x1, (%rsp)
callq 0x50c0
jmp 0x29ea8
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x29ddd
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
movzbl (%rax,%rdx), %esi
movl %ecx, %edx
callq 0x21b00
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x6c8(%rbp)
cmpl $0x8, -0x5f0(%rbp)
jae 0x29f04
movl -0x5f0(%rbp), %eax
movl %eax, -0x6cc(%rbp)
jmp 0x29f11
movl $0x8, %eax
movl %eax, -0x6cc(%rbp)
jmp 0x29f11
movl -0x6c8(%rbp), %eax
movl -0x6cc(%rbp), %ecx
shll $0x3, %ecx
cmpl %ecx, %eax
jae 0x29fbd
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x3, %ecx
movl -0x24(%rbp), %edx
shrl $0x3, %edx
addl %edx, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
movl -0x24(%rbp), %ecx
andl $0x7, %ecx
movl $0x1, %edx
shll %cl, %edx
movl %edx, %ecx
andl %ecx, %eax
cmpl $0x0, %eax
je 0x29fad
leaq -0x610(%rbp), %rdi
movl -0x24(%rbp), %edx
addl $0x1, %edx
leaq 0x5b74(%rip), %rsi      # 0x2fade
movb $0x0, %al
callq 0x40a0
movl -0x24(%rbp), %eax
addl $0x1, %eax
movzbl %al, %edi
callq 0x154d0
movq -0x620(%rbp), %rdi
movq %rax, %rdx
leaq -0x610(%rbp), %rcx
leaq 0xa848(%rip), %rsi      # 0x347df
leaq 0x5f1b(%rip), %r8       # 0x2feb9
xorl %r9d, %r9d
movl $0x1, (%rsp)
callq 0x50c0
jmp 0x29faf
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x29ee4
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x23a80
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x23c40
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x23cb0
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x24550
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x24660
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x24910
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x25060
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
movzbl (%rax,%rdx), %esi
movl %ecx, %edx
callq 0x21b00
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x6d0(%rbp)
movl -0x5f0(%rbp), %eax
movl $0x7, %ecx
xorl %edx, %edx
divl %ecx
movl %eax, %ecx
movl -0x6d0(%rbp), %eax
cmpl %ecx, %eax
jae 0x2a0f8
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addl $0x3, %eax
imull $0x7, -0x24(%rbp), %ecx
addl %ecx, %eax
movl %eax, %eax
addq %rax, %rsi
callq 0x255b0
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x2a0a8
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
xorl %edx, %edx
callq 0x25a80
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
movzbl (%rax,%rdx), %esi
movl %ecx, %edx
callq 0x21b00
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
cmpl -0x5f0(%rbp), %eax
jae 0x2a19d
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addl $0x3, %eax
addl -0x24(%rbp), %eax
movl %eax, %eax
addq %rax, %rsi
callq 0x25eb0
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x3, %ecx
addl -0x24(%rbp), %ecx
addl $0x2, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %edx
andl $0x40, %edx
movl $0xe, %eax
movl $0x11, %ecx
cmpl $0x0, %edx
cmovnel %ecx, %eax
addl -0x24(%rbp), %eax
movl %eax, -0x24(%rbp)
jmp 0x2a143
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x21b90
jmp 0x2a701
cmpl $0x1, -0x5ec(%rbp)
jb 0x2a1f0
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %esi
movl $0x80, %edx
movl $0x1, %ecx
movzbl (%rax,%rsi), %esi
callq 0x21b00
jmp 0x2a215
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %esi
movl $0x80, %edx
xorl %ecx, %ecx
movzbl (%rax,%rsi), %esi
callq 0x21b00
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
movl -0x5ec(%rbp), %edx
callq 0x264d0
jmp 0x2a701
movl $0x14, -0x614(%rbp)
cmpl $0x2, -0x5ec(%rbp)
jb 0x2a273
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %esi
movl $0x8, %edx
movl $0x2, %ecx
movzbl (%rax,%rsi), %esi
callq 0x21b00
jmp 0x2a2ca
cmpl $0x1, -0x5ec(%rbp)
jne 0x2a2a6
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %esi
movl $0x8, %edx
movl $0x1, %ecx
movzbl (%rax,%rsi), %esi
callq 0x21b00
jmp 0x2a2c8
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
movzbl (%rax,%rdx), %esi
movl %ecx, %edx
callq 0x21b00
jmp 0x2a2ca
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
andl $0x70, %eax
sarl $0x4, %eax
addl -0x614(%rbp), %eax
movl %eax, -0x614(%rbp)
cmpl $0x1, -0x5ec(%rbp)
jb 0x2a31b
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x2a31b
leaq 0x16953(%rip), %rdi     # 0x40c67
movb $0x0, %al
callq 0x4050
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x6d4(%rbp)
movl -0x5f0(%rbp), %eax
xorl %edx, %edx
divl -0x614(%rbp)
movl %eax, %ecx
movl -0x6d4(%rbp), %eax
cmpl %ecx, %eax
jae 0x2a385
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addl $0x3, %eax
movl -0x24(%rbp), %ecx
imull -0x614(%rbp), %ecx
addl %ecx, %eax
movl %eax, %eax
addq %rax, %rsi
movl -0x5ec(%rbp), %ecx
movl $0x1, %edx
xorl %r8d, %r8d
callq 0x22420
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x2a322
jmp 0x2a701
cmpl $0x0, -0x5ec(%rbp)
je 0x2a3bd
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %esi
movl $0xe8, %edx
movl $0x1, %ecx
movzbl (%rax,%rsi), %esi
callq 0x21b00
jmp 0x2a3e2
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %esi
movl $0xc8, %edx
xorl %ecx, %ecx
movzbl (%rax,%rsi), %esi
callq 0x21b00
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x2a485
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movl -0x5f0(%rbp), %ecx
shrl %ecx
cmpl %ecx, %eax
jae 0x2a483
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
andl $0xc0, %eax
sarl $0x6, %eax
movb %al, %dl
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x3, %ecx
movl -0x24(%rbp), %esi
shll %esi
addl %esi, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
movq -0x10(%rbp), %rcx
movl -0x78(%rbp), %esi
addl $0x4, %esi
movl -0x24(%rbp), %r8d
shll %r8d
addl %r8d, %esi
movl %esi, %esi
movzbl (%rcx,%rsi), %ecx
shll $0x8, %ecx
orl %ecx, %eax
xorl %ecx, %ecx
movzbl %dl, %esi
movzwl %ax, %edx
callq 0x237b0
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x2a405
jmp 0x2a4e5
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
cmpl -0x5f0(%rbp), %eax
jae 0x2a4e3
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
andl $0xc0, %eax
sarl $0x6, %eax
movb %al, %dl
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x3, %ecx
addl -0x24(%rbp), %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
xorl %ecx, %ecx
movzbl %dl, %esi
movzwl %ax, %edx
callq 0x237b0
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x2a48c
jmp 0x2a4e5
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
movzbl (%rax,%rdx), %esi
movl %ecx, %edx
callq 0x21b00
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x6d8(%rbp)
movl -0x5f0(%rbp), %eax
movl $0x6, %ecx
xorl %edx, %edx
divl %ecx
movl %eax, %ecx
movl -0x6d8(%rbp), %eax
cmpl %ecx, %eax
jae 0x2a563
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addl $0x3, %eax
imull $0x6, -0x24(%rbp), %ecx
addl %ecx, %eax
movl %eax, %eax
addq %rax, %rsi
callq 0x26d30
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x2a513
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x270b0
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x27210
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x25060
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
movl $0x1, %edx
callq 0x25a80
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x27540
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movzbl (%rax,%rcx), %eax
andl $0x70, %eax
sarl $0x4, %eax
addl $0x6, %eax
movl %eax, -0x618(%rbp)
movq -0x10(%rbp), %rax
movl -0x78(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
movl %ecx, %esi
movl $0x10, %edx
xorl %ecx, %ecx
movzbl (%rax,%rsi), %esi
callq 0x21b00
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x6dc(%rbp)
movl -0x5f0(%rbp), %eax
xorl %edx, %edx
divl -0x618(%rbp)
movl %eax, %ecx
movl -0x6dc(%rbp), %eax
cmpl %ecx, %eax
jae 0x2a696
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addl $0x3, %eax
movl -0x24(%rbp), %ecx
imull -0x618(%rbp), %ecx
addl %ecx, %eax
movl %eax, %eax
addq %rax, %rsi
xorl %edx, %edx
callq 0x275f0
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x2a63f
jmp 0x2a701
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x27ce0
jmp 0x2a701
cmpl $0x3a0292, -0x84(%rbp)  # imm = 0x3A0292
jne 0x2a6d4
movq -0x620(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
callq 0x27b10
jmp 0x2a701
jmp 0x2a6d6
movq -0x10(%rbp), %rsi
movl -0x78(%rbp), %eax
addq %rax, %rsi
addq $0x3, %rsi
movl -0x5f0(%rbp), %edx
leaq 0xa0ee(%rip), %rdi      # 0x347df
movl $0x1, %ecx
movl $0x10, %r8d
callq 0x7860
cmpl $0x0, -0x80(%rbp)
je 0x2a70d
cmpl $0x20, -0x80(%rbp)
jne 0x2a746
movq -0x620(%rbp), %rax
testb $0x1, 0x91c(%rax)
je 0x2a723
testb $0x1, -0x79(%rbp)
jne 0x2a746
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
callq 0x4150
movq %rax, %rdx
xorl %edi, %edi
leaq 0x16554(%rip), %rsi     # 0x40c93
movb $0x0, %al
callq 0x47d0
movl -0x5f0(%rbp), %ecx
addl $0x3, %ecx
movl -0x18(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x18(%rbp)
movl -0x5f0(%rbp), %eax
addl $0x3, %eax
addl -0x78(%rbp), %eax
movl %eax, -0x78(%rbp)
movb $0x0, -0x79(%rbp)
jmp 0x28abc
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
callq 0x4400
movq -0x10(%rbp), %rsi
addq $0x1, %rsi
movq -0x10(%rbp), %rax
movzbl 0x2(%rax), %eax
addl $0x5, %eax
movslq %eax, %rdx
leaq 0xa045(%rip), %rdi      # 0x347e1
callq 0x4b50
movq -0x10(%rbp), %rdi
addq $0x1, %rdi
movq -0x10(%rbp), %rax
movzbl 0x2(%rax), %eax
cltq
addq %rax, %rdi
addq $0x5, %rdi
movq -0x10(%rbp), %rax
movzbl 0x2(%rax), %eax
addl $0x1, %eax
addl $0x5, %eax
movl $0x7f, %esi
subl %eax, %esi
xorl %edx, %edx
callq 0x7810
testb $0x1, %al
jne 0x2a801
movq -0x620(%rbp), %rdi
addq $0x30, %rdi
leaq 0x107c3(%rip), %rsi     # 0x3afaf
callq 0x4420
xorl %edi, %edi
leaq 0x164cf(%rip), %rsi     # 0x40cc9
movb $0x0, %al
callq 0x47d0
movq -0x620(%rbp), %rax
movb $0x0, 0x91c(%rax)
addq $0x6f0, %rsp            # imm = 0x6F0
popq %rbp
retq
movq -0x70(%rbp), %rdi
callq 0x4550
nopw %cs:(%rax,%rax)