// File: /workspace/github_c_makefile_star2_O1/michaelforney[P]cproc/decl.c
// Function: declspecs
static struct qualtype
declspecs(struct scope *s, enum storageclass *sc, enum funcspec *fs, int *align)
{
	struct type *t, *other;
	struct decl *d;
	struct expr *e;
	enum typespec ts = SPECNONE;
	enum typequal tq = QUALNONE;
	enum tokenkind op;
	int ntypes = 0;
	unsigned long long i;
	struct expr *typeofexpr = NULL;

	t = NULL;
	if (sc)
		*sc = SCNONE;
	if (fs)
		*fs = FUNCNONE;
	if (align)
		*align = 0;
	for (;;) {
		if (typequal(&tq) || storageclass(sc) || funcspec(fs))
			continue;
		op = tok.kind;
		switch (op) {
		/* 6.7.2 Type specifiers */
		case TVOID:
			t = &typevoid;
			++ntypes;
			next();
			break;
		case TCHAR:
			ts |= SPECCHAR;
			++ntypes;
			next();
			break;
		case TSHORT:
			if (ts & SPECSHORT)
				error(&tok.loc, "duplicate 'short'");
			ts |= SPECSHORT;
			next();
			break;
		case TINT:
			ts |= SPECINT;
			++ntypes;
			next();
			break;
		case TLONG:
			if (ts & SPECLONG2)
				error(&tok.loc, "too many 'long'");
			if (ts & SPECLONG)
				ts |= SPECLONG2;
			ts |= SPECLONG;
			next();
			break;
		case TFLOAT:
			ts |= SPECFLOAT;
			++ntypes;
			next();
			break;
		case TDOUBLE:
			ts |= SPECDOUBLE;
			++ntypes;
			next();
			break;
		case TSIGNED:
			if (ts & SPECSIGNED)
				error(&tok.loc, "duplicate 'signed'");
			ts |= SPECSIGNED;
			next();
			break;
		case TUNSIGNED:
			if (ts & SPECUNSIGNED)
				error(&tok.loc, "duplicate 'unsigned'");
			ts |= SPECUNSIGNED;
			next();
			break;
		case TBOOL:
			t = &typebool;
			++ntypes;
			next();
			break;
		case T_COMPLEX:
			error(&tok.loc, "_Complex is not yet supported");
			break;
		case T_ATOMIC:
			error(&tok.loc, "_Atomic is not yet supported");
			break;
		case TSTRUCT:
		case TUNION:
		case TENUM:
			t = tagspec(s);
			++ntypes;
			break;
		case TIDENT:
			if (t || ts)
				goto done;
			d = scopegetdecl(s, tok.lit, 1);
			if (!d || d->kind != DECLTYPE)
				goto done;
			t = d->type;
			tq |= d->qual;
			++ntypes;
			next();
			break;
		case TTYPEOF:
		case TTYPEOF_UNQUAL:
			next();
			expect(TLPAREN, "after 'typeof'");
			t = typename(s, &tq, &typeofexpr);
			if (!t) {
				e = expr(s);
				if (e->decayed)
					e = e->base;
				t = e->type;
				if (op == TTYPEOF)
					tq |= e->qual;
				if (t->prop & PROPVM)
					typeofexpr = e;
			}
			++ntypes;
			expect(TRPAREN, "to close 'typeof'");
			break;

		/* 6.7.5 Alignment specifier */
		case TALIGNAS:
			if (!align)
				error(&tok.loc, "alignment specifier not allowed in this declaration");
			next();
			expect(TLPAREN, "after 'alignas'");
			other = typename(s, NULL, NULL);
			i = other ? other->align : intconstexpr(s, false);
			if (i & i - 1 || i > INT_MAX)
				error(&tok.loc, "invalid alignment: %llu", i);
			if (i > *align)
				*align = i;
			expect(TRPAREN, "to close 'alignas' specifier");
			break;

		case T__ATTRIBUTE__:
			gnuattr(NULL, 0);
			break;

		default:
			goto done;
		}
		if (ntypes > 1 || (t && ts))
			error(&tok.loc, "multiple types in declaration specifiers");
	}
done:
	switch ((int)ts) {
	case SPECNONE:                                            break;
	case SPECCHAR:                          t = &typechar;    break;
	case SPECSIGNED|SPECCHAR:               t = &typeschar;   break;
	case SPECUNSIGNED|SPECCHAR:             t = &typeuchar;   break;
	case SPECSHORT:
	case SPECSHORT|SPECINT:
	case SPECSIGNED|SPECSHORT:
	case SPECSIGNED|SPECSHORT|SPECINT:      t = &typeshort;   break;
	case SPECUNSIGNED|SPECSHORT:
	case SPECUNSIGNED|SPECSHORT|SPECINT:    t = &typeushort;  break;
	case SPECINT:
	case SPECSIGNED:
	case SPECSIGNED|SPECINT:                t = &typeint;     break;
	case SPECUNSIGNED:
	case SPECUNSIGNED|SPECINT:              t = &typeuint;    break;
	case SPECLONG:
	case SPECLONG|SPECINT:
	case SPECSIGNED|SPECLONG:
	case SPECSIGNED|SPECLONG|SPECINT:       t = &typelong;    break;
	case SPECUNSIGNED|SPECLONG:
	case SPECUNSIGNED|SPECLONG|SPECINT:     t = &typeulong;   break;
	case SPECLONGLONG:
	case SPECLONGLONG|SPECINT:
	case SPECSIGNED|SPECLONGLONG:
	case SPECSIGNED|SPECLONGLONG|SPECINT:   t = &typellong;   break;
	case SPECUNSIGNED|SPECLONGLONG:
	case SPECUNSIGNED|SPECLONGLONG|SPECINT: t = &typeullong;  break;
	case SPECFLOAT:                         t = &typefloat;   break;
	case SPECDOUBLE:                        t = &typedouble;  break;
	case SPECLONG|SPECDOUBLE:               t = &typeldouble; break;
	default:
		error(&tok.loc, "invalid combination of type specifiers");
	}
	if (!t && (tq || sc && *sc || fs && *fs))
		error(&tok.loc, "declaration has no type specifier");
	/*
	TODO: consider delaying attribute parsing to declarator(),
	so we can tell the difference between the start of an
	attribute and an array declarator.
	*/
	attr(NULL, 0);

	return (struct qualtype){t, tq, typeofexpr};
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x118, %rsp            # imm = 0x118
movq %rdx, %r13
movl $0x0, 0x54(%rsp)
movq $0x0, 0x88(%rsp)
testq %rdx, %rdx
je 0x3947
movl $0x0, (%r13)
testq %rcx, %rcx
je 0x3952
movl $0x0, (%rcx)
movq %rsi, 0x48(%rsp)
movq %rcx, 0x80(%rsp)
movq %rdi, 0x98(%rsp)
testq %r8, %r8
je 0x3973
movl $0x0, (%r8)
movq %r8, 0x78(%rsp)
leaq 0x54(%rsp), %rbx
leaq 0x18784(%rip), %rbp     # 0x1c108
leaq 0x8(%rbp), %r12
movq $0x0, 0x38(%rsp)
movl $0x0, 0x24(%rsp)
movq $0x0, 0x28(%rsp)
movq %rbx, %rdi
callq 0x58c2
testl %eax, %eax
jne 0x39a2
movl (%rbp), %eax
cmpl $0x26, %eax
jg 0x39cd
cmpl $0xa, %eax
je 0x3a1c
cmpl $0x17, %eax
je 0x3a2c
cmpl $0x21, %eax
jne 0x39e2
movl $0x20, %r14d
jmp 0x3a3a
cmpl $0x27, %eax
je 0x3a24
cmpl $0x2b, %eax
je 0x3a34
movl $0x2, %r14d
cmpl $0x2d, %eax
je 0x3a3a
movl (%rbp), %eax
movl $0x2, %r14d
cmpl $0x1d, %eax
je 0x39ff
cmpl $0x3d, %eax
jne 0x3aa7
movl $0x4, %r14d
leaq 0xed57(%rip), %rsi      # 0x1275d
movq 0x80(%rsp), %rax
movq %rax, %r15
testq %rax, %rax
jne 0x3a9a
jmp 0x3a90
movl $0x10, %r14d
jmp 0x3a3a
movl $0x8, %r14d
jmp 0x3a3a
movl $0x4, %r14d
jmp 0x3a3a
movl $0x40, %r14d
testq %r13, %r13
jne 0x3a50
movq %r12, %rdi
leaq 0xecb6(%rip), %rsi      # 0x126ff
xorl %eax, %eax
callq 0xd56a
movl (%r13), %eax
cmpl $0x7, %eax
jg 0x3a64
testl %eax, %eax
je 0x3a81
cmpl $0x4, %eax
je 0x3a75
jmp 0x3a7c
cmpl $0x8, %eax
je 0x3a75
cmpl $0x40, %eax
jne 0x3a7c
movl $0xfffffff3, %eax       # imm = 0xFFFFFFF3
jmp 0x3a81
movl $0xffffffbf, %eax       # imm = 0xFFFFFFBF
jmp 0x3a81
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
leaq 0xeca5(%rip), %rsi      # 0x1272d
movq %r13, %r15
testl %r14d, %eax
je 0x3a9a
movq %r12, %rdi
xorl %eax, %eax
callq 0xd56a
orl %r14d, (%r15)
callq 0xa9d0
jmp 0x39a2
movl (%rbp), %r14d
cmpl $0xd, %r14d
jle 0x3b09
leal -0x14(%r14), %eax
cmpl $0x23, %eax
ja 0x3b40
leaq 0xe623(%rip), %rcx      # 0x120e8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpl $0x16, %r14d
je 0x3e20
cmpl $0x29, %r14d
je 0x3e06
cmpl $0x30, %r14d
jne 0x3e3d
movl $0x0, 0x40(%rsp)
movl $0x10, 0x28(%rsp)
movl $0x0, 0x30(%rsp)
jmp 0x3e57
cmpl $0x4, %r14d
je 0x3bf2
cmpl $0x8, %r14d
je 0x3c5d
cmpl $0xb, %r14d
jne 0x47bb
movl 0x24(%rsp), %r14d
incl %r14d
callq 0xa9d0
leaq 0x17eb5(%rip), %rax     # 0x1b9f0
jmp 0x3cc3
cmpl $0xe, %r14d
je 0x3de4
cmpl $0x3f, %r14d
jne 0x47bb
xorl %edi, %edi
xorl %esi, %esi
callq 0x3483
jmp 0x463e
callq 0xa9d0
movl $0x42, %edi
leaq 0xea54(%rip), %rsi      # 0x125c7
callq 0xb07a
movq 0x48(%rsp), %rdi
movq %rbx, %rsi
leaq 0x88(%rsp), %rdx
callq 0x3875
movq %rax, 0x28(%rsp)
testq %rax, %rax
jne 0x3bd4
movq 0x48(%rsp), %rdi
callq 0x73a2
cmpb $0x1, 0x5(%rax)
jne 0x3bab
movq 0x18(%rax), %rax
movq 0x8(%rax), %rcx
movq %rcx, 0x28(%rsp)
cmpl $0x2e, %r14d
jne 0x3bc1
movl 0x10(%rax), %ecx
orl %ecx, 0x54(%rsp)
movq 0x28(%rsp), %rcx
testb $0x40, 0x4(%rcx)
je 0x3bd4
movq %rax, 0x88(%rsp)
movl 0x24(%rsp), %r14d
incl %r14d
movl $0x43, %edi
leaq 0xe9ee(%rip), %rsi      # 0x125d6
callq 0xb07a
jmp 0x3dfe
cmpq $0x0, 0x28(%rsp)
jne 0x47bb
cmpl $0x0, 0x38(%rsp)
jne 0x47bb
movq 0x20(%rbp), %rsi
movq 0x48(%rsp), %rdi
movl $0x1, %edx
callq 0xc6f9
testq %rax, %rax
je 0x47bb
cmpl $0x0, 0x8(%rax)
jne 0x47bb
movq 0x10(%rax), %rcx
movq %rcx, 0x28(%rsp)
movl 0x18(%rax), %eax
orl %eax, 0x54(%rsp)
movl 0x24(%rsp), %r14d
incl %r14d
callq 0xa9d0
movl %r14d, %eax
movq $0x0, 0x38(%rsp)
jmp 0x46f1
cmpq $0x0, 0x78(%rsp)
jne 0x3c76
movq %r12, %rdi
leaq 0xe979(%rip), %rsi      # 0x125e8
xorl %eax, %eax
callq 0xd56a
callq 0xa9d0
movl $0x42, %edi
leaq 0xe995(%rip), %rsi      # 0x1261c
callq 0xb07a
movq 0x48(%rsp), %r14
movq %r14, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3875
testq %rax, %rax
je 0x458d
movslq 0x8(%rax), %r14
jmp 0x459a
movl 0x24(%rsp), %r14d
incl %r14d
callq 0xa9d0
leaq 0x17cd5(%rip), %rax     # 0x1b998
movq %rax, 0x28(%rsp)
jmp 0x3dfe
movq %r12, %rdi
leaq 0xe8b5(%rip), %rsi      # 0x1258c
jmp 0x3d0e
movq 0x38(%rsp), %rax
btl $0xb, %eax
jae 0x3cfa
movq %r12, %rdi
leaq 0xe889(%rip), %rsi      # 0x12577
xorl %eax, %eax
callq 0xd56a
movq 0x38(%rsp), %rax
orl $0x800, %eax            # imm = 0x800
jmp 0x3dd5
movq %r12, %rdi
leaq 0xe89c(%rip), %rsi      # 0x125aa
xorl %eax, %eax
callq 0xd56a
jmp 0x463e
movq 0x38(%rsp), %rax
orl $0x20, %eax
jmp 0x3dec
movq 0x38(%rsp), %rax
orl $0x40, %eax
jmp 0x3dec
movq 0x38(%rsp), %rax
orl $0x10, %eax
jmp 0x3dec
movq 0x38(%rsp), %rax
btl $0x9, %eax
jae 0x3d62
movq %r12, %rdi
leaq 0xe7fe(%rip), %rsi      # 0x12554
xorl %eax, %eax
callq 0xd56a
movq 0x38(%rsp), %rax
leal (%rax,%rax), %r14d
andl $0x200, %r14d           # imm = 0x200
orl %eax, %r14d
orl $0x100, %r14d           # imm = 0x100
callq 0xa9d0
movl %r14d, %eax
movq %rax, 0x38(%rsp)
jmp 0x463e
movq 0x38(%rsp), %rax
btl $0xa, %eax
jae 0x3daa
movq %r12, %rdi
leaq 0xe7c6(%rip), %rsi      # 0x12564
xorl %eax, %eax
callq 0xd56a
movq 0x38(%rsp), %rax
orl $0x400, %eax            # imm = 0x400
jmp 0x3dd5
movq 0x38(%rsp), %rax
testb %al, %al
jns 0x3dd0
movq %r12, %rdi
leaq 0xe77e(%rip), %rsi      # 0x12542
xorl %eax, %eax
callq 0xd56a
movq 0x38(%rsp), %rax
orl $0x80, %eax
movq %rax, 0x38(%rsp)
callq 0xa9d0
jmp 0x463e
movq 0x38(%rsp), %rax
orl $0x4, %eax
movq %rax, 0x38(%rsp)
movl 0x24(%rsp), %r14d
incl %r14d
callq 0xa9d0
movl %r14d, %eax
jmp 0x46f1
movl $0x8, 0x30(%rsp)
movl $0xf, 0x28(%rsp)
movl $0x0, 0x40(%rsp)
jmp 0x3e57
movl $0x6, 0x28(%rsp)
movb $0x1, %al
movl %eax, 0x40(%rsp)
movq 0x48(%rsp), %r14
movl $0x0, 0x30(%rsp)
jmp 0x3e5c
movl $0x0, 0x30(%rsp)
leaq 0xe944(%rip), %rdi      # 0x12790
xorl %eax, %eax
callq 0xe054
movl %eax, 0x40(%rsp)
movq 0x48(%rsp), %r14
callq 0xa9d0
movl $0x0, 0x90(%rsp)
leaq 0x90(%rsp), %rdi
movl 0x30(%rsp), %r15d
movl %r15d, %esi
callq 0x33ec
leaq 0x90(%rsp), %rdi
movl %r15d, %esi
callq 0x3483
cmpl $0x4, (%rbp)
jne 0x3ea2
movq 0x20(%rbp), %r15
callq 0xa9d0
jmp 0x3ea5
xorl %r15d, %r15d
testb $0x1, 0x40(%rsp)
je 0x3ef4
movl $0x5f, %edi
callq 0xb099
testb %al, %al
je 0x3ef4
leaq 0x100(%rsp), %rdi
movq %r14, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x3912
movq 0x100(%rsp), %rcx
movq %rcx, 0x30(%rsp)
testq %rcx, %rcx
jne 0x3efd
movq %r12, %rdi
leaq 0xe8c4(%rip), %rsi      # 0x127b1
xorl %eax, %eax
callq 0xd56a
movq $0x0, 0x30(%rsp)
testq %r15, %r15
je 0x3f23
movl (%rbp), %eax
cmpl $0x44, %eax
setne %cl
cmpl $0x61, %eax
setne %al
andb %cl, %al
movzbl %al, %edx
movq %r14, %rdi
movq %r15, %rsi
callq 0xc75a
jmp 0x3f25
xorl %eax, %eax
movl 0x28(%rsp), %edi
testq %rax, %rax
movq %r15, 0x68(%rsp)
je 0x3f50
cmpl %edi, (%rax)
je 0x3faa
movq %r12, %rdi
leaq 0xe88f(%rip), %rsi      # 0x127d0
movq %r15, %rdx
movq %rax, %r15
xorl %eax, %eax
callq 0xd56a
jmp 0x3fa7
testb $0x1, 0x40(%rsp)
je 0x3f71
movl $0x6, %edi
movl $0x1e, %esi
callq 0xd7e4
movq 0x30(%rsp), %rcx
movq %rcx, 0x20(%rax)
jmp 0x3f8d
xorl %esi, %esi
callq 0xd7e4
xorl %ecx, %ecx
movq %rcx, 0x10(%rax)
movl $0x0, 0x8(%rax)
movq %r15, 0x40(%rax)
movq %rcx, 0x48(%rax)
movb $0x1, 0x3c(%rax)
testq %r15, %r15
je 0x3faa
movq %r14, %rdi
movq %r15, %rsi
movq %rax, %rdx
movq %rax, %r15
callq 0xc7b9
movq %r15, %rax
cmpl $0x44, (%rbp)
movq %rax, 0x28(%rsp)
jne 0x46eb
cmpb $0x0, 0x3c(%rax)
jne 0x3fd5
movq %r12, %rdi
leaq 0xe835(%rip), %rsi      # 0x127fe
movq 0x68(%rsp), %rdx
xorl %eax, %eax
callq 0xd56a
callq 0xa9d0
movq 0x28(%rsp), %rdx
movl (%rdx), %eax
leal -0xf(%rax), %ecx
cmpl $0x2, %ecx
jae 0x4239
movq %rdx, 0xa8(%rsp)
leaq 0x48(%rdx), %r15
movq %r15, 0xb0(%rsp)
movl $0x0, 0xb8(%rsp)
movb 0x90(%rsp), %al
shrb $0x3, %al
andb $0x1, %al
movb %al, 0xbc(%rsp)
movq %r14, %rdi
callq 0x52ce
testb %al, %al
jne 0x41d4
xorl %edi, %edi
xorl %esi, %esi
callq 0x33ec
leaq 0xc0(%rsp), %rdi
movq %r14, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
leaq 0x74(%rsp), %r8
callq 0x3912
movq 0xc0(%rsp), %r14
testq %r14, %r14
jne 0x406f
movq %r12, %rdi
leaq 0xe8ed(%rip), %rsi      # 0x12955
xorl %eax, %eax
callq 0xd56a
cmpl $0x61, (%rbp)
jne 0x40da
movl (%r14), %eax
addl $-0xf, %eax
cmpl $0x1, %eax
ja 0x4087
cmpq $0x0, 0x40(%r14)
je 0x4098
movq %r12, %rdi
leaq 0xe8e9(%rip), %rsi      # 0x1297a
xorl %eax, %eax
callq 0xd56a
callq 0xa9d0
movl 0x74(%rsp), %edx
movq 0xd0(%rsp), %rax
movq %rax, 0x10(%rsp)
movups 0xc0(%rsp), %xmm0
movups %xmm0, (%rsp)
leaq 0xa8(%rsp), %rdi
xorl %esi, %esi
movq $-0x1, %rcx
callq 0x5923
movq 0x48(%rsp), %r14
jmp 0x41d4
movl $0x5f, %edi
callq 0xb099
testb %al, %al
je 0x4124
movq 0x48(%rsp), %r14
movq %r14, %rdi
xorl %esi, %esi
callq 0x74a9
movq 0xd0(%rsp), %rcx
movq %rcx, 0x10(%rsp)
movups 0xc0(%rsp), %xmm0
movups %xmm0, (%rsp)
leaq 0xa8(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
movq %rax, %rcx
jmp 0x41ae
movq 0xd0(%rsp), %rax
movq %rax, 0x10(%rsp)
movups 0xc0(%rsp), %xmm0
movups %xmm0, (%rsp)
leaq 0xe8(%rsp), %rdi
movq 0x48(%rsp), %r14
movq %r14, %rsi
leaq 0xe0(%rsp), %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x4ab2
movl $0x5f, %edi
callq 0xb099
movq $-0x1, %rcx
testb %al, %al
je 0x4181
movq %r14, %rdi
xorl %esi, %esi
callq 0x74a9
movq %rax, %rcx
movq 0xe0(%rsp), %rsi
movl 0x74(%rsp), %edx
movq 0xf8(%rsp), %rax
movq %rax, 0x10(%rsp)
movups 0xe8(%rsp), %xmm0
movups %xmm0, (%rsp)
leaq 0xa8(%rsp), %rdi
callq 0x5923
cmpl $0x61, (%rbp)
je 0x41cf
movl $0x6e, %edi
leaq 0xe337(%rip), %rsi      # 0x124fc
callq 0xb07a
jmp 0x40da
callq 0xa9d0
cmpl $0x45, (%rbp)
jne 0x401f
cmpq $0x0, (%r15)
jne 0x41f5
movq %r12, %rdi
leaq 0xe629(%rip), %rsi      # 0x12817
xorl %eax, %eax
callq 0xd56a
callq 0xa9d0
cmpb $0x0, 0xbc(%rsp)
movq 0x28(%rsp), %rax
jne 0x46e7
movq 0x28(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x28(%rsp), %rcx
movslq 0x8(%rcx), %rcx
addq %rcx, %rax
decq %rax
negq %rcx
andq %rax, %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x10(%rax)
jmp 0x46e7
cmpl $0x6, %eax
movq %rdx, %rax
jne 0x46e7
leaq 0x179b4(%rip), %rax     # 0x1bc00
cmpq $0x0, 0x30(%rsp)
je 0x4289
movq 0x28(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rcx
movq 0x28(%rsp), %rdx
movq %rcx, 0x10(%rdx)
movl 0x8(%rax), %ecx
movq 0x28(%rsp), %rdx
movl %ecx, 0x8(%rdx)
movb 0x40(%rax), %al
movq 0x28(%rsp), %rcx
movb %al, 0x40(%rcx)
movq 0x28(%rsp), %rax
movb $0x0, 0x3c(%rax)
movq %rax, 0x30(%rsp)
cmpl $0x4, (%rbp)
movl $0x0, %r15d
movl $0x0, %eax
movq %rax, 0x60(%rsp)
movl $0x0, %eax
movq %rax, 0x58(%rsp)
jne 0x464a
movq $0x0, 0x58(%rsp)
movq $0x0, 0x60(%rsp)
xorl %eax, %eax
xorl %ecx, %ecx
movq %rcx, 0xd8(%rsp)
movq %rax, 0x40(%rsp)
movq 0x20(%rbp), %rax
movq %rax, 0xa0(%rsp)
callq 0xa9d0
xorl %edi, %edi
xorl %esi, %esi
callq 0x33ec
movl $0x63, %edi
callq 0xb099
testb %al, %al
je 0x4366
movq %r14, %rdi
callq 0x70c0
movq %rax, %rdi
callq 0x61cc
movq %rax, %r15
cmpl $0x1, (%rax)
jne 0x431f
movq 0x8(%r15), %rax
testb $0x2, 0x4(%rax)
jne 0x4330
movq %r12, %rdi
leaq 0xe50a(%rip), %rsi      # 0x12833
xorl %eax, %eax
callq 0xd56a
movq 0x8(%r15), %rax
movq 0x30(%r15), %rsi
movq 0x28(%rsp), %rcx
cmpq $0x0, 0x20(%rcx)
movb 0x40(%rax), %al
movq %rsi, 0x40(%rsp)
je 0x43d7
movzbl %al, %edx
movq 0x30(%rsp), %rdi
callq 0xdd37
testb %al, %al
jne 0x43cd
jmp 0x4410
movq 0x40(%rsp), %rcx
movq %rcx, %rax
negq %rax
movq 0x30(%rsp), %rdi
jo 0x4388
jb 0x43bd
cmpb $0x1, 0x40(%rdi)
jne 0x438e
movq %rcx, %rax
negq %rax
jno 0x43bd
cmpb $0x1, 0x40(%rdi)
jne 0x43bd
cmpb $0x0, 0x40(%rdi)
leaq 0xe4f7(%rip), %rdx      # 0x12890
leaq 0x10315(%rip), %rax     # 0x146b5
cmovneq %rax, %rdx
movq %rdi, %r15
movq %r12, %rdi
leaq 0xe4a7(%rip), %rsi      # 0x12858
xorl %eax, %eax
callq 0xd56a
jmp 0x44b1
movzbl 0x40(%rdi), %edx
movq %rcx, %rsi
callq 0xdd37
testb %al, %al
je 0x4404
movq 0x30(%rsp), %r15
jmp 0x44b1
movq %r15, 0x30(%rsp)
movzbl %al, %edx
leaq 0x1781a(%rip), %r15     # 0x1bc00
movq %r15, %rdi
callq 0xdd37
testb %al, %al
jne 0x44b1
movq 0x30(%rsp), %rax
movq 0x8(%rax), %r15
jmp 0x44b1
movq 0x28(%rsp), %rax
cmpq $0x0, 0x20(%rax)
je 0x4429
movq %r12, %rdi
leaq 0xe479(%rip), %rsi      # 0x12893
movq 0xa0(%rsp), %rdx
xorl %eax, %eax
callq 0xd56a
movq 0x30(%rsp), %rax
movzbl 0x40(%rax), %edx
leaq 0x16137(%rip), %r15     # 0x1a570
movq (%r15,%rdx,8), %rdi
movq %rdi, 0x30(%rsp)
movq 0x40(%rsp), %rsi
movq %rdx, 0x68(%rsp)
callq 0xdd37
movb $0x1, %cl
testb %al, %al
jne 0x44a4
movq 0x68(%rsp), %rax
leaq (%r15,%rax,8), %r14
addq $0x10, %r14
xorl %ecx, %ecx
movq %rax, %r15
movq %rcx, %rdx
cmpq $0x2, %rcx
je 0x449d
movq (%r14), %rdi
movq %rdi, 0x30(%rsp)
movq 0x40(%rsp), %rsi
movq %rdx, 0x68(%rsp)
movl %r15d, %edx
callq 0xdd37
movq 0x68(%rsp), %rdx
addq $0x10, %r14
leaq 0x1(%rdx), %rcx
testb %al, %al
je 0x4469
cmpq $0x2, %rdx
setb %cl
testb %cl, %cl
movq 0x30(%rsp), %r15
je 0x4a93
movq %r15, 0x30(%rsp)
movl $0x48, %edi
callq 0xe13e
movq %rax, %r14
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movups %xmm0, 0x10(%rax)
movups %xmm0, 0x20(%rax)
movups %xmm0, 0x30(%rax)
movq 0xa0(%rsp), %rax
movq %rax, (%r14)
movq $0x3, 0x8(%r14)
movq %r15, 0x10(%r14)
movl $0x0, 0x18(%r14)
movq 0x40(%rsp), %r15
movq %r15, 0x40(%r14)
movq %r15, %rdi
callq 0xe381
movq %rax, 0x20(%r14)
movq 0xd8(%rsp), %rax
movq %rax, 0x38(%r14)
movq 0x30(%rsp), %rax
cmpb $0x1, 0x40(%rax)
jne 0x453b
testq %r15, %r15
jns 0x453b
negq %r15
movq 0x58(%rsp), %rcx
cmpq %r15, %rcx
cmovbeq %r15, %rcx
movq %rcx, 0x58(%rsp)
jmp 0x454c
movq 0x60(%rsp), %rax
cmpq %rax, %r15
cmovaq %r15, %rax
movq %rax, 0x60(%rsp)
movq 0x48(%rsp), %rdi
movq %r14, %rsi
callq 0xc628
movl $0x6e, %edi
callq 0xb099
testb %al, %al
je 0x4647
movq 0x40(%rsp), %rax
incq %rax
cmpl $0x4, (%rbp)
movq %r14, %rcx
movq %r14, %r15
movq 0x48(%rsp), %r14
je 0x42c8
jmp 0x464a
movq %r14, %rdi
xorl %esi, %esi
callq 0x74a9
movq %rax, %r14
cmpq $0x7fffffff, %r14       # imm = 0x7FFFFFFF
ja 0x4604
movq %r14, %rax
shrq %rax
movabsq $0x5555555555555555, %rcx # imm = 0x5555555555555555
andq %rcx, %rax
movq %r14, %rcx
subq %rax, %rcx
movq %rcx, %rax
movabsq $0x3333333333333333, %rdx # imm = 0x3333333333333333
andq %rdx, %rax
shrq $0x2, %rcx
andq %rdx, %rcx
addq %rax, %rcx
movq %rcx, %rax
shrq $0x4, %rax
addq %rcx, %rax
movabsq $0xf0f0f0f0f0f0f0f, %rcx # imm = 0xF0F0F0F0F0F0F0F
andq %rcx, %rax
movabsq $0x101010101010101, %rcx # imm = 0x101010101010101
imulq %rcx, %rax
shrq $0x38, %rax
cmpl $0x2, %eax
jb 0x4618
movq %r12, %rdi
leaq 0xe01e(%rip), %rsi      # 0x1262c
movq %r14, %rdx
xorl %eax, %eax
callq 0xd56a
movq 0x78(%rsp), %rax
movslq (%rax), %rax
cmpq %rax, %r14
jbe 0x462d
movq 0x78(%rsp), %rax
movl %r14d, (%rax)
movl $0x43, %edi
leaq 0xe00b(%rip), %rsi      # 0x12644
callq 0xb07a
movl 0x24(%rsp), %eax
jmp 0x46f1
movq %r14, %r15
movq %r15, 0x30(%rsp)
movl $0x45, %edi
leaq 0xe2ae(%rip), %rsi      # 0x12909
callq 0xb07a
movq 0x28(%rsp), %rax
cmpq $0x0, 0x20(%rax)
leaq 0x15eff(%rip), %rsi     # 0x1a570
jne 0x46e7
movl $0x80000000, %ecx       # imm = 0x80000000
leaq 0x1(%rcx), %rax
movq 0x58(%rsp), %rdx
cmpq %rax, %rdx
setb %al
cmpq %rcx, 0x60(%rsp)
setb %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0x4727
leaq 0x1755f(%rip), %rax     # 0x1bc00
testq %rdx, %rdx
jne 0x46ad
leaq 0x175ab(%rip), %rax     # 0x1bc58
movq 0x28(%rsp), %rcx
movq %rax, 0x20(%rcx)
movq 0x28(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rcx
movq 0x28(%rsp), %rdx
movq %rcx, 0x10(%rdx)
movl 0x8(%rax), %ecx
movq 0x28(%rsp), %rdx
movl %ecx, 0x8(%rdx)
movb 0x40(%rax), %al
movq 0x28(%rsp), %rcx
movb %al, 0x40(%rcx)
movq 0x28(%rsp), %rax
movb $0x0, 0x3c(%rax)
movl 0x24(%rsp), %eax
incl %eax
movl %eax, 0x24(%rsp)
cmpl $0x1, %eax
jg 0x4711
cmpq $0x0, 0x28(%rsp)
je 0x39a2
cmpl $0x0, 0x38(%rsp)
je 0x39a2
movq %r12, %rdi
leaq 0xdf46(%rip), %rsi      # 0x12661
xorl %eax, %eax
callq 0xd56a
jmp 0x39a2
xorl %eax, %eax
negq %rdx
movq %rdx, 0x58(%rsp)
setb %al
leaq (%rsi,%rax,8), %r14
xorl %r15d, %r15d
movq (%r14), %rdi
movq %rdi, 0x40(%rsp)
movq 0x60(%rsp), %rsi
xorl %edx, %edx
callq 0xdd37
testb %al, %al
je 0x476b
movq 0x40(%rsp), %rdi
movq 0x58(%rsp), %rsi
movl $0x1, %edx
callq 0xdd37
testb %al, %al
jne 0x477e
incq %r15
addq $0x10, %r14
cmpq $0x3, %r15
jne 0x473b
movl $0x3, %r15d
cmpl $0x3, %r15d
jne 0x4795
movq %r12, %rdi
leaq 0xe193(%rip), %rsi      # 0x12921
xorl %eax, %eax
callq 0xd56a
movq 0x28(%rsp), %rax
movq 0x40(%rsp), %rcx
movq %rcx, 0x20(%rax)
movq 0x30(%rsp), %rcx
testq %rcx, %rcx
je 0x46b6
movq %rax, 0x10(%rcx)
movq 0x38(%rcx), %rcx
jmp 0x47a8
movq 0x38(%rsp), %rax
cmpl $0x47f, %eax            # imm = 0x47F
jg 0x4807
cmpl $0xff, %eax
movq 0x98(%rsp), %rbx
jle 0x4847
cmpl $0x30f, %eax            # imm = 0x30F
jg 0x48a8
cmpl $0x13f, %eax            # imm = 0x13F
jg 0x4977
cmpl $0x100, %eax            # imm = 0x100
je 0x492f
cmpl $0x110, %eax            # imm = 0x110
je 0x492f
jmp 0x4a03
cmpl $0x803, %eax            # imm = 0x803
movq 0x98(%rsp), %rbx
jle 0x4877
cmpl $0x8ff, %eax            # imm = 0x8FF
jg 0x48ce
cmpl $0x87f, %eax            # imm = 0x87F
jg 0x4991
cmpl $0x804, %eax            # imm = 0x804
je 0x49df
cmpl $0x810, %eax            # imm = 0x810
je 0x496b
jmp 0x4a03
cmpl $0x1f, %eax
jle 0x48f7
cmpl $0x7f, %eax
jg 0x493b
cmpl $0x20, %eax
je 0x49d6
cmpl $0x40, %eax
jne 0x4a03
leaq 0x175f6(%rip), %rax     # 0x1be68
jmp 0x4a19
cmpl $0x50f, %eax            # imm = 0x50F
jle 0x4916
cmpl $0x70f, %eax            # imm = 0x70F
jg 0x4959
cmpl $0x510, %eax            # imm = 0x510
je 0x492f
cmpl $0x700, %eax            # imm = 0x700
je 0x4985
jmp 0x4a03
cmpl $0x403, %eax            # imm = 0x403
jg 0x49a8
cmpl $0x310, %eax            # imm = 0x310
je 0x4985
cmpl $0x400, %eax            # imm = 0x400
je 0x49b6
jmp 0x4a03
cmpl $0xaff, %eax            # imm = 0xAFF
jg 0x49bf
cmpl $0x900, %eax            # imm = 0x900
je 0x48eb
cmpl $0x910, %eax            # imm = 0x910
jne 0x4a03
leaq 0x17416(%rip), %rax     # 0x1bd08
jmp 0x4a19
testl %eax, %eax
je 0x4a14
cmpl $0x4, %eax
je 0x49e8
cmpl $0x10, %eax
je 0x49b6
jmp 0x4a03
cmpl $0x480, %eax            # imm = 0x480
je 0x494d
cmpl $0x490, %eax            # imm = 0x490
je 0x494d
cmpl $0x500, %eax            # imm = 0x500
jne 0x4a03
leaq 0x1737a(%rip), %rax     # 0x1bcb0
jmp 0x4a19
cmpl $0x80, %eax
je 0x494d
cmpl $0x90, %eax
jne 0x4a03
leaq 0x171fc(%rip), %rax     # 0x1bb50
jmp 0x4a19
cmpl $0x710, %eax            # imm = 0x710
je 0x4985
cmpl $0x800, %eax            # imm = 0x800
jne 0x4a03
leaq 0x172e6(%rip), %rax     # 0x1bc58
jmp 0x4a19
cmpl $0x140, %eax            # imm = 0x140
je 0x49f1
cmpl $0x300, %eax            # imm = 0x300
jne 0x4a03
leaq 0x173d4(%rip), %rax     # 0x1bd60
jmp 0x4a19
cmpl $0x880, %eax            # imm = 0x880
je 0x499f
cmpl $0x890, %eax            # imm = 0x890
jne 0x4a03
leaq 0x17202(%rip), %rax     # 0x1bba8
jmp 0x4a19
cmpl $0x404, %eax            # imm = 0x404
je 0x49fa
cmpl $0x410, %eax            # imm = 0x410
jne 0x4a03
leaq 0x17243(%rip), %rax     # 0x1bc00
jmp 0x4a19
cmpl $0xb00, %eax            # imm = 0xB00
je 0x49cd
cmpl $0xb10, %eax            # imm = 0xB10
jne 0x4a03
leaq 0x173e4(%rip), %rax     # 0x1bdb8
jmp 0x4a19
leaq 0x17433(%rip), %rax     # 0x1be10
jmp 0x4a19
leaq 0x17112(%rip), %rax     # 0x1baf8
jmp 0x4a19
leaq 0x17059(%rip), %rax     # 0x1ba48
jmp 0x4a19
leaq 0x174c8(%rip), %rax     # 0x1bec0
jmp 0x4a19
leaq 0x1709f(%rip), %rax     # 0x1baa0
jmp 0x4a19
leaq 0xdc80(%rip), %rsi      # 0x1268a
movq %r12, %rdi
xorl %eax, %eax
callq 0xd56a
movq 0x28(%rsp), %rax
movq %rax, %r14
testq %rax, %rax
jne 0x4a39
cmpl $0x0, 0x54(%rsp)
je 0x4a6d
leaq 0xdc82(%rip), %rsi      # 0x126b1
movq %r12, %rdi
xorl %eax, %eax
callq 0xd56a
xorl %edi, %edi
xorl %esi, %esi
callq 0x33ec
movq %r14, (%rbx)
movl 0x54(%rsp), %eax
movl %eax, 0x8(%rbx)
movq 0x88(%rsp), %rax
movq %rax, 0x10(%rbx)
movq %rbx, %rax
addq $0x118, %rsp            # imm = 0x118
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
testq %r13, %r13
je 0x4a79
cmpl $0x0, (%r13)
jne 0x4a28
cmpq $0x0, 0x80(%rsp)
je 0x4a39
movq 0x80(%rsp), %rax
cmpl $0x0, (%rax)
jne 0x4a28
jmp 0x4a39
leaq 0xde38(%rip), %rdi      # 0x128d2
leaq 0xda2a(%rip), %rsi      # 0x124cb
leaq 0xde3c(%rip), %rcx      # 0x128e4
movl $0x112, %edx            # imm = 0x112
callq 0x30e0