// File: /workspace/github_c_makefile_star2_O2/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 $0xf8, %rsp
movq %rcx, %r15
movq %rdx, %r14
movq %rdi, 0x90(%rsp)
andl $0x0, 0x18(%rsp)
andq $0x0, 0x50(%rsp)
testq %rdx, %rdx
je 0x3852
andl $0x0, (%r14)
testq %r15, %r15
je 0x385b
andl $0x0, (%r15)
movq %rsi, 0x30(%rsp)
testq %r8, %r8
je 0x3869
andl $0x0, (%r8)
movq %r8, 0x88(%rsp)
movq $0x0, 0x20(%rsp)
leaq 0x18(%rsp), %rbx
leaq 0x18882(%rip), %r13     # 0x1c108
movl $0x0, 0x1c(%rsp)
movq $0x0, 0x28(%rsp)
movq %r14, 0xa8(%rsp)
movq %rbx, %rdi
callq 0x5450
testl %eax, %eax
jne 0x389f
movq %r13, %r12
movl (%r13), %r13d
leal -0x4(%r13), %eax
cmpl $0x3b, %eax
ja 0x44a0
leaq 0xd822(%rip), %rcx      # 0x110e8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
pushq $0x2
popq %rbx
movl %ebx, %ebp
jmpq *%rax
pushq $0x10
jmp 0x38e6
pushq $0x20
jmp 0x38e6
pushq $0x4
jmp 0x38e6
pushq $0x40
jmp 0x38e6
pushq $0x8
popq %rbp
testq %r14, %r14
movq %r12, %r13
jne 0x3901
leaq 0x8(%r13), %rdi
leaq 0xde65(%rip), %rsi      # 0x1175f
xorl %eax, %eax
callq 0xc536
movl (%r14), %eax
movl %eax, %ecx
testl %eax, %eax
leaq 0x18(%rsp), %rbx
je 0x3929
cmpl $0x4, %eax
je 0x3922
cmpl $0x8, %eax
je 0x3922
cmpl $0x40, %eax
jne 0x3926
pushq $-0xd
jmp 0x3928
pushq $-0x41
jmp 0x3928
pushq $-0x1
popq %rcx
testl %ebp, %ecx
je 0x3942
leaq 0x8(%r13), %rdi
leaq 0xde55(%rip), %rsi      # 0x1178d
xorl %eax, %eax
callq 0xc536
movl (%r14), %eax
orl %ebp, %eax
movl %eax, (%r14)
jmp 0x396e
pushq $0x4
popq %rbx
testq %r15, %r15
movq %r12, %r13
jne 0x3966
leaq 0x8(%r13), %rdi
leaq 0xde5e(%rip), %rsi      # 0x117bd
xorl %eax, %eax
callq 0xc536
orl %ebx, (%r15)
leaq 0x18(%rsp), %rbx
callq 0x9c1e
jmp 0x389f
xorl %r14d, %r14d
cmpl $0x16, %r13d
je 0x3c90
cmpl $0x29, %r13d
je 0x3c85
cmpl $0x30, %r13d
jne 0x3c98
pushq $0x10
popq %rbx
xorl %ebp, %ebp
xorl %r14d, %r14d
jmp 0x3ca9
callq 0x9c1e
leaq 0xdc75(%rip), %rsi      # 0x11627
pushq $0x42
popq %rdi
callq 0xa26e
leaq 0x18(%rsp), %rsi
leaq 0x50(%rsp), %rdx
movq 0x30(%rsp), %rbx
movq %rbx, %rdi
callq 0x3784
movq %rax, %rdx
testq %rax, %rax
movl 0x1c(%rsp), %ebp
jne 0x3a0b
movq %rbx, %rdi
callq 0x6e32
cmpb $0x1, 0x5(%rax)
jne 0x39ef
movq 0x18(%rax), %rax
movq 0x8(%rax), %rdx
cmpl $0x2e, %r13d
jne 0x3a00
movl 0x10(%rax), %ecx
orl %ecx, 0x18(%rsp)
testb $0x40, 0x4(%rdx)
je 0x3a0b
movq %rax, 0x50(%rsp)
movq %rdx, 0x28(%rsp)
incl %ebp
leaq 0xdc1d(%rip), %rsi      # 0x11636
pushq $0x43
popq %rdi
callq 0xa26e
jmp 0x4461
movq %r12, %r13
leaq 0x8(%r12), %rdi
leaq 0xdbd5(%rip), %rsi      # 0x1160a
jmp 0x3c70
movq 0x20(%rsp), %rax
orl $0x4, %eax
jmp 0x3c16
movl 0x1c(%rsp), %ebp
incl %ebp
callq 0x9c1e
leaq 0x17f3f(%rip), %rax     # 0x1b998
jmp 0x3bce
movq 0x88(%rsp), %r13
testq %r13, %r13
jne 0x3a7e
leaq 0x8(%r12), %rdi
leaq 0xdbd1(%rip), %rsi      # 0x11648
xorl %eax, %eax
callq 0xc536
movq %r14, %rbx
callq 0x9c1e
leaq 0xdbef(%rip), %rsi      # 0x1167c
pushq $0x42
popq %rdi
callq 0xa26e
movq 0x30(%rsp), %r14
movq %r14, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3784
testq %rax, %rax
je 0x405e
movslq 0x8(%rax), %r14
jmp 0x406b
movq 0x20(%rsp), %rax
orl $0x40, %eax
jmp 0x3c16
movq 0x20(%rsp), %rax
btl $0x9, %eax
movq %r12, %r13
jae 0x3aea
leaq 0x8(%r13), %rdi
leaq 0xdad6(%rip), %rsi      # 0x115b4
xorl %eax, %eax
callq 0xc536
movq 0x20(%rsp), %rax
leal (%rax,%rax), %ebx
andl $0x200, %ebx            # imm = 0x200
orl %eax, %ebx
orl $0x100, %ebx            # imm = 0x100
callq 0x9c1e
movl %ebx, %eax
movq %rax, 0x20(%rsp)
jmp 0x3c77
cmpq $0x0, 0x28(%rsp)
jne 0x44a0
cmpl $0x0, 0x20(%rsp)
jne 0x44a0
movq %r12, %r13
movq 0x20(%r12), %rsi
pushq $0x1
popq %rdx
movq 0x30(%rsp), %rdi
callq 0xb758
testq %rax, %rax
je 0x464c
cmpl $0x0, 0x8(%rax)
jne 0x464c
movq 0x10(%rax), %rcx
movq %rcx, 0x28(%rsp)
movl 0x18(%rax), %eax
orl %eax, 0x18(%rsp)
movl 0x1c(%rsp), %ebp
incl %ebp
callq 0x9c1e
movq $0x0, 0x20(%rsp)
leaq 0x18(%rsp), %rbx
jmp 0x4469
xorl %edi, %edi
xorl %esi, %esi
callq 0x33db
leaq 0x18(%rsp), %rbx
movq %r12, %r13
jmp 0x3c7c
movq 0x20(%rsp), %rax
testb %al, %al
movq %r12, %r13
jns 0x3bb2
leaq 0x8(%r13), %rdi
leaq 0xd9fc(%rip), %rsi      # 0x115a2
xorl %eax, %eax
callq 0xc536
movq 0x20(%rsp), %rax
orl $0x80, %eax
jmp 0x3c55
movl 0x1c(%rsp), %ebp
incl %ebp
callq 0x9c1e
leaq 0x17e22(%rip), %rax     # 0x1b9f0
movq %rax, 0x28(%rsp)
jmp 0x4461
movq 0x20(%rsp), %rax
orl $0x20, %eax
jmp 0x3c16
movq 0x20(%rsp), %rax
btl $0xa, %eax
movq %r12, %r13
jae 0x3c07
leaq 0x8(%r13), %rdi
leaq 0xd9c9(%rip), %rsi      # 0x115c4
xorl %eax, %eax
callq 0xc536
movq 0x20(%rsp), %rax
orl $0x400, %eax            # imm = 0x400
jmp 0x3c55
movq 0x20(%rsp), %rax
orl $0x10, %eax
movq %rax, 0x20(%rsp)
movl 0x1c(%rsp), %ebp
incl %ebp
callq 0x9c1e
jmp 0x4461
movq 0x20(%rsp), %rax
btl $0xb, %eax
movq %r12, %r13
jae 0x3c50
leaq 0x8(%r13), %rdi
leaq 0xd993(%rip), %rsi      # 0x115d7
xorl %eax, %eax
callq 0xc536
movq 0x20(%rsp), %rax
orl $0x800, %eax            # imm = 0x800
movq %rax, 0x20(%rsp)
callq 0x9c1e
jmp 0x3c77
movq %r12, %r13
leaq 0x8(%r12), %rdi
leaq 0xd97c(%rip), %rsi      # 0x115ec
xorl %eax, %eax
callq 0xc536
leaq 0x18(%rsp), %rbx
movl 0x1c(%rsp), %ebp
jmp 0x4469
pushq $0x8
popq %r14
pushq $0xf
popq %rbx
xorl %ebp, %ebp
jmp 0x3ca9
pushq $0x6
popq %rbx
movb $0x1, %bpl
jmp 0x3ca9
leaq 0xdb51(%rip), %rdi      # 0x117f0
xorl %r14d, %r14d
xorl %eax, %eax
callq 0xcffb
callq 0x9c1e
leaq 0xc0(%rsp), %r13
andl $0x0, (%r13)
movq %r13, %rdi
movl %r14d, %esi
callq 0x334c
movq %r13, %rdi
movl %r14d, %esi
callq 0x33db
cmpl $0x4, (%r12)
jne 0x3ce4
movq 0x20(%r12), %r14
callq 0x9c1e
jmp 0x3ce7
xorl %r14d, %r14d
testb $0x1, %bpl
je 0x3d36
pushq $0x5f
popq %rdi
callq 0xa28d
testb %al, %al
je 0x3d36
leaq 0xe0(%rsp), %r13
movq %r13, %rdi
movq 0x30(%rsp), %rsi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x381f
movq (%r13), %r13
testq %r13, %r13
jne 0x3d39
leaq 0x8(%r12), %rdi
leaq 0xdae7(%rip), %rsi      # 0x11811
xorl %r13d, %r13d
xorl %eax, %eax
callq 0xc536
jmp 0x3d39
xorl %r13d, %r13d
testq %r14, %r14
je 0x3d8b
movl (%r12), %eax
cmpl $0x44, %eax
setne %cl
cmpl $0x61, %eax
setne %al
andb %cl, %al
movzbl %al, %edx
movq 0x30(%rsp), %rdi
movq %r14, %rsi
callq 0xb7b9
testq %rax, %rax
je 0x3d8b
cmpl %ebx, (%rax)
je 0x3d85
leaq 0x8(%r12), %rdi
leaq 0xdabb(%rip), %rsi      # 0x11830
movq %rax, %rbx
movq %r14, %rdx
xorl %eax, %eax
callq 0xc536
movq %rbx, %rax
movl 0x1c(%rsp), %ebp
jmp 0x3de0
testb $0x1, %bpl
je 0x3da2
pushq $0x6
popq %rdi
pushq $0x1e
popq %rsi
callq 0xc7b0
movq %r13, 0x20(%rax)
jmp 0x3dbd
movl %ebx, %edi
xorl %esi, %esi
callq 0xc7b0
andq $0x0, 0x10(%rax)
andl $0x0, 0x8(%rax)
movq %r14, 0x40(%rax)
andq $0x0, 0x48(%rax)
movq 0x30(%rsp), %rdi
movl 0x1c(%rsp), %ebp
movb $0x1, 0x3c(%rax)
testq %r14, %r14
je 0x3de0
movq %r14, %rsi
movq %rax, %rbx
movq %rax, %rdx
callq 0xb818
movq %rbx, %rax
cmpl $0x44, (%r12)
movq %rax, 0x28(%rsp)
jne 0x4457
cmpb $0x0, 0x3c(%rax)
movq 0x30(%rsp), %rbp
jne 0x3e11
leaq 0x8(%r12), %rdi
leaq 0xda57(%rip), %rsi      # 0x1185e
movq %r14, %rdx
xorl %eax, %eax
callq 0xc536
callq 0x9c1e
movq 0x28(%rsp), %rdx
movl (%rdx), %eax
leal -0xf(%rax), %ecx
cmpl $0x2, %ecx
jae 0x4028
movq %rdx, 0x58(%rsp)
leaq 0x48(%rdx), %r13
movq %r13, 0x60(%rsp)
andl $0x0, 0x68(%rsp)
movb 0xc0(%rsp), %al
shrb $0x3, %al
andb $0x1, %al
movb %al, 0x6c(%rsp)
movq %rbp, %rdi
callq 0x4ee5
testb %al, %al
jne 0x3fd1
xorl %edi, %edi
xorl %esi, %esi
callq 0x334c
leaq 0x70(%rsp), %r14
leaq 0x44(%rsp), %r8
movq %r14, %rdi
movq %rbp, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x381f
movq (%r14), %rbx
testq %rbx, %rbx
jne 0x3e99
leaq 0x8(%r12), %rdi
leaq 0xdb23(%rip), %rsi      # 0x119b5
xorl %eax, %eax
callq 0xc536
cmpl $0x61, (%r12)
jne 0x3ef7
movl (%rbx), %eax
addl $-0xf, %eax
cmpl $0x1, %eax
ja 0x3eb1
cmpq $0x0, 0x40(%rbx)
je 0x3ec4
leaq 0x8(%r12), %rdi
leaq 0xdb1d(%rip), %rsi      # 0x119da
xorl %eax, %eax
callq 0xc536
callq 0x9c1e
movl 0x44(%rsp), %edx
movq 0x80(%rsp), %rax
movq %rax, 0x10(%rsp)
movups 0x70(%rsp), %xmm0
movups %xmm0, (%rsp)
leaq 0x58(%rsp), %rdi
pushq $-0x1
popq %rcx
xorl %esi, %esi
callq 0x54a2
jmp 0x3fd1
pushq $0x5f
popq %rdi
callq 0xa28d
testb %al, %al
je 0x3f31
movq %rbp, %rdi
xorl %esi, %esi
callq 0x6f2d
movq 0x80(%rsp), %rcx
movq %rcx, 0x10(%rsp)
movups 0x70(%rsp), %xmm0
movups %xmm0, (%rsp)
leaq 0x58(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
movq %rax, %rcx
jmp 0x3fac
movq 0x80(%rsp), %rax
movq %rax, 0x10(%rsp)
movups 0x70(%rsp), %xmm0
movups %xmm0, (%rsp)
leaq 0xc8(%rsp), %rdi
leaq 0xb8(%rsp), %rdx
movq %rbp, %rsi
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x46fd
pushq $0x5f
popq %rdi
callq 0xa28d
testb %al, %al
je 0x3f7f
movq %rbp, %rdi
xorl %esi, %esi
callq 0x6f2d
movq %rax, %rcx
jmp 0x3f82
pushq $-0x1
popq %rcx
movq 0xb8(%rsp), %rsi
movl 0x44(%rsp), %edx
movq 0xd8(%rsp), %rax
movq %rax, 0x10(%rsp)
movups 0xc8(%rsp), %xmm0
movups %xmm0, (%rsp)
leaq 0x58(%rsp), %rdi
callq 0x54a2
cmpl $0x61, (%r12)
je 0x3fcc
leaq 0xd59d(%rip), %rsi      # 0x1155c
pushq $0x6e
popq %rdi
callq 0xa26e
jmp 0x3ef7
callq 0x9c1e
cmpl $0x45, (%r12)
jne 0x3e4c
cmpq $0x0, (%r13)
jne 0x3ff6
leaq 0x8(%r12), %rdi
leaq 0xd888(%rip), %rsi      # 0x11877
xorl %eax, %eax
callq 0xc536
callq 0x9c1e
cmpb $0x0, 0x6c(%rsp)
movq 0x28(%rsp), %rdx
jne 0x444f
movq 0x10(%rdx), %rax
movslq 0x8(%rdx), %rcx
addq %rcx, %rax
decq %rax
negq %rcx
andq %rax, %rcx
movq %rcx, 0x10(%rdx)
jmp 0x444f
cmpl $0x6, %eax
jne 0x444f
testq %r13, %r13
je 0x4113
movq 0x20(%rdx), %rax
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rdx)
movl 0x8(%rax), %ecx
movl %ecx, 0x8(%rdx)
movb 0x40(%rax), %al
movb %al, 0x40(%rdx)
movb $0x0, 0x3c(%rdx)
movq %rdx, %r13
jmp 0x411a
movq %r14, %rdi
xorl %esi, %esi
callq 0x6f2d
movq %rax, %r14
cmpq $0x7fffffff, %r14       # imm = 0x7FFFFFFF
movl 0x1c(%rsp), %ebp
ja 0x40d9
movq %r14, %rax
shrq %rax
movabsq $0x5555555555555555, %rcx # imm = 0x5555555555555555
andq %rax, %rcx
movq %r14, %rax
subq %rcx, %rax
movabsq $0x3333333333333333, %rcx # imm = 0x3333333333333333
movq %rax, %rdx
andq %rcx, %rdx
shrq $0x2, %rax
andq %rcx, %rax
addq %rdx, %rax
movq %rax, %rcx
shrq $0x4, %rcx
addq %rax, %rcx
movabsq $0xf0f0f0f0f0f0f0f, %rax # imm = 0xF0F0F0F0F0F0F0F
andq %rcx, %rax
movabsq $0x101010101010101, %rcx # imm = 0x101010101010101
imulq %rax, %rcx
shrq $0x38, %rcx
cmpl $0x2, %ecx
jb 0x40ef
leaq 0x8(%r12), %rdi
leaq 0xd5a7(%rip), %rsi      # 0x1168c
movq %r14, %rdx
xorl %eax, %eax
callq 0xc536
movslq (%r13), %rax
cmpq %rax, %r14
jbe 0x40fc
movl %r14d, (%r13)
leaq 0xd5a1(%rip), %rsi      # 0x116a4
pushq $0x43
popq %rdi
callq 0xa26e
movq %rbx, %r14
jmp 0x4461
leaq 0x17ae6(%rip), %r13     # 0x1bc00
xorl %ecx, %ecx
xorl %r14d, %r14d
movq $0x0, 0x48(%rsp)
movq $0x0, 0x38(%rsp)
movq %r15, 0x98(%rsp)
cmpl $0x4, (%r12)
jne 0x4351
movq %rcx, 0xb0(%rsp)
movq 0x20(%r12), %rbx
callq 0x9c1e
xorl %edi, %edi
xorl %esi, %esi
callq 0x334c
pushq $0x63
popq %rdi
callq 0xa28d
testb %al, %al
je 0x41d2
movq 0x30(%rsp), %rdi
callq 0x6b87
movq %rax, %rdi
callq 0x5d00
movq %rax, %rbp
cmpl $0x1, (%rax)
jne 0x418f
movq 0x8(%rbp), %rax
testb $0x2, 0x4(%rax)
jne 0x41a2
leaq 0x8(%r12), %rdi
leaq 0xd6f8(%rip), %rsi      # 0x11893
xorl %eax, %eax
callq 0xc536
movq 0x8(%rbp), %rax
movq 0x30(%rbp), %r14
movq 0x28(%rsp), %rcx
cmpq $0x0, 0x20(%rcx)
movzbl 0x40(%rax), %edx
je 0x41ef
movq %r13, %rdi
movq %r14, %rsi
callq 0xcc9e
testb %al, %al
je 0x4258
jmp 0x42c4
movb 0x40(%r13), %al
movq %r14, %rcx
negq %rcx
jo 0x4212
jb 0x4237
testb $0x1, %al
movb $0x1, %al
jne 0x4237
leaq 0xd703(%rip), %rdx      # 0x118f0
jmp 0x421d
leaq 0x17a0a(%rip), %r13     # 0x1bc00
movq %r13, %rdi
movq %r14, %rsi
callq 0xcc9e
testb %al, %al
jne 0x42c4
movq 0x8(%rbp), %r13
jmp 0x42c4
testb $0x1, %al
je 0x4235
leaq 0xf4f8(%rip), %rdx      # 0x13715
leaq 0x8(%r12), %rdi
leaq 0xd68f(%rip), %rsi      # 0x118b8
xorl %eax, %eax
callq 0xc536
jmp 0x42c4
xorl %eax, %eax
movzbl %al, %edx
andl $0x1, %edx
movq %r13, %rdi
movq %r14, %rsi
callq 0xcc9e
testb %al, %al
jne 0x42c4
movq 0x28(%rsp), %rax
cmpq $0x0, 0x20(%rax)
je 0x426e
leaq 0x8(%r12), %rdi
leaq 0xd68f(%rip), %rsi      # 0x118f3
movq %rbx, %rdx
xorl %eax, %eax
callq 0xc536
movq %rbx, 0xa0(%rsp)
movzbl 0x40(%r13), %ebp
movl %ebp, %ebx
shll $0x3, %ebx
xorl %ecx, %ecx
leaq 0x10(%rcx), %r15
cmpq $0x40, %r15
je 0x46de
addq %rbx, %rcx
leaq 0x162d6(%rip), %rax     # 0x1a570
movq (%rax,%rcx), %r13
movzbl %bpl, %edx
movq %r13, %rdi
movq %r14, %rsi
callq 0xcc9e
movq %r15, %rcx
testb %al, %al
je 0x4282
movq 0x98(%rsp), %r15
movq 0xa0(%rsp), %rbx
pushq $0x3
popq %rsi
movq %rbx, %rdi
movq %r13, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x3724
movq %rax, %rbp
movq %r14, 0x40(%rax)
movq %r14, %rdi
callq 0xd317
movq %rax, 0x20(%rbp)
movq 0xb0(%rsp), %rax
movq %rax, 0x38(%rbp)
cmpb $0x1, 0x40(%r13)
jne 0x431b
testq %r14, %r14
jns 0x431b
movq %r14, %rax
negq %rax
movq 0x38(%rsp), %rcx
cmpq %rax, %rcx
cmovbeq %rax, %rcx
movq %rcx, 0x38(%rsp)
jmp 0x432c
movq 0x48(%rsp), %rax
cmpq %rax, %r14
cmovaq %r14, %rax
movq %rax, 0x48(%rsp)
movq 0x30(%rsp), %rdi
movq %rbp, %rsi
callq 0xb693
pushq $0x6e
popq %rdi
callq 0xa28d
incq %r14
movq %rbp, %rcx
testb %al, %al
jne 0x4139
jmp 0x4354
movq %rcx, %rbp
leaq 0xd60e(%rip), %rsi      # 0x11969
pushq $0x45
popq %rdi
callq 0xa26e
movq 0x28(%rsp), %rdx
cmpq $0x0, 0x20(%rdx)
jne 0x444f
movl $0x80000000, %eax       # imm = 0x80000000
incq %rax
movq 0x38(%rsp), %rsi
cmpq %rax, %rsi
setb %al
movq 0x48(%rsp), %rcx
shrq $0x1f, %rcx
sete %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0x43ae
testq %rsi, %rsi
jne 0x442e
leaq 0x178af(%rip), %r13     # 0x1bc58
jmp 0x4435
xorl %ebx, %ebx
negq %rsi
movq %rsi, 0x38(%rsp)
setb %bl
shll $0x3, %ebx
xorl %r14d, %r14d
cmpq $0x30, %r14
je 0x4403
leaq (%rbx,%r14), %rax
leaq 0x1619e(%rip), %rcx     # 0x1a570
movq (%rcx,%rax), %r13
movq %r13, %rdi
movq 0x48(%rsp), %rsi
xorl %edx, %edx
callq 0xcc9e
testb %al, %al
je 0x43fd
pushq $0x1
popq %rdx
movq %r13, %rdi
movq 0x38(%rsp), %rsi
callq 0xcc9e
testb %al, %al
jne 0x4416
addq $0x10, %r14
jmp 0x43c1
leaq 0x8(%r12), %rdi
leaq 0xd572(%rip), %rsi      # 0x11981
xorl %eax, %eax
callq 0xc536
movq 0x28(%rsp), %rdx
movq %r13, 0x20(%rdx)
testq %rbp, %rbp
je 0x4439
movq %rdx, 0x10(%rbp)
movq 0x38(%rbp), %rbp
jmp 0x441f
leaq 0x177cb(%rip), %r13     # 0x1bc00
movq %r13, 0x20(%rdx)
movq 0x10(%r13), %rax
movq %rax, 0x10(%rdx)
movl 0x8(%r13), %eax
movl %eax, 0x8(%rdx)
movb 0x40(%r13), %al
movb %al, 0x40(%rdx)
movb $0x0, 0x3c(%rdx)
movl 0x1c(%rsp), %ebp
incl %ebp
movq 0xa8(%rsp), %r14
leaq 0x18(%rsp), %rbx
movq %r12, %r13
movl %ebp, 0x1c(%rsp)
cmpl $0x1, %ebp
jg 0x4489
cmpq $0x0, 0x28(%rsp)
je 0x389f
cmpl $0x0, 0x20(%rsp)
je 0x389f
leaq 0x8(%r13), %rdi
leaq 0xd22d(%rip), %rsi      # 0x116c1
xorl %eax, %eax
callq 0xc536
jmp 0x389f
movq 0x20(%rsp), %rax
testl %eax, %eax
movq %r12, %r13
je 0x4642
cmpl $0x4, %eax
je 0x467e
cmpl $0x10, %eax
je 0x45eb
cmpl $0x20, %eax
je 0x4627
cmpl $0x40, %eax
je 0x4687
cmpl $0x80, %eax
je 0x45c7
cmpl $0x90, %eax
je 0x45c7
cmpl $0x100, %eax            # imm = 0x100
je 0x45df
cmpl $0x110, %eax            # imm = 0x110
je 0x45df
cmpl $0x140, %eax            # imm = 0x140
je 0x466c
cmpl $0x300, %eax            # imm = 0x300
je 0x45d3
cmpl $0x310, %eax            # imm = 0x310
je 0x45d3
cmpl $0x400, %eax            # imm = 0x400
je 0x45eb
cmpl $0xb10, %eax            # imm = 0xB10
je 0x460f
cmpl $0x410, %eax            # imm = 0x410
je 0x45eb
cmpl $0x480, %eax            # imm = 0x480
je 0x45c7
cmpl $0x490, %eax            # imm = 0x490
je 0x45c7
cmpl $0x500, %eax            # imm = 0x500
je 0x45df
cmpl $0x510, %eax            # imm = 0x510
je 0x45df
cmpl $0x700, %eax            # imm = 0x700
je 0x45d3
cmpl $0x710, %eax            # imm = 0x710
je 0x45d3
cmpl $0x800, %eax            # imm = 0x800
je 0x4603
cmpl $0x804, %eax            # imm = 0x804
je 0x4675
cmpl $0x810, %eax            # imm = 0x810
je 0x4603
cmpl $0x880, %eax            # imm = 0x880
je 0x461b
cmpl $0x890, %eax            # imm = 0x890
je 0x461b
cmpl $0x900, %eax            # imm = 0x900
je 0x45f7
cmpl $0x910, %eax            # imm = 0x910
je 0x45f7
cmpl $0xb00, %eax            # imm = 0xB00
je 0x460f
cmpl $0x404, %eax            # imm = 0x404
jne 0x4630
leaq 0x174de(%rip), %rbx     # 0x1baa0
jmp 0x46a8
leaq 0x17582(%rip), %rbx     # 0x1bb50
jmp 0x46a8
leaq 0x17786(%rip), %rbx     # 0x1bd60
jmp 0x46a8
leaq 0x176ca(%rip), %rbx     # 0x1bcb0
jmp 0x46a8
leaq 0x1760e(%rip), %rbx     # 0x1bc00
jmp 0x46a8
leaq 0x1770a(%rip), %rbx     # 0x1bd08
jmp 0x46a8
leaq 0x1764e(%rip), %rbx     # 0x1bc58
jmp 0x46a8
leaq 0x177a2(%rip), %rbx     # 0x1bdb8
jmp 0x46a8
leaq 0x17586(%rip), %rbx     # 0x1bba8
jmp 0x46a8
leaq 0x177e2(%rip), %rbx     # 0x1be10
jmp 0x46a8
leaq 0x8(%r13), %rdi
leaq 0xd0af(%rip), %rsi      # 0x116ea
xorl %eax, %eax
callq 0xc536
movq 0x28(%rsp), %rbx
testq %rbx, %rbx
jne 0x46a8
cmpl $0x0, 0x18(%rsp)
je 0x4690
addq $0x8, %r13
leaq 0xd0b3(%rip), %rsi      # 0x11711
xorl %ebx, %ebx
movq %r13, %rdi
xorl %eax, %eax
callq 0xc536
jmp 0x46a8
leaq 0x1784d(%rip), %rbx     # 0x1bec0
jmp 0x46a8
leaq 0x1747c(%rip), %rbx     # 0x1baf8
jmp 0x46a8
leaq 0x173c3(%rip), %rbx     # 0x1ba48
jmp 0x46a8
leaq 0x177da(%rip), %rbx     # 0x1be68
jmp 0x46a8
testq %r14, %r14
je 0x469b
cmpl $0x0, (%r14)
jne 0x4653
testq %r15, %r15
je 0x46a6
cmpl $0x0, (%r15)
jne 0x4653
xorl %ebx, %ebx
xorl %edi, %edi
xorl %esi, %esi
callq 0x334c
movq 0x90(%rsp), %rax
movq %rbx, (%rax)
movl 0x18(%rsp), %ecx
movl %ecx, 0x8(%rax)
movq 0x50(%rsp), %rcx
movq %rcx, 0x10(%rax)
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xd24d(%rip), %rdi      # 0x11932
leaq 0xce3f(%rip), %rsi      # 0x1152b
leaq 0xd251(%rip), %rcx      # 0x11944
movl $0x112, %edx            # imm = 0x112
callq 0x30e0