// File: /workspace/github_cpp_makefile_star2_O3/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::emit_header()
void CompilerGLSL::emit_header()
{
	auto &execution = get_entry_point();
	statement("#version ", options.version, options.es && options.version > 100 ? " es" : "");

	if (!options.es && options.version < 420)
	{
		// Needed for binding = # on UBOs, etc.
		if (options.enable_420pack_extension)
		{
			statement("#ifdef GL_ARB_shading_language_420pack");
			statement("#extension GL_ARB_shading_language_420pack : require");
			statement("#endif");
		}
		// Needed for: layout(early_fragment_tests) in;
		if (execution.flags.get(ExecutionModeEarlyFragmentTests))
			require_extension_internal("GL_ARB_shader_image_load_store");
	}

	for (auto &ext : forced_extensions)
	{
		if (ext == "GL_AMD_gpu_shader_half_float" && !options.vulkan_semantics)
		{
			// Special case, this extension has a potential fallback to another vendor extension in normal GLSL.
			// GL_AMD_gpu_shader_half_float is a superset, so try that first.
			statement("#if defined(GL_AMD_gpu_shader_half_float)");
			statement("#extension GL_AMD_gpu_shader_half_float : require");
			statement("#elif defined(GL_NV_gpu_shader5)");
			statement("#extension GL_NV_gpu_shader5 : require");
			statement("#else");
			statement("#error No extension available for FP16.");
			statement("#endif");
		}
		else
			statement("#extension ", ext, " : require");
	}

	for (auto &header : header_lines)
		statement(header);

	vector<string> inputs;
	vector<string> outputs;

	switch (execution.model)
	{
	case ExecutionModelGeometry:
		outputs.push_back(join("max_vertices = ", execution.output_vertices));
		if ((execution.flags.get(ExecutionModeInvocations)) && execution.invocations != 1)
			inputs.push_back(join("invocations = ", execution.invocations));
		if (execution.flags.get(ExecutionModeInputPoints))
			inputs.push_back("points");
		if (execution.flags.get(ExecutionModeInputLines))
			inputs.push_back("lines");
		if (execution.flags.get(ExecutionModeInputLinesAdjacency))
			inputs.push_back("lines_adjacency");
		if (execution.flags.get(ExecutionModeTriangles))
			inputs.push_back("triangles");
		if (execution.flags.get(ExecutionModeInputTrianglesAdjacency))
			inputs.push_back("triangles_adjacency");
		if (execution.flags.get(ExecutionModeOutputTriangleStrip))
			outputs.push_back("triangle_strip");
		if (execution.flags.get(ExecutionModeOutputPoints))
			outputs.push_back("points");
		if (execution.flags.get(ExecutionModeOutputLineStrip))
			outputs.push_back("line_strip");
		break;

	case ExecutionModelTessellationControl:
		if (execution.flags.get(ExecutionModeOutputVertices))
			outputs.push_back(join("vertices = ", execution.output_vertices));
		break;

	case ExecutionModelTessellationEvaluation:
		if (execution.flags.get(ExecutionModeQuads))
			inputs.push_back("quads");
		if (execution.flags.get(ExecutionModeTriangles))
			inputs.push_back("triangles");
		if (execution.flags.get(ExecutionModeIsolines))
			inputs.push_back("isolines");
		if (execution.flags.get(ExecutionModePointMode))
			inputs.push_back("point_mode");

		if (!execution.flags.get(ExecutionModeIsolines))
		{
			if (execution.flags.get(ExecutionModeVertexOrderCw))
				inputs.push_back("cw");
			if (execution.flags.get(ExecutionModeVertexOrderCcw))
				inputs.push_back("ccw");
		}

		if (execution.flags.get(ExecutionModeSpacingFractionalEven))
			inputs.push_back("fractional_even_spacing");
		if (execution.flags.get(ExecutionModeSpacingFractionalOdd))
			inputs.push_back("fractional_odd_spacing");
		if (execution.flags.get(ExecutionModeSpacingEqual))
			inputs.push_back("equal_spacing");
		break;

	case ExecutionModelGLCompute:
	{
		if (execution.workgroup_size.constant != 0)
		{
			SpecializationConstant wg_x, wg_y, wg_z;
			get_work_group_size_specialization_constants(wg_x, wg_y, wg_z);

			if (wg_x.id)
			{
				if (options.vulkan_semantics)
					inputs.push_back(join("local_size_x_id = ", wg_x.constant_id));
				else
					inputs.push_back(join("local_size_x = ", get<SPIRConstant>(wg_x.id).scalar()));
			}
			else
				inputs.push_back(join("local_size_x = ", execution.workgroup_size.x));

			if (wg_y.id)
			{
				if (options.vulkan_semantics)
					inputs.push_back(join("local_size_y_id = ", wg_y.constant_id));
				else
					inputs.push_back(join("local_size_y = ", get<SPIRConstant>(wg_y.id).scalar()));
			}
			else
				inputs.push_back(join("local_size_y = ", execution.workgroup_size.y));

			if (wg_z.id)
			{
				if (options.vulkan_semantics)
					inputs.push_back(join("local_size_z_id = ", wg_z.constant_id));
				else
					inputs.push_back(join("local_size_z = ", get<SPIRConstant>(wg_z.id).scalar()));
			}
			else
				inputs.push_back(join("local_size_z = ", execution.workgroup_size.z));
		}
		else
		{
			inputs.push_back(join("local_size_x = ", execution.workgroup_size.x));
			inputs.push_back(join("local_size_y = ", execution.workgroup_size.y));
			inputs.push_back(join("local_size_z = ", execution.workgroup_size.z));
		}
		break;
	}

	case ExecutionModelFragment:
		if (options.es)
		{
			switch (options.fragment.default_float_precision)
			{
			case Options::Lowp:
				statement("precision lowp float;");
				break;

			case Options::Mediump:
				statement("precision mediump float;");
				break;

			case Options::Highp:
				statement("precision highp float;");
				break;

			default:
				break;
			}

			switch (options.fragment.default_int_precision)
			{
			case Options::Lowp:
				statement("precision lowp int;");
				break;

			case Options::Mediump:
				statement("precision mediump int;");
				break;

			case Options::Highp:
				statement("precision highp int;");
				break;

			default:
				break;
			}
		}

		if (execution.flags.get(ExecutionModeEarlyFragmentTests))
			inputs.push_back("early_fragment_tests");
		if (execution.flags.get(ExecutionModeDepthGreater))
			inputs.push_back("depth_greater");
		if (execution.flags.get(ExecutionModeDepthLess))
			inputs.push_back("depth_less");

		break;

	default:
		break;
	}

	if (!inputs.empty())
		statement("layout(", merge(inputs), ") in;");
	if (!outputs.empty())
		statement("layout(", merge(outputs), ") out;");

	statement("");
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x78, %rsp
movq %rdi, %rbx
callq 0x15f76
movq %rax, %r15
leaq 0x438(%rbx), %rdx
cmpl $0x65, 0x438(%rbx)
leaq 0x8f5e4(%rip), %rax     # 0xb66f8
leaq 0x8d794(%rip), %rcx     # 0xb48af
cmovbq %rcx, %rax
cmpb $0x0, 0x43c(%rbx)
cmoveq %rcx, %rax
movq %rsp, %rcx
movq %rax, (%rcx)
leaq 0x8f5b7(%rip), %rsi     # 0xb66ee
movq %rbx, %rdi
callq 0x50656
cmpb $0x0, 0x43c(%rbx)
jne 0x271d5
cmpl $0x1a3, 0x438(%rbx)     # imm = 0x1A3
ja 0x271d5
cmpb $0x1, 0x441(%rbx)
jne 0x2718e
leaq 0x8f594(%rip), %rsi     # 0xb66fc
movq %rbx, %rdi
callq 0x507d0
leaq 0x8f5ac(%rip), %rsi     # 0xb6723
movq %rbx, %rdi
callq 0x508d6
leaq 0x8f5d2(%rip), %rsi     # 0xb6758
movq %rbx, %rdi
callq 0x509dc
testb $0x2, 0x61(%r15)
je 0x271d5
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f5ba(%rip), %rsi     # 0xb675f
leaq 0x8f5d1(%rip), %rdx     # 0xb677d
movq %rsp, %rdi
callq 0x7be0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26356
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x271d5
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq %r15, 0x70(%rsp)
movq 0x720(%rbx), %r15
movq 0x728(%rbx), %r13
cmpq %r13, %r15
je 0x272a5
leaq 0x8f3b7(%rip), %r12     # 0xb65af
leaq 0x8f651(%rip), %rbp     # 0xb6850
leaq 0x8f611(%rip), %r14     # 0xb6817
movq %r15, %rdi
movq %r12, %rsi
callq 0x60a0
testl %eax, %eax
jne 0x2721e
cmpb $0x0, 0x43e(%rbx)
je 0x2723a
movq %rbx, %rdi
movq %rbp, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x50df4
addq $0x20, %r15
cmpq %r13, %r15
jne 0x27206
jmp 0x272a5
movq %rbx, %rdi
leaq 0x8f53a(%rip), %rsi     # 0xb677e
callq 0x50ae2
movq %rbx, %rdi
leaq 0x8f555(%rip), %rsi     # 0xb67a8
callq 0xb9fc
movq %rbx, %rdi
leaq 0x8f578(%rip), %rsi     # 0xb67da
callq 0x50be8
movq %rbx, %rdi
leaq 0x8f58a(%rip), %rsi     # 0xb67fb
callq 0x507d0
movq %rbx, %rdi
leaq 0x8f5a2(%rip), %rsi     # 0xb6822
callq 0x50cee
movq %rbx, %rdi
leaq 0x8f599(%rip), %rsi     # 0xb6828
callq 0xb3fe
movq %rbx, %rdi
leaq 0x8f4ba(%rip), %rsi     # 0xb6758
callq 0x509dc
jmp 0x2722f
movq 0x738(%rbx), %r14
movq 0x740(%rbx), %r15
cmpq %r15, %r14
je 0x272c9
movq %rbx, %rdi
movq %r14, %rsi
callq 0xb634
addq $0x20, %r14
jmp 0x272b3
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
xorl %eax, %eax
movq %rax, 0x30(%rsp)
movq %rax, 0x50(%rsp)
movaps %xmm0, 0x40(%rsp)
movq 0x70(%rsp), %r15
movl 0xb8(%r15), %eax
decl %eax
cmpl $0x4, %eax
ja 0x27cce
leaq 0x8e320(%rip), %rcx     # 0xb5620
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
testb $0x4, 0x63(%r15)
je 0x27cce
addq $0xb4, %r15
leaq 0x8f53e(%rip), %rsi     # 0xb6860
movq %rsp, %rdi
movq %r15, %rdx
callq 0x5106e
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
jmp 0x27b6e
leaq 0xa0(%r15), %r14
cmpl $0x0, 0xac(%r15)
je 0x2793a
leaq 0x68(%rsp), %rsi
leaq 0x60(%rsp), %rdx
leaq 0x58(%rsp), %rcx
movq %rbx, %rdi
callq 0x15fe4
movl 0x68(%rsp), %esi
testl %esi, %esi
je 0x279d8
cmpb $0x1, 0x43e(%rbx)
jne 0x279f9
leaq 0x6c(%rsp), %rdx
leaq 0x8f595(%rip), %rsi     # 0xb6925
movq %rsp, %rdi
callq 0x510fa
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
jmp 0x27a27
leaq 0xb4(%r15), %rdx
leaq 0x8f4a4(%rip), %rsi     # 0xb685c
movq %rsp, %rdi
callq 0x50f56
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
leaq 0x10(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x273e8
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
testb $0x1, %al
je 0x2743a
cmpl $0x1, 0xb0(%r15)
je 0x2743a
movq %r15, %rdx
addq $0xb0, %rdx
leaq 0x8f461(%rip), %rsi     # 0xb686c
movq %rsp, %rdi
callq 0x50fe2
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27436
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0x13, %eax
jae 0x27480
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8f42e(%rip), %rsi     # 0xb687b
leaq 0x8f42d(%rip), %rdx     # 0xb6881
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x2747c
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0x14, %eax
jae 0x274c6
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8f440(%rip), %rsi     # 0xb68d3
leaq 0x8f43e(%rip), %rdx     # 0xb68d8
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x274c2
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0x15, %eax
jae 0x2750c
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8f3a9(%rip), %rsi     # 0xb6882
leaq 0x8f3b1(%rip), %rdx     # 0xb6891
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27508
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0x16, %eax
jae 0x27552
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8f373(%rip), %rsi     # 0xb6892
leaq 0x8f375(%rip), %rdx     # 0xb689b
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x2754e
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0x17, %eax
jae 0x27598
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8f337(%rip), %rsi     # 0xb689c
leaq 0x8f343(%rip), %rdx     # 0xb68af
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27594
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0x1d, %eax
jae 0x275de
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8f305(%rip), %rsi     # 0xb68b0
leaq 0x8f30c(%rip), %rdx     # 0xb68be
callq 0x7be0
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x275da
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0x1b, %eax
jae 0x27624
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8f28a(%rip), %rsi     # 0xb687b
leaq 0x8f289(%rip), %rdx     # 0xb6881
callq 0x7be0
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27620
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0x1c, %eax
jae 0x27cce
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8f284(%rip), %rsi     # 0xb68bf
leaq 0x8f287(%rip), %rdx     # 0xb68c9
callq 0x7be0
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
jmp 0x27cb8
cmpb $0x1, 0x43c(%rbx)
jne 0x27beb
movl 0x448(%rbx), %eax
cmpl $0x3, %eax
je 0x27b96
cmpl $0x2, %eax
je 0x27b85
cmpl $0x1, %eax
jne 0x27ba5
leaq 0x8f300(%rip), %rsi     # 0xb698e
movq %rbx, %rdi
callq 0xc340
jmp 0x27ba5
movq 0x60(%r15), %rax
btl $0x18, %eax
jae 0x276eb
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f215(%rip), %rsi     # 0xb68ca
leaq 0x8f213(%rip), %rdx     # 0xb68cf
movq %rsp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x276e7
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0x16, %eax
jae 0x27737
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f191(%rip), %rsi     # 0xb6892
leaq 0x8f193(%rip), %rdx     # 0xb689b
movq %rsp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27733
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0x19, %eax
jae 0x27783
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f183(%rip), %rsi     # 0xb68d0
leaq 0x8f184(%rip), %rdx     # 0xb68d8
movq %rsp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x2777f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0xa, %eax
jae 0x277cf
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f140(%rip), %rsi     # 0xb68d9
leaq 0x8f143(%rip), %rdx     # 0xb68e3
movq %rsp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x277cb
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0x19, %eax
jb 0x2786d
testb $0x10, %al
je 0x27823
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f0f8(%rip), %rsi     # 0xb68e5
leaq 0x8f0f3(%rip), %rdx     # 0xb68e7
movq %rsp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x2781f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
testb $0x20, %al
je 0x2786d
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f0ad(%rip), %rsi     # 0xb68e4
leaq 0x8f0a9(%rip), %rdx     # 0xb68e7
movq %rsp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27869
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
testb $0x4, %al
je 0x278b7
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f067(%rip), %rsi     # 0xb68e8
leaq 0x8f077(%rip), %rdx     # 0xb68ff
movq %rsp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x278b3
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
testb $0x8, %al
je 0x27901
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f035(%rip), %rsi     # 0xb6900
leaq 0x8f044(%rip), %rdx     # 0xb6916
movq %rsp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x278fd
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
testb $0x2, %al
je 0x27cce
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8effe(%rip), %rsi     # 0xb6917
leaq 0x8f004(%rip), %rdx     # 0xb6924
movq %rsp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
jmp 0x27cb8
leaq 0x8eff7(%rip), %rsi     # 0xb6938
movq %rsp, %rdi
movq %r14, %rdx
callq 0x50f56
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
leaq 0x10(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x27974
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0xa4(%r15), %rdx
leaq 0x8efd9(%rip), %rsi     # 0xb695b
movq %rsp, %rdi
callq 0x50f56
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x279ad
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
addq $0xa8, %r15
leaq 0x8efc3(%rip), %rsi     # 0xb697e
movq %rsp, %rdi
movq %r15, %rdx
callq 0x50f56
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
jmp 0x27cb8
leaq 0x8ef59(%rip), %rsi     # 0xb6938
movq %rsp, %rdi
movq %r14, %rdx
callq 0x50f56
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
jmp 0x27a27
movq %rbx, %rdi
callq 0x1c036
movl 0x10(%rax), %eax
leaq 0x3c(%rsp), %rdx
movl %eax, (%rdx)
leaq 0x8ef26(%rip), %rsi     # 0xb6938
movq %rsp, %rdi
callq 0x51186
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x27a42
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x60(%rsp), %esi
testl %esi, %esi
je 0x27a76
cmpb $0x1, 0x43e(%rbx)
jne 0x27a9b
leaq 0x64(%rsp), %rdx
leaq 0x8eee9(%rip), %rsi     # 0xb6948
movq %rsp, %rdi
callq 0x510fa
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
jmp 0x27ac9
leaq 0xa4(%r15), %rdx
leaq 0x8eed7(%rip), %rsi     # 0xb695b
movq %rsp, %rdi
callq 0x50f56
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
jmp 0x27ac9
movq %rbx, %rdi
callq 0x1c036
movl 0x10(%rax), %eax
leaq 0x3c(%rsp), %rdx
movl %eax, (%rdx)
leaq 0x8eea7(%rip), %rsi     # 0xb695b
movq %rsp, %rdi
callq 0x51186
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x27ae4
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x58(%rsp), %esi
testl %esi, %esi
je 0x27b18
cmpb $0x1, 0x43e(%rbx)
jne 0x27b40
leaq 0x5c(%rsp), %rdx
leaq 0x8ee6a(%rip), %rsi     # 0xb696b
movq %rsp, %rdi
callq 0x510fa
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
jmp 0x27b6e
addq $0xa8, %r15
leaq 0x8ee58(%rip), %rsi     # 0xb697e
movq %rsp, %rdi
movq %r15, %rdx
callq 0x50f56
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
jmp 0x27b6e
movq %rbx, %rdi
callq 0x1c036
movl 0x10(%rax), %eax
leaq 0x3c(%rsp), %rdx
movl %eax, (%rdx)
leaq 0x8ee25(%rip), %rsi     # 0xb697e
movq %rsp, %rdi
callq 0x51186
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x27cc1
jmp 0x27cce
leaq 0x8ee18(%rip), %rsi     # 0xb69a4
movq %rbx, %rdi
callq 0x51212
jmp 0x27ba5
leaq 0x8ee20(%rip), %rsi     # 0xb69bd
movq %rbx, %rdi
callq 0xc23a
movl 0x44c(%rbx), %eax
cmpl $0x3, %eax
je 0x27bdc
cmpl $0x2, %eax
je 0x27bcb
cmpl $0x1, %eax
jne 0x27beb
leaq 0x8ee13(%rip), %rsi     # 0xb69d4
movq %rbx, %rdi
callq 0xc446
jmp 0x27beb
leaq 0x8ee16(%rip), %rsi     # 0xb69e8
movq %rbx, %rdi
callq 0xc23a
jmp 0x27beb
leaq 0x8ee1c(%rip), %rsi     # 0xb69ff
movq %rbx, %rdi
callq 0xceb8
movq 0x60(%r15), %rax
btl $0x9, %eax
jae 0x27c3b
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8ee0f(%rip), %rsi     # 0xb6a14
leaq 0x8ee1c(%rip), %rdx     # 0xb6a28
movq %rsp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27c37
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0xe, %eax
jae 0x27c87
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8edd8(%rip), %rsi     # 0xb6a29
leaq 0x8edde(%rip), %rdx     # 0xb6a36
movq %rsp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27c83
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
testw %ax, %ax
jns 0x27cce
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8ed9b(%rip), %rsi     # 0xb6a37
leaq 0x8ed9e(%rip), %rdx     # 0xb6a41
movq %rsp, %rdi
callq 0x7be0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebc2
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27cce
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x20(%rsp), %r13
movq 0x28(%rsp), %rbp
cmpq %rbp, %r13
je 0x27d64
leaq 0x10(%rsp), %r12
movq %r12, -0x10(%r12)
movq $0x0, -0x8(%r12)
movb $0x0, (%r12)
movq %rsp, %r14
leaq 0x923a8(%rip), %r15     # 0xba0ab
movq (%r13), %rsi
movq 0x8(%r13), %rdx
movq %r14, %rdi
callq 0x60b0
movq 0x28(%rsp), %rax
addq $-0x20, %rax
cmpq %rax, %r13
je 0x27d2c
movq %r14, %rdi
movq %r15, %rsi
callq 0x64e0
addq $0x20, %r13
cmpq %rbp, %r13
jne 0x27d03
leaq 0x8ed06(%rip), %rsi     # 0xb6a42
leaq 0x8ed07(%rip), %rcx     # 0xb6a4a
movq %rsp, %rdx
movq %rbx, %rdi
callq 0x51318
movq (%rsp), %rdi
cmpq %r12, %rdi
je 0x27d64
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x40(%rsp), %r13
movq 0x48(%rsp), %rbp
cmpq %rbp, %r13
je 0x27dfa
leaq 0x10(%rsp), %r12
movq %r12, -0x10(%r12)
movq $0x0, -0x8(%r12)
movb $0x0, (%r12)
movq %rsp, %r14
leaq 0x92312(%rip), %r15     # 0xba0ab
movq (%r13), %rsi
movq 0x8(%r13), %rdx
movq %r14, %rdi
callq 0x60b0
movq 0x48(%rsp), %rax
addq $-0x20, %rax
cmpq %rax, %r13
je 0x27dc2
movq %r14, %rdi
movq %r15, %rsi
callq 0x64e0
addq $0x20, %r13
cmpq %rbp, %r13
jne 0x27d99
leaq 0x8ec70(%rip), %rsi     # 0xb6a42
leaq 0x8ec77(%rip), %rcx     # 0xb6a50
movq %rsp, %rdx
movq %rbx, %rdi
callq 0x51514
movq (%rsp), %rdi
cmpq %r12, %rdi
je 0x27dfa
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0x8caae(%rip), %rsi     # 0xb48af
movq %rbx, %rdi
callq 0xa6c4
leaq 0x40(%rsp), %rdi
callq 0xda2c
leaq 0x20(%rsp), %rdi
callq 0xda2c
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x27f19
jmp 0x27f19
jmp 0x27f52
jmp 0x27f19
jmp 0x27f19
jmp 0x27f52
jmp 0x27f19
jmp 0x27f19
jmp 0x27f52
jmp 0x27f19
jmp 0x27f52
jmp 0x27f19
jmp 0x27f52
jmp 0x27f19
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f19
jmp 0x27f52
jmp 0x27f52
jmp 0x27f52
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f52
jmp 0x27f01
jmp 0x27f01
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
jmp 0x27f01
jmp 0x27f52
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
jne 0x27f65
jmp 0x27f72
jmp 0x27f19
jmp 0x27f52
jmp 0x27f52
jmp 0x27f52
jmp 0x27f52
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x27f65
jmp 0x27f72
jmp 0x27f52
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27f86
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x27f86
movq %rax, %rbx
jmp 0x27f86
jmp 0x27f59
jmp 0x27f59
movq %rax, %rbx
jmp 0x27f72
jmp 0x27f59
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r12, %rdi
je 0x27f72
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0x40(%rsp), %rdi
callq 0xda2c
leaq 0x20(%rsp), %rdi
callq 0xda2c
movq %rbx, %rdi
callq 0x64a0