// File: FreeSlave[P]vhlt/hlrad/trace.cpp
// Function: TryMerge(opaqueface_t*, opaqueface_t const*)
bool TryMerge (opaqueface_t *f, const opaqueface_t *f2)
{
	if (!f->winding || !f2->winding)
	{
		return false;
	}
	if (fabs (f2->plane.dist - f->plane.dist) > ON_EPSILON
		|| fabs (f2->plane.normal[0] - f->plane.normal[0]) > NORMAL_EPSILON
		|| fabs (f2->plane.normal[1] - f->plane.normal[1]) > NORMAL_EPSILON
		|| fabs (f2->plane.normal[2] - f->plane.normal[2]) > NORMAL_EPSILON
		)
	{
		return false;
	}
#ifdef HLRAD_OPAQUE_ALPHATEST
	if ((f->tex_alphatest || f2->tex_alphatest) && f->texinfo != f2->texinfo)
	{
		return false;
	}
#endif

	Winding *w = f->winding;
	const Winding *w2 = f2->winding;
	const vec_t *pA, *pB, *pC, *pD, *p2A, *p2B, *p2C, *p2D;
	int i, i2;

	for (i = 0; i < w->m_NumPoints; i++)
	{
		for (i2 = 0; i2 < w2->m_NumPoints; i2++)
		{
			pA = w->m_Points[(i+w->m_NumPoints-1)%w->m_NumPoints];
			pB = w->m_Points[i];
			pC = w->m_Points[(i+1)%w->m_NumPoints];
			pD = w->m_Points[(i+2)%w->m_NumPoints];
			p2A = w2->m_Points[(i2+w2->m_NumPoints-1)%w2->m_NumPoints];
			p2B = w2->m_Points[i2];
			p2C = w2->m_Points[(i2+1)%w2->m_NumPoints];
			p2D = w2->m_Points[(i2+2)%w2->m_NumPoints];
			if (!VectorCompare (pB, p2C) || !VectorCompare (pC, p2B))
			{
				continue;
			}
			break;
		}
		if (i2 == w2->m_NumPoints)
		{
			continue;
		}
		break;
	}
	if (i == w->m_NumPoints)
	{
		return false;
	}

	const vec_t *normal = f->plane.normal;
	vec3_t e1, e2;
	dplane_t pl1, pl2;
	int side1, side2;

	VectorSubtract (p2D, pA, e1);
	CrossProduct (normal, e1, pl1.normal); // pointing outward
	if (VectorNormalize (pl1.normal) == 0.0)
	{
		Developer (DEVELOPER_LEVEL_WARNING, "Warning: TryMerge: Empty edge.\n");
		return false;
	}
	pl1.dist = DotProduct (pA, pl1.normal);
	if (DotProduct (pB, pl1.normal) - pl1.dist < -ON_EPSILON)
	{
		return false;
	}
	side1 = (DotProduct (pB, pl1.normal) - pl1.dist > ON_EPSILON)? 1: 0;

	VectorSubtract (pD, p2A, e2);
	CrossProduct (normal, e2, pl2.normal); // pointing outward
	if (VectorNormalize (pl2.normal) == 0.0)
	{
		Developer (DEVELOPER_LEVEL_WARNING, "Warning: TryMerge: Empty edge.\n");
		return false;
	}
	pl2.dist = DotProduct (p2A, pl2.normal);
	if (DotProduct (p2B, pl2.normal) - pl2.dist < -ON_EPSILON)
	{
		return false;
	}
	side2 = (DotProduct (p2B, pl2.normal) - pl2.dist > ON_EPSILON)? 1: 0;

	Winding *neww = new Winding (w->m_NumPoints + w2->m_NumPoints - 4 + side1 + side2);
	int j, k;
	k = 0;
	for (j = (i + 2) % w->m_NumPoints; j != i; j = (j + 1) % w->m_NumPoints)
	{
		VectorCopy (w->m_Points[j], neww->m_Points[k]);
		k++;
	}
	if (side1)
	{
		VectorCopy (w->m_Points[j], neww->m_Points[k]);
		k++;
	}
	for (j = (i2 + 2) % w2->m_NumPoints; j != i2; j = (j + 1) % w2->m_NumPoints)
	{
		VectorCopy (w2->m_Points[j], neww->m_Points[k]);
		k++;
	}
	if (side2)
	{
		VectorCopy (w2->m_Points[j], neww->m_Points[k]);
		k++;
	}
	neww->RemoveColinearPoints ();
	if (neww->m_NumPoints < 3)
	{
		Developer (DEVELOPER_LEVEL_WARNING, "Warning: TryMerge: Empty winding.\n");
		delete neww;
		neww = NULL;
	}
	delete f->winding;
	f->winding = neww;
	return true;
}

