// File: /workspace/github_cpp_makefile_star2_O2/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::constant_expression_vector[abi:cxx11](spirv_cross::SPIRConstant const&, unsigned int)
string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t vector)
{
	auto type = get<SPIRType>(c.constant_type);
	type.columns = 1;

	string res;
	bool splat = backend.use_constructor_splatting && c.vector_size() > 1;
	bool swizzle_splat = backend.can_swizzle_scalar && c.vector_size() > 1;

	if (!type_is_floating_point(type))
	{
		// Cannot swizzle literal integers as a special case.
		swizzle_splat = false;
	}

	if (splat || swizzle_splat)
	{
		// Cannot use constant splatting if we have specialization constants somewhere in the vector.
		for (uint32_t i = 0; i < c.vector_size(); i++)
		{
			if (options.vulkan_semantics && c.specialization_constant_id(vector, i) != 0)
			{
				splat = false;
				swizzle_splat = false;
				break;
			}
		}
	}

	if (splat || swizzle_splat)
	{
		if (type.width == 64)
		{
			uint64_t ident = c.scalar_u64(vector, 0);
			for (uint32_t i = 1; i < c.vector_size(); i++)
			{
				if (ident != c.scalar_u64(vector, i))
				{
					splat = false;
					swizzle_splat = false;
					break;
				}
			}
		}
		else
		{
			uint32_t ident = c.scalar(vector, 0);
			for (uint32_t i = 1; i < c.vector_size(); i++)
			{
				if (ident != c.scalar(vector, i))
				{
					splat = false;
					swizzle_splat = false;
				}
			}
		}
	}

	if (c.vector_size() > 1 && !swizzle_splat)
		res += type_to_glsl(type) + "(";

	switch (type.basetype)
	{
	case SPIRType::Half:
		if (splat || swizzle_splat)
		{
			res += convert_half_to_string(c, vector, 0);
			if (swizzle_splat)
				res = remap_swizzle(get<SPIRType>(c.constant_type), 1, res);
		}
		else
		{
			for (uint32_t i = 0; i < c.vector_size(); i++)
			{
				if (options.vulkan_semantics && c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
					res += to_name(c.specialization_constant_id(vector, i));
				else
					res += convert_half_to_string(c, vector, i);

				if (i + 1 < c.vector_size())
					res += ", ";
			}
		}
		break;

	case SPIRType::Float:
		if (splat || swizzle_splat)
		{
			res += convert_float_to_string(c, vector, 0);
			if (swizzle_splat)
				res = remap_swizzle(get<SPIRType>(c.constant_type), 1, res);
		}
		else
		{
			for (uint32_t i = 0; i < c.vector_size(); i++)
			{
				if (options.vulkan_semantics && c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
					res += to_name(c.specialization_constant_id(vector, i));
				else
					res += convert_float_to_string(c, vector, i);

				if (i + 1 < c.vector_size())
					res += ", ";
			}
		}
		break;

	case SPIRType::Double:
		if (splat || swizzle_splat)
		{
			res += convert_double_to_string(c, vector, 0);
			if (swizzle_splat)
				res = remap_swizzle(get<SPIRType>(c.constant_type), 1, res);
		}
		else
		{
			for (uint32_t i = 0; i < c.vector_size(); i++)
			{
				if (options.vulkan_semantics && c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
					res += to_name(c.specialization_constant_id(vector, i));
				else
					res += convert_double_to_string(c, vector, i);

				if (i + 1 < c.vector_size())
					res += ", ";
			}
		}
		break;

	case SPIRType::Int64:
		if (splat)
		{
			res += convert_to_string(c.scalar_i64(vector, 0));
			if (backend.long_long_literal_suffix)
				res += "ll";
			else
				res += "l";
		}
		else
		{
			for (uint32_t i = 0; i < c.vector_size(); i++)
			{
				if (options.vulkan_semantics && c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
					res += to_name(c.specialization_constant_id(vector, i));
				else
				{
					res += convert_to_string(c.scalar_i64(vector, i));
					if (backend.long_long_literal_suffix)
						res += "ll";
					else
						res += "l";
				}

				if (i + 1 < c.vector_size())
					res += ", ";
			}
		}
		break;

	case SPIRType::UInt64:
		if (splat)
		{
			res += convert_to_string(c.scalar_u64(vector, 0));
			if (backend.long_long_literal_suffix)
				res += "ull";
			else
				res += "ul";
		}
		else
		{
			for (uint32_t i = 0; i < c.vector_size(); i++)
			{
				if (options.vulkan_semantics && c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
					res += to_name(c.specialization_constant_id(vector, i));
				else
				{
					res += convert_to_string(c.scalar_u64(vector, i));
					if (backend.long_long_literal_suffix)
						res += "ull";
					else
						res += "ul";
				}

				if (i + 1 < c.vector_size())
					res += ", ";
			}
		}
		break;

	case SPIRType::UInt:
		if (splat)
		{
			res += convert_to_string(c.scalar(vector, 0));
			if (is_legacy())
			{
				// Fake unsigned constant literals with signed ones if possible.
				// Things like array sizes, etc, tend to be unsigned even though they could just as easily be signed.
				if (c.scalar_i32(vector, 0) < 0)
					SPIRV_CROSS_THROW("Tried to convert uint literal into int, but this made the literal negative.");
			}
			else if (backend.uint32_t_literal_suffix)
				res += "u";
		}
		else
		{
			for (uint32_t i = 0; i < c.vector_size(); i++)
			{
				if (options.vulkan_semantics && c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
					res += to_name(c.specialization_constant_id(vector, i));
				else
				{
					res += convert_to_string(c.scalar(vector, i));
					if (is_legacy())
					{
						// Fake unsigned constant literals with signed ones if possible.
						// Things like array sizes, etc, tend to be unsigned even though they could just as easily be signed.
						if (c.scalar_i32(vector, i) < 0)
							SPIRV_CROSS_THROW(
							    "Tried to convert uint literal into int, but this made the literal negative.");
					}
					else if (backend.uint32_t_literal_suffix)
						res += "u";
				}

				if (i + 1 < c.vector_size())
					res += ", ";
			}
		}
		break;

	case SPIRType::Int:
		if (splat)
			res += convert_to_string(c.scalar_i32(vector, 0));
		else
		{
			for (uint32_t i = 0; i < c.vector_size(); i++)
			{
				if (options.vulkan_semantics && c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
					res += to_name(c.specialization_constant_id(vector, i));
				else
					res += convert_to_string(c.scalar_i32(vector, i));
				if (i + 1 < c.vector_size())
					res += ", ";
			}
		}
		break;

	case SPIRType::Boolean:
		if (splat)
			res += c.scalar(vector, 0) ? "true" : "false";
		else
		{
			for (uint32_t i = 0; i < c.vector_size(); i++)
			{
				if (options.vulkan_semantics && c.vector_size() > 1 && c.specialization_constant_id(vector, i) != 0)
					res += to_name(c.specialization_constant_id(vector, i));
				else
					res += c.scalar(vector, i) ? "true" : "false";

				if (i + 1 < c.vector_size())
					res += ", ";
			}
		}
		break;

	default:
		SPIRV_CROSS_THROW("Invalid constant expression basetype.");
	}

	if (c.vector_size() > 1 && !swizzle_splat)
		res += ")";

	return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x128, %rsp            # imm = 0x128
movl %ecx, %ebp
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
movl 0xc(%rdx), %esi
movq %r15, %rdi
callq 0x90a4
leaq 0x50(%rsp), %r12
movq %r12, %rdi
movq %rax, %rsi
callq 0x1a29c
movl $0x1, 0x18(%r12)
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
andq $0x0, 0x8(%rbx)
movb $0x0, 0x10(%rbx)
movb 0x629(%r15), %sil
movl 0x40(%r14), %ecx
xorl %r13d, %r13d
cmpq $0x2, %rcx
setae %r13b
movl 0xc(%r12), %eax
leal -0x9(%rax), %edx
cmpl $0x3, %edx
setb %dil
movb 0x62c(%r15), %dl
andb %r13b, %dl
andb %dil, %dl
movzbl %dl, %edi
testb %sil, %sil
movl %r13d, %r8d
cmovel %edi, %r8d
movl %ebp, %r12d
cmpb $0x1, %r8b
jne 0x2e327
andb %sil, %r13b
movb 0x43e(%r15), %r8b
imulq $0x38, %r12, %r9
addq %r14, %r9
addq $0x30, %r9
xorl %r10d, %r10d
cmpq %r10, %rcx
je 0x2e33b
testb $0x1, %r8b
je 0x2e322
cmpl $0x0, (%r9,%r10,4)
jne 0x2e383
incq %r10
jmp 0x2e310
xorl %r13d, %r13d
movl $0x0, 0x4(%rsp)
testb %dl, %dl
jne 0x2e351
jmp 0x2e3c1
xorl %r8d, %r8d
cmpl $0x2, %ecx
setae %r8b
testb %sil, %sil
cmovnel %r8d, %edi
testb %dil, %dil
je 0x2e383
imulq $0x38, %r12, %r8
cmpl $0x40, 0x60(%rsp)
leaq 0x10(%r14,%r8), %rdi
jne 0x2e390
movq (%rdi), %rsi
leaq (%r8,%r14), %rdi
addq $0x18, %rdi
pushq $0x1
popq %r8
cmpq %rcx, %r8
jae 0x2e3bd
leaq 0x1(%r8), %r9
cmpq -0x8(%rdi,%r8,8), %rsi
movq %r9, %r8
je 0x2e370
movl $0x0, 0x4(%rsp)
xorl %r13d, %r13d
jmp 0x2e3c1
pushq $0x1
popq %rsi
movl (%rdi), %edi
addq %r14, %r8
addq $0x18, %r8
xorl %r9d, %r9d
cmpq %rcx, %rsi
jae 0x2e3bd
cmpl -0x8(%r8,%rsi,8), %edi
movzbl %dl, %edx
cmovnel %r9d, %edx
movzbl %r13b, %r13d
cmovnel %r9d, %r13d
incq %rsi
jmp 0x2e39f
movl %edx, 0x4(%rsp)
cmpl $0x2, %ecx
jb 0x2e420
testb $0x1, 0x4(%rsp)
jne 0x2e420
movq (%r15), %rax
leaq 0x30(%rsp), %rdi
leaq 0x50(%rsp), %rdx
movq %r15, %rsi
xorl %ecx, %ecx
callq *0x98(%rax)
leaq 0x6f83d(%rip), %rdx     # 0x9dc29
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0xab3f
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x64f0
leaq 0x8(%rsp), %rdi
callq 0x6548
leaq 0x30(%rsp), %rdi
callq 0x6548
movl 0x5c(%rsp), %eax
addl $-0x2, %eax
cmpl $0x9, %eax
ja 0x2ed32
leaq 0x62359(%rip), %rcx     # 0x9078c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
testb $0x1, %r13b
je 0x2ea4c
imulq $0x38, %r12, %rax
cmpl $0x0, 0x10(%r14,%rax)
leaq 0x64411(%rip), %rax     # 0x92868
leaq 0x6470b(%rip), %rsi     # 0x92b69
cmoveq %rax, %rsi
jmp 0x2e68a
imulq $0x38, %r12, %rbp
testb $0x1, %r13b
je 0x2e789
leaq (%r14,%rbp), %rax
addq $0x10, %rax
movq (%rax), %rsi
leaq 0x8(%rsp), %rdi
callq 0x4a5d1
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x64f0
leaq 0x8(%rsp), %rdi
callq 0x6548
leaq 0x64da1(%rip), %rax     # 0x93249
leaq 0x65852(%rip), %rsi     # 0x93d01
jmp 0x2e67e
testb $0x1, %r13b
jne 0x2e4c5
testb $0x1, 0x4(%rsp)
je 0x2eae4
leaq 0x8(%rsp), %rdi
movq %r15, %rsi
movq %r14, %rdx
movl %ebp, %ecx
xorl %r8d, %r8d
callq 0x2d408
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x64f0
leaq 0x8(%rsp), %rdi
callq 0x6548
testb $0x1, 0x4(%rsp)
je 0x2e74b
movl 0xc(%r14), %esi
movq %r15, %rdi
callq 0x90a4
leaq 0x8(%rsp), %rdi
pushq $0x1
popq %rcx
movq %r15, %rsi
movq %rax, %rdx
movq %rbx, %r8
callq 0x2a93c
jmp 0x2e733
imulq $0x38, %r12, %rbp
testb $0x1, %r13b
je 0x2e83f
leaq (%r14,%rbp), %r12
addq $0x10, %r12
movl (%r12), %esi
leaq 0x8(%rsp), %rdi
callq 0x1c182
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x64f0
leaq 0x8(%rsp), %rdi
callq 0x6548
movq %r15, %rdi
callq 0x41b9c
testb %al, %al
je 0x2eccd
cmpl $0x0, (%r12)
jns 0x2e74b
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %r15
leaq 0x64cf3(%rip), %rsi     # 0x9327e
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xb880d(%rip), %rsi     # 0xe6dc0
movq 0xb9a26(%rip), %rdx     # 0xe7fe0
movq %r15, %rdi
callq 0x6490
jmp 0x2ed7b
testb $0x1, %r13b
jne 0x2e5d8
testb $0x1, 0x4(%rsp)
je 0x2eb87
leaq 0x8(%rsp), %rdi
movq %r15, %rsi
movq %r14, %rdx
movl %ebp, %ecx
xorl %r8d, %r8d
callq 0x2dcf2
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x64f0
leaq 0x8(%rsp), %rdi
callq 0x6548
testb $0x1, 0x4(%rsp)
je 0x2e74b
movl 0xc(%r14), %esi
movq %r15, %rdi
callq 0x90a4
leaq 0x8(%rsp), %rdi
pushq $0x1
popq %rcx
movq %r15, %rsi
movq %rax, %rdx
movq %rbx, %r8
callq 0x2a93c
jmp 0x2e733
imulq $0x38, %r12, %rbp
testb $0x1, %r13b
je 0x2e909
leaq (%r14,%rbp), %rax
addq $0x10, %rax
movq (%rax), %rsi
leaq 0x8(%rsp), %rdi
callq 0x4a4d4
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x64f0
leaq 0x8(%rsp), %rdi
callq 0x6548
leaq 0x655d7(%rip), %rax     # 0x93c4e
leaq 0x69282(%rip), %rsi     # 0x97900
cmpb $0x0, 0x603(%r15)
cmovneq %rax, %rsi
movq %rbx, %rdi
callq 0x64d0
jmp 0x2e74b
imulq $0x38, %r12, %rbp
testb $0x1, %r13b
je 0x2e9c3
leaq (%r14,%rbp), %rax
addq $0x10, %rax
movl (%rax), %esi
leaq 0x8(%rsp), %rdi
callq 0x4a613
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x64f0
leaq 0x8(%rsp), %rdi
jmp 0x2e746
testb $0x1, %r13b
jne 0x2e6de
testb $0x1, 0x4(%rsp)
je 0x2ec2a
leaq 0x8(%rsp), %rdi
movq %r15, %rsi
movq %r14, %rdx
movl %ebp, %ecx
xorl %r8d, %r8d
callq 0x2d93c
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x64f0
leaq 0x8(%rsp), %rdi
callq 0x6548
testb $0x1, 0x4(%rsp)
je 0x2e74b
movl 0xc(%r14), %esi
movq %r15, %rdi
callq 0x90a4
leaq 0x8(%rsp), %rdi
pushq $0x1
popq %rcx
movq %r15, %rsi
movq %rax, %rdx
movq %rbx, %r8
callq 0x2a93c
leaq 0x8(%rsp), %r15
movq %rbx, %rdi
movq %r15, %rsi
callq 0x6320
movq %r15, %rdi
callq 0x6548
movl 0x40(%r14), %eax
cmpl $0x2, %eax
jb 0x2e76a
testb $0x1, 0x4(%rsp)
jne 0x2e76a
leaq 0x67293(%rip), %rsi     # 0x959f5
movq %rbx, %rdi
callq 0x64d0
leaq 0x50(%rsp), %rdi
callq 0x17a3e
movq %rbx, %rax
addq $0x128, %rsp            # imm = 0x128
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
addq %r14, %rbp
xorl %r13d, %r13d
leaq 0x8(%rsp), %r12
movl 0x40(%r14), %eax
cmpq %rax, %r13
jae 0x2e74f
cmpl $0x2, %eax
jb 0x2e7d9
cmpb $0x0, 0x43e(%r15)
je 0x2e7d9
movl 0x30(%rbp,%r13,4), %edx
testl %edx, %edx
je 0x2e7d9
movq (%r15), %rax
movq %r12, %rdi
movq %r15, %rsi
pushq $0x1
popq %rcx
callq *0x38(%rax)
movq %rbx, %rdi
movq %r12, %rsi
callq 0x64f0
movq %r12, %rdi
callq 0x6548
jmp 0x2e81b
movq 0x10(%rbp,%r13,8), %rsi
movq %r12, %rdi
callq 0x4a5d1
movq %rbx, %rdi
movq %r12, %rsi
callq 0x64f0
movq %r12, %rdi
callq 0x6548
cmpb $0x0, 0x603(%r15)
leaq 0x654f9(%rip), %rsi     # 0x93d01
leaq 0x64a3a(%rip), %rax     # 0x93249
cmovneq %rax, %rsi
movq %rbx, %rdi
callq 0x64d0
incq %r13
movl 0x40(%r14), %eax
cmpq %rax, %r13
jae 0x2e794
movq %rbx, %rdi
leaq 0x66856(%rip), %rsi     # 0x9508b
callq 0x64d0
jmp 0x2e794
addq %r14, %rbp
xorl %r13d, %r13d
leaq 0x8(%rsp), %r12
movl 0x40(%r14), %eax
cmpq %rax, %r13
jae 0x2e74f
cmpl $0x2, %eax
jb 0x2e893
cmpb $0x0, 0x43e(%r15)
je 0x2e893
movl 0x30(%rbp,%r13,4), %edx
testl %edx, %edx
je 0x2e893
movq (%r15), %rax
movq %r12, %rdi
movq %r15, %rsi
pushq $0x1
popq %rcx
callq *0x38(%rax)
movq %rbx, %rdi
movq %r12, %rsi
callq 0x64f0
movq %r12, %rdi
callq 0x6548
jmp 0x2e8e5
movl 0x10(%rbp,%r13,8), %esi
movq %r12, %rdi
callq 0x1c182
movq %rbx, %rdi
movq %r12, %rsi
callq 0x64f0
movq %r12, %rdi
callq 0x6548
movq %r15, %rdi
callq 0x41b9c
testb %al, %al
je 0x2e8cc
cmpl $0x0, 0x10(%rbp,%r13,8)
jns 0x2e8e5
jmp 0x2ece7
cmpb $0x1, 0x602(%r15)
jne 0x2e8e5
movq %rbx, %rdi
leaq 0x66369(%rip), %rsi     # 0x94c49
callq 0x64d0
incq %r13
movl 0x40(%r14), %eax
cmpq %rax, %r13
jae 0x2e84a
movq %rbx, %rdi
leaq 0x6678c(%rip), %rsi     # 0x9508b
callq 0x64d0
jmp 0x2e84a
addq %r14, %rbp
xorl %r13d, %r13d
leaq 0x8(%rsp), %r12
movl 0x40(%r14), %eax
cmpq %rax, %r13
jae 0x2e74f
cmpl $0x2, %eax
jb 0x2e95d
cmpb $0x0, 0x43e(%r15)
je 0x2e95d
movl 0x30(%rbp,%r13,4), %edx
testl %edx, %edx
je 0x2e95d
movq (%r15), %rax
movq %r12, %rdi
movq %r15, %rsi
pushq $0x1
popq %rcx
callq *0x38(%rax)
movq %rbx, %rdi
movq %r12, %rsi
callq 0x64f0
movq %r12, %rdi
callq 0x6548
jmp 0x2e99f
movq 0x10(%rbp,%r13,8), %rsi
movq %r12, %rdi
callq 0x4a4d4
movq %rbx, %rdi
movq %r12, %rsi
callq 0x64f0
movq %r12, %rdi
callq 0x6548
cmpb $0x0, 0x603(%r15)
leaq 0x68f74(%rip), %rsi     # 0x97900
leaq 0x652bb(%rip), %rax     # 0x93c4e
cmovneq %rax, %rsi
movq %rbx, %rdi
callq 0x64d0
incq %r13
movl 0x40(%r14), %eax
cmpq %rax, %r13
jae 0x2e914
movq %rbx, %rdi
leaq 0x666d2(%rip), %rsi     # 0x9508b
callq 0x64d0
jmp 0x2e914
addq %r14, %rbp
xorl %r13d, %r13d
leaq 0x8(%rsp), %r12
movl 0x40(%r14), %eax
cmpq %rax, %r13
jae 0x2e74f
cmpl $0x2, %eax
jb 0x2ea0f
cmpb $0x0, 0x43e(%r15)
je 0x2ea0f
movl 0x30(%rbp,%r13,4), %edx
testl %edx, %edx
je 0x2ea0f
movq (%r15), %rax
movq %r12, %rdi
movq %r15, %rsi
pushq $0x1
popq %rcx
callq *0x38(%rax)
movq %rbx, %rdi
movq %r12, %rsi
callq 0x64f0
jmp 0x2ea27
movl 0x10(%rbp,%r13,8), %esi
movq %r12, %rdi
callq 0x4a613
movq %rbx, %rdi
movq %r12, %rsi
callq 0x64f0
movq %r12, %rdi
callq 0x6548
incq %r13
movl 0x40(%r14), %eax
cmpq %rax, %r13
jae 0x2e9ce
movq %rbx, %rdi
leaq 0x66646(%rip), %rsi     # 0x9508b
callq 0x64d0
jmp 0x2e9ce
imulq $0x38, %r12, %rbp
addq %r14, %rbp
xorl %r13d, %r13d
leaq 0x8(%rsp), %r12
movl 0x40(%r14), %eax
cmpq %rax, %r13
jae 0x2e74f
cmpl $0x2, %eax
jb 0x2eaa4
cmpb $0x0, 0x43e(%r15)
je 0x2eaa4
movl 0x30(%rbp,%r13,4), %edx
testl %edx, %edx
je 0x2eaa4
movq (%r15), %rax
movq %r12, %rdi
movq %r15, %rsi
pushq $0x1
popq %rcx
callq *0x38(%rax)
movq %rbx, %rdi
movq %r12, %rsi
callq 0x64f0
movq %r12, %rdi
callq 0x6548
jmp 0x2eac4
cmpl $0x0, 0x10(%rbp,%r13,8)
leaq 0x640b8(%rip), %rsi     # 0x92b69
leaq 0x63db0(%rip), %rax     # 0x92868
cmoveq %rax, %rsi
movq %rbx, %rdi
callq 0x64d0
incq %r13
movl 0x40(%r14), %eax
cmpq %rax, %r13
jae 0x2ea5b
movq %rbx, %rdi
leaq 0x665b1(%rip), %rsi     # 0x9508b
callq 0x64d0
jmp 0x2ea5b
imulq $0x38, %r12, %rax
addq %r14, %rax
addq $0x30, %rax
movq %rax, 0x28(%rsp)
xorl %r12d, %r12d
leaq 0x8(%rsp), %r13
movl 0x40(%r14), %eax
cmpq %rax, %r12
jae 0x2e74f
cmpl $0x2, %eax
jb 0x2eb41
cmpb $0x0, 0x43e(%r15)
je 0x2eb41
movq 0x28(%rsp), %rax
movl (%rax,%r12,4), %edx
testl %edx, %edx
je 0x2eb41
movq (%r15), %rax
movq %r13, %rdi
movq %r15, %rsi
pushq $0x1
popq %rcx
callq *0x38(%rax)
movq %rbx, %rdi
movq %r13, %rsi
callq 0x64f0
jmp 0x2eb5f
movq %r13, %rdi
movq %r15, %rsi
movq %r14, %rdx
movl %ebp, %ecx
movl %r12d, %r8d
callq 0x2d408
movq %rbx, %rdi
movq %r13, %rsi
callq 0x64f0
movq %r13, %rdi
callq 0x6548
incq %r12
movl 0x40(%r14), %eax
cmpq %rax, %r12
jae 0x2eafc
movq %rbx, %rdi
leaq 0x6650e(%rip), %rsi     # 0x9508b
callq 0x64d0
jmp 0x2eafc
imulq $0x38, %r12, %rax
addq %r14, %rax
addq $0x30, %rax
movq %rax, 0x28(%rsp)
xorl %r12d, %r12d
leaq 0x8(%rsp), %r13
movl 0x40(%r14), %eax
cmpq %rax, %r12
jae 0x2e74f
cmpl $0x2, %eax
jb 0x2ebe4
cmpb $0x0, 0x43e(%r15)
je 0x2ebe4
movq 0x28(%rsp), %rax
movl (%rax,%r12,4), %edx
testl %edx, %edx
je 0x2ebe4
movq (%r15), %rax
movq %r13, %rdi
movq %r15, %rsi
pushq $0x1
popq %rcx
callq *0x38(%rax)
movq %rbx, %rdi
movq %r13, %rsi
callq 0x64f0
jmp 0x2ec02
movq %r13, %rdi
movq %r15, %rsi
movq %r14, %rdx
movl %ebp, %ecx
movl %r12d, %r8d
callq 0x2dcf2
movq %rbx, %rdi
movq %r13, %rsi
callq 0x64f0
movq %r13, %rdi
callq 0x6548
incq %r12
movl 0x40(%r14), %eax
cmpq %rax, %r12
jae 0x2eb9f
movq %rbx, %rdi
leaq 0x6646b(%rip), %rsi     # 0x9508b
callq 0x64d0
jmp 0x2eb9f
imulq $0x38, %r12, %rax
addq %r14, %rax
addq $0x30, %rax
movq %rax, 0x28(%rsp)
xorl %r12d, %r12d
leaq 0x8(%rsp), %r13
movl 0x40(%r14), %eax
cmpq %rax, %r12
jae 0x2e74f
cmpl $0x2, %eax
jb 0x2ec87
cmpb $0x0, 0x43e(%r15)
je 0x2ec87
movq 0x28(%rsp), %rax
movl (%rax,%r12,4), %edx
testl %edx, %edx
je 0x2ec87
movq (%r15), %rax
movq %r13, %rdi
movq %r15, %rsi
pushq $0x1
popq %rcx
callq *0x38(%rax)
movq %rbx, %rdi
movq %r13, %rsi
callq 0x64f0
jmp 0x2eca5
movq %r13, %rdi
movq %r15, %rsi
movq %r14, %rdx
movl %ebp, %ecx
movl %r12d, %r8d
callq 0x2d93c
movq %rbx, %rdi
movq %r13, %rsi
callq 0x64f0
movq %r13, %rdi
callq 0x6548
incq %r12
movl 0x40(%r14), %eax
cmpq %rax, %r12
jae 0x2ec42
movq %rbx, %rdi
leaq 0x663c8(%rip), %rsi     # 0x9508b
callq 0x64d0
jmp 0x2ec42
cmpb $0x0, 0x602(%r15)
je 0x2e74b
leaq 0x65f67(%rip), %rsi     # 0x94c49
jmp 0x2e68a
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %r15
leaq 0x64585(%rip), %rsi     # 0x9327e
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xb809f(%rip), %rsi     # 0xe6dc0
movq 0xb92b8(%rip), %rdx     # 0xe7fe0
movq %r15, %rdi
callq 0x6490
jmp 0x2ed7b
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %r15
leaq 0x64586(%rip), %rsi     # 0x932ca
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xb8054(%rip), %rsi     # 0xe6dc0
movq 0xb926d(%rip), %rdx     # 0xe7fe0
movq %r15, %rdi
callq 0x6490
jmp 0x2ee05
jmp 0x2ee19
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee05
jmp 0x2ee19
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0x6548
jmp 0x2edf0
movq %rax, %r14
leaq 0x30(%rsp), %rdi
jmp 0x2ee66
jmp 0x2ee73
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0x6548
testb %bpl, %bpl
jne 0x2ee1c
jmp 0x2ee76
movq %rax, %r14
movq %r15, %rdi
callq 0x6200
jmp 0x2ee76
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee5e
jmp 0x2ee5e
jmp 0x2ee5e
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0x6548
jmp 0x2ee76
jmp 0x2ee73
jmp 0x2ee73
jmp 0x2ee73
movq %rax, %r14
movq %rbx, %rdi
callq 0x6548
leaq 0x50(%rsp), %rdi
callq 0x17a3e
movq %r14, %rdi
callq 0x64b0