// File: /workspace/github_c_makefile_star2_O0/MikeGray-APH[P]LibLouisAPH/source/pattern.c
// Function: pattern_compile_expression
static int pattern_compile_expression(
	const unichar *input,
	const int input_len,
	int *input_crs,
	unichar *expr_data,
	const int expr_len,
	unichar *expr_crs,
	unichar *loop_cnts,
	struct subpattern *subpatterns)
{
	struct subpattern *subpattern;
	unichar *data, attrs0, attrs1;;
	int expr_start, expr_end, expr_sub, expr_crs_prv;
	int input_end, subinput_crs;
	int set, esc, nest, i;

	switch(input[*input_crs])
	{
	case '(':

		if(*expr_crs + 10 >= expr_len)
			return 0;

		(*input_crs)++;
		if(*input_crs >= input_len)
			return 0;

		/*   find closing parenthesis   */
		nest = esc = 0;
		for(input_end = *input_crs; input_end < input_len; input_end++)
		{
			if(input[input_end] == '\\' && !esc)
			{
				esc = 1;
				continue;
			}

			if(input[input_end] == '(' && !esc)
				nest++;
			else if(input[input_end] == ')' && !esc)
			{
				if(nest)
					nest--;
				else
					break;
			}

			esc = 0;
		}
		if(input_end >= input_len)
			return 0;

		EXPR_TYPE(*expr_crs) = PTN_GROUP;

		/*   compile sub expressions   */
		expr_crs_prv = *expr_crs;
		*expr_crs += 4;
		EXPR_DATA_0(expr_crs_prv) = *expr_crs;
		expr_sub = *expr_crs;
		EXPR_TYPE(expr_sub) = PTN_ERROR;
		EXPR_PRV(expr_sub) = PTN_END;
		EXPR_NXT(expr_sub) = PTN_END;
		if(!pattern_compile_1(input, input_end, input_crs, expr_data, expr_len, expr_crs, loop_cnts, subpatterns))
			return 0;
		(*input_crs)++;

		/*   reset end expression   */
		expr_end = *expr_crs;
		EXPR_NXT(expr_end) = expr_crs_prv;

		return *expr_crs += 3;

	case '!':

		if(*expr_crs + 10 >= expr_len)
			return 0;

		(*input_crs)++;
		if(*input_crs >= input_len)
			return 0;

		EXPR_TYPE(*expr_crs) = PTN_NOT;
		expr_crs_prv = *expr_crs;
		*expr_crs += 4;
		EXPR_DATA_0(expr_crs_prv) = *expr_crs;

		/*   create start expression   */
		expr_start = *expr_crs;
		EXPR_TYPE(expr_start) = PTN_START;
		EXPR_PRV(expr_start) = PTN_END;
		*expr_crs += 3;
		EXPR_NXT(expr_start) = *expr_crs;

		/*   compile sub expression   */
		expr_sub = *expr_crs;
		EXPR_TYPE(expr_sub) = PTN_ERROR;
		EXPR_PRV(expr_sub) = expr_start;
		EXPR_NXT(expr_sub) = PTN_END;

		if(!pattern_compile_expression(input, input_len, input_crs, expr_data, expr_len, expr_crs, loop_cnts, subpatterns))
			return 0;

		EXPR_NXT(expr_sub) = *expr_crs;

		/*   create end expression   */
		expr_end = *expr_crs;
		EXPR_TYPE(expr_end) = PTN_END;
		EXPR_PRV(expr_end) = expr_sub;
		EXPR_NXT(expr_end) = expr_crs_prv;

		return *expr_crs += 3;

	case '+':

		if(*expr_crs + 4 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_ONE_MORE;
		EXPR_DATA_1(*expr_crs) = (*loop_cnts)++;
		(*input_crs)++;
		return *expr_crs += 5;

	case '*':

		if(*expr_crs + 4 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_ZERO_MORE;
		EXPR_DATA_1(*expr_crs) = (*loop_cnts)++;
		(*input_crs)++;
		return *expr_crs += 5;

	case '?':

		if(*expr_crs + 4 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_OPTIONAL;
		(*input_crs)++;
		return *expr_crs += 4;

	case '|':

		if(*expr_crs + 5 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_ALTERNATE;
		(*input_crs)++;
		return *expr_crs += 5;

	case '.':

		if(*expr_crs + 3 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_ANY;
		(*input_crs)++;
		return *expr_crs += 3;

	case '%':

		if(*expr_crs + 5 >= expr_len)
			return 0;

		(*input_crs)++;
		if(*input_crs >= input_len)
			return 0;

		/*   find closing bracket   */
		if(input[*input_crs] == '[')
		{
			set = 1;
			(*input_crs)++;
			for(input_end = *input_crs; input_end < input_len; input_end++)
			if(input[input_end] == ']')
				break;
			if(input_end >= input_len)
				return 0;
		}
		else
		{
			set = 0;
			input_end = *input_crs + 1;
		}

		EXPR_TYPE(*expr_crs) = PTN_ATTRIBUTES;

		attrs0 = attrs1 = 0;
		for( ; (*input_crs) < input_end; (*input_crs)++)
			attr_from_char(&attrs0, &attrs1, input[*input_crs]);

		EXPR_DATA_0(*expr_crs) = attrs0;
		EXPR_DATA_1(*expr_crs) = attrs1;

		if(set)
			(*input_crs)++;
		return *expr_crs += 5;

	case '[':

		(*input_crs)++;
		if(*input_crs >= input_len)
			return 0;

		/*   find closing bracket   */
		esc = 0;
		for(input_end = *input_crs; input_end < input_len; input_end++)
		{
			if(input[input_end] == '\\' && !esc)
			{
				esc = 1;
				continue;
			}

			if(input[input_end] == ']' && !esc)
				break;
			esc = 0;
		}
		if(input_end >= input_len)
			return 0;

		if(*expr_crs + 4 + (input_end - *input_crs) >= expr_len)
			return 0;

		EXPR_TYPE(*expr_crs) = PTN_CHARS;

		esc = 0;
		data = EXPR_DATA(*expr_crs);
		for(i = 1; *input_crs < input_end; (*input_crs)++)
		{
			if(input[*input_crs] == '\\' && !esc)
			{
				esc = 1;
				continue;
			}

			esc = 0;
			data[i++] = (unichar)input[*input_crs];
		}
		data[0] = i - 1;
		(*input_crs)++;
		return *expr_crs += 4 + data[0];

	case '@':

		if(*expr_crs + 10 >= expr_len)
			return 0;

		(*input_crs)++;
		if(*input_crs >= input_len)
			return 0;

		/*   which bracket   */
		if(input[*input_crs] == '{')
		{
			set = 1;
			(*input_crs)++;
			for(input_end = *input_crs; input_end < input_len; input_end++)
			if(input[input_end] == '}')
				break;
			if(input_end >= input_len)
				return 0;

			if(*expr_crs + 4 + (input_end - *input_crs) >= expr_len)
				return 0;

			EXPR_TYPE(*expr_crs) = PTN_SUBPATTERN;

			esc = 0;
			data = EXPR_DATA(*expr_crs);
			for(i = 1; *input_crs < input_end; (*input_crs)++)
			{
				if(input[*input_crs] == '\\' && !esc)
				{
					esc = 1;
					continue;
				}

				esc = 0;
				data[i++] = (unichar)input[*input_crs];
			}
			data[0] = i - 1;
			(*input_crs)++;
			return *expr_crs += 4 + data[0];
		}

		/*   find closing bracket   */
		else if(input[*input_crs] == '[')
		{
			set = 1;
			(*input_crs)++;
			for(input_end = *input_crs; input_end < input_len; input_end++)
			if(input[input_end] == ']')
				break;
			if(input_end >= input_len)
				return 0;

			subpattern = subpattern_find(subpatterns, &input[*input_crs], input_end - *input_crs);
			if(!subpattern)
				return 0;
			if(subpattern->processing)
				return 0;

			EXPR_TYPE(*expr_crs) = PTN_GROUP;

			/*   compile sub pattern   */
			expr_crs_prv = *expr_crs;
			*expr_crs += 4;
			EXPR_DATA_0(expr_crs_prv) = *expr_crs;
			expr_sub = *expr_crs;
			EXPR_TYPE(expr_sub) = PTN_ERROR;
			EXPR_PRV(expr_sub) = PTN_END;
			EXPR_NXT(expr_sub) = PTN_END;
			subinput_crs = 0;
			subpattern->processing = 1;
			if(!pattern_compile_1(subpattern->src_data, subpattern->src_len, &subinput_crs, expr_data, expr_len, expr_crs, loop_cnts, subpatterns))
				return 0;
			subpattern->processing = 0;
			*input_crs = input_end + 1;

			/*   reset end expression   */
			expr_end = *expr_crs;
			EXPR_NXT(expr_end) = expr_crs_prv;

			return *expr_crs += 3;
		}

		return 0;

	case '^':
	case '$':

		if(*expr_crs + 3 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_END_OF_INPUT;
		(*input_crs)++;
		return *expr_crs += 3;

	case '\\':

		(*input_crs)++;
		if(*input_crs >= input_len)
			return 0;

	default:

		if(*expr_crs + 5 >= expr_len)
			return 0;
		EXPR_TYPE(*expr_crs) = PTN_CHARS;
		EXPR_DATA_0(*expr_crs) = 1;
		EXPR_DATA_1(*expr_crs) = (unichar)input[*input_crs];
		(*input_crs)++;
		return *expr_crs += 5;
	}

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movl %r8d, -0x2c(%rbp)
movq %r9, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq (%rcx), %rcx
movzwl (%rax,%rcx,2), %eax
addl $-0x21, %eax
movl %eax, %ecx
movq %rcx, -0x80(%rbp)
subl $0x5b, %eax
ja 0xdadd
movq -0x80(%rbp), %rax
leaq 0x11cb6(%rip), %rcx     # 0x1ea7c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0xa, %eax
cmpl -0x2c(%rbp), %eax
jl 0xcdea
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
jl 0xce0c
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movl $0x0, -0x6c(%rbp)
movl $0x0, -0x70(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x60(%rbp)
movl -0x60(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0xceb4
movq -0x10(%rbp), %rax
movslq -0x60(%rbp), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x5c, %eax
jne 0xce4f
cmpl $0x0, -0x6c(%rbp)
jne 0xce4f
movl $0x1, -0x6c(%rbp)
jmp 0xcea6
movq -0x10(%rbp), %rax
movslq -0x60(%rbp), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x28, %eax
jne 0xce71
cmpl $0x0, -0x6c(%rbp)
jne 0xce71
movl -0x70(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x70(%rbp)
jmp 0xce9f
movq -0x10(%rbp), %rax
movslq -0x60(%rbp), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x29, %eax
jne 0xce9d
cmpl $0x0, -0x6c(%rbp)
jne 0xce9d
cmpl $0x0, -0x70(%rbp)
je 0xce99
movl -0x70(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x70(%rbp)
jmp 0xce9b
jmp 0xceb4
jmp 0xce9d
jmp 0xce9f
movl $0x0, -0x6c(%rbp)
movl -0x60(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x60(%rbp)
jmp 0xce23
movl -0x60(%rbp), %eax
cmpl -0x14(%rbp), %eax
jl 0xcec8
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x2, (%rax,%rcx,2)
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x5c(%rbp)
movq -0x38(%rbp), %rax
movzwl (%rax), %ecx
addl $0x4, %ecx
movw %cx, (%rax)
movq -0x38(%rbp), %rax
movw (%rax), %dx
movq -0x28(%rbp), %rax
movl -0x5c(%rbp), %ecx
addl $0x3, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x58(%rbp)
movq -0x28(%rbp), %rax
movl -0x58(%rbp), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x0, (%rax,%rcx,2)
movq -0x28(%rbp), %rax
movl -0x58(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movw $0xffff, (%rax,%rcx,2)  # imm = 0xFFFF
movq -0x28(%rbp), %rax
movl -0x58(%rbp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movw $0xffff, (%rax,%rcx,2)  # imm = 0xFFFF
movq -0x10(%rbp), %rdi
movl -0x60(%rbp), %esi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movl -0x2c(%rbp), %r8d
movq -0x38(%rbp), %r9
movq 0x10(%rbp), %r10
movq 0x18(%rbp), %rax
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0xc0f0
cmpl $0x0, %eax
jne 0xcf8f
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x54(%rbp)
movl -0x5c(%rbp), %eax
movw %ax, %dx
movq -0x28(%rbp), %rax
movl -0x54(%rbp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl $0x3, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
jmp 0xdb65
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0xa, %eax
cmpl -0x2c(%rbp), %eax
jl 0xcfee
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
jl 0xd010
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x3, (%rax,%rcx,2)
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x5c(%rbp)
movq -0x38(%rbp), %rax
movzwl (%rax), %ecx
addl $0x4, %ecx
movw %cx, (%rax)
movq -0x38(%rbp), %rax
movw (%rax), %dx
movq -0x28(%rbp), %rax
movl -0x5c(%rbp), %ecx
addl $0x3, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x50(%rbp)
movq -0x28(%rbp), %rax
movl -0x50(%rbp), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x1, (%rax,%rcx,2)
movq -0x28(%rbp), %rax
movl -0x50(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movw $0xffff, (%rax,%rcx,2)  # imm = 0xFFFF
movq -0x38(%rbp), %rax
movzwl (%rax), %ecx
addl $0x3, %ecx
movw %cx, (%rax)
movq -0x38(%rbp), %rax
movw (%rax), %dx
movq -0x28(%rbp), %rax
movl -0x50(%rbp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x58(%rbp)
movq -0x28(%rbp), %rax
movl -0x58(%rbp), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x0, (%rax,%rcx,2)
movl -0x50(%rbp), %eax
movw %ax, %dx
movq -0x28(%rbp), %rax
movl -0x58(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x28(%rbp), %rax
movl -0x58(%rbp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movw $0xffff, (%rax,%rcx,2)  # imm = 0xFFFF
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movl -0x2c(%rbp), %r8d
movq -0x38(%rbp), %r9
movq 0x10(%rbp), %r10
movq 0x18(%rbp), %rax
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0xcd70
cmpl $0x0, %eax
jne 0xd130
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x38(%rbp), %rax
movw (%rax), %dx
movq -0x28(%rbp), %rax
movl -0x58(%rbp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x54(%rbp)
movq -0x28(%rbp), %rax
movl -0x54(%rbp), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0xffff, (%rax,%rcx,2)  # imm = 0xFFFF
movl -0x58(%rbp), %eax
movw %ax, %dx
movq -0x28(%rbp), %rax
movl -0x54(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movl -0x5c(%rbp), %eax
movw %ax, %dx
movq -0x28(%rbp), %rax
movl -0x54(%rbp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl $0x3, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
jmp 0xdb65
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0x4, %eax
cmpl -0x2c(%rbp), %eax
jl 0xd1c6
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x4, (%rax,%rcx,2)
movq 0x10(%rbp), %rax
movw (%rax), %dx
movw %dx, %cx
addw $0x1, %cx
movw %cx, (%rax)
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x4, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl $0x5, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
jmp 0xdb65
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0x4, %eax
cmpl -0x2c(%rbp), %eax
jl 0xd241
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x5, (%rax,%rcx,2)
movq 0x10(%rbp), %rax
movw (%rax), %dx
movw %dx, %cx
addw $0x1, %cx
movw %cx, (%rax)
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x4, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl $0x5, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
jmp 0xdb65
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0x4, %eax
cmpl -0x2c(%rbp), %eax
jl 0xd2bc
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x6, (%rax,%rcx,2)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl $0x4, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
jmp 0xdb65
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0x5, %eax
cmpl -0x2c(%rbp), %eax
jl 0xd311
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x7, (%rax,%rcx,2)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl $0x5, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
jmp 0xdb65
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0x3, %eax
cmpl -0x2c(%rbp), %eax
jl 0xd366
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x8, (%rax,%rcx,2)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl $0x3, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
jmp 0xdb65
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0x5, %eax
cmpl -0x2c(%rbp), %eax
jl 0xd3bb
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
jl 0xd3dd
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq (%rcx), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x5b, %eax
jne 0xd44a
movl $0x1, -0x68(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x60(%rbp)
movl -0x60(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0xd434
movq -0x10(%rbp), %rax
movslq -0x60(%rbp), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x5d, %eax
jne 0xd427
jmp 0xd434
jmp 0xd429
movl -0x60(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x60(%rbp)
jmp 0xd40c
movl -0x60(%rbp), %eax
cmpl -0x14(%rbp), %eax
jl 0xd448
movl $0x0, -0x4(%rbp)
jmp 0xdb65
jmp 0xd45d
movl $0x0, -0x68(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
addl $0x1, %eax
movl %eax, -0x60(%rbp)
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x9, (%rax,%rcx,2)
movw $0x0, -0x4c(%rbp)
movw $0x0, -0x4a(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
cmpl -0x60(%rbp), %eax
jge 0xd4b4
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq (%rcx), %rcx
leaq -0x4a(%rbp), %rdi
leaq -0x4c(%rbp), %rsi
movzwl (%rax,%rcx,2), %edx
callq 0xdb80
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0xd480
movw -0x4a(%rbp), %dx
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x3, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movw -0x4c(%rbp), %dx
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x4, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
cmpl $0x0, -0x68(%rbp)
je 0xd4f7
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl $0x5, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
jmp 0xdb65
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
jl 0xd531
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movl $0x0, -0x6c(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x60(%rbp)
movl -0x60(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0xd594
movq -0x10(%rbp), %rax
movslq -0x60(%rbp), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x5c, %eax
jne 0xd569
cmpl $0x0, -0x6c(%rbp)
jne 0xd569
movl $0x1, -0x6c(%rbp)
jmp 0xd589
movq -0x10(%rbp), %rax
movslq -0x60(%rbp), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x5d, %eax
jne 0xd582
cmpl $0x0, -0x6c(%rbp)
jne 0xd582
jmp 0xd594
movl $0x0, -0x6c(%rbp)
movl -0x60(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x60(%rbp)
jmp 0xd541
movl -0x60(%rbp), %eax
cmpl -0x14(%rbp), %eax
jl 0xd5a8
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0x4, %eax
movl -0x60(%rbp), %ecx
movq -0x20(%rbp), %rdx
subl (%rdx), %ecx
addl %ecx, %eax
cmpl -0x2c(%rbp), %eax
jl 0xd5ce
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0xa, (%rax,%rcx,2)
movl $0x0, -0x6c(%rbp)
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x3, %ecx
movslq %ecx, %rcx
shlq %rcx
addq %rcx, %rax
movq %rax, -0x48(%rbp)
movl $0x1, -0x74(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
cmpl -0x60(%rbp), %eax
jge 0xd675
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq (%rcx), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x5c, %eax
jne 0xd63c
cmpl $0x0, -0x6c(%rbp)
jne 0xd63c
movl $0x1, -0x6c(%rbp)
jmp 0xd668
movl $0x0, -0x6c(%rbp)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq (%rcx), %rcx
movw (%rax,%rcx,2), %dx
movq -0x48(%rbp), %rax
movl -0x74(%rbp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, -0x74(%rbp)
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0xd60e
movl -0x74(%rbp), %eax
subl $0x1, %eax
movw %ax, %cx
movq -0x48(%rbp), %rax
movw %cx, (%rax)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x48(%rbp), %rax
movzwl (%rax), %edx
addl $0x4, %edx
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl %edx, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
jmp 0xdb65
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0xa, %eax
cmpl -0x2c(%rbp), %eax
jl 0xd6cc
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
jl 0xd6ee
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq (%rcx), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x7b, %eax
jne 0xd866
movl $0x1, -0x68(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x60(%rbp)
movl -0x60(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0xd749
movq -0x10(%rbp), %rax
movslq -0x60(%rbp), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x7d, %eax
jne 0xd73c
jmp 0xd749
jmp 0xd73e
movl -0x60(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x60(%rbp)
jmp 0xd721
movl -0x60(%rbp), %eax
cmpl -0x14(%rbp), %eax
jl 0xd75d
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0x4, %eax
movl -0x60(%rbp), %ecx
movq -0x20(%rbp), %rdx
subl (%rdx), %ecx
addl %ecx, %eax
cmpl -0x2c(%rbp), %eax
jl 0xd783
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0xb, (%rax,%rcx,2)
movl $0x0, -0x6c(%rbp)
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x3, %ecx
movslq %ecx, %rcx
shlq %rcx
addq %rcx, %rax
movq %rax, -0x48(%rbp)
movl $0x1, -0x74(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
cmpl -0x60(%rbp), %eax
jge 0xd82a
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq (%rcx), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x5c, %eax
jne 0xd7f1
cmpl $0x0, -0x6c(%rbp)
jne 0xd7f1
movl $0x1, -0x6c(%rbp)
jmp 0xd81d
movl $0x0, -0x6c(%rbp)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq (%rcx), %rcx
movw (%rax,%rcx,2), %dx
movq -0x48(%rbp), %rax
movl -0x74(%rbp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, -0x74(%rbp)
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0xd7c3
movl -0x74(%rbp), %eax
subl $0x1, %eax
movw %ax, %cx
movq -0x48(%rbp), %rax
movw %cx, (%rax)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x48(%rbp), %rax
movzwl (%rax), %edx
addl $0x4, %edx
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl %edx, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
jmp 0xdb65
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq (%rcx), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x5b, %eax
jne 0xda56
movl $0x1, -0x68(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x60(%rbp)
movl -0x60(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0xd8c1
movq -0x10(%rbp), %rax
movslq -0x60(%rbp), %rcx
movzwl (%rax,%rcx,2), %eax
cmpl $0x5d, %eax
jne 0xd8b4
jmp 0xd8c1
jmp 0xd8b6
movl -0x60(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x60(%rbp)
jmp 0xd899
movl -0x60(%rbp), %eax
cmpl -0x14(%rbp), %eax
jl 0xd8d5
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq 0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rax
movslq (%rax), %rax
shlq %rax
addq %rax, %rsi
movl -0x60(%rbp), %edx
movq -0x20(%rbp), %rax
subl (%rax), %edx
callq 0xdc40
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x40(%rbp)
jne 0xd90f
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x40(%rbp), %rax
cmpl $0x0, 0x2c(%rax)
je 0xd925
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x2, (%rax,%rcx,2)
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x5c(%rbp)
movq -0x38(%rbp), %rax
movzwl (%rax), %ecx
addl $0x4, %ecx
movw %cx, (%rax)
movq -0x38(%rbp), %rax
movw (%rax), %dx
movq -0x28(%rbp), %rax
movl -0x5c(%rbp), %ecx
addl $0x3, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x58(%rbp)
movq -0x28(%rbp), %rax
movl -0x58(%rbp), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0x0, (%rax,%rcx,2)
movq -0x28(%rbp), %rax
movl -0x58(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movw $0xffff, (%rax,%rcx,2)  # imm = 0xFFFF
movq -0x28(%rbp), %rax
movl -0x58(%rbp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movw $0xffff, (%rax,%rcx,2)  # imm = 0xFFFF
movl $0x0, -0x64(%rbp)
movq -0x40(%rbp), %rax
movl $0x1, 0x2c(%rax)
movq -0x40(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x40(%rbp), %rax
movl 0x28(%rax), %esi
movq -0x28(%rbp), %rcx
movl -0x2c(%rbp), %r8d
movq -0x38(%rbp), %r9
movq 0x10(%rbp), %r10
movq 0x18(%rbp), %rax
leaq -0x64(%rbp), %rdx
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0xc0f0
cmpl $0x0, %eax
jne 0xda06
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x40(%rbp), %rax
movl $0x0, 0x2c(%rax)
movl -0x60(%rbp), %ecx
addl $0x1, %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x54(%rbp)
movl -0x5c(%rbp), %eax
movw %ax, %dx
movq -0x28(%rbp), %rax
movl -0x54(%rbp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl $0x3, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
jmp 0xdb65
jmp 0xda58
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0x3, %eax
cmpl -0x2c(%rbp), %eax
jl 0xda7f
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0xc, (%rax,%rcx,2)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl $0x3, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
jmp 0xdb65
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
jl 0xdadb
movl $0x0, -0x4(%rbp)
jmp 0xdb65
jmp 0xdadd
movq -0x38(%rbp), %rax
movzwl (%rax), %eax
addl $0x5, %eax
cmpl -0x2c(%rbp), %eax
jl 0xdaf5
movl $0x0, -0x4(%rbp)
jmp 0xdb65
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
movw $0xa, (%rax,%rcx,2)
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x3, %ecx
movslq %ecx, %rcx
movw $0x1, (%rax,%rcx,2)
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq (%rcx), %rcx
movw (%rax,%rcx,2), %dx
movq -0x28(%rbp), %rax
movq -0x38(%rbp), %rcx
movzwl (%rcx), %ecx
addl $0x4, %ecx
movslq %ecx, %rcx
movw %dx, (%rax,%rcx,2)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movq -0x38(%rbp), %rcx
movzwl (%rcx), %eax
addl $0x5, %eax
movw %ax, (%rcx)
movzwl %ax, %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x90, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)