// File: bothaynahazem[P]AsuMathLabG13/main.cpp
// Function: evaluate(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
string evaluate(string s1)
{
	stack<string> operators;
	stack<Matrix> operands;
	string result;
	string s;
for (int i=0; i<s1.length();i++)
    if (s1[i]==' ')
    s1.erase(i,1);
	if(s1[0]=='-')
        s1.insert(0,"0");
    for (int i=0; i<s1.length();i++)
    if(s1[i]==' '&& s1[i+1] == '-')
        s1.insert(i+1,"0");
    else if(s1[i]=='('&& s1[i+1]=='-')
        s1.insert(i+1,"0");

	int pos = 0;
        while (pos != string::npos)
	{
		pos = s1.find_first_of("()+-/*^", pos);
		if (pos == -1) break;
		if (s1[pos - 1] == '.')
		{
			s1.insert(pos-1, " ");
			s1.insert(pos + 2, " ");
		}
		else
		{
            s1.insert(pos, " ");
            s1.insert(pos + 2, " ");
		}
		pos = s1.find_first_of("()+-/*^", pos) + 1;
	}

	if (s1.find("sin") != string::npos )
    {

			int pos = 0;
			while (pos != string::npos)
			{
				pos = s1.find("sin");
				if (pos == -1) break;
				pos += 3;
				s1 = replaceSin(s1);
			}
		}

    if (s1.find("cos") != string::npos)
	{

		int pos = 0;
		while (pos != string::npos)
		{
			pos = s1.find("cos");
			if (pos == -1) break;
			pos += 3;
			s1 = replaceCos(s1);
		}
	}

	if (s1.find("tan") != string::npos)
	{

		int pos = 0;
		while (pos != string::npos)
		{
			pos = s1.find("tan");
			if (pos == -1) break;
			pos += 3;
			s1 = replaceTan(s1);
		}
	}

	if (s1.find("log10") != string::npos)
	{

		int pos = 0;
		while (pos != string::npos)
		{
			pos = s1.find("log10");
			if (pos == -1) break;
			pos += 3;
			s1 = replaceLog(s1);
		}
	}


	if (s1.find("log") != string::npos)
	{

		int pos = 0;
		while (pos != string::npos)
		{
			pos = s1.find("log");
			if (pos == -1) break;
			pos += 3;
			s1 = replaceLn(s1);
		}
	}

	if (s1.find("exp") != string::npos)
	{

		int pos = 0;
		while (pos != string::npos)
		{
			pos = s1.find("exp");
			if (pos == -1) break;
			pos += 3;
			s1 = replaceExp(s1);
		}
	}

    if (s1.find("sqrt") != string::npos)
	{

		int pos = 0;
		while (pos != string::npos)
		{
			pos = s1.find("sqrt");
			if (pos == -1) break;
			pos += 3;
			s1 = replaceSqrt(s1);
		}
	}

	if (s1.find("Math error") != string::npos)
		return "Math error";



	istringstream is(s1);
	while (is >> s)
	{
		if (isChar(s))
		{
			if (s[0] == '(') operators.push("(");
			else if (s[0] == ')')
			{
				while (operators.top() != "(")
				{
					string ch = operators.top(); operators.pop();
					Matrix op2 = operands.top(); operands.pop();
					Matrix op1 = operands.top(); operands.pop();
					Matrix H;
                    H=solve(op1, op2, ch);
					operands.push(H);
				}
				operators.pop();
			}
			else
			{
				while (!operators.empty() && preference(s) <= preference(operators.top()))
				{

					string ch = operators.top(); operators.pop();
					Matrix op2 = operands.top(); operands.pop();
					Matrix op1 = operands.top(); operands.pop();

					operands.push(solve(op1, op2, ch));

				}

				operators.push(s);
			}

		}
		else if(isLetter(s))
        {
            for (int i=0;i<100;i++)
            {
                if(variables_names[i]==s)
                {
                    Matrix H(input_matrices[i]);
                    operands.push(H);
                    break;
                }
            }
        }
		else
		{
			Matrix op(s);
			operands.push(op);
		}

	}

	while (!operators.empty())
	{
		string ch = operators.top(); operators.pop();
		Matrix op2 = operands.top(); operands.pop();
		Matrix op1 = operands.top(); operands.pop();

		operands.push(solve(op1, op2, ch));
	}

//	char buffer[1000];
//	sprintf(buffer, "%f", operands.top().getDeterminate());
if(operands.top().getn()!=1)
	result = operands.top().getAltString();
	else
        result = operands.top().getAltStringNoB();

	return result;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xbc0, %rsp            # imm = 0xBC0
movq %rsi, -0xaa8(%rbp)
movq %rdi, -0xaa0(%rbp)
movq %rdi, %rax
movq %rax, -0xa98(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0x60(%rbp), %rdi
callq 0xac10
leaq -0xb0(%rbp), %rdi
callq 0xac40
jmp 0x4622
leaq -0xe0(%rbp), %rdi
callq 0x3510
leaq -0x100(%rbp), %rdi
callq 0x3510
movl $0x0, -0x104(%rbp)
movq -0xaa8(%rbp), %rdi
movslq -0x104(%rbp), %rax
movq %rax, -0xab0(%rbp)
callq 0x3550
movq %rax, %rcx
movq -0xab0(%rbp), %rax
cmpq %rcx, %rax
jae 0x46fc
movq -0xaa8(%rbp), %rdi
movslq -0x104(%rbp), %rsi
callq 0x3720
movq %rax, -0xab8(%rbp)
jmp 0x468d
movq -0xab8(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x20, %eax
jne 0x46e6
movq -0xaa8(%rbp), %rdi
movslq -0x104(%rbp), %rsi
movl $0x1, %edx
callq 0x30b0
jmp 0x46b6
jmp 0x46e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5f6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5f46
jmp 0x46e8
movl -0x104(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x104(%rbp)
jmp 0x4644
movq -0xaa8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3720
movq %rax, -0xac0(%rbp)
jmp 0x4715
movq -0xac0(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x473f
movq -0xaa8(%rbp), %rdi
leaq 0x16b79(%rip), %rdx     # 0x1b2ab
xorl %eax, %eax
movl %eax, %esi
callq 0x30d0
jmp 0x473d
jmp 0x473f
movl $0x0, -0x108(%rbp)
movq -0xaa8(%rbp), %rdi
movslq -0x108(%rbp), %rax
movq %rax, -0xac8(%rbp)
callq 0x3550
movq %rax, %rcx
movq -0xac8(%rbp), %rax
cmpq %rcx, %rax
jae 0x4886
movq -0xaa8(%rbp), %rdi
movslq -0x108(%rbp), %rsi
callq 0x3720
movq %rax, -0xad0(%rbp)
jmp 0x4792
movq -0xad0(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x20, %eax
jne 0x47f2
movq -0xaa8(%rbp), %rdi
movl -0x108(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x3720
movq %rax, -0xad8(%rbp)
jmp 0x47c1
movq -0xad8(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x47f2
movq -0xaa8(%rbp), %rdi
movl -0x108(%rbp), %eax
incl %eax
movslq %eax, %rsi
leaq 0x16ac2(%rip), %rdx     # 0x1b2ab
callq 0x30d0
jmp 0x47f0
jmp 0x4870
movq -0xaa8(%rbp), %rdi
movslq -0x108(%rbp), %rsi
callq 0x3720
movq %rax, -0xae0(%rbp)
jmp 0x480e
movq -0xae0(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x28, %eax
jne 0x486e
movq -0xaa8(%rbp), %rdi
movl -0x108(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x3720
movq %rax, -0xae8(%rbp)
jmp 0x483d
movq -0xae8(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x486e
movq -0xaa8(%rbp), %rdi
movl -0x108(%rbp), %eax
incl %eax
movslq %eax, %rsi
leaq 0x16a46(%rip), %rdx     # 0x1b2ab
callq 0x30d0
jmp 0x486c
jmp 0x486e
jmp 0x4870
jmp 0x4872
movl -0x108(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x108(%rbp)
jmp 0x4749
movl $0x0, -0x10c(%rbp)
movslq -0x10c(%rbp), %rax
cmpq $-0x1, %rax
je 0x49a9
movq -0xaa8(%rbp), %rdi
movslq -0x10c(%rbp), %rdx
leaq 0x16a0f(%rip), %rsi     # 0x1b2c5
callq 0x31e0
movl %eax, -0x10c(%rbp)
cmpl $-0x1, -0x10c(%rbp)
jne 0x48cf
jmp 0x49a9
movq -0xaa8(%rbp), %rdi
movl -0x10c(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x3720
movq %rax, -0xaf0(%rbp)
jmp 0x48ef
movq -0xaf0(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2e, %eax
jne 0x4941
movq -0xaa8(%rbp), %rdi
movl -0x10c(%rbp), %eax
decl %eax
movslq %eax, %rsi
leaq 0x16a01(%rip), %rdx     # 0x1b318
callq 0x30d0
jmp 0x491e
movq -0xaa8(%rbp), %rdi
movl -0x10c(%rbp), %eax
addl $0x2, %eax
movslq %eax, %rsi
leaq 0x169e0(%rip), %rdx     # 0x1b318
callq 0x30d0
jmp 0x493f
jmp 0x4980
movq -0xaa8(%rbp), %rdi
movslq -0x10c(%rbp), %rsi
leaq 0x169c2(%rip), %rdx     # 0x1b318
callq 0x30d0
jmp 0x495d
movq -0xaa8(%rbp), %rdi
movl -0x10c(%rbp), %eax
addl $0x2, %eax
movslq %eax, %rsi
leaq 0x169a1(%rip), %rdx     # 0x1b318
callq 0x30d0
jmp 0x497e
jmp 0x4980
movq -0xaa8(%rbp), %rdi
movslq -0x10c(%rbp), %rdx
leaq 0x16930(%rip), %rsi     # 0x1b2c5
callq 0x31e0
addq $0x1, %rax
movl %eax, -0x10c(%rbp)
jmp 0x4890
movq -0xaa8(%rbp), %rdi
leaq 0x168dc(%rip), %rsi     # 0x1b293
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
cmpq $-0x1, %rax
je 0x4a9e
movl $0x0, -0x110(%rbp)
movslq -0x110(%rbp), %rax
cmpq $-0x1, %rax
je 0x4a9c
movq -0xaa8(%rbp), %rdi
leaq 0x168a0(%rip), %rsi     # 0x1b293
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
movl %eax, -0x110(%rbp)
cmpl $-0x1, -0x110(%rbp)
jne 0x4a10
jmp 0x4a9c
movq -0xaa8(%rbp), %rsi
movl -0x110(%rbp), %eax
addl $0x3, %eax
movl %eax, -0x110(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x3180
jmp 0x4a34
leaq -0x130(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x4130
jmp 0x4a49
movq -0xaa8(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x3450
leaq -0x130(%rbp), %rdi
callq 0x3270
leaq -0x150(%rbp), %rdi
callq 0x3270
jmp 0x49d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x3270
jmp 0x5f46
jmp 0x4a9e
movq -0xaa8(%rbp), %rdi
leaq 0x167ed(%rip), %rsi     # 0x1b299
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
cmpq $-0x1, %rax
je 0x4b93
movl $0x0, -0x154(%rbp)
movslq -0x154(%rbp), %rax
cmpq $-0x1, %rax
je 0x4b91
movq -0xaa8(%rbp), %rdi
leaq 0x167b1(%rip), %rsi     # 0x1b299
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
movl %eax, -0x154(%rbp)
cmpl $-0x1, -0x154(%rbp)
jne 0x4b05
jmp 0x4b91
movq -0xaa8(%rbp), %rsi
movl -0x154(%rbp), %eax
addl $0x3, %eax
movl %eax, -0x154(%rbp)
leaq -0x198(%rbp), %rdi
callq 0x3180
jmp 0x4b29
leaq -0x178(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x5f80
jmp 0x4b3e
movq -0xaa8(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x3450
leaq -0x178(%rbp), %rdi
callq 0x3270
leaq -0x198(%rbp), %rdi
callq 0x3270
jmp 0x4ac9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x198(%rbp), %rdi
callq 0x3270
jmp 0x5f46
jmp 0x4b93
movq -0xaa8(%rbp), %rdi
leaq 0x166ff(%rip), %rsi     # 0x1b2a0
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
cmpq $-0x1, %rax
je 0x4c88
movl $0x0, -0x19c(%rbp)
movslq -0x19c(%rbp), %rax
cmpq $-0x1, %rax
je 0x4c86
movq -0xaa8(%rbp), %rdi
leaq 0x166c3(%rip), %rsi     # 0x1b2a0
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
movl %eax, -0x19c(%rbp)
cmpl $-0x1, -0x19c(%rbp)
jne 0x4bfa
jmp 0x4c86
movq -0xaa8(%rbp), %rsi
movl -0x19c(%rbp), %eax
addl $0x3, %eax
movl %eax, -0x19c(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x3180
jmp 0x4c1e
leaq -0x1c0(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x6430
jmp 0x4c33
movq -0xaa8(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x3450
leaq -0x1c0(%rbp), %rdi
callq 0x3270
leaq -0x1e0(%rbp), %rdi
callq 0x3270
jmp 0x4bbe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x3270
jmp 0x5f46
jmp 0x4c88
movq -0xaa8(%rbp), %rdi
leaq 0x16611(%rip), %rsi     # 0x1b2a7
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
cmpq $-0x1, %rax
je 0x4d7d
movl $0x0, -0x1e4(%rbp)
movslq -0x1e4(%rbp), %rax
cmpq $-0x1, %rax
je 0x4d7b
movq -0xaa8(%rbp), %rdi
leaq 0x165d5(%rip), %rsi     # 0x1b2a7
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
movl %eax, -0x1e4(%rbp)
cmpl $-0x1, -0x1e4(%rbp)
jne 0x4cef
jmp 0x4d7b
movq -0xaa8(%rbp), %rsi
movl -0x1e4(%rbp), %eax
addl $0x3, %eax
movl %eax, -0x1e4(%rbp)
leaq -0x228(%rbp), %rdi
callq 0x3180
jmp 0x4d13
leaq -0x208(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x68e0
jmp 0x4d28
movq -0xaa8(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x3450
leaq -0x208(%rbp), %rdi
callq 0x3270
leaq -0x228(%rbp), %rdi
callq 0x3270
jmp 0x4cb3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x228(%rbp), %rdi
callq 0x3270
jmp 0x5f46
jmp 0x4d7d
movq -0xaa8(%rbp), %rdi
leaq 0x16522(%rip), %rsi     # 0x1b2ad
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
cmpq $-0x1, %rax
je 0x4e72
movl $0x0, -0x22c(%rbp)
movslq -0x22c(%rbp), %rax
cmpq $-0x1, %rax
je 0x4e70
movq -0xaa8(%rbp), %rdi
leaq 0x164e6(%rip), %rsi     # 0x1b2ad
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
movl %eax, -0x22c(%rbp)
cmpl $-0x1, -0x22c(%rbp)
jne 0x4de4
jmp 0x4e70
movq -0xaa8(%rbp), %rsi
movl -0x22c(%rbp), %eax
addl $0x3, %eax
movl %eax, -0x22c(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x3180
jmp 0x4e08
leaq -0x250(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x6d90
jmp 0x4e1d
movq -0xaa8(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x3450
leaq -0x250(%rbp), %rdi
callq 0x3270
leaq -0x270(%rbp), %rdi
callq 0x3270
jmp 0x4da8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x3270
jmp 0x5f46
jmp 0x4e72
movq -0xaa8(%rbp), %rdi
leaq 0x16435(%rip), %rsi     # 0x1b2b5
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
cmpq $-0x1, %rax
je 0x4f67
movl $0x0, -0x274(%rbp)
movslq -0x274(%rbp), %rax
cmpq $-0x1, %rax
je 0x4f65
movq -0xaa8(%rbp), %rdi
leaq 0x163f9(%rip), %rsi     # 0x1b2b5
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
movl %eax, -0x274(%rbp)
cmpl $-0x1, -0x274(%rbp)
jne 0x4ed9
jmp 0x4f65
movq -0xaa8(%rbp), %rsi
movl -0x274(%rbp), %eax
addl $0x3, %eax
movl %eax, -0x274(%rbp)
leaq -0x2b8(%rbp), %rdi
callq 0x3180
jmp 0x4efd
leaq -0x298(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x7240
jmp 0x4f12
movq -0xaa8(%rbp), %rdi
leaq -0x298(%rbp), %rsi
callq 0x3450
leaq -0x298(%rbp), %rdi
callq 0x3270
leaq -0x2b8(%rbp), %rdi
callq 0x3270
jmp 0x4e9d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x2b8(%rbp), %rdi
callq 0x3270
jmp 0x5f46
jmp 0x4f67
movq -0xaa8(%rbp), %rdi
leaq 0x16347(%rip), %rsi     # 0x1b2bc
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
cmpq $-0x1, %rax
je 0x505c
movl $0x0, -0x2bc(%rbp)
movslq -0x2bc(%rbp), %rax
cmpq $-0x1, %rax
je 0x505a
movq -0xaa8(%rbp), %rdi
leaq 0x1630b(%rip), %rsi     # 0x1b2bc
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
movl %eax, -0x2bc(%rbp)
cmpl $-0x1, -0x2bc(%rbp)
jne 0x4fce
jmp 0x505a
movq -0xaa8(%rbp), %rsi
movl -0x2bc(%rbp), %eax
addl $0x3, %eax
movl %eax, -0x2bc(%rbp)
leaq -0x300(%rbp), %rdi
callq 0x3180
jmp 0x4ff2
leaq -0x2e0(%rbp), %rdi
leaq -0x300(%rbp), %rsi
callq 0x76f0
jmp 0x5007
movq -0xaa8(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
callq 0x3450
leaq -0x2e0(%rbp), %rdi
callq 0x3270
leaq -0x300(%rbp), %rdi
callq 0x3270
jmp 0x4f92
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x300(%rbp), %rdi
callq 0x3270
jmp 0x5f46
jmp 0x505c
movq -0xaa8(%rbp), %rdi
leaq 0x16263(%rip), %rsi     # 0x1b2cd
xorl %eax, %eax
movl %eax, %edx
callq 0x3710
cmpq $-0x1, %rax
je 0x50e6
leaq -0x301(%rbp), %rdi
movq %rdi, -0xaf8(%rbp)
callq 0x3640
movq -0xaa0(%rbp), %rdi
movq -0xaf8(%rbp), %rdx
leaq 0x1622c(%rip), %rsi     # 0x1b2cd
callq 0xab40
jmp 0x50a8
leaq -0x301(%rbp), %rdi
callq 0x3410
movl $0x1, -0x308(%rbp)
jmp 0x5f09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x301(%rbp), %rdi
callq 0x3410
jmp 0x5f46
movq -0xaa8(%rbp), %rsi
leaq -0x488(%rbp), %rdi
movl $0x8, %edx
callq 0x35d0
jmp 0x5100
jmp 0x5102
leaq -0x488(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x34a0
movq %rax, -0xb00(%rbp)
jmp 0x511e
movq -0xb00(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x3490
movb %al, -0xb01(%rbp)
jmp 0x513c
movb -0xb01(%rbp), %al
testb $0x1, %al
jne 0x514b
jmp 0x5b89
leaq -0x4a8(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x3180
jmp 0x5160
leaq -0x4a8(%rbp), %rdi
callq 0x7ba0
movb %al, -0xb02(%rbp)
jmp 0x5174
leaq -0x4a8(%rbp), %rdi
callq 0x3270
movb -0xb02(%rbp), %al
testb $0x1, %al
jne 0x518f
jmp 0x59ad
xorl %eax, %eax
movl %eax, %esi
leaq -0x100(%rbp), %rdi
callq 0x3720
movq %rax, -0xb10(%rbp)
jmp 0x51a8
movq -0xb10(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x28, %eax
jne 0x5296
leaq -0x4c9(%rbp), %rdi
movq %rdi, -0xb18(%rbp)
callq 0x3640
movq -0xb18(%rbp), %rdx
leaq 0x160fc(%rip), %rsi     # 0x1b2d8
leaq -0x4c8(%rbp), %rdi
callq 0xab40
jmp 0x51ea
leaq -0x60(%rbp), %rdi
leaq -0x4c8(%rbp), %rsi
callq 0xac70
jmp 0x51fc
leaq -0x4c8(%rbp), %rdi
callq 0x3270
leaq -0x4c9(%rbp), %rdi
callq 0x3410
jmp 0x59a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5efb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x4a8(%rbp), %rdi
callq 0x3270
jmp 0x5efb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x4c8(%rbp), %rdi
callq 0x3270
leaq -0x4c9(%rbp), %rdi
callq 0x3410
jmp 0x5efb
xorl %eax, %eax
movl %eax, %esi
leaq -0x100(%rbp), %rdi
callq 0x3720
movq %rax, -0xb20(%rbp)
jmp 0x52af
movq -0xb20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x29, %eax
jne 0x55d0
jmp 0x52c4
leaq -0x60(%rbp), %rdi
callq 0xacd0
movq %rax, -0xb28(%rbp)
jmp 0x52d6
movq -0xb28(%rbp), %rdi
leaq 0x15ff4(%rip), %rsi     # 0x1b2d8
callq 0xaca0
movb %al, -0xb29(%rbp)
jmp 0x52f1
movb -0xb29(%rbp), %al
testb $0x1, %al
jne 0x5300
jmp 0x55c0
leaq -0x60(%rbp), %rdi
callq 0xacd0
movq %rax, -0xb38(%rbp)
jmp 0x5312
movq -0xb38(%rbp), %rsi
leaq -0x4f0(%rbp), %rdi
callq 0x3180
jmp 0x5327
leaq -0x60(%rbp), %rdi
callq 0xacf0
jmp 0x5332
leaq -0xb0(%rbp), %rdi
callq 0xad10
movq %rax, -0xb40(%rbp)
jmp 0x5347
movq -0xb40(%rbp), %rsi
leaq -0x528(%rbp), %rdi
callq 0xec70
jmp 0x535c
leaq -0xb0(%rbp), %rdi
callq 0xad30
jmp 0x536a
leaq -0xb0(%rbp), %rdi
callq 0xad10
movq %rax, -0xb48(%rbp)
jmp 0x537f
movq -0xb48(%rbp), %rsi
leaq -0x560(%rbp), %rdi
callq 0xec70
jmp 0x5394
leaq -0xb0(%rbp), %rdi
callq 0xad30
jmp 0x53a2
leaq -0x598(%rbp), %rdi
callq 0xe5d0
jmp 0x53b0
leaq -0x640(%rbp), %rdi
leaq -0x560(%rbp), %rsi
callq 0xec70
jmp 0x53c5
leaq -0x678(%rbp), %rdi
leaq -0x528(%rbp), %rsi
callq 0xec70
jmp 0x53da
leaq -0x698(%rbp), %rdi
leaq -0x4f0(%rbp), %rsi
callq 0x3180
jmp 0x53ef
leaq -0x608(%rbp), %rdi
leaq -0x640(%rbp), %rsi
leaq -0x678(%rbp), %rdx
leaq -0x698(%rbp), %rcx
callq 0x7d20
jmp 0x5412
leaq -0x5d0(%rbp), %rdi
leaq -0x598(%rbp), %rsi
leaq -0x608(%rbp), %rdx
callq 0x10e80
jmp 0x542e
leaq -0x5d0(%rbp), %rdi
callq 0xe650
leaq -0x608(%rbp), %rdi
callq 0xe650
leaq -0x698(%rbp), %rdi
callq 0x3270
leaq -0x678(%rbp), %rdi
callq 0xe650
leaq -0x640(%rbp), %rdi
callq 0xe650
leaq -0xb0(%rbp), %rdi
leaq -0x598(%rbp), %rsi
callq 0xad50
jmp 0x547f
leaq -0x598(%rbp), %rdi
callq 0xe650
leaq -0x560(%rbp), %rdi
callq 0xe650
leaq -0x528(%rbp), %rdi
callq 0xe650
leaq -0x4f0(%rbp), %rdi
callq 0x3270
jmp 0x52c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x55af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x55a3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5597
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x558b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x557f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5573
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5567
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x608(%rbp), %rdi
callq 0xe650
leaq -0x698(%rbp), %rdi
callq 0x3270
leaq -0x678(%rbp), %rdi
callq 0xe650
leaq -0x640(%rbp), %rdi
callq 0xe650
leaq -0x598(%rbp), %rdi
callq 0xe650
leaq -0x560(%rbp), %rdi
callq 0xe650
leaq -0x528(%rbp), %rdi
callq 0xe650
leaq -0x4f0(%rbp), %rdi
callq 0x3270
jmp 0x5efb
leaq -0x60(%rbp), %rdi
callq 0xacf0
jmp 0x55cb
jmp 0x59a6
jmp 0x55d2
movb $0x0, -0x6b9(%rbp)
movb $0x0, -0x6e1(%rbp)
leaq -0x60(%rbp), %rdi
callq 0xad80
movb %al, -0xb49(%rbp)
jmp 0x55f1
movb -0xb49(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0xb4a(%rbp)
jne 0x5693
jmp 0x560a
leaq -0x6b8(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x3180
jmp 0x561f
movb $0x1, -0x6b9(%rbp)
leaq -0x6b8(%rbp), %rdi
callq 0x8730
movl %eax, -0xb50(%rbp)
jmp 0x563a
leaq -0x60(%rbp), %rdi
callq 0xacd0
movq %rax, -0xb58(%rbp)
jmp 0x564c
movq -0xb58(%rbp), %rsi
leaq -0x6e0(%rbp), %rdi
callq 0x3180
jmp 0x5661
movb $0x1, -0x6e1(%rbp)
leaq -0x6e0(%rbp), %rdi
callq 0x8730
movl %eax, -0xb5c(%rbp)
jmp 0x567c
movl -0xb50(%rbp), %eax
movl -0xb5c(%rbp), %ecx
cmpl %ecx, %eax
setle %al
movb %al, -0xb4a(%rbp)
movb -0xb4a(%rbp), %al
movb %al, -0xb5d(%rbp)
testb $0x1, -0x6e1(%rbp)
jne 0x56aa
jmp 0x56b6
leaq -0x6e0(%rbp), %rdi
callq 0x3270
testb $0x1, -0x6b9(%rbp)
jne 0x56c1
jmp 0x56cd
leaq -0x6b8(%rbp), %rdi
callq 0x3270
movb -0xb5d(%rbp), %al
testb $0x1, %al
jne 0x56dc
jmp 0x5992
leaq -0x60(%rbp), %rdi
callq 0xacd0
movq %rax, -0xb68(%rbp)
jmp 0x56ee
movq -0xb68(%rbp), %rsi
leaq -0x708(%rbp), %rdi
callq 0x3180
jmp 0x5703
leaq -0x60(%rbp), %rdi
callq 0xacf0
jmp 0x570e
leaq -0xb0(%rbp), %rdi
callq 0xad10
movq %rax, -0xb70(%rbp)
jmp 0x5723
movq -0xb70(%rbp), %rsi
leaq -0x740(%rbp), %rdi
callq 0xec70
jmp 0x5738
leaq -0xb0(%rbp), %rdi
callq 0xad30
jmp 0x5746
leaq -0xb0(%rbp), %rdi
callq 0xad10
movq %rax, -0xb78(%rbp)
jmp 0x575b
movq -0xb78(%rbp), %rsi
leaq -0x778(%rbp), %rdi
callq 0xec70
jmp 0x5770
leaq -0xb0(%rbp), %rdi
callq 0xad30
jmp 0x577e
leaq -0x7e8(%rbp), %rdi
leaq -0x778(%rbp), %rsi
callq 0xec70
jmp 0x5793
leaq -0x820(%rbp), %rdi
leaq -0x740(%rbp), %rsi
callq 0xec70
jmp 0x57a8
leaq -0x840(%rbp), %rdi
leaq -0x708(%rbp), %rsi
callq 0x3180
jmp 0x57bd
leaq -0x7b0(%rbp), %rdi
leaq -0x7e8(%rbp), %rsi
leaq -0x820(%rbp), %rdx
leaq -0x840(%rbp), %rcx
callq 0x7d20
jmp 0x57e0
leaq -0xb0(%rbp), %rdi
leaq -0x7b0(%rbp), %rsi
callq 0xada0
jmp 0x57f5
leaq -0x7b0(%rbp), %rdi
callq 0xe650
leaq -0x840(%rbp), %rdi
callq 0x3270
leaq -0x820(%rbp), %rdi
callq 0xe650
leaq -0x7e8(%rbp), %rdi
callq 0xe650
leaq -0x778(%rbp), %rdi
callq 0xe650
leaq -0x740(%rbp), %rdi
callq 0xe650
leaq -0x708(%rbp), %rdi
callq 0x3270
jmp 0x55d2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x588d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
testb $0x1, -0x6e1(%rbp)
jne 0x587f
jmp 0x588b
leaq -0x6e0(%rbp), %rdi
callq 0x3270
jmp 0x588d
testb $0x1, -0x6b9(%rbp)
jne 0x5898
jmp 0x58a4
leaq -0x6b8(%rbp), %rdi
callq 0x3270
jmp 0x5efb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5981
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5975
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5969
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x595d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5951
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5945
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x7b0(%rbp), %rdi
callq 0xe650
leaq -0x840(%rbp), %rdi
callq 0x3270
leaq -0x820(%rbp), %rdi
callq 0xe650
leaq -0x7e8(%rbp), %rdi
callq 0xe650
leaq -0x778(%rbp), %rdi
callq 0xe650
leaq -0x740(%rbp), %rdi
callq 0xe650
leaq -0x708(%rbp), %rdi
callq 0x3270
jmp 0x5efb
leaq -0x60(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xadd0
jmp 0x59a4
jmp 0x59a6
jmp 0x59a8
jmp 0x5b84
leaq -0x860(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x3180
jmp 0x59c2
leaq -0x860(%rbp), %rdi
callq 0x7cd0
movb %al, -0xb79(%rbp)
jmp 0x59d6
leaq -0x860(%rbp), %rdi
callq 0x3270
movb -0xb79(%rbp), %al
testb $0x1, %al
jne 0x59f1
jmp 0x5ae3
movl $0x0, -0x864(%rbp)
cmpl $0x64, -0x864(%rbp)
jge 0x5ade
movq 0x1c9c1(%rip), %rdi     # 0x223d0
movslq -0x864(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdi
leaq -0x100(%rbp), %rsi
callq 0xae00
testb $0x1, %al
jne 0x5a32
jmp 0x5ac8
movq 0x1c98f(%rip), %rsi     # 0x223c8
movslq -0x864(%rbp), %rax
imulq $0x38, %rax, %rax
addq %rax, %rsi
leaq -0x8a0(%rbp), %rdi
callq 0xec70
jmp 0x5a55
leaq -0xb0(%rbp), %rdi
leaq -0x8a0(%rbp), %rsi
callq 0xad50
jmp 0x5a6a
movl $0x1e, -0x308(%rbp)
leaq -0x8a0(%rbp), %rdi
callq 0xe650
jmp 0x5ade
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x860(%rbp), %rdi
callq 0x3270
jmp 0x5efb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x8a0(%rbp), %rdi
callq 0xe650
jmp 0x5efb
jmp 0x5aca
movl -0x864(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x864(%rbp)
jmp 0x59fb
jmp 0x5b82
leaq -0x8f8(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x3180
jmp 0x5af8
leaq -0x8d8(%rbp), %rdi
leaq -0x8f8(%rbp), %rsi
callq 0xf070
jmp 0x5b0d
leaq -0x8f8(%rbp), %rdi
callq 0x3270
leaq -0xb0(%rbp), %rdi
leaq -0x8d8(%rbp), %rsi
callq 0xad50
jmp 0x5b2e
leaq -0x8d8(%rbp), %rdi
callq 0xe650
jmp 0x5b82
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x8f8(%rbp), %rdi
callq 0x3270
jmp 0x5efb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x8d8(%rbp), %rdi
callq 0xe650
jmp 0x5efb
jmp 0x5b84
jmp 0x5102
jmp 0x5b8b
leaq -0x60(%rbp), %rdi
callq 0xad80
movb %al, -0xb7a(%rbp)
jmp 0x5b9c
movb -0xb7a(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x5bad
jmp 0x5e08
leaq -0x60(%rbp), %rdi
callq 0xacd0
movq %rax, -0xb88(%rbp)
jmp 0x5bbf
movq -0xb88(%rbp), %rsi
leaq -0x918(%rbp), %rdi
callq 0x3180
jmp 0x5bd4
leaq -0x60(%rbp), %rdi
callq 0xacf0
jmp 0x5bdf
leaq -0xb0(%rbp), %rdi
callq 0xad10
movq %rax, -0xb90(%rbp)
jmp 0x5bf4
movq -0xb90(%rbp), %rsi
leaq -0x950(%rbp), %rdi
callq 0xec70
jmp 0x5c09
leaq -0xb0(%rbp), %rdi
callq 0xad30
jmp 0x5c17
leaq -0xb0(%rbp), %rdi
callq 0xad10
movq %rax, -0xb98(%rbp)
jmp 0x5c2c
movq -0xb98(%rbp), %rsi
leaq -0x988(%rbp), %rdi
callq 0xec70
jmp 0x5c41
leaq -0xb0(%rbp), %rdi
callq 0xad30
jmp 0x5c4f
leaq -0x9f8(%rbp), %rdi
leaq -0x988(%rbp), %rsi
callq 0xec70
jmp 0x5c64
leaq -0xa30(%rbp), %rdi
leaq -0x950(%rbp), %rsi
callq 0xec70
jmp 0x5c79
leaq -0xa50(%rbp), %rdi
leaq -0x918(%rbp), %rsi
callq 0x3180
jmp 0x5c8e
leaq -0x9c0(%rbp), %rdi
leaq -0x9f8(%rbp), %rsi
leaq -0xa30(%rbp), %rdx
leaq -0xa50(%rbp), %rcx
callq 0x7d20
jmp 0x5cb1
leaq -0xb0(%rbp), %rdi
leaq -0x9c0(%rbp), %rsi
callq 0xada0
jmp 0x5cc6
leaq -0x9c0(%rbp), %rdi
callq 0xe650
leaq -0xa50(%rbp), %rdi
callq 0x3270
leaq -0xa30(%rbp), %rdi
callq 0xe650
leaq -0x9f8(%rbp), %rdi
callq 0xe650
leaq -0x988(%rbp), %rdi
callq 0xe650
leaq -0x950(%rbp), %rdi
callq 0xe650
leaq -0x918(%rbp), %rdi
callq 0x3270
jmp 0x5b8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5df7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5deb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5ddf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5dd3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5dc7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
jmp 0x5dbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb8(%rbp)
movl %eax, -0xbc(%rbp)
leaq -0x9c0(%rbp), %rdi
callq 0xe650
leaq -0xa50(%rbp), %rdi
callq 0x3270
leaq -0xa30(%rbp), %rdi
callq 0xe650
leaq -0x9f8(%rbp), %rdi
callq 0xe650
leaq -0x988(%rbp), %rdi
callq 0xe650
leaq -0x950(%rbp), %rdi
callq 0xe650
leaq -0x918(%rbp), %rdi
callq 0x3270
jmp 0x5efb
leaq -0xb0(%rbp), %rdi
callq 0xad10
movq %rax, -0xba0(%rbp)
jmp 0x5e1d
movq -0xba0(%rbp), %rdi
callq 0xabf0
movl %eax, -0xba4(%rbp)
jmp 0x5e31
movl -0xba4(%rbp), %eax
cmpl $0x1, %eax
je 0x5e87
leaq -0xb0(%rbp), %rdi
callq 0xad10
movq %rax, -0xbb0(%rbp)
jmp 0x5e51
movq -0xbb0(%rbp), %rsi
leaq -0xa70(%rbp), %rdi
callq 0x10af0
jmp 0x5e66
leaq -0xe0(%rbp), %rdi
leaq -0xa70(%rbp), %rsi
callq 0x3450
leaq -0xa70(%rbp), %rdi
callq 0x3270
jmp 0x5ed0
leaq -0xb0(%rbp), %rdi
callq 0xad10
movq %rax, -0xbb8(%rbp)
jmp 0x5e9c
movq -0xbb8(%rbp), %rsi
leaq -0xa90(%rbp), %rdi
callq 0x10cc0
jmp 0x5eb1
leaq -0xe0(%rbp), %rdi
leaq -0xa90(%rbp), %rsi
callq 0x3450
leaq -0xa90(%rbp), %rdi
callq 0x3270
movq -0xaa0(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x3250
movl $0x1, -0x308(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x31b0
jmp 0x5f09
leaq -0x488(%rbp), %rdi
callq 0x31b0
jmp 0x5f46
leaq -0x100(%rbp), %rdi
callq 0x3270
leaq -0xe0(%rbp), %rdi
callq 0x3270
leaq -0xb0(%rbp), %rdi
callq 0xae90
leaq -0x60(%rbp), %rdi
callq 0xaeb0
movq -0xa98(%rbp), %rax
addq $0xbc0, %rsp            # imm = 0xBC0
popq %rbp
retq
leaq -0x100(%rbp), %rdi
callq 0x3270
leaq -0xe0(%rbp), %rdi
callq 0x3270
leaq -0xb0(%rbp), %rdi
callq 0xae90
leaq -0x60(%rbp), %rdi
callq 0xaeb0
movq -0xb8(%rbp), %rdi
callq 0x3630
nop