// File: /workspace/github_cpp_makefile_star2_O1/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::layout_for_variable[abi:cxx11](spirv_cross::SPIRVariable const&)
string CompilerGLSL::layout_for_variable(const SPIRVariable &var)
{
	// FIXME: Come up with a better solution for when to disable layouts.
	// Having layouts depend on extensions as well as which types
	// of layouts are used. For now, the simple solution is to just disable
	// layouts for legacy versions.
	if (is_legacy())
		return "";

	vector<string> attr;

	auto &dec = ir.meta[var.self].decoration;
	auto &type = get<SPIRType>(var.basetype);
	auto flags = dec.decoration_flags;
	auto typeflags = ir.meta[type.self].decoration.decoration_flags;

	if (options.vulkan_semantics && var.storage == StorageClassPushConstant)
		attr.push_back("push_constant");

	if (flags.get(DecorationRowMajor))
		attr.push_back("row_major");
	if (flags.get(DecorationColMajor))
		attr.push_back("column_major");

	if (options.vulkan_semantics)
	{
		if (flags.get(DecorationInputAttachmentIndex))
			attr.push_back(join("input_attachment_index = ", dec.input_attachment));
	}

	bool is_block = has_decoration(type.self, DecorationBlock);
	if (flags.get(DecorationLocation) && can_use_io_location(var.storage, is_block))
	{
		Bitset combined_decoration;
		for (uint32_t i = 0; i < ir.meta[type.self].members.size(); i++)
			combined_decoration.merge_or(combined_decoration_for_member(type, i));

		// If our members have location decorations, we don't need to
		// emit location decorations at the top as well (looks weird).
		if (!combined_decoration.get(DecorationLocation))
			attr.push_back(join("location = ", dec.location));
	}

	// Can only declare Component if we can declare location.
	if (flags.get(DecorationComponent) && can_use_io_location(var.storage, is_block))
	{
		if (!options.es)
		{
			if (options.version < 440 && options.version >= 140)
				require_extension_internal("GL_ARB_enhanced_layouts");
			else if (options.version < 140)
				SPIRV_CROSS_THROW("Component decoration is not supported in targets below GLSL 1.40.");
			attr.push_back(join("component = ", dec.component));
		}
		else
			SPIRV_CROSS_THROW("Component decoration is not supported in ES targets.");
	}

	if (flags.get(DecorationIndex))
		attr.push_back(join("index = ", dec.index));

	// Do not emit set = decoration in regular GLSL output, but
	// we need to preserve it in Vulkan GLSL mode.
	if (var.storage != StorageClassPushConstant)
	{
		if (flags.get(DecorationDescriptorSet) && options.vulkan_semantics)
			attr.push_back(join("set = ", dec.set));
	}

	// GL 3.0/GLSL 1.30 is not considered legacy, but it doesn't have UBOs ...
	bool can_use_buffer_blocks = (options.es && options.version >= 300) || (!options.es && options.version >= 140);

	bool can_use_binding;
	if (options.es)
		can_use_binding = options.version >= 310;
	else
		can_use_binding = options.enable_420pack_extension || (options.version >= 420);

	// Make sure we don't emit binding layout for a classic uniform on GLSL 1.30.
	if (!can_use_buffer_blocks && var.storage == StorageClassUniform)
		can_use_binding = false;

	if (can_use_binding && flags.get(DecorationBinding))
		attr.push_back(join("binding = ", dec.binding));

	if (flags.get(DecorationOffset))
		attr.push_back(join("offset = ", dec.offset));

	bool push_constant_block = options.vulkan_semantics && var.storage == StorageClassPushConstant;
	bool ssbo_block = var.storage == StorageClassStorageBuffer ||
	                  (var.storage == StorageClassUniform && typeflags.get(DecorationBufferBlock));

	// Instead of adding explicit offsets for every element here, just assume we're using std140 or std430.
	// If SPIR-V does not comply with either layout, we cannot really work around it.
	if (can_use_buffer_blocks && var.storage == StorageClassUniform && typeflags.get(DecorationBlock))
	{
		if (buffer_is_packing_standard(type, BufferPackingStd140))
			attr.push_back("std140");
		else if (buffer_is_packing_standard(type, BufferPackingStd140EnhancedLayout))
		{
			attr.push_back("std140");
			// Fallback time. We might be able to use the ARB_enhanced_layouts to deal with this difference,
			// however, we can only use layout(offset) on the block itself, not any substructs, so the substructs better be the appropriate layout.
			// Enhanced layouts seem to always work in Vulkan GLSL, so no need for extensions there.
			if (options.es && !options.vulkan_semantics)
				SPIRV_CROSS_THROW("Push constant block cannot be expressed as neither std430 nor std140. ES-targets do "
				                  "not support GL_ARB_enhanced_layouts.");
			if (!options.es && !options.vulkan_semantics && options.version < 440)
				require_extension_internal("GL_ARB_enhanced_layouts");

			// This is a very last minute to check for this, but use this unused decoration to mark that we should emit
			// explicit offsets for this block type.
			// layout_for_variable() will be called before the actual buffer emit.
			// The alternative is a full pass before codegen where we deduce this decoration,
			// but then we are just doing the exact same work twice, and more complexity.
			set_decoration(type.self, DecorationCPacked);
		}
		else
		{
			SPIRV_CROSS_THROW("Uniform buffer cannot be expressed as std140, even with enhanced layouts. You can try "
			                  "flattening this block to "
			                  "support a more flexible layout.");
		}
	}
	else if (can_use_buffer_blocks && (push_constant_block || ssbo_block))
	{
		if (buffer_is_packing_standard(type, BufferPackingStd430))
			attr.push_back("std430");
		else if (buffer_is_packing_standard(type, BufferPackingStd140))
			attr.push_back("std140");
		else if (buffer_is_packing_standard(type, BufferPackingStd140EnhancedLayout))
		{
			attr.push_back("std140");

			// Fallback time. We might be able to use the ARB_enhanced_layouts to deal with this difference,
			// however, we can only use layout(offset) on the block itself, not any substructs, so the substructs better be the appropriate layout.
			// Enhanced layouts seem to always work in Vulkan GLSL, so no need for extensions there.
			if (options.es && !options.vulkan_semantics)
				SPIRV_CROSS_THROW("Push constant block cannot be expressed as neither std430 nor std140. ES-targets do "
				                  "not support GL_ARB_enhanced_layouts.");
			if (!options.es && !options.vulkan_semantics && options.version < 440)
				require_extension_internal("GL_ARB_enhanced_layouts");

			set_decoration(type.self, DecorationCPacked);
		}
		else if (buffer_is_packing_standard(type, BufferPackingStd430EnhancedLayout))
		{
			attr.push_back("std430");
			if (options.es && !options.vulkan_semantics)
				SPIRV_CROSS_THROW("Push constant block cannot be expressed as neither std430 nor std140. ES-targets do "
				                  "not support GL_ARB_enhanced_layouts.");
			if (!options.es && !options.vulkan_semantics && options.version < 440)
				require_extension_internal("GL_ARB_enhanced_layouts");

			set_decoration(type.self, DecorationCPacked);
		}
		else
		{
			SPIRV_CROSS_THROW("Buffer block cannot be expressed as neither std430 nor std140, even with enhanced "
			                  "layouts. You can try flattening this block to support a more flexible layout.");
		}
	}

	// For images, the type itself adds a layout qualifer.
	// Only emit the format for storage images.
	if (type.basetype == SPIRType::Image && type.image.sampled == 2)
	{
		const char *fmt = format_to_glsl(type.image.format);
		if (fmt)
			attr.push_back(fmt);
	}

	if (attr.empty())
		return "";

	string res = "layout(";
	res += merge(attr);
	res += ") ";
	return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x148, %rsp            # imm = 0x148
movq %rdi, %r14
cmpb $0x0, 0x43c(%rsi)
movl $0x12b, %eax            # imm = 0x12B
movl $0x81, %ecx
cmovnel %eax, %ecx
cmpl %ecx, 0x438(%rsi)
jbe 0x2a0f6
movq %rdx, %r12
movq %rsi, %r15
xorps %xmm0, %xmm0
movaps %xmm0, 0x50(%rsp)
movq $0x0, 0x60(%rsp)
movl 0x8(%rdx), %eax
movl 0xc(%rdx), %esi
imulq $0x148, %rax, %r13      # imm = 0x148
addq 0x38(%r15), %r13
movq %r15, %rdi
callq 0xa426
movq %rax, %rbx
movq %r12, 0x70(%rsp)
movq 0x60(%r13), %rax
leaq 0x90(%rsp), %r12
movq %rax, -0x8(%r12)
leaq 0x68(%r13), %rsi
xorl %eax, %eax
movq %rax, (%r12)
movq 0x70(%r13), %rcx
movq %rcx, 0x8(%r12)
movq %rax, 0x10(%r12)
movq 0x80(%r13), %rcx
movq %rcx, 0x18(%r12)
movq %r13, 0x68(%rsp)
movups 0x88(%r13), %xmm0
movups %xmm0, 0x20(%r12)
movq %rax, 0x30(%r12)
leaq 0x108(%rsp), %rdx
movq %r12, (%rdx)
movq %r12, %rdi
callq 0xd402
movq %rbx, 0x48(%rsp)
movl 0x8(%rbx), %eax
movq 0x38(%r15), %rcx
imulq $0x148, %rax, %rax      # imm = 0x148
leaq (%rcx,%rax), %rsi
addq $0x68, %rsi
movq -0x8(%rsi), %rax
leaq 0x110(%rsp), %rbp
movq %rax, -0x8(%rbp)
xorl %eax, %eax
movq %rax, (%rbp)
movq 0x8(%rsi), %rcx
movq %rcx, 0x8(%rbp)
movq %rax, 0x10(%rbp)
movq 0x18(%rsi), %rcx
movq %rcx, 0x18(%rbp)
movups 0x20(%rsi), %xmm0
movups %xmm0, 0x20(%rbp)
movq %rax, 0x30(%rbp)
leaq 0x8(%rsp), %rdx
movq %rbp, (%rdx)
movq %rbp, %rdi
callq 0xd402
cmpb $0x1, 0x43e(%r15)
jne 0x29d99
movq 0x70(%rsp), %rax
cmpl $0x9, 0x10(%rax)
jne 0x29d99
leaq 0x18(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8e08a(%rip), %rsi     # 0xb7dec
leaq 0x8e090(%rip), %rdx     # 0xb7df9
leaq 0x8(%rsp), %rdi
callq 0x7c64
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
movq 0x8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x29d99
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x10, 0x88(%rsp)
je 0x29dea
leaq 0x18(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8dd23(%rip), %rsi     # 0xb7ad6
leaq 0x8dd25(%rip), %rdx     # 0xb7adf
leaq 0x8(%rsp), %rdi
callq 0x7c64
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
movq 0x8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x29dea
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x20, 0x88(%rsp)
je 0x29e3b
leaq 0x18(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8dff6(%rip), %rsi     # 0xb7dfa
leaq 0x8dffb(%rip), %rdx     # 0xb7e06
leaq 0x8(%rsp), %rdi
callq 0x7c64
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
movq 0x8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x29e3b
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
cmpb $0x1, 0x43e(%r15)
jne 0x29e96
testb $0x8, 0x8d(%rsp)
je 0x29e96
movq 0x68(%rsp), %rax
leaq 0xc0(%rax), %rdx
leaq 0x8dfa5(%rip), %rsi     # 0xb7e07
leaq 0x8(%rsp), %rdi
callq 0x5211c
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29e96
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x48(%rsp), %rax
movl 0x8(%rax), %esi
movq %r15, %rdi
movl $0x2, %edx
callq 0x1299a
movl %eax, %ecx
testb $0x40, 0x8b(%rsp)
je 0x2a063
movq 0x70(%rsp), %rax
movl 0x10(%rax), %esi
movzbl %cl, %edx
movq %r15, %rdi
movb %cl, 0x7(%rsp)
callq 0x28fb4
movb 0x7(%rsp), %cl
testb %al, %al
je 0x2a063
movq %r14, 0x78(%rsp)
leaq 0x10(%rsp), %r14
movq $0x0, -0x8(%r14)
leaq 0x40(%rsp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
xorps %xmm0, %xmm0
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movups %xmm0, -0x8(%rax)
movq 0x48(%rsp), %rdx
movl 0x8(%rdx), %eax
movq 0x38(%r15), %rcx
imulq $0x148, %rax, %rax      # imm = 0x148
movq 0xd8(%rcx,%rax), %rsi
cmpq 0xd0(%rcx,%rax), %rsi
movq %r15, %rsi
je 0x29fe5
xorl %r15d, %r15d
movabsq $0x4ec4ec4ec4ec4ec5, %r12 # imm = 0x4EC4EC4EC4EC4EC5
leaq 0x80(%rsp), %rbx
leaq 0xc8(%rsp), %rdi
movq %rsi, %r13
movl %r15d, %ecx
callq 0x1b67c
movq 0xc8(%rsp), %rax
movq 0xe0(%rsp), %rbp
orq %rax, 0x8(%rsp)
testq %rbp, %rbp
je 0x29f9e
leaq 0x8(%rbp), %rsi
movq %r14, 0x80(%rsp)
movq %r14, %rdi
movq %rbx, %rdx
callq 0x1fc02
movq (%rbp), %rbp
jmp 0x29f7c
leaq 0xd0(%rsp), %rdi
callq 0xd5b0
movq 0x48(%rsp), %rdx
movl 0x8(%rdx), %eax
movq %r13, %rsi
movq 0x38(%r13), %rcx
imulq $0x148, %rax, %rax      # imm = 0x148
movq 0xd8(%rcx,%rax), %rdi
subq 0xd0(%rcx,%rax), %rdi
incl %r15d
sarq $0x4, %rdi
imulq %r12, %rdi
cmpq %r15, %rdi
ja 0x29f54
testb $0x40, 0xb(%rsp)
leaq 0x90(%rsp), %r12
leaq 0x110(%rsp), %rbp
movq %rsi, %r15
jne 0x2a052
movq 0x68(%rsp), %rax
leaq 0xa4(%rax), %rdx
leaq 0x8dace(%rip), %rsi     # 0xb7ae0
leaq 0xc8(%rsp), %rdi
callq 0x51866
leaq 0x50(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
callq 0xebe6
leaq 0xd8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a052
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x6260
movq %r14, %rdi
callq 0xd5b0
movq 0x78(%rsp), %r14
movb 0x7(%rsp), %cl
testb $-0x80, 0x8b(%rsp)
je 0x2a166
movq 0x70(%rsp), %rax
movl 0x10(%rax), %esi
movzbl %cl, %edx
movq %r15, %rdi
callq 0x28fb4
testb %al, %al
je 0x2a166
cmpb $0x0, 0x43c(%r15)
jne 0x2a8db
movl 0x438(%r15), %eax
leal -0x8c(%rax), %ecx
cmpl $0x12b, %ecx            # imm = 0x12B
ja 0x2a114
leaq 0x18(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8da2d(%rip), %rsi     # 0xb7aec
leaq 0x8da3d(%rip), %rdx     # 0xb7b03
leaq 0x8(%rsp), %rdi
callq 0x7c64
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x26a0a
movq 0x8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2a11f
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x2a11f
leaq 0x10(%r14), %rax
movq %rax, (%r14)
leaq 0x8b7ab(%rip), %rdx     # 0xb58af
movq %r14, %rdi
movq %rdx, %rsi
callq 0x7c64
jmp 0x2a8c6
cmpl $0x8b, %eax
jbe 0x2a944
movq 0x68(%rsp), %rax
leaq 0xa8(%rax), %rdx
leaq 0x8da14(%rip), %rsi     # 0xb7b46
leaq 0x8(%rsp), %rdi
callq 0x51fbc
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a166
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x1, 0x8c(%rsp)
je 0x2a1b7
movq 0x68(%rsp), %rax
leaq 0xc8(%rax), %rdx
leaq 0x8dc95(%rip), %rsi     # 0xb7e18
leaq 0x8(%rsp), %rdi
callq 0x521a8
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a1b7
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x70(%rsp), %rax
cmpl $0x9, 0x10(%rax)
je 0x2a21d
testb $0x4, 0x8c(%rsp)
je 0x2a21d
cmpb $0x1, 0x43e(%r15)
jne 0x2a21d
movq 0x68(%rsp), %rax
leaq 0xac(%rax), %rdx
leaq 0x8d9a2(%rip), %rsi     # 0xb7b8b
leaq 0x8(%rsp), %rdi
callq 0x52234
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a21d
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movb 0x43c(%r15), %cl
movl 0x438(%r15), %eax
cmpl $0x12c, %eax            # imm = 0x12C
setae %dl
movb $0x1, %bl
testb %dl, %cl
jne 0x2a247
cmpl $0x8c, %eax
setae %dl
movl %ecx, %ebx
notb %bl
andb %dl, %bl
testb %cl, %cl
je 0x2a255
cmpl $0x136, %eax            # imm = 0x136
setae %al
jmp 0x2a264
cmpl $0x1a4, %eax            # imm = 0x1A4
setae %al
orb 0x441(%r15), %al
movq 0x70(%rsp), %rcx
cmpl $0x2, 0x10(%rcx)
setne %cl
orb %bl, %cl
cmpb $0x1, %cl
jne 0x2a2cc
testb %al, %al
je 0x2a2cc
testb $0x2, 0x8c(%rsp)
je 0x2a2cc
movq 0x68(%rsp), %rax
leaq 0xb0(%rax), %rdx
leaq 0x8db89(%rip), %rsi     # 0xb7e21
leaq 0x8(%rsp), %rdi
callq 0x522c0
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a2cc
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
testb $0x8, 0x8c(%rsp)
je 0x2a31d
movq 0x68(%rsp), %rdx
addq $0xb4, %rdx
leaq 0x8d89f(%rip), %rsi     # 0xb7b88
leaq 0x8(%rsp), %rdi
callq 0x52048
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a31d
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x70(%rsp), %rax
movl 0x10(%rax), %edx
cmpl $0x9, %edx
sete %al
cmpl $0xc, %edx
je 0x2a344
cmpl $0x2, %edx
jne 0x2a348
movb 0x108(%rsp), %cl
andb $0x8, %cl
shrb $0x3, %cl
jmp 0x2a34a
movb $0x1, %cl
jmp 0x2a34a
xorl %ecx, %ecx
andb 0x43e(%r15), %al
cmpl $0x2, %edx
setne %dl
movl %ebx, %esi
xorb $0x1, %sil
orb %dl, %sil
jne 0x2a36c
testb $0x4, 0x108(%rsp)
jne 0x2a3d0
orb %cl, %al
andb %al, %bl
cmpb $0x1, %bl
jne 0x2a73b
movq %r15, %rdi
movq 0x48(%rsp), %rsi
movl $0x1, %edx
xorl %ecx, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x29938
testb %al, %al
je 0x2a421
leaq 0x18(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8db90(%rip), %rsi     # 0xb7f3b
leaq 0x8db8f(%rip), %rdx     # 0xb7f41
leaq 0x8(%rsp), %rdi
callq 0x7c64
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
jmp 0x2a470
movq %r15, %rdi
movq 0x48(%rsp), %rsi
xorl %edx, %edx
xorl %ecx, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x29938
testb %al, %al
je 0x2a490
leaq 0x18(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8da2d(%rip), %rsi     # 0xb7e2c
leaq 0x8da2c(%rip), %rdx     # 0xb7e32
leaq 0x8(%rsp), %rdi
callq 0x7c64
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
jmp 0x2a470
movq %r15, %rdi
movq 0x48(%rsp), %rsi
xorl %edx, %edx
xorl %ecx, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x29938
testb %al, %al
je 0x2a569
leaq 0x18(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x8d9dc(%rip), %rsi     # 0xb7e2c
leaq 0x8d9db(%rip), %rdx     # 0xb7e32
leaq 0x8(%rsp), %rdi
callq 0x7c64
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
movq 0x8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2a73b
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x2a73b
movq %r15, %rdi
movq 0x48(%rsp), %rsi
movl $0x2, %edx
xorl %ecx, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x29938
testb %al, %al
je 0x2a9ad
movq %r14, %rbx
leaq 0x18(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8d967(%rip), %rsi     # 0xb7e2c
leaq 0x8d966(%rip), %rdx     # 0xb7e32
leaq 0x8(%rsp), %rdi
callq 0x7c64
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x2a4fc
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movb 0x43c(%r15), %al
cmpb $0x1, %al
jne 0x2a51d
cmpb $0x0, 0x43e(%r15)
je 0x2aa16
testb %al, %al
jne 0x2a721
cmpb $0x0, 0x43e(%r15)
jne 0x2a721
cmpl $0x1b7, 0x438(%r15) # imm = 0x1B7
ja 0x2a721
leaq 0x8(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x8d5a1(%rip), %rsi     # 0xb7aec
leaq 0x8d5b1(%rip), %rdx     # 0xb7b03
callq 0x7c64
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x26a0a
jmp 0x2a70a
movq %r15, %rdi
movq 0x48(%rsp), %rsi
movl $0x2, %edx
xorl %ecx, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x29938
testb %al, %al
je 0x2a642
movq %r14, %rbx
leaq 0x18(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8d88e(%rip), %rsi     # 0xb7e2c
leaq 0x8d88d(%rip), %rdx     # 0xb7e32
leaq 0x8(%rsp), %rdi
callq 0x7c64
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x2a5d5
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movb 0x43c(%r15), %al
cmpb $0x1, %al
jne 0x2a5f6
cmpb $0x0, 0x43e(%r15)
je 0x2aae2
testb %al, %al
jne 0x2a721
cmpb $0x0, 0x43e(%r15)
jne 0x2a721
cmpl $0x1b7, 0x438(%r15) # imm = 0x1B7
ja 0x2a721
leaq 0x8(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x8d4c8(%rip), %rsi     # 0xb7aec
leaq 0x8d4d8(%rip), %rdx     # 0xb7b03
callq 0x7c64
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x26a0a
jmp 0x2a70a
movq %r15, %rdi
movq 0x48(%rsp), %rsi
movl $0x3, %edx
xorl %ecx, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x29938
testb %al, %al
je 0x2aa79
movq %r14, %rbx
leaq 0x18(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8d8c4(%rip), %rsi     # 0xb7f3b
leaq 0x8d8c3(%rip), %rdx     # 0xb7f41
leaq 0x8(%rsp), %rdi
callq 0x7c64
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x2a6ae
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movb 0x43c(%r15), %al
cmpb $0x1, %al
jne 0x2a6cb
cmpb $0x0, 0x43e(%r15)
je 0x2ab42
testb %al, %al
jne 0x2a721
cmpb $0x0, 0x43e(%r15)
jne 0x2a721
cmpl $0x1b7, 0x438(%r15) # imm = 0x1B7
ja 0x2a721
leaq 0x8(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x8d3fb(%rip), %rsi     # 0xb7aec
leaq 0x8d40b(%rip), %rdx     # 0xb7b03
callq 0x7c64
leaq 0x8(%rsp), %rsi
movq %r15, %rdi
callq 0x26a0a
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x2a721
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x48(%rsp), %rax
movl 0x8(%rax), %esi
movq %r15, %rdi
movl $0xa, %edx
xorl %ecx, %ecx
callq 0x14ea4
movq %rbx, %r14
movq 0x48(%rsp), %rax
cmpl $0xd, 0xc(%rax)
jne 0x2a7b5
cmpl $0x2, 0x8c(%rax)
jne 0x2a7b5
movl 0x90(%rax), %esi
movq %r15, %rdi
callq 0x2908e
movq %rax, %rbx
testq %rax, %rax
je 0x2a7b5
movq %r14, %r15
leaq 0x18(%rsp), %r14
movq %r14, -0x10(%r14)
movq %rbx, %rdi
callq 0x6120
movq %rbx, %rdx
addq %rax, %rdx
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x7c64
leaq 0x50(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xebe6
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x2a7b2
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movq %r15, %r14
movq 0x50(%rsp), %rax
leaq 0x10(%r14), %r15
movq %r15, (%r14)
cmpq 0x58(%rsp), %rax
je 0x2a89a
leaq 0x8d27f(%rip), %rsi     # 0xb7a52
leaq 0x8d27f(%rip), %rdx     # 0xb7a59
movq %r14, 0x78(%rsp)
movq %r14, %rdi
callq 0x7c64
leaq 0x18(%rsp), %r13
movq %r13, -0x10(%r13)
movq $0x0, -0x8(%r13)
movb $0x0, (%r13)
movq 0x50(%rsp), %r12
movq 0x58(%rsp), %rbp
cmpq %rbp, %r12
je 0x2a84b
leaq 0x8(%rsp), %rbx
leaq 0x908a3(%rip), %r14     # 0xbb0bb
movq (%r12), %rsi
movq 0x8(%r12), %rdx
movq %rbx, %rdi
callq 0x60b0
movq 0x58(%rsp), %rax
addq $-0x20, %rax
cmpq %rax, %r12
je 0x2a842
movq %rbx, %rdi
movq %r14, %rsi
callq 0x64e0
addq $0x20, %r12
cmpq %rbp, %r12
jne 0x2a818
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
movq 0x78(%rsp), %r14
movq %r14, %rdi
leaq 0x90(%rsp), %r12
leaq 0x110(%rsp), %rbp
callq 0x60b0
movq 0x8(%rsp), %rdi
cmpq %r13, %rdi
je 0x2a889
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
leaq 0x9156d(%rip), %rsi     # 0xbbdfd
movq %r14, %rdi
callq 0x64e0
jmp 0x2a8ac
leaq 0x8b00e(%rip), %rdx     # 0xb58af
movq %r14, %rdi
movq %rdx, %rsi
callq 0x7c64
movq %rbp, %rdi
callq 0xd5b0
movq %r12, %rdi
callq 0xd5b0
leaq 0x50(%rsp), %rdi
callq 0xda64
movq %r14, %rax
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x18(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8d25b(%rip), %rsi     # 0xb7b53
leaq 0x8d288(%rip), %rdx     # 0xb7b87
leaq 0x8(%rsp), %rdi
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd2478(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd2450(%rip), %rsi     # 0xfcd80
movq 0xd36a1(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2aba0
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x18(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8d1a3(%rip), %rsi     # 0xb7b04
leaq 0x8d1dd(%rip), %rdx     # 0xb7b45
leaq 0x8(%rsp), %rdi
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd240f(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd23e7(%rip), %rsi     # 0xfcd80
movq 0xd3638(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2aba0
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x18(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8d4e2(%rip), %rsi     # 0xb7eac
leaq 0x8d569(%rip), %rdx     # 0xb7f3a
leaq 0x8(%rsp), %rdi
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd23a6(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd237e(%rip), %rsi     # 0xfcd80
movq 0xd35cf(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2aba0
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x8d401(%rip), %rsi     # 0xb7e33
leaq 0x8d472(%rip), %rdx     # 0xb7eab
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd2343(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd231b(%rip), %rsi     # 0xfcd80
movq 0xd356c(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2aba0
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x18(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x8d4ac(%rip), %rsi     # 0xb7f42
leaq 0x8d544(%rip), %rdx     # 0xb7fe1
leaq 0x8(%rsp), %rdi
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd22da(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd22b2(%rip), %rsi     # 0xfcd80
movq 0xd3503(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2aba0
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x8d335(%rip), %rsi     # 0xb7e33
leaq 0x8d3a6(%rip), %rdx     # 0xb7eab
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd2277(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd224f(%rip), %rsi     # 0xfcd80
movq 0xd34a0(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2aba0
movl $0x10, %edi
callq 0x6140
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
movq %r14, (%rdi)
leaq 0x8d2d5(%rip), %rsi     # 0xb7e33
leaq 0x8d346(%rip), %rdx     # 0xb7eab
callq 0x7c64
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
movq %rbx, %rdi
callq 0x6320
leaq 0xd2217(%rip), %rax     # 0xfcd98
addq $0x10, %rax
movq %rax, (%rbx)
xorl %ebp, %ebp
leaq 0xd21ef(%rip), %rsi     # 0xfcd80
movq 0xd3440(%rip), %rdx     # 0xfdfd8
movq %rbx, %rdi
callq 0x6470
jmp 0x2ac60
jmp 0x2ac7c
jmp 0x2ac60
jmp 0x2ac7c
jmp 0x2aca8
jmp 0x2ad11
jmp 0x2aca8
jmp 0x2ad11
jmp 0x2ac60
jmp 0x2ac7c
jmp 0x2ac60
jmp 0x2ac7c
jmp 0x2aca8
jmp 0x2aca8
jmp 0x2ad11
jmp 0x2ad11
jmp 0x2aca8
jmp 0x2ad11
jmp 0x2ac60
jmp 0x2ac7c
jmp 0x2ac60
jmp 0x2ac7c
jmp 0x2ace2
jmp 0x2ad11
movq %rax, %r12
leaq 0xd8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2ad5f
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x2ad5f
jmp 0x2ad16
jmp 0x2aca8
jmp 0x2ad11
jmp 0x2ace2
jmp 0x2ad11
jmp 0x2acc4
jmp 0x2ace2
jmp 0x2ad11
jmp 0x2ad11
movq %rax, %r12
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0x2ac82
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x2ac82
movq %rax, %r12
movb $0x1, %bpl
testb %bpl, %bpl
je 0x2ad67
movq %rbx, %rdi
callq 0x6200
jmp 0x2ad67
jmp 0x2ace2
jmp 0x2ad11
jmp 0x2acc4
jmp 0x2acc4
jmp 0x2ad11
jmp 0x2ad11
jmp 0x2acc4
jmp 0x2ad11
movq %rax, %r12
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
jne 0x2acef
jmp 0x2ad67
jmp 0x2ad11
jmp 0x2ad11
jmp 0x2ad11
jmp 0x2acc4
jmp 0x2ad11
movq %rax, %r12
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x2acef
jmp 0x2ad67
jmp 0x2ad11
jmp 0x2ace2
jmp 0x2ad11
jmp 0x2ace2
movq %rax, %r12
movq 0x8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2ad67
movq 0x18(%rsp), %rsi
jmp 0x2ad45
jmp 0x2ad11
jmp 0x2ad11
movq %rax, %r12
jmp 0x2ad35
jmp 0x2ad1b
jmp 0x2ad11
movq %rax, %r12
jmp 0x2ad74
jmp 0x2ad0a
movq %rax, %r12
jmp 0x2ad81
jmp 0x2ad11
movq %rax, %r12
jmp 0x2ad67
movq %rax, %r12
jmp 0x2ad5f
movq %rax, %r12
movq 0x8(%rsp), %rdi
cmpq %r13, %rdi
je 0x2ad35
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x6260
movq 0x78(%rsp), %rax
movq (%rax), %rdi
cmpq %r15, %rdi
je 0x2ad67
movq (%r15), %rsi
incq %rsi
callq 0x6260
jmp 0x2ad67
movq %rax, %r12
leaq 0xd0(%rsp), %rdi
callq 0xd5b0
movq %r14, %rdi
callq 0xd5b0
leaq 0x110(%rsp), %rdi
callq 0xd5b0
leaq 0x90(%rsp), %rdi
callq 0xd5b0
leaq 0x50(%rsp), %rdi
callq 0xda64
movq %r12, %rdi
callq 0x64a0
nop