// File: /workspace/github_cpp_makefile_star2_O1/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 0x16254
movq %rax, %r15
leaq 0x438(%rbx), %rdx
cmpl $0x65, 0x438(%rbx)
leaq 0x8ff7a(%rip), %rax     # 0xb7708
leaq 0x8e11a(%rip), %rcx     # 0xb58af
cmovbq %rcx, %rax
cmpb $0x0, 0x43c(%rbx)
cmoveq %rcx, %rax
movq %rsp, %rcx
movq %rax, (%rcx)
leaq 0x8ff4d(%rip), %rsi     # 0xb76fe
movq %rbx, %rdi
callq 0x50e4e
cmpb $0x0, 0x43c(%rbx)
jne 0x2784f
cmpl $0x1a3, 0x438(%rbx)     # imm = 0x1A3
ja 0x2784f
cmpb $0x1, 0x441(%rbx)
jne 0x27808
leaq 0x8ff2a(%rip), %rsi     # 0xb770c
movq %rbx, %rdi
callq 0x50fc8
leaq 0x8ff42(%rip), %rsi     # 0xb7733
movq %rbx, %rdi
callq 0x510ce
leaq 0x8ff68(%rip), %rsi     # 0xb7768
movq %rbx, %rdi
callq 0x511d4
testb $0x2, 0x61(%r15)
je 0x2784f
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8ff50(%rip), %rsi     # 0xb776f
leaq 0x8ff67(%rip), %rdx     # 0xb778d
movq %rsp, %rdi
callq 0x7c64
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26a0a
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x2784f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq %r15, 0x70(%rsp)
movq 0x720(%rbx), %r15
movq 0x728(%rbx), %r13
cmpq %r13, %r15
je 0x2791f
leaq 0x8fd4d(%rip), %r12     # 0xb75bf
leaq 0x8ffe7(%rip), %rbp     # 0xb7860
leaq 0x8ffa7(%rip), %r14     # 0xb7827
movq %r15, %rdi
movq %r12, %rsi
callq 0x60a0
testl %eax, %eax
jne 0x27898
cmpb $0x0, 0x43e(%rbx)
je 0x278b4
movq %rbx, %rdi
movq %rbp, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x515ec
addq $0x20, %r15
cmpq %r13, %r15
jne 0x27880
jmp 0x2791f
movq %rbx, %rdi
leaq 0x8fed0(%rip), %rsi     # 0xb778e
callq 0x512da
movq %rbx, %rdi
leaq 0x8feeb(%rip), %rsi     # 0xb77b8
callq 0xba3c
movq %rbx, %rdi
leaq 0x8ff0e(%rip), %rsi     # 0xb77ea
callq 0x513e0
movq %rbx, %rdi
leaq 0x8ff20(%rip), %rsi     # 0xb780b
callq 0x50fc8
movq %rbx, %rdi
leaq 0x8ff38(%rip), %rsi     # 0xb7832
callq 0x514e6
movq %rbx, %rdi
leaq 0x8ff2f(%rip), %rsi     # 0xb7838
callq 0xb43e
movq %rbx, %rdi
leaq 0x8fe50(%rip), %rsi     # 0xb7768
callq 0x511d4
jmp 0x278a9
movq 0x738(%rbx), %r14
movq 0x740(%rbx), %r15
cmpq %r15, %r14
je 0x27943
movq %rbx, %rdi
movq %r14, %rsi
callq 0xb674
addq $0x20, %r14
jmp 0x2792d
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 0x28317
leaq 0x8ecb6(%rip), %rcx     # 0xb6630
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
testb $0x4, 0x63(%r15)
je 0x28317
addq $0xb4, %r15
leaq 0x8fed4(%rip), %rsi     # 0xb7870
movq %rsp, %rdi
movq %r15, %rdx
callq 0x51866
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
jmp 0x281bf
leaq 0xa0(%r15), %r14
cmpl $0x0, 0xac(%r15)
je 0x27f8b
leaq 0x68(%rsp), %rsi
leaq 0x60(%rsp), %rdx
leaq 0x58(%rsp), %rcx
movq %rbx, %rdi
callq 0x162fc
movl 0x68(%rsp), %esi
testl %esi, %esi
je 0x28029
cmpb $0x1, 0x43e(%rbx)
jne 0x2804a
leaq 0x6c(%rsp), %rdx
leaq 0x8ff2b(%rip), %rsi     # 0xb7935
movq %rsp, %rdi
callq 0x518f2
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
jmp 0x28078
leaq 0xb4(%r15), %rdx
leaq 0x8fe3a(%rip), %rsi     # 0xb786c
movq %rsp, %rdi
callq 0x5174e
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
leaq 0x10(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x27a62
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x1, 0x60(%r15)
je 0x27aaf
cmpl $0x1, 0xb0(%r15)
je 0x27aaf
movq %r15, %rdx
addq $0xb0, %rdx
leaq 0x8fdf8(%rip), %rsi     # 0xb787c
movq %rsp, %rdi
callq 0x517da
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27aaf
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x8, 0x62(%r15)
je 0x27af2
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8fdc8(%rip), %rsi     # 0xb788b
leaq 0x8fdc7(%rip), %rdx     # 0xb7891
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27af2
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x10, 0x62(%r15)
je 0x27b35
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8fddd(%rip), %rsi     # 0xb78e3
leaq 0x8fddb(%rip), %rdx     # 0xb78e8
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27b35
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x20, 0x62(%r15)
je 0x27b78
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8fd49(%rip), %rsi     # 0xb7892
leaq 0x8fd51(%rip), %rdx     # 0xb78a1
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27b78
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x40, 0x62(%r15)
je 0x27bbb
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8fd16(%rip), %rsi     # 0xb78a2
leaq 0x8fd18(%rip), %rdx     # 0xb78ab
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27bbb
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $-0x80, 0x62(%r15)
je 0x27bfe
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8fcdd(%rip), %rsi     # 0xb78ac
leaq 0x8fce9(%rip), %rdx     # 0xb78bf
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27bfe
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x20, 0x63(%r15)
je 0x27c41
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8fcae(%rip), %rsi     # 0xb78c0
leaq 0x8fcb5(%rip), %rdx     # 0xb78ce
callq 0x7c64
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27c41
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x8, 0x63(%r15)
je 0x27c84
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8fc36(%rip), %rsi     # 0xb788b
leaq 0x8fc35(%rip), %rdx     # 0xb7891
callq 0x7c64
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27c84
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x10, 0x63(%r15)
je 0x28317
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x8fc33(%rip), %rsi     # 0xb78cf
leaq 0x8fc36(%rip), %rdx     # 0xb78d9
callq 0x7c64
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
jmp 0x28301
cmpb $0x1, 0x43c(%rbx)
jne 0x2823c
movl 0x448(%rbx), %eax
cmpl $0x3, %eax
je 0x281e7
cmpl $0x2, %eax
je 0x281d6
cmpl $0x1, %eax
jne 0x281f6
leaq 0x8fcaf(%rip), %rsi     # 0xb799e
movq %rbx, %rdi
callq 0xc380
jmp 0x281f6
testb $0x1, 0x63(%r15)
je 0x27d45
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8fbc7(%rip), %rsi     # 0xb78da
leaq 0x8fbc5(%rip), %rdx     # 0xb78df
movq %rsp, %rdi
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27d45
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x40, 0x62(%r15)
je 0x27d8e
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8fb46(%rip), %rsi     # 0xb78a2
leaq 0x8fb48(%rip), %rdx     # 0xb78ab
movq %rsp, %rdi
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27d8e
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x2, 0x63(%r15)
je 0x27dd7
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8fb3b(%rip), %rsi     # 0xb78e0
leaq 0x8fb3c(%rip), %rdx     # 0xb78e8
movq %rsp, %rdi
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27dd7
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x4, 0x61(%r15)
je 0x27e20
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8fafb(%rip), %rsi     # 0xb78e9
leaq 0x8fafe(%rip), %rdx     # 0xb78f3
movq %rsp, %rdi
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27e20
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x60(%r15), %rax
btl $0x19, %eax
jb 0x27ebd
testb $0x10, %al
je 0x27e74
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8fab3(%rip), %rsi     # 0xb78f5
leaq 0x8faae(%rip), %rdx     # 0xb78f7
movq %rsp, %rdi
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27e74
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x20, 0x60(%r15)
je 0x27ebd
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8fa69(%rip), %rsi     # 0xb78f4
leaq 0x8fa65(%rip), %rdx     # 0xb78f7
movq %rsp, %rdi
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27ebd
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x4, 0x60(%r15)
je 0x27f06
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8fa24(%rip), %rsi     # 0xb78f8
leaq 0x8fa34(%rip), %rdx     # 0xb790f
movq %rsp, %rdi
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27f06
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x8, 0x60(%r15)
je 0x27f4f
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f9f3(%rip), %rsi     # 0xb7910
leaq 0x8fa02(%rip), %rdx     # 0xb7926
movq %rsp, %rdi
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27f4f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x2, 0x60(%r15)
je 0x28317
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f9bd(%rip), %rsi     # 0xb7927
leaq 0x8f9c3(%rip), %rdx     # 0xb7934
movq %rsp, %rdi
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
jmp 0x28301
leaq 0x8f9b6(%rip), %rsi     # 0xb7948
movq %rsp, %rdi
movq %r14, %rdx
callq 0x5174e
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
leaq 0x10(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x27fc5
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0xa4(%r15), %rdx
leaq 0x8f998(%rip), %rsi     # 0xb796b
movq %rsp, %rdi
callq 0x5174e
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x27ffe
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
addq $0xa8, %r15
leaq 0x8f982(%rip), %rsi     # 0xb798e
movq %rsp, %rdi
movq %r15, %rdx
callq 0x5174e
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
jmp 0x28301
leaq 0x8f918(%rip), %rsi     # 0xb7948
movq %rsp, %rdi
movq %r14, %rdx
callq 0x5174e
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
jmp 0x28078
movq %rbx, %rdi
callq 0x1c66e
movl 0x10(%rax), %eax
leaq 0x3c(%rsp), %rdx
movl %eax, (%rdx)
leaq 0x8f8e5(%rip), %rsi     # 0xb7948
movq %rsp, %rdi
callq 0x5197e
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x28093
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x60(%rsp), %esi
testl %esi, %esi
je 0x280c7
cmpb $0x1, 0x43e(%rbx)
jne 0x280ec
leaq 0x64(%rsp), %rdx
leaq 0x8f8a8(%rip), %rsi     # 0xb7958
movq %rsp, %rdi
callq 0x518f2
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
jmp 0x2811a
leaq 0xa4(%r15), %rdx
leaq 0x8f896(%rip), %rsi     # 0xb796b
movq %rsp, %rdi
callq 0x5174e
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
jmp 0x2811a
movq %rbx, %rdi
callq 0x1c66e
movl 0x10(%rax), %eax
leaq 0x3c(%rsp), %rdx
movl %eax, (%rdx)
leaq 0x8f866(%rip), %rsi     # 0xb796b
movq %rsp, %rdi
callq 0x5197e
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x28135
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movl 0x58(%rsp), %esi
testl %esi, %esi
je 0x28169
cmpb $0x1, 0x43e(%rbx)
jne 0x28191
leaq 0x5c(%rsp), %rdx
leaq 0x8f829(%rip), %rsi     # 0xb797b
movq %rsp, %rdi
callq 0x518f2
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
jmp 0x281bf
addq $0xa8, %r15
leaq 0x8f817(%rip), %rsi     # 0xb798e
movq %rsp, %rdi
movq %r15, %rdx
callq 0x5174e
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
jmp 0x281bf
movq %rbx, %rdi
callq 0x1c66e
movl 0x10(%rax), %eax
leaq 0x3c(%rsp), %rdx
movl %eax, (%rdx)
leaq 0x8f7e4(%rip), %rsi     # 0xb798e
movq %rsp, %rdi
callq 0x5197e
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x2830a
jmp 0x28317
leaq 0x8f7d7(%rip), %rsi     # 0xb79b4
movq %rbx, %rdi
callq 0x51a0a
jmp 0x281f6
leaq 0x8f7df(%rip), %rsi     # 0xb79cd
movq %rbx, %rdi
callq 0xc27a
movl 0x44c(%rbx), %eax
cmpl $0x3, %eax
je 0x2822d
cmpl $0x2, %eax
je 0x2821c
cmpl $0x1, %eax
jne 0x2823c
leaq 0x8f7d2(%rip), %rsi     # 0xb79e4
movq %rbx, %rdi
callq 0xc486
jmp 0x2823c
leaq 0x8f7d5(%rip), %rsi     # 0xb79f8
movq %rbx, %rdi
callq 0xc27a
jmp 0x2823c
leaq 0x8f7db(%rip), %rsi     # 0xb7a0f
movq %rbx, %rdi
callq 0xcef8
testb $0x2, 0x61(%r15)
je 0x28285
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f7d1(%rip), %rsi     # 0xb7a24
leaq 0x8f7de(%rip), %rdx     # 0xb7a38
movq %rsp, %rdi
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x28285
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x40, 0x61(%r15)
je 0x282ce
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f79d(%rip), %rsi     # 0xb7a39
leaq 0x8f7a3(%rip), %rdx     # 0xb7a46
movq %rsp, %rdi
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x282ce
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb $-0x80, 0x61(%r15)
je 0x28317
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8f762(%rip), %rsi     # 0xb7a47
leaq 0x8f765(%rip), %rdx     # 0xb7a51
movq %rsp, %rdi
callq 0x7c64
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
callq 0xebe6
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x28317
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x20(%rsp), %r13
movq 0x28(%rsp), %rbp
cmpq %rbp, %r13
je 0x283ad
leaq 0x10(%rsp), %r12
movq %r12, -0x10(%r12)
movq $0x0, -0x8(%r12)
movb $0x0, (%r12)
movq %rsp, %r14
leaq 0x92d6f(%rip), %r15     # 0xbb0bb
movq (%r13), %rsi
movq 0x8(%r13), %rdx
movq %r14, %rdi
callq 0x60b0
movq 0x28(%rsp), %rax
addq $-0x20, %rax
cmpq %rax, %r13
je 0x28375
movq %r14, %rdi
movq %r15, %rsi
callq 0x64e0
addq $0x20, %r13
cmpq %rbp, %r13
jne 0x2834c
leaq 0x8f6cd(%rip), %rsi     # 0xb7a52
leaq 0x8f6ce(%rip), %rcx     # 0xb7a5a
movq %rsp, %rdx
movq %rbx, %rdi
callq 0x51b10
movq (%rsp), %rdi
cmpq %r12, %rdi
je 0x283ad
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x40(%rsp), %r13
movq 0x48(%rsp), %rbp
cmpq %rbp, %r13
je 0x28443
leaq 0x10(%rsp), %r12
movq %r12, -0x10(%r12)
movq $0x0, -0x8(%r12)
movb $0x0, (%r12)
movq %rsp, %r14
leaq 0x92cd9(%rip), %r15     # 0xbb0bb
movq (%r13), %rsi
movq 0x8(%r13), %rdx
movq %r14, %rdi
callq 0x60b0
movq 0x48(%rsp), %rax
addq $-0x20, %rax
cmpq %rax, %r13
je 0x2840b
movq %r14, %rdi
movq %r15, %rsi
callq 0x64e0
addq $0x20, %r13
cmpq %rbp, %r13
jne 0x283e2
leaq 0x8f637(%rip), %rsi     # 0xb7a52
leaq 0x8f63e(%rip), %rcx     # 0xb7a60
movq %rsp, %rdx
movq %rbx, %rdi
callq 0x51d0c
movq (%rsp), %rdi
cmpq %r12, %rdi
je 0x28443
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0x8d465(%rip), %rsi     # 0xb58af
movq %rbx, %rdi
callq 0xa700
leaq 0x40(%rsp), %rdi
callq 0xda64
leaq 0x20(%rsp), %rdi
callq 0xda64
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x28562
jmp 0x28562
jmp 0x2859b
jmp 0x28562
jmp 0x28562
jmp 0x2859b
jmp 0x28562
jmp 0x28562
jmp 0x2859b
jmp 0x28562
jmp 0x2859b
jmp 0x28562
jmp 0x2859b
jmp 0x28562
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x28562
jmp 0x2859b
jmp 0x2859b
jmp 0x2859b
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2859b
jmp 0x2854a
jmp 0x2854a
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
jmp 0x2854a
jmp 0x2859b
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
jne 0x285ae
jmp 0x285bb
jmp 0x28562
jmp 0x2859b
jmp 0x2859b
jmp 0x2859b
jmp 0x2859b
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x285ae
jmp 0x285bb
jmp 0x2859b
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x285cf
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x285cf
movq %rax, %rbx
jmp 0x285cf
jmp 0x285a2
jmp 0x285a2
movq %rax, %rbx
jmp 0x285bb
jmp 0x285a2
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r12, %rdi
je 0x285bb
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0x40(%rsp), %rdi
callq 0xda64
leaq 0x20(%rsp), %rdi
callq 0xda64
movq %rbx, %rdi
callq 0x64a0
nop