// File: rossy[P]crossc/SPIRV-Cross/spirv_msl.cpp
// Function: spirv_cross::CompilerMSL::member_attribute_qualifier[abi:cxx11](spirv_cross::SPIRType const&, unsigned int)
string CompilerMSL::member_attribute_qualifier(const SPIRType &type, uint32_t index)
{
	auto &execution = get_entry_point();

	uint32_t mbr_type_id = type.member_types[index];
	auto &mbr_type = get<SPIRType>(mbr_type_id);

	BuiltIn builtin;
	bool is_builtin = is_member_builtin(type, index, &builtin);

	// Vertex function inputs
	if (execution.model == ExecutionModelVertex && type.storage == StorageClassInput)
	{
		if (is_builtin)
		{
			switch (builtin)
			{
			case BuiltInVertexId:
			case BuiltInVertexIndex:
			case BuiltInBaseVertex:
			case BuiltInInstanceId:
			case BuiltInInstanceIndex:
			case BuiltInBaseInstance:
				return string(" [[") + builtin_qualifier(builtin) + "]]";

			case BuiltInDrawIndex:
				SPIRV_CROSS_THROW("DrawIndex is not supported in MSL.");

			default:
				return "";
			}
		}
		uint32_t locn = get_ordered_member_location(type.self, index);
		if (locn != k_unknown_location)
			return string(" [[attribute(") + convert_to_string(locn) + ")]]";
	}

	// Vertex function outputs
	if (execution.model == ExecutionModelVertex && type.storage == StorageClassOutput)
	{
		if (is_builtin)
		{
			switch (builtin)
			{
			case BuiltInPointSize:
				// Only mark the PointSize builtin if really rendering points.
				// Some shaders may include a PointSize builtin even when used to render
				// non-point topologies, and Metal will reject this builtin when compiling
				// the shader into a render pipeline that uses a non-point topology.
				return msl_options.enable_point_size_builtin ? (string(" [[") + builtin_qualifier(builtin) + "]]") : "";

			case BuiltInViewportIndex:
				if (!msl_options.supports_msl_version(2, 0))
					SPIRV_CROSS_THROW("ViewportIndex requires Metal 2.0.");
				/* fallthrough */
			case BuiltInPosition:
			case BuiltInLayer:
			case BuiltInClipDistance:
				return string(" [[") + builtin_qualifier(builtin) + "]]" + (mbr_type.array.empty() ? "" : " ");

			default:
				return "";
			}
		}
		uint32_t comp;
		uint32_t locn = get_ordered_member_location(type.self, index, &comp);
		if (locn != k_unknown_location)
		{
			if (comp != k_unknown_component)
				return string(" [[user(locn") + convert_to_string(locn) + "_" + convert_to_string(comp) + ")]]";
			else
				return string(" [[user(locn") + convert_to_string(locn) + ")]]";
		}
	}

	// Fragment function inputs
	if (execution.model == ExecutionModelFragment && type.storage == StorageClassInput)
	{
		string quals = "";
		if (is_builtin)
		{
			switch (builtin)
			{
			case BuiltInFrontFacing:
			case BuiltInPointCoord:
			case BuiltInFragCoord:
			case BuiltInSampleId:
			case BuiltInSampleMask:
			case BuiltInLayer:
				quals = builtin_qualifier(builtin);

			default:
				break;
			}
		}
		else
		{
			uint32_t comp;
			uint32_t locn = get_ordered_member_location(type.self, index, &comp);
			if (locn != k_unknown_location)
			{
				if (comp != k_unknown_component)
					quals = string("user(locn") + convert_to_string(locn) + "_" + convert_to_string(comp) + ")";
				else
					quals = string("user(locn") + convert_to_string(locn) + ")";
			}
		}
		// Don't bother decorating integers with the 'flat' attribute; it's
		// the default (in fact, the only option). Also don't bother with the
		// FragCoord builtin; it's always noperspective on Metal.
		if (!type_is_integral(mbr_type) && (!is_builtin || builtin != BuiltInFragCoord))
		{
			if (has_member_decoration(type.self, index, DecorationFlat))
			{
				if (!quals.empty())
					quals += ", ";
				quals += "flat";
			}
			else if (has_member_decoration(type.self, index, DecorationCentroid))
			{
				if (!quals.empty())
					quals += ", ";
				if (has_member_decoration(type.self, index, DecorationNoPerspective))
					quals += "centroid_no_perspective";
				else
					quals += "centroid_perspective";
			}
			else if (has_member_decoration(type.self, index, DecorationSample))
			{
				if (!quals.empty())
					quals += ", ";
				if (has_member_decoration(type.self, index, DecorationNoPerspective))
					quals += "sample_no_perspective";
				else
					quals += "sample_perspective";
			}
			else if (has_member_decoration(type.self, index, DecorationNoPerspective))
			{
				if (!quals.empty())
					quals += ", ";
				quals += "center_no_perspective";
			}
		}
		if (!quals.empty())
			return " [[" + quals + "]]";
	}

	// Fragment function outputs
	if (execution.model == ExecutionModelFragment && type.storage == StorageClassOutput)
	{
		if (is_builtin)
		{
			switch (builtin)
			{
			case BuiltInSampleMask:
			case BuiltInFragDepth:
				return string(" [[") + builtin_qualifier(builtin) + "]]";

			default:
				return "";
			}
		}
		uint32_t locn = get_ordered_member_location(type.self, index);
		if (locn != k_unknown_location && has_member_decoration(type.self, index, DecorationIndex))
			return join(" [[color(", locn, "), index(", get_member_decoration(type.self, index, DecorationIndex),
			            ")]]");
		else if (locn != k_unknown_location)
			return join(" [[color(", locn, ")]]");
		else if (has_member_decoration(type.self, index, DecorationIndex))
			return join(" [[index(", get_member_decoration(type.self, index, DecorationIndex), ")]]");
		else
			return "";
	}

	// Compute function inputs
	if (execution.model == ExecutionModelGLCompute && type.storage == StorageClassInput)
	{
		if (is_builtin)
		{
			switch (builtin)
			{
			case BuiltInGlobalInvocationId:
			case BuiltInWorkgroupId:
			case BuiltInNumWorkgroups:
			case BuiltInLocalInvocationId:
			case BuiltInLocalInvocationIndex:
				return string(" [[") + builtin_qualifier(builtin) + "]]";

			default:
				return "";
			}
		}
	}

	return "";
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x770, %rsp            # imm = 0x770
movq %rdi, -0x698(%rbp)
movq %rdi, %rax
movq %rax, -0x690(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x688(%rbp)
callq 0x25150
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rdi
addq $0x68, %rdi
movl -0x1c(%rbp), %eax
movl %eax, %esi
callq 0x8570
movq -0x688(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %esi
callq 0xea90
movq -0x688(%rbp), %rdi
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rsi
movl -0x1c(%rbp), %edx
leaq -0x3c(%rbp), %rcx
callq 0x20760
andb $0x1, %al
movb %al, -0x3d(%rbp)
movq -0x28(%rbp), %rax
cmpl $0x0, 0xb8(%rax)
jne 0x107c0a
movq -0x18(%rbp), %rax
cmpl $0x1, 0x64(%rax)
jne 0x107c0a
testb $0x1, -0x3d(%rbp)
je 0x107aa7
movl -0x3c(%rbp), %eax
movl %eax, -0x69c(%rbp)
addl $-0x5, %eax
subl $0x2, %eax
jb 0x107849
jmp 0x107811
movl -0x69c(%rbp), %eax
addl $-0x2a, %eax
subl $0x2, %eax
jb 0x107849
jmp 0x107821
movl -0x69c(%rbp), %eax
addl $0xffffeeb8, %eax       # imm = 0xFFFFEEB8
subl $0x2, %eax
jb 0x107849
jmp 0x107833
movl -0x69c(%rbp), %eax
subl $0x114a, %eax           # imm = 0x114A
je 0x107968
jmp 0x107a44
leaq -0x81(%rbp), %rdi
movq %rdi, -0x6a8(%rbp)
callq 0x7650
movq -0x6a8(%rbp), %rdx
leaq 0x45b3c(%rip), %rsi     # 0x14d3a6
leaq -0x80(%rbp), %rdi
callq 0x7520
jmp 0x107875
movq -0x688(%rbp), %rsi
movl -0x3c(%rbp), %edx
leaq -0xb8(%rbp), %rdi
callq 0x109330
jmp 0x10788d
leaq -0x60(%rbp), %rdi
leaq -0x80(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
callq 0x2f7f0
jmp 0x1078a3
movq -0x698(%rbp), %rdi
leaq 0x45c08(%rip), %rdx     # 0x14d4b9
leaq -0x60(%rbp), %rsi
callq 0x11910
jmp 0x1078bc
leaq -0x60(%rbp), %rdi
callq 0x7708
leaq -0xb8(%rbp), %rdi
callq 0x7708
leaq -0x80(%rbp), %rdi
callq 0x7708
leaq -0x81(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x107957
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x10794e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x107942
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x7708
leaq -0xb8(%rbp), %rdi
callq 0x7708
leaq -0x80(%rbp), %rdi
callq 0x7708
leaq -0x81(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
movb $0x1, -0xda(%rbp)
movl $0x10, %edi
callq 0x71a0
movq %rax, -0x6b8(%rbp)
leaq -0xd9(%rbp), %rdi
movq %rdi, -0x6b0(%rbp)
callq 0x7650
movq -0x6b0(%rbp), %rdx
leaq 0x45a09(%rip), %rsi     # 0x14d3aa
leaq -0xd8(%rbp), %rdi
callq 0x7520
jmp 0x1079af
movq -0x6b8(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x9c50
jmp 0x1079c4
movq -0x6b8(%rbp), %rdi
movb $0x0, -0xda(%rbp)
leaq 0xa63ff(%rip), %rsi     # 0x1addd8
leaq -0xfdd50(%rip), %rdx    # 0x9c90
callq 0x7610
jmp 0x109329
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x107a1c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x7708
leaq -0xd9(%rbp), %rdi
callq 0x73d0
testb $0x1, -0xda(%rbp)
jne 0x107a33
jmp 0x107a3f
movq -0x6b8(%rbp), %rdi
callq 0x72c0
jmp 0x10931d
leaq -0xdb(%rbp), %rdi
movq %rdi, -0x6c0(%rbp)
callq 0x7650
movq -0x698(%rbp), %rdi
movq -0x6c0(%rbp), %rdx
leaq 0x36e32(%rip), %rsi     # 0x13e89e
callq 0x7520
jmp 0x107a73
leaq -0xdb(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0xdb(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
xorl %eax, %eax
movl %eax, %ecx
callq 0x10a090
movl %eax, -0xe0(%rbp)
cmpl $-0x1, -0xe0(%rbp)
je 0x107c08
leaq -0x121(%rbp), %rdi
movq %rdi, -0x6c8(%rbp)
callq 0x7650
movq -0x6c8(%rbp), %rdx
leaq 0x458d8(%rip), %rsi     # 0x14d3cd
leaq -0x120(%rbp), %rdi
callq 0x7520
jmp 0x107b03
leaq -0x148(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x2f940
jmp 0x107b18
leaq -0x100(%rbp), %rdi
leaq -0x120(%rbp), %rsi
leaq -0x148(%rbp), %rdx
callq 0x2f7f0
jmp 0x107b34
movq -0x698(%rbp), %rdi
leaq 0x45899(%rip), %rdx     # 0x14d3db
leaq -0x100(%rbp), %rsi
callq 0x11910
jmp 0x107b50
leaq -0x100(%rbp), %rdi
callq 0x7708
leaq -0x148(%rbp), %rdi
callq 0x7708
leaq -0x120(%rbp), %rdi
callq 0x7708
leaq -0x121(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x107bf7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x107beb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x107bdf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x7708
leaq -0x148(%rbp), %rdi
callq 0x7708
leaq -0x120(%rbp), %rdi
callq 0x7708
leaq -0x121(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
jmp 0x107c0a
movq -0x28(%rbp), %rax
cmpl $0x0, 0xb8(%rax)
jne 0x108549
movq -0x18(%rbp), %rax
cmpl $0x3, 0x64(%rax)
jne 0x108549
testb $0x1, -0x3d(%rbp)
je 0x1081cb
movl -0x3c(%rbp), %eax
movq %rax, -0x6d0(%rbp)
subq $0xa, %rax
ja 0x108168
movq -0x6d0(%rbp), %rax
leaq 0x426af(%rip), %rcx     # 0x14a304
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x688(%rbp), %rax
movb 0x7dc(%rax), %al
movb $0x0, -0x18a(%rbp)
movb $0x0, -0x18b(%rbp)
movb $0x0, -0x1b1(%rbp)
movb $0x0, -0x1b2(%rbp)
movb $0x0, -0x1b4(%rbp)
testb $0x1, %al
je 0x107d33
leaq -0x189(%rbp), %rdi
movq %rdi, -0x6d8(%rbp)
callq 0x7650
movq -0x6d8(%rbp), %rdx
movb $0x1, -0x18a(%rbp)
leaq 0x456e8(%rip), %rsi     # 0x14d3a6
leaq -0x188(%rbp), %rdi
callq 0x7520
jmp 0x107ccc
movq -0x688(%rbp), %rsi
movb $0x1, -0x18b(%rbp)
movl -0x3c(%rbp), %edx
leaq -0x1b0(%rbp), %rdi
callq 0x109330
jmp 0x107ceb
movb $0x1, -0x1b1(%rbp)
leaq -0x168(%rbp), %rdi
leaq -0x188(%rbp), %rsi
leaq -0x1b0(%rbp), %rdx
callq 0x2f7f0
jmp 0x107d0e
movq -0x698(%rbp), %rdi
movb $0x1, -0x1b2(%rbp)
leaq 0x45796(%rip), %rdx     # 0x14d4b9
leaq -0x168(%rbp), %rsi
callq 0x11910
jmp 0x107d31
jmp 0x107d6b
leaq -0x1b3(%rbp), %rdi
movq %rdi, -0x6e0(%rbp)
callq 0x7650
movq -0x698(%rbp), %rdi
movq -0x6e0(%rbp), %rdx
movb $0x1, -0x1b4(%rbp)
leaq 0x36b3c(%rip), %rsi     # 0x13e89e
callq 0x7520
jmp 0x107d69
jmp 0x107d6b
testb $0x1, -0x1b4(%rbp)
jne 0x107d76
jmp 0x107d82
leaq -0x1b3(%rbp), %rdi
callq 0x73d0
testb $0x1, -0x1b2(%rbp)
jne 0x107d8d
jmp 0x107d99
leaq -0x168(%rbp), %rdi
callq 0x7708
testb $0x1, -0x1b1(%rbp)
jne 0x107da4
jmp 0x107db0
leaq -0x1b0(%rbp), %rdi
callq 0x7708
testb $0x1, -0x18b(%rbp)
jne 0x107dbb
jmp 0x107dc7
leaq -0x188(%rbp), %rdi
callq 0x7708
testb $0x1, -0x18a(%rbp)
jne 0x107dd2
jmp 0x107dde
leaq -0x189(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x107eaf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x107e96
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x107e7d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x107e64
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
testb $0x1, -0x1b4(%rbp)
jne 0x107e56
jmp 0x107e62
leaq -0x1b3(%rbp), %rdi
callq 0x73d0
jmp 0x107e64
testb $0x1, -0x1b2(%rbp)
jne 0x107e6f
jmp 0x107e7b
leaq -0x168(%rbp), %rdi
callq 0x7708
jmp 0x107e7d
testb $0x1, -0x1b1(%rbp)
jne 0x107e88
jmp 0x107e94
leaq -0x1b0(%rbp), %rdi
callq 0x7708
jmp 0x107e96
testb $0x1, -0x18b(%rbp)
jne 0x107ea1
jmp 0x107ead
leaq -0x188(%rbp), %rdi
callq 0x7708
jmp 0x107eaf
testb $0x1, -0x18a(%rbp)
jne 0x107eba
jmp 0x107ec6
leaq -0x189(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
movq -0x688(%rbp), %rdi
addq $0x7cc, %rdi            # imm = 0x7CC
movl $0x2, %esi
xorl %ecx, %ecx
movl %ecx, %edx
callq 0x1160d0
testb $0x1, %al
jne 0x107fcb
movb $0x1, -0x1da(%rbp)
movl $0x10, %edi
callq 0x71a0
movq %rax, -0x6f0(%rbp)
leaq -0x1d9(%rbp), %rdi
movq %rdi, -0x6e8(%rbp)
callq 0x7650
movq -0x6e8(%rbp), %rdx
leaq 0x454b7(%rip), %rsi     # 0x14d3df
leaq -0x1d8(%rbp), %rdi
callq 0x7520
jmp 0x107f36
movq -0x6f0(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x9c50
jmp 0x107f4b
movq -0x6f0(%rbp), %rdi
movb $0x0, -0x1da(%rbp)
leaq 0xa5e78(%rip), %rsi     # 0x1addd8
leaq -0xfe2d7(%rip), %rdx    # 0x9c90
callq 0x7610
jmp 0x109329
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x107fa3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x1d8(%rbp), %rdi
callq 0x7708
leaq -0x1d9(%rbp), %rdi
callq 0x73d0
testb $0x1, -0x1da(%rbp)
jne 0x107fba
jmp 0x107fc6
movq -0x6f0(%rbp), %rdi
callq 0x72c0
jmp 0x10931d
jmp 0x107fcd
leaq -0x241(%rbp), %rdi
movq %rdi, -0x6f8(%rbp)
callq 0x7650
movq -0x6f8(%rbp), %rdx
leaq 0x453b8(%rip), %rsi     # 0x14d3a6
leaq -0x240(%rbp), %rdi
callq 0x7520
jmp 0x107ffc
movq -0x688(%rbp), %rsi
movl -0x3c(%rbp), %edx
leaq -0x268(%rbp), %rdi
callq 0x109330
jmp 0x108014
leaq -0x220(%rbp), %rdi
leaq -0x240(%rbp), %rsi
leaq -0x268(%rbp), %rdx
callq 0x2f7f0
jmp 0x108030
leaq 0x45482(%rip), %rdx     # 0x14d4b9
leaq -0x200(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0x11910
jmp 0x10804c
movq -0x38(%rbp), %rdi
addq $0x20, %rdi
callq 0x8690
movq -0x698(%rbp), %rdi
movb %al, %cl
leaq 0x36835(%rip), %rax     # 0x13e89e
leaq 0x3682d(%rip), %rdx     # 0x13e89d
testb %cl, %cl
cmovneq %rax, %rdx
leaq -0x200(%rbp), %rsi
callq 0x11910
jmp 0x108084
leaq -0x200(%rbp), %rdi
callq 0x7708
leaq -0x220(%rbp), %rdi
callq 0x7708
leaq -0x268(%rbp), %rdi
callq 0x7708
leaq -0x240(%rbp), %rdi
callq 0x7708
leaq -0x241(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x108157
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x10814b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x10813f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x108133
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x200(%rbp), %rdi
callq 0x7708
leaq -0x220(%rbp), %rdi
callq 0x7708
leaq -0x268(%rbp), %rdi
callq 0x7708
leaq -0x240(%rbp), %rdi
callq 0x7708
leaq -0x241(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
leaq -0x269(%rbp), %rdi
movq %rdi, -0x700(%rbp)
callq 0x7650
movq -0x698(%rbp), %rdi
movq -0x700(%rbp), %rdx
leaq 0x3670e(%rip), %rsi     # 0x13e89e
callq 0x7520
jmp 0x108197
leaq -0x269(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x269(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
leaq -0x270(%rbp), %rcx
callq 0x10a090
movl %eax, -0x274(%rbp)
cmpl $-0x1, -0x274(%rbp)
je 0x108547
cmpl $-0x1, -0x270(%rbp)
je 0x108413
leaq -0x2f9(%rbp), %rdi
movq %rdi, -0x708(%rbp)
callq 0x7650
movq -0x708(%rbp), %rdx
leaq 0x451d8(%rip), %rsi     # 0x14d401
leaq -0x2f8(%rbp), %rdi
callq 0x7520
jmp 0x108237
leaq -0x320(%rbp), %rdi
leaq -0x274(%rbp), %rsi
callq 0x2f940
jmp 0x10824c
leaq -0x2d8(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
leaq -0x320(%rbp), %rdx
callq 0x2f7f0
jmp 0x108268
leaq 0x402af(%rip), %rdx     # 0x14851e
leaq -0x2b8(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0x11910
jmp 0x108284
leaq -0x340(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x2f940
jmp 0x108299
leaq -0x298(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
leaq -0x340(%rbp), %rdx
callq 0x2f7f0
jmp 0x1082b5
movq -0x698(%rbp), %rdi
leaq 0x45118(%rip), %rdx     # 0x14d3db
leaq -0x298(%rbp), %rsi
callq 0x11910
jmp 0x1082d1
leaq -0x298(%rbp), %rdi
callq 0x7708
leaq -0x340(%rbp), %rdi
callq 0x7708
leaq -0x2b8(%rbp), %rdi
callq 0x7708
leaq -0x2d8(%rbp), %rdi
callq 0x7708
leaq -0x320(%rbp), %rdi
callq 0x7708
leaq -0x2f8(%rbp), %rdi
callq 0x7708
leaq -0x2f9(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x108402
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x1083f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x1083ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x1083de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x1083d2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x1083c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x7708
leaq -0x340(%rbp), %rdi
callq 0x7708
leaq -0x2b8(%rbp), %rdi
callq 0x7708
leaq -0x2d8(%rbp), %rdi
callq 0x7708
leaq -0x320(%rbp), %rdi
callq 0x7708
leaq -0x2f8(%rbp), %rdi
callq 0x7708
leaq -0x2f9(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
leaq -0x381(%rbp), %rdi
movq %rdi, -0x710(%rbp)
callq 0x7650
movq -0x710(%rbp), %rdx
leaq 0x44fcd(%rip), %rsi     # 0x14d401
leaq -0x380(%rbp), %rdi
callq 0x7520
jmp 0x108442
leaq -0x3a8(%rbp), %rdi
leaq -0x274(%rbp), %rsi
callq 0x2f940
jmp 0x108457
leaq -0x360(%rbp), %rdi
leaq -0x380(%rbp), %rsi
leaq -0x3a8(%rbp), %rdx
callq 0x2f7f0
jmp 0x108473
movq -0x698(%rbp), %rdi
leaq 0x44f5a(%rip), %rdx     # 0x14d3db
leaq -0x360(%rbp), %rsi
callq 0x11910
jmp 0x10848f
leaq -0x360(%rbp), %rdi
callq 0x7708
leaq -0x3a8(%rbp), %rdi
callq 0x7708
leaq -0x380(%rbp), %rdi
callq 0x7708
leaq -0x381(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x108536
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x10852a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x10851e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x360(%rbp), %rdi
callq 0x7708
leaq -0x3a8(%rbp), %rdi
callq 0x7708
leaq -0x380(%rbp), %rdi
callq 0x7708
leaq -0x381(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
jmp 0x108549
movq -0x28(%rbp), %rax
cmpl $0x4, 0xb8(%rax)
jne 0x108d61
movq -0x18(%rbp), %rax
cmpl $0x1, 0x64(%rax)
jne 0x108d61
leaq -0x3c9(%rbp), %rdi
movq %rdi, -0x718(%rbp)
callq 0x7650
movq -0x718(%rbp), %rdx
leaq 0x36315(%rip), %rsi     # 0x13e89e
leaq -0x3c8(%rbp), %rdi
callq 0x7520
jmp 0x108597
leaq -0x3c9(%rbp), %rdi
callq 0x73d0
testb $0x1, -0x3d(%rbp)
je 0x108652
movl -0x3c(%rbp), %eax
movl %eax, -0x71c(%rbp)
subl $0x9, %eax
je 0x1085fd
jmp 0x1085bd
movl -0x71c(%rbp), %eax
addl $-0xf, %eax
subl $0x4, %eax
jb 0x1085fd
jmp 0x1085cd
movl -0x71c(%rbp), %eax
subl $0x14, %eax
je 0x1085fd
jmp 0x108634
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x3c9(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
movq -0x688(%rbp), %rsi
movl -0x3c(%rbp), %edx
leaq -0x3f0(%rbp), %rdi
callq 0x109330
jmp 0x108615
leaq -0x3c8(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0x7430
leaq -0x3f0(%rbp), %rdi
callq 0x7708
jmp 0x10864d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x108d50
jmp 0x108a1e
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
leaq -0x3f4(%rbp), %rcx
callq 0x10a090
movl %eax, -0x720(%rbp)
jmp 0x108677
movl -0x720(%rbp), %eax
movl %eax, -0x3f8(%rbp)
cmpl $-0x1, -0x3f8(%rbp)
je 0x108a1c
cmpl $-0x1, -0x3f4(%rbp)
je 0x1088c7
leaq -0x499(%rbp), %rdi
movq %rdi, -0x728(%rbp)
callq 0x7650
movq -0x728(%rbp), %rdx
leaq 0x44d46(%rip), %rsi     # 0x14d404
leaq -0x498(%rbp), %rdi
callq 0x7520
jmp 0x1086cc
leaq -0x4c0(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x2f940
jmp 0x1086e1
leaq -0x478(%rbp), %rdi
leaq -0x498(%rbp), %rsi
leaq -0x4c0(%rbp), %rdx
callq 0x2f7f0
jmp 0x1086fd
leaq 0x3fe1a(%rip), %rdx     # 0x14851e
leaq -0x458(%rbp), %rdi
leaq -0x478(%rbp), %rsi
callq 0x11910
jmp 0x108719
leaq -0x4e0(%rbp), %rdi
leaq -0x3f4(%rbp), %rsi
callq 0x2f940
jmp 0x10872e
leaq -0x438(%rbp), %rdi
leaq -0x458(%rbp), %rsi
leaq -0x4e0(%rbp), %rdx
callq 0x2f7f0
jmp 0x10874a
leaq 0x3c7a8(%rip), %rdx     # 0x144ef9
leaq -0x418(%rbp), %rdi
leaq -0x438(%rbp), %rsi
callq 0x11910
jmp 0x108766
leaq -0x3c8(%rbp), %rdi
leaq -0x418(%rbp), %rsi
callq 0x7430
leaq -0x418(%rbp), %rdi
callq 0x7708
leaq -0x438(%rbp), %rdi
callq 0x7708
leaq -0x4e0(%rbp), %rdi
callq 0x7708
leaq -0x458(%rbp), %rdi
callq 0x7708
leaq -0x478(%rbp), %rdi
callq 0x7708
leaq -0x4c0(%rbp), %rdi
callq 0x7708
leaq -0x498(%rbp), %rdi
callq 0x7708
leaq -0x499(%rbp), %rdi
callq 0x73d0
jmp 0x108a1a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x1088b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x1088aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x10889e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x108892
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x108886
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x10887a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x438(%rbp), %rdi
callq 0x7708
leaq -0x4e0(%rbp), %rdi
callq 0x7708
leaq -0x458(%rbp), %rdi
callq 0x7708
leaq -0x478(%rbp), %rdi
callq 0x7708
leaq -0x4c0(%rbp), %rdi
callq 0x7708
leaq -0x498(%rbp), %rdi
callq 0x7708
leaq -0x499(%rbp), %rdi
callq 0x73d0
jmp 0x108d50
leaq -0x541(%rbp), %rdi
movq %rdi, -0x730(%rbp)
callq 0x7650
movq -0x730(%rbp), %rdx
leaq 0x44b1c(%rip), %rsi     # 0x14d404
leaq -0x540(%rbp), %rdi
callq 0x7520
jmp 0x1088f6
leaq -0x568(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x2f940
jmp 0x10890b
leaq -0x520(%rbp), %rdi
leaq -0x540(%rbp), %rsi
leaq -0x568(%rbp), %rdx
callq 0x2f7f0
jmp 0x108927
leaq 0x3c5cb(%rip), %rdx     # 0x144ef9
leaq -0x500(%rbp), %rdi
leaq -0x520(%rbp), %rsi
callq 0x11910
jmp 0x108943
leaq -0x3c8(%rbp), %rdi
leaq -0x500(%rbp), %rsi
callq 0x7430
leaq -0x500(%rbp), %rdi
callq 0x7708
leaq -0x520(%rbp), %rdi
callq 0x7708
leaq -0x568(%rbp), %rdi
callq 0x7708
leaq -0x540(%rbp), %rdi
callq 0x7708
leaq -0x541(%rbp), %rdi
callq 0x73d0
jmp 0x108a1a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x108a09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x1089fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x1089f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x520(%rbp), %rdi
callq 0x7708
leaq -0x568(%rbp), %rdi
callq 0x7708
leaq -0x540(%rbp), %rdi
callq 0x7708
leaq -0x541(%rbp), %rdi
callq 0x73d0
jmp 0x108d50
jmp 0x108a1c
jmp 0x108a1e
movq -0x38(%rbp), %rdi
callq 0x10a180
movb %al, -0x731(%rbp)
jmp 0x108a2f
movb -0x731(%rbp), %al
testb $0x1, %al
jne 0x108ca7
jmp 0x108a3f
testb $0x1, -0x3d(%rbp)
je 0x108a4f
cmpl $0xf, -0x3c(%rbp)
je 0x108ca7
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
movl $0xe, %ecx
callq 0x21f90
movb %al, -0x732(%rbp)
jmp 0x108a72
movb -0x732(%rbp), %al
testb $0x1, %al
jne 0x108a7e
jmp 0x108abf
leaq -0x3c8(%rbp), %rdi
callq 0x75f0
testb $0x1, %al
jne 0x108aa5
leaq 0x3bafa(%rip), %rsi     # 0x14458f
leaq -0x3c8(%rbp), %rdi
callq 0x7340
jmp 0x108aa3
jmp 0x108aa5
leaq 0x392d3(%rip), %rsi     # 0x141d7f
leaq -0x3c8(%rbp), %rdi
callq 0x7340
jmp 0x108aba
jmp 0x108ca5
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
movl $0x10, %ecx
callq 0x21f90
movb %al, -0x733(%rbp)
jmp 0x108ae2
movb -0x733(%rbp), %al
testb $0x1, %al
jne 0x108af1
jmp 0x108b7a
leaq -0x3c8(%rbp), %rdi
callq 0x75f0
testb $0x1, %al
jne 0x108b18
leaq 0x3ba87(%rip), %rsi     # 0x14458f
leaq -0x3c8(%rbp), %rdi
callq 0x7340
jmp 0x108b16
jmp 0x108b18
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
movl $0xd, %ecx
callq 0x21f90
movb %al, -0x734(%rbp)
jmp 0x108b3b
movb -0x734(%rbp), %al
testb $0x1, %al
jne 0x108b47
jmp 0x108b5e
leaq 0x448c0(%rip), %rsi     # 0x14d40e
leaq -0x3c8(%rbp), %rdi
callq 0x7340
jmp 0x108b5c
jmp 0x108b75
leaq 0x448c1(%rip), %rsi     # 0x14d426
leaq -0x3c8(%rbp), %rdi
callq 0x7340
jmp 0x108b73
jmp 0x108b75
jmp 0x108ca3
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
movl $0x11, %ecx
callq 0x21f90
movb %al, -0x735(%rbp)
jmp 0x108b9d
movb -0x735(%rbp), %al
testb $0x1, %al
jne 0x108bac
jmp 0x108c32
leaq -0x3c8(%rbp), %rdi
callq 0x75f0
testb $0x1, %al
jne 0x108bd3
leaq 0x3b9cc(%rip), %rsi     # 0x14458f
leaq -0x3c8(%rbp), %rdi
callq 0x7340
jmp 0x108bd1
jmp 0x108bd3
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
movl $0xd, %ecx
callq 0x21f90
movb %al, -0x736(%rbp)
jmp 0x108bf6
movb -0x736(%rbp), %al
testb $0x1, %al
jne 0x108c02
jmp 0x108c19
leaq 0x44832(%rip), %rsi     # 0x14d43b
leaq -0x3c8(%rbp), %rdi
callq 0x7340
jmp 0x108c17
jmp 0x108c30
leaq 0x44831(%rip), %rsi     # 0x14d451
leaq -0x3c8(%rbp), %rdi
callq 0x7340
jmp 0x108c2e
jmp 0x108c30
jmp 0x108ca1
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
movl $0xd, %ecx
callq 0x21f90
movb %al, -0x737(%rbp)
jmp 0x108c55
movb -0x737(%rbp), %al
testb $0x1, %al
jne 0x108c61
jmp 0x108c9f
leaq -0x3c8(%rbp), %rdi
callq 0x75f0
testb $0x1, %al
jne 0x108c88
leaq 0x3b917(%rip), %rsi     # 0x14458f
leaq -0x3c8(%rbp), %rdi
callq 0x7340
jmp 0x108c86
jmp 0x108c88
leaq 0x447d5(%rip), %rsi     # 0x14d464
leaq -0x3c8(%rbp), %rdi
callq 0x7340
jmp 0x108c9d
jmp 0x108c9f
jmp 0x108ca1
jmp 0x108ca3
jmp 0x108ca5
jmp 0x108ca7
leaq -0x3c8(%rbp), %rdi
callq 0x75f0
testb $0x1, %al
jne 0x108d27
leaq 0x446e8(%rip), %rsi     # 0x14d3a6
leaq -0x588(%rbp), %rdi
leaq -0x3c8(%rbp), %rdx
callq 0xdc760
jmp 0x108cd3
movq -0x698(%rbp), %rdi
leaq 0x447d8(%rip), %rdx     # 0x14d4b9
leaq -0x588(%rbp), %rsi
callq 0x11910
jmp 0x108cef
leaq -0x588(%rbp), %rdi
callq 0x7708
movl $0x1, -0x58c(%rbp)
jmp 0x108d31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x588(%rbp), %rdi
callq 0x7708
jmp 0x108d50
movl $0x0, -0x58c(%rbp)
leaq -0x3c8(%rbp), %rdi
callq 0x7708
movl -0x58c(%rbp), %eax
testl %eax, %eax
je 0x108d4e
jmp 0x108d49
jmp 0x10930d
jmp 0x108d61
leaq -0x3c8(%rbp), %rdi
callq 0x7708
jmp 0x10931d
movq -0x28(%rbp), %rax
cmpl $0x4, 0xb8(%rax)
jne 0x1090cd
movq -0x18(%rbp), %rax
cmpl $0x3, 0x64(%rax)
jne 0x1090cd
testb $0x1, -0x3d(%rbp)
je 0x108f34
movl -0x3c(%rbp), %eax
orl $0x2, %eax
subl $0x16, %eax
je 0x108d9a
jmp 0x108ed1
leaq -0x5d1(%rbp), %rdi
movq %rdi, -0x740(%rbp)
callq 0x7650
movq -0x740(%rbp), %rdx
leaq 0x445eb(%rip), %rsi     # 0x14d3a6
leaq -0x5d0(%rbp), %rdi
callq 0x7520
jmp 0x108dc9
movq -0x688(%rbp), %rsi
movl -0x3c(%rbp), %edx
leaq -0x5f8(%rbp), %rdi
callq 0x109330
jmp 0x108de1
leaq -0x5b0(%rbp), %rdi
leaq -0x5d0(%rbp), %rsi
leaq -0x5f8(%rbp), %rdx
callq 0x2f7f0
jmp 0x108dfd
movq -0x698(%rbp), %rdi
leaq 0x446ae(%rip), %rdx     # 0x14d4b9
leaq -0x5b0(%rbp), %rsi
callq 0x11910
jmp 0x108e19
leaq -0x5b0(%rbp), %rdi
callq 0x7708
leaq -0x5f8(%rbp), %rdi
callq 0x7708
leaq -0x5d0(%rbp), %rdi
callq 0x7708
leaq -0x5d1(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x108ec0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x108eb4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x108ea8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x5b0(%rbp), %rdi
callq 0x7708
leaq -0x5f8(%rbp), %rdi
callq 0x7708
leaq -0x5d0(%rbp), %rdi
callq 0x7708
leaq -0x5d1(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
leaq -0x5f9(%rbp), %rdi
movq %rdi, -0x748(%rbp)
callq 0x7650
movq -0x698(%rbp), %rdi
movq -0x748(%rbp), %rdx
leaq 0x359a5(%rip), %rsi     # 0x13e89e
callq 0x7520
jmp 0x108f00
leaq -0x5f9(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x5f9(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
xorl %eax, %eax
movl %eax, %ecx
callq 0x10a090
movl %eax, -0x600(%rbp)
cmpl $-0x1, -0x600(%rbp)
je 0x108fd3
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
movl $0x20, %ecx
callq 0x21f90
testb $0x1, %al
jne 0x108f7e
jmp 0x108fd3
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
movl $0x20, %ecx
callq 0x231b0
movq -0x698(%rbp), %rdi
movl %eax, -0x604(%rbp)
leaq 0x444cd(%rip), %rsi     # 0x14d47a
leaq -0x600(%rbp), %rdx
leaq 0x444c9(%rip), %rcx     # 0x14d484
leaq -0x604(%rbp), %r8
leaq 0x44412(%rip), %r9      # 0x14d3db
callq 0x117720
jmp 0x10930d
cmpl $-0x1, -0x600(%rbp)
je 0x109002
movq -0x698(%rbp), %rdi
leaq 0x44490(%rip), %rsi     # 0x14d47a
leaq -0x600(%rbp), %rdx
leaq 0x443e3(%rip), %rcx     # 0x14d3db
callq 0x1177f0
jmp 0x10930d
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
movl $0x20, %ecx
callq 0x21f90
testb $0x1, %al
jne 0x109023
jmp 0x10906a
movq -0x688(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movl -0x1c(%rbp), %edx
movl $0x20, %ecx
callq 0x231b0
movq -0x698(%rbp), %rdi
movl %eax, -0x608(%rbp)
leaq 0x4443c(%rip), %rsi     # 0x14d48e
leaq -0x608(%rbp), %rdx
leaq 0x4437b(%rip), %rcx     # 0x14d3db
callq 0x1178b0
jmp 0x10930d
leaq -0x609(%rbp), %rdi
movq %rdi, -0x750(%rbp)
callq 0x7650
movq -0x698(%rbp), %rdi
movq -0x750(%rbp), %rdx
leaq 0x3580c(%rip), %rsi     # 0x13e89e
callq 0x7520
jmp 0x109099
leaq -0x609(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x609(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
movq -0x28(%rbp), %rax
cmpl $0x5, 0xb8(%rax)
jne 0x1092b0
movq -0x18(%rbp), %rax
cmpl $0x1, 0x64(%rax)
jne 0x1092b0
testb $0x1, -0x3d(%rbp)
je 0x1092ae
movl -0x3c(%rbp), %eax
movl %eax, -0x754(%rbp)
subl $0x18, %eax
je 0x10911a
jmp 0x109106
movl -0x754(%rbp), %eax
addl $-0x1a, %eax
subl $0x3, %eax
ja 0x109251
jmp 0x10911a
leaq -0x651(%rbp), %rdi
movq %rdi, -0x760(%rbp)
callq 0x7650
movq -0x760(%rbp), %rdx
leaq 0x4426b(%rip), %rsi     # 0x14d3a6
leaq -0x650(%rbp), %rdi
callq 0x7520
jmp 0x109149
movq -0x688(%rbp), %rsi
movl -0x3c(%rbp), %edx
leaq -0x678(%rbp), %rdi
callq 0x109330
jmp 0x109161
leaq -0x630(%rbp), %rdi
leaq -0x650(%rbp), %rsi
leaq -0x678(%rbp), %rdx
callq 0x2f7f0
jmp 0x10917d
movq -0x698(%rbp), %rdi
leaq 0x4432e(%rip), %rdx     # 0x14d4b9
leaq -0x630(%rbp), %rsi
callq 0x11910
jmp 0x109199
leaq -0x630(%rbp), %rdi
callq 0x7708
leaq -0x678(%rbp), %rdi
callq 0x7708
leaq -0x650(%rbp), %rdi
callq 0x7708
leaq -0x651(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x109240
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x109234
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x109228
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x630(%rbp), %rdi
callq 0x7708
leaq -0x678(%rbp), %rdi
callq 0x7708
leaq -0x650(%rbp), %rdi
callq 0x7708
leaq -0x651(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
leaq -0x679(%rbp), %rdi
movq %rdi, -0x768(%rbp)
callq 0x7650
movq -0x698(%rbp), %rdi
movq -0x768(%rbp), %rdx
leaq 0x35625(%rip), %rsi     # 0x13e89e
callq 0x7520
jmp 0x109280
leaq -0x679(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x679(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
jmp 0x1092b0
leaq -0x67a(%rbp), %rdi
movq %rdi, -0x770(%rbp)
callq 0x7650
movq -0x698(%rbp), %rdi
movq -0x770(%rbp), %rdx
leaq 0x355c6(%rip), %rsi     # 0x13e89e
callq 0x7520
jmp 0x1092df
leaq -0x67a(%rbp), %rdi
callq 0x73d0
jmp 0x10930d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x67a(%rbp), %rdi
callq 0x73d0
jmp 0x10931d
movq -0x690(%rbp), %rax
addq $0x770, %rsp            # imm = 0x770
popq %rbp
retq
movq -0x90(%rbp), %rdi
callq 0x7640
nopl (%rax)