// Assembly:
subq $0x128, %rsp            # imm = 0x128
movq %rdi, 0x118(%rsp)
movq %rsi, 0x110(%rsp)
movq 0x118(%rsp), %rax
cmpq $0x0, (%rax)
je 0x62be3
movq 0x110(%rsp), %rax
cmpq $0x0, (%rax)
jne 0x62bf0
movb $0x0, 0x127(%rsp)
jmp 0x639b0
movq 0x110(%rsp), %rax
movss 0x14(%rax), %xmm0
movq 0x118(%rsp), %rax
subss 0x14(%rax), %xmm0
callq 0x11ce0
cvtss2sd %xmm0, %xmm0
movsd 0xabc5(%rip), %xmm1     # 0x6d7e0
ucomisd %xmm1, %xmm0
ja 0x62cb8
movq 0x110(%rsp), %rax
movss 0x8(%rax), %xmm0
movq 0x118(%rsp), %rax
subss 0x8(%rax), %xmm0
callq 0x11ce0
cvtss2sd %xmm0, %xmm0
movsd 0x7418(%rip), %xmm1     # 0x6a068
ucomisd %xmm1, %xmm0
ja 0x62cb8
movq 0x110(%rsp), %rax
movss 0xc(%rax), %xmm0
movq 0x118(%rsp), %rax
subss 0xc(%rax), %xmm0
callq 0x11ce0
cvtss2sd %xmm0, %xmm0
movsd 0x73e7(%rip), %xmm1     # 0x6a068
ucomisd %xmm1, %xmm0
ja 0x62cb8
movq 0x110(%rsp), %rax
movss 0x10(%rax), %xmm0
movq 0x118(%rsp), %rax
subss 0x10(%rax), %xmm0
callq 0x11ce0
cvtss2sd %xmm0, %xmm0
movsd 0x73b6(%rip), %xmm1     # 0x6a068
ucomisd %xmm1, %xmm0
jbe 0x62cc5
movb $0x0, 0x127(%rsp)
jmp 0x639b0
movq 0x118(%rsp), %rax
testb $0x1, 0x2c(%rax)
jne 0x62ce1
movq 0x110(%rsp), %rax
testb $0x1, 0x2c(%rax)
je 0x62d06
movq 0x118(%rsp), %rax
movl 0x28(%rax), %eax
movq 0x110(%rsp), %rcx
cmpl 0x28(%rcx), %eax
je 0x62d06
movb $0x0, 0x127(%rsp)
jmp 0x639b0
movq 0x118(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x108(%rsp)
movq 0x110(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x100(%rsp)
movl $0x0, 0xbc(%rsp)
movl 0xbc(%rsp), %eax
movq 0x108(%rsp), %rcx
cmpl 0x8(%rcx), %eax
jae 0x62fbe
movl $0x0, 0xb8(%rsp)
movl 0xb8(%rsp), %eax
movq 0x100(%rsp), %rcx
cmpl 0x8(%rcx), %eax
jae 0x62f90
movq 0x108(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x18(%rsp)
movl 0xbc(%rsp), %eax
movq 0x108(%rsp), %rcx
addl 0x8(%rcx), %eax
subl $0x1, %eax
movq 0x108(%rsp), %rcx
xorl %edx, %edx
divl 0x8(%rcx)
movq 0x18(%rsp), %rax
movl %edx, %ecx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq %rax, 0xf8(%rsp)
movq 0x108(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0xbc(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq %rax, 0xf0(%rsp)
movq 0x108(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x20(%rsp)
movl 0xbc(%rsp), %eax
addl $0x1, %eax
movq 0x108(%rsp), %rcx
xorl %edx, %edx
divl 0x8(%rcx)
movq 0x20(%rsp), %rax
movl %edx, %ecx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq %rax, 0xe8(%rsp)
movq 0x108(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x28(%rsp)
movl 0xbc(%rsp), %eax
addl $0x2, %eax
movq 0x108(%rsp), %rcx
xorl %edx, %edx
divl 0x8(%rcx)
movq 0x28(%rsp), %rax
movl %edx, %ecx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq %rax, 0xe0(%rsp)
movq 0x100(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x30(%rsp)
movl 0xb8(%rsp), %eax
movq 0x100(%rsp), %rcx
addl 0x8(%rcx), %eax
subl $0x1, %eax
movq 0x100(%rsp), %rcx
xorl %edx, %edx
divl 0x8(%rcx)
movq 0x30(%rsp), %rax
movl %edx, %ecx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq %rax, 0xd8(%rsp)
movq 0x100(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0xb8(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq %rax, 0xd0(%rsp)
movq 0x100(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x38(%rsp)
movl 0xb8(%rsp), %eax
addl $0x1, %eax
movq 0x100(%rsp), %rcx
xorl %edx, %edx
divl 0x8(%rcx)
movq 0x38(%rsp), %rax
movl %edx, %ecx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq %rax, 0xc8(%rsp)
movq 0x100(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x40(%rsp)
movl 0xb8(%rsp), %eax
addl $0x2, %eax
movq 0x100(%rsp), %rcx
xorl %edx, %edx
divl 0x8(%rcx)
movq 0x40(%rsp), %rax
movl %edx, %ecx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq %rax, 0xc0(%rsp)
movq 0xf0(%rsp), %rdi
movq 0xc8(%rsp), %rsi
callq 0x440c0
testb $0x1, %al
jne 0x62f5d
jmp 0x62f76
movq 0xe8(%rsp), %rdi
movq 0xd0(%rsp), %rsi
callq 0x440c0
testb $0x1, %al
jne 0x62f78
jmp 0x62f7a
jmp 0x62f90
movl 0xb8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xb8(%rsp)
jmp 0x62d5a
movl 0xb8(%rsp), %eax
movq 0x100(%rsp), %rcx
cmpl 0x8(%rcx), %eax
jne 0x62fa6
jmp 0x62fa8
jmp 0x62fbe
movl 0xbc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xbc(%rsp)
jmp 0x62d37
movl 0xbc(%rsp), %eax
movq 0x108(%rsp), %rcx
cmpl 0x8(%rcx), %eax
jne 0x62fdf
movb $0x0, 0x127(%rsp)
jmp 0x639b0
movq 0x118(%rsp), %rax
addq $0x8, %rax
movq %rax, 0xb0(%rsp)
movq 0xc0(%rsp), %rax
movss (%rax), %xmm0
movq 0xf8(%rsp), %rax
subss (%rax), %xmm0
movss %xmm0, 0xa4(%rsp)
movq 0xc0(%rsp), %rax
movss 0x4(%rax), %xmm0
movq 0xf8(%rsp), %rax
subss 0x4(%rax), %xmm0
movss %xmm0, 0xa8(%rsp)
movq 0xc0(%rsp), %rax
movss 0x8(%rax), %xmm0
movq 0xf8(%rsp), %rax
subss 0x8(%rax), %xmm0
movss %xmm0, 0xac(%rsp)
movq 0xb0(%rsp), %rax
movss 0x4(%rax), %xmm0
movss 0xac(%rsp), %xmm2
movq 0xb0(%rsp), %rax
movss 0x8(%rax), %xmm1
mulss 0xa8(%rsp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x84(%rsp)
movq 0xb0(%rsp), %rax
movss 0x8(%rax), %xmm0
movss 0xa4(%rsp), %xmm2
movq 0xb0(%rsp), %rax
movss (%rax), %xmm1
mulss 0xac(%rsp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x88(%rsp)
movq 0xb0(%rsp), %rax
movss (%rax), %xmm0
movss 0xa8(%rsp), %xmm2
movq 0xb0(%rsp), %rax
movss 0x4(%rax), %xmm1
mulss 0xa4(%rsp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x8c(%rsp)
leaq 0x84(%rsp), %rdi
callq 0x11980
cvtss2sd %xmm0, %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x63172
jp 0x63172
movl $0x2, %edi
leaq 0xeaba(%rip), %rsi      # 0x71c18
movb $0x0, %al
callq 0xbbf0
movb $0x0, 0x127(%rsp)
jmp 0x639b0
movq 0xf8(%rsp), %rax
movss (%rax), %xmm1
movss 0x84(%rsp), %xmm2
movq 0xf8(%rsp), %rax
movss 0x4(%rax), %xmm0
mulss 0x88(%rsp), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0xf8(%rsp), %rax
movss 0x8(%rax), %xmm0
movss 0x8c(%rsp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x90(%rsp)
movq 0xf0(%rsp), %rax
movss (%rax), %xmm1
movss 0x84(%rsp), %xmm2
movq 0xf0(%rsp), %rax
movss 0x4(%rax), %xmm0
mulss 0x88(%rsp), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0xf0(%rsp), %rax
movss 0x8(%rax), %xmm0
movss 0x8c(%rsp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
subss 0x90(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0xa5fe(%rip), %xmm0     # 0x6d830
ucomisd %xmm1, %xmm0
jbe 0x63245
movb $0x0, 0x127(%rsp)
jmp 0x639b0
movq 0xf0(%rsp), %rax
movss (%rax), %xmm1
movss 0x84(%rsp), %xmm2
movq 0xf0(%rsp), %rax
movss 0x4(%rax), %xmm0
mulss 0x88(%rsp), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0xf0(%rsp), %rax
movss 0x8(%rax), %xmm0
movss 0x8c(%rsp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
subss 0x90(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0xa535(%rip), %xmm1     # 0x6d7e0
xorl %eax, %eax
movl $0x1, %ecx
ucomisd %xmm1, %xmm0
cmoval %ecx, %eax
movl %eax, 0x6c(%rsp)
movq 0xe0(%rsp), %rax
movss (%rax), %xmm0
movq 0xd8(%rsp), %rax
subss (%rax), %xmm0
movss %xmm0, 0x98(%rsp)
movq 0xe0(%rsp), %rax
movss 0x4(%rax), %xmm0
movq 0xd8(%rsp), %rax
subss 0x4(%rax), %xmm0
movss %xmm0, 0x9c(%rsp)
movq 0xe0(%rsp), %rax
movss 0x8(%rax), %xmm0
movq 0xd8(%rsp), %rax
subss 0x8(%rax), %xmm0
movss %xmm0, 0xa0(%rsp)
movq 0xb0(%rsp), %rax
movss 0x4(%rax), %xmm0
movss 0xa0(%rsp), %xmm2
movq 0xb0(%rsp), %rax
movss 0x8(%rax), %xmm1
mulss 0x9c(%rsp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x70(%rsp)
movq 0xb0(%rsp), %rax
movss 0x8(%rax), %xmm0
movss 0x98(%rsp), %xmm2
movq 0xb0(%rsp), %rax
movss (%rax), %xmm1
mulss 0xa0(%rsp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x74(%rsp)
movq 0xb0(%rsp), %rax
movss (%rax), %xmm0
movss 0x9c(%rsp), %xmm2
movq 0xb0(%rsp), %rax
movss 0x4(%rax), %xmm1
mulss 0x98(%rsp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x78(%rsp)
leaq 0x70(%rsp), %rdi
callq 0x11980
cvtss2sd %xmm0, %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x63430
jp 0x63430
movl $0x2, %edi
leaq 0xe7fc(%rip), %rsi      # 0x71c18
movb $0x0, %al
callq 0xbbf0
movb $0x0, 0x127(%rsp)
jmp 0x639b0
movq 0xd8(%rsp), %rax
movss (%rax), %xmm1
movss 0x70(%rsp), %xmm2
movq 0xd8(%rsp), %rax
movss 0x4(%rax), %xmm0
mulss 0x74(%rsp), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0xd8(%rsp), %rax
movss 0x8(%rax), %xmm0
movss 0x78(%rsp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x7c(%rsp)
movq 0xd0(%rsp), %rax
movss (%rax), %xmm1
movss 0x70(%rsp), %xmm2
movq 0xd0(%rsp), %rax
movss 0x4(%rax), %xmm0
mulss 0x74(%rsp), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0xd0(%rsp), %rax
movss 0x8(%rax), %xmm0
movss 0x78(%rsp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
subss 0x7c(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0xa358(%rip), %xmm0     # 0x6d830
ucomisd %xmm1, %xmm0
jbe 0x634eb
movb $0x0, 0x127(%rsp)
jmp 0x639b0
movq 0xd0(%rsp), %rax
movss (%rax), %xmm1
movss 0x4(%rax), %xmm0
movss 0x70(%rsp), %xmm2
movss 0x74(%rsp), %xmm3
mulss %xmm3, %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss 0x8(%rax), %xmm0
movss 0x78(%rsp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss 0x7c(%rsp), %xmm1
subss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0xa2a3(%rip), %xmm1     # 0x6d7e0
ucomisd %xmm1, %xmm0
seta %al
movzbl %al, %eax
movl %eax, 0x68(%rsp)
movl $0x20, %edi
callq 0x4320
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x10(%rsp)
movq 0x108(%rsp), %rax
movl 0x8(%rax), %edx
movq 0x100(%rsp), %rax
movl 0x8(%rax), %eax
addl %eax, %edx
movl 0x6c(%rsp), %eax
addl %eax, %edx
movl 0x68(%rsp), %ecx
movl %ecx, %eax
movl %edx, %ecx
leal -0x4(%rax,%rcx), %esi
callq 0xe980
jmp 0x63591
movq 0x10(%rsp), %rax
movq %rax, 0x60(%rsp)
movl $0x0, 0x4c(%rsp)
movl 0xbc(%rsp), %eax
addl $0x2, %eax
movq 0x108(%rsp), %rcx
xorl %edx, %edx
divl 0x8(%rcx)
movl %edx, 0x50(%rsp)
movl 0x50(%rsp), %eax
cmpl 0xbc(%rsp), %eax
je 0x636bc
movq 0x108(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x50(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss (%rax), %xmm0
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x4c(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss %xmm0, (%rax)
movq 0x108(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x50(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss 0x4(%rax), %xmm0
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x4c(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss %xmm0, 0x4(%rax)
movq 0x108(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x50(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss 0x8(%rax), %xmm0
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x4c(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss %xmm0, 0x8(%rax)
movl 0x4c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4c(%rsp)
movl 0x50(%rsp), %eax
addl $0x1, %eax
movq 0x108(%rsp), %rcx
xorl %edx, %edx
divl 0x8(%rcx)
movl %edx, 0x50(%rsp)
jmp 0x635be
movq 0x10(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x58(%rsp)
movl %eax, 0x54(%rsp)
movl $0x20, %esi
callq 0x4330
jmp 0x639c1
cmpl $0x0, 0x6c(%rsp)
je 0x63775
movq 0x108(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x50(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss (%rax), %xmm0
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x4c(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss %xmm0, (%rax)
movq 0x108(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x50(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss 0x4(%rax), %xmm0
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x4c(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss %xmm0, 0x4(%rax)
movq 0x108(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x50(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss 0x8(%rax), %xmm0
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x4c(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss %xmm0, 0x8(%rax)
movl 0x4c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4c(%rsp)
movl 0xb8(%rsp), %eax
addl $0x2, %eax
movq 0x100(%rsp), %rcx
xorl %edx, %edx
divl 0x8(%rcx)
movl %edx, 0x50(%rsp)
movl 0x50(%rsp), %eax
cmpl 0xb8(%rsp), %eax
je 0x6386c
movq 0x100(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x50(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss (%rax), %xmm0
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x4c(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss %xmm0, (%rax)
movq 0x100(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x50(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss 0x4(%rax), %xmm0
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x4c(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss %xmm0, 0x4(%rax)
movq 0x100(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x50(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss 0x8(%rax), %xmm0
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x4c(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss %xmm0, 0x8(%rax)
movl 0x4c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4c(%rsp)
movl 0x50(%rsp), %eax
addl $0x1, %eax
movq 0x100(%rsp), %rcx
xorl %edx, %edx
divl 0x8(%rcx)
movl %edx, 0x50(%rsp)
jmp 0x63790
cmpl $0x0, 0x68(%rsp)
je 0x63925
movq 0x100(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x50(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss (%rax), %xmm0
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x4c(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss %xmm0, (%rax)
movq 0x100(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x50(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss 0x4(%rax), %xmm0
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x4c(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss %xmm0, 0x4(%rax)
movq 0x100(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x50(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss 0x8(%rax), %xmm0
movq 0x60(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x4c(%rsp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movss %xmm0, 0x8(%rax)
movl 0x4c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4c(%rsp)
movq 0x60(%rsp), %rdi
movss 0xa25e(%rip), %xmm0     # 0x6db90
callq 0xf2b0
movq 0x60(%rsp), %rax
cmpl $0x3, 0x8(%rax)
jae 0x63979
movl $0x2, %edi
leaq 0xe2ea(%rip), %rsi      # 0x71c38
movb $0x0, %al
callq 0xbbf0
movq 0x60(%rsp), %rax
movq %rax, 0x8(%rsp)
cmpq $0x0, %rax
je 0x63970
movq 0x8(%rsp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movq $0x0, 0x60(%rsp)
movq 0x118(%rsp), %rax
movq (%rax), %rax
movq %rax, (%rsp)
cmpq $0x0, %rax
je 0x63998
movq (%rsp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movq 0x60(%rsp), %rcx
movq 0x118(%rsp), %rax
movq %rcx, (%rax)
movb $0x1, 0x127(%rsp)
movb 0x127(%rsp), %al
andb $0x1, %al
addq $0x128, %rsp            # imm = 0x128
retq
movq 0x58(%rsp), %rdi
callq 0x45c0
nopl (%rax,%rax)