// File: havluj[P]spreadsheet/src/CExpressionParser.cpp
// Function: CExpressionParser::Tokenize(std::__cxx11::list<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void CExpressionParser::Tokenize(std::list<std::string>& tokens,
	  const std::string& delimiter) {
    // Insert whitepaces before and after each special characters
    size_t size = sizeof (charSet) / sizeof (std::string);

    for (int i = 0; i < static_cast<int> (size); i++) {
	  std::string s = charSet[i];
	  ReplaceAll(m_strInput, s, " " + s + " ");
    }

    size_t next_pos = 0;
    size_t init_pos = m_strInput.find_first_not_of(delimiter, next_pos);

    while (next_pos != std::string::npos &&
		init_pos != std::string::npos) {
	  // Get next delimiter position    
	  next_pos = m_strInput.find(delimiter, init_pos);

	  std::string token = m_strInput.substr(init_pos, next_pos - init_pos);
	  tokens.push_back(token);

	  init_pos = m_strInput.find_first_not_of(delimiter, next_pos);
    }

    // Deal with start token being a minus sign
    std::string firstToken = tokens.front();
    if (firstToken == "-") {
	  std::list<std::string>::iterator it = tokens.begin();
	  it++;

	  if (it == tokens.end()) {
		return;
	  }

	  std::string nextToken = *(it);

	  if (IsNumber(nextToken) || IsFloat(nextToken)) {
		tokens.pop_front();
		tokens.front() = firstToken + nextToken;
	  } else if (nextToken == "(" || IsFunction(nextToken)) {
		tokens.front() = firstToken + "1";
		tokens.insert(it, "*");
	  }// minus minus is a plus
	  else if (nextToken == "-" && firstToken == "-") {
		std::list<std::string>::iterator nit = it;
		std::advance(nit, -1);
		tokens.erase(it);
		tokens.erase(nit);
	  }
    }

    // Deal with minus sign after opening parenthesis or operator
    typedef std::list<std::string>::iterator t_iter;
    std::string prevToken = "";
    for (t_iter it = tokens.begin(); it != std::prev(tokens.end()); it++) {
	  std::string token = *it;

	  std::list<std::string>::iterator nit = it;
	  std::advance(nit, 1);

	  if (nit == tokens.end()) {
		break;
	  }

	  std::string ntoken = *nit;

	  if (token == "-" && prevToken == "(") {
		if (IsNumber(ntoken) || IsFloat(ntoken)) {
		    tokens.erase(nit);
		    *it = "-" + ntoken;
		    token = *it;
		}
	  } else if (token == "-" &&
		    (IsOperator(prevToken) || prevToken == "^" || prevToken == "%")) {
		// Minus minus becomes a plus
		if (token == "-" && prevToken == "-") {
		    std::list<std::string>::iterator nit = it;
		    std::list<std::string>::iterator nnit = nit;
		    nnit++;
		    std::advance(nit, -1);
		    tokens.erase(it);
		    //tokens.erase( nit );
		    *nit = "+";

		    std::list<std::string>::iterator pnit = nit;
		    std::advance(pnit, -1);

		    if (IsOperator(*pnit) || *pnit == "(") {
			  tokens.erase(nit);
		    }

		    token = *nnit;
		    it = nnit;

		    if (it == std::prev(tokens.end())) {
			  break;
		    }
		} else if (IsNumber(ntoken) || IsFloat(ntoken) || IsFunction(ntoken)) {
		    bool exit = false;
		    if (nit == std::prev(tokens.end())) {
			  exit = true;
		    }

		    tokens.erase(nit);
		    *it = "-" + ntoken;
		    token = *it;

		    if (exit) break;
		} else if (ntoken == "(") {
		    *it = "-1";
		    token = *it;
		    tokens.insert(nit, "*");
		}
	  }

	  prevToken = token;
    }

    // Deal with minus sign before opening parenthesis
    prevToken = "";
    t_iter prevIt;

    for (t_iter it = tokens.begin(); it != tokens.end(); it++) {
	  std::string token = *it;

	  if (token == "(" && prevToken == "-") {
		tokens.insert(it, "1");
		tokens.insert(it, "*");
	  }

	  prevToken = token;
	  prevIt = it;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x560, %rsp            # imm = 0x560
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x418(%rbp)
movq $0x9, -0x20(%rbp)
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movq -0x20(%rbp), %rcx
cmpl %ecx, %eax
jge 0x1511b
movslq -0x24(%rbp), %rax
shlq $0x5, %rax
leaq 0x13a51(%rip), %rsi     # 0x28a70
addq %rax, %rsi
leaq -0x48(%rbp), %rdi
movq %rdi, -0x428(%rbp)
callq 0x51b0
movq -0x418(%rbp), %rax
movq -0x428(%rbp), %rdx
movq %rax, -0x420(%rbp)
leaq 0x77e5(%rip), %rsi      # 0x1c833
leaq -0x88(%rbp), %rdi
callq 0x17cc0
jmp 0x1505c
leaq 0x77d0(%rip), %rdx      # 0x1c833
leaq -0x68(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x17c70
jmp 0x15075
movq -0x420(%rbp), %rsi
movq -0x418(%rbp), %rdi
leaq -0x48(%rbp), %rdx
leaq -0x68(%rbp), %rcx
callq 0x16250
jmp 0x15092
leaq -0x68(%rbp), %rdi
callq 0x52a0
leaq -0x88(%rbp), %rdi
callq 0x52a0
leaq -0x48(%rbp), %rdi
callq 0x52a0
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x15001
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x1510d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x15101
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x52a0
leaq -0x88(%rbp), %rdi
callq 0x52a0
leaq -0x48(%rbp), %rdi
callq 0x52a0
jmp 0x16239
movq -0x418(%rbp), %rdi
movq $0x0, -0xa0(%rbp)
movq -0x18(%rbp), %rsi
movq -0xa0(%rbp), %rdx
callq 0x53a0
movq %rax, -0xa8(%rbp)
xorl %eax, %eax
cmpq $-0x1, -0xa0(%rbp)
movb %al, -0x429(%rbp)
je 0x15167
cmpq $-0x1, -0xa8(%rbp)
setne %al
movb %al, -0x429(%rbp)
movb -0x429(%rbp), %al
testb $0x1, %al
jne 0x15176
jmp 0x15223
movq -0x418(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0xa8(%rbp), %rdx
callq 0x5850
movq -0x418(%rbp), %rsi
movq %rax, -0xa0(%rbp)
movq -0xa8(%rbp), %rdx
movq -0xa0(%rbp), %rcx
subq %rdx, %rcx
leaq -0xc8(%rbp), %rdi
movq %rdi, -0x438(%rbp)
callq 0x5450
movq -0x438(%rbp), %rsi
movq -0x10(%rbp), %rdi
callq 0x17dd0
jmp 0x151d1
movq -0x418(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0xa0(%rbp), %rdx
callq 0x53a0
movq %rax, -0xa8(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x52a0
jmp 0x15144
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x52a0
jmp 0x16239
movq -0x10(%rbp), %rdi
callq 0x17e10
movq %rax, %rsi
leaq -0xe8(%rbp), %rdi
movq %rdi, -0x448(%rbp)
callq 0x51b0
movq -0x448(%rbp), %rdi
leaq 0x6dba(%rip), %rsi      # 0x1c00a
callq 0x17ac0
movb %al, -0x439(%rbp)
jmp 0x1525d
movb -0x439(%rbp), %al
testb $0x1, %al
jne 0x1526c
jmp 0x15619
movq -0x10(%rbp), %rdi
callq 0x17e40
movq %rax, -0xf0(%rbp)
leaq -0xf0(%rbp), %rdi
xorl %esi, %esi
callq 0x17e70
movq %rax, -0xf8(%rbp)
movq -0x10(%rbp), %rdi
callq 0x17ed0
movq %rax, -0x100(%rbp)
leaq -0xf0(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x17ea0
testb $0x1, %al
jne 0x152ba
jmp 0x152e0
movl $0x1, -0x104(%rbp)
jmp 0x1620c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x1622d
leaq -0xf0(%rbp), %rdi
callq 0x17f00
movq %rax, %rsi
leaq -0x128(%rbp), %rdi
callq 0x51b0
jmp 0x152fd
leaq -0x128(%rbp), %rdi
callq 0x14d50
movb %al, -0x449(%rbp)
jmp 0x15311
movb -0x449(%rbp), %al
testb $0x1, %al
jne 0x1533d
jmp 0x1531d
leaq -0x128(%rbp), %rdi
callq 0x14c30
movb %al, -0x44a(%rbp)
jmp 0x15331
movb -0x44a(%rbp), %al
testb $0x1, %al
jne 0x1533d
jmp 0x153a2
movq -0x10(%rbp), %rdi
callq 0x17f20
leaq -0x148(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
leaq -0x128(%rbp), %rdx
callq 0x17f50
jmp 0x15362
movq -0x10(%rbp), %rdi
callq 0x17e10
movq %rax, %rdi
leaq -0x148(%rbp), %rsi
callq 0x5510
leaq -0x148(%rbp), %rdi
callq 0x52a0
jmp 0x155fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x15608
leaq 0x6c5b(%rip), %rsi      # 0x1c004
leaq -0x128(%rbp), %rdi
callq 0x17ac0
movb %al, -0x44b(%rbp)
jmp 0x153bd
movb -0x44b(%rbp), %al
testb $0x1, %al
jne 0x153ec
jmp 0x153c9
leaq -0x128(%rbp), %rdi
callq 0x14ad0
movb %al, -0x44c(%rbp)
jmp 0x153dd
movb -0x44c(%rbp), %al
testb $0x1, %al
jne 0x153ec
jmp 0x15511
leaq 0x74b3(%rip), %rdx      # 0x1c8a6
leaq -0x168(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x17fd0
jmp 0x15408
movq -0x10(%rbp), %rdi
callq 0x17e10
movq %rax, %rdi
leaq -0x168(%rbp), %rsi
movq %rsi, -0x468(%rbp)
callq 0x5510
movq -0x468(%rbp), %rdi
callq 0x52a0
movq -0x10(%rbp), %rax
movq %rax, -0x460(%rbp)
leaq -0x170(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x18090
leaq -0x191(%rbp), %rdi
movq %rdi, -0x458(%rbp)
callq 0x5740
movq -0x458(%rbp), %rdx
leaq 0x6b9a(%rip), %rsi      # 0x1c00c
leaq -0x190(%rbp), %rdi
callq 0x7360
jmp 0x15480
movq -0x460(%rbp), %rdi
movq -0x170(%rbp), %rsi
leaq -0x190(%rbp), %rdx
callq 0x18050
movq %rax, -0x470(%rbp)
jmp 0x154a3
movq -0x470(%rbp), %rax
movq %rax, -0x1a0(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x52a0
leaq -0x191(%rbp), %rdi
callq 0x54a0
jmp 0x155f8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x15500
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x52a0
leaq -0x191(%rbp), %rdi
callq 0x54a0
jmp 0x15608
leaq 0x6af2(%rip), %rsi      # 0x1c00a
leaq -0x128(%rbp), %rdi
callq 0x17ac0
movb %al, -0x471(%rbp)
jmp 0x1552c
movb -0x471(%rbp), %al
testb $0x1, %al
jne 0x1553b
jmp 0x155f6
leaq 0x6ac8(%rip), %rsi      # 0x1c00a
leaq -0xe8(%rbp), %rdi
callq 0x17ac0
movb %al, -0x472(%rbp)
jmp 0x15556
movb -0x472(%rbp), %al
testb $0x1, %al
jne 0x15565
jmp 0x155f6
movq -0xf0(%rbp), %rax
movq %rax, -0x1a8(%rbp)
leaq -0x1a8(%rbp), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0x180b0
jmp 0x15586
movq -0x10(%rbp), %rax
movq %rax, -0x488(%rbp)
leaq -0x1b0(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x18090
movq -0x488(%rbp), %rdi
movq -0x1b0(%rbp), %rsi
callq 0x18100
movq %rax, -0x1b8(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x480(%rbp)
leaq -0x1c0(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x18090
movq -0x480(%rbp), %rdi
movq -0x1c0(%rbp), %rsi
callq 0x18100
movq %rax, -0x1c8(%rbp)
jmp 0x155f8
jmp 0x155fa
leaq -0x128(%rbp), %rdi
callq 0x52a0
jmp 0x15619
leaq -0x128(%rbp), %rdi
callq 0x52a0
jmp 0x1622d
leaq -0x1e9(%rbp), %rdi
movq %rdi, -0x490(%rbp)
callq 0x5740
movq -0x490(%rbp), %rdx
leaq 0x71fa(%rip), %rsi      # 0x1c834
leaq -0x1e8(%rbp), %rdi
callq 0x7360
jmp 0x15648
leaq -0x1e9(%rbp), %rdi
callq 0x54a0
movq -0x10(%rbp), %rdi
callq 0x17e40
movq %rax, -0x1f8(%rbp)
movq -0x10(%rbp), %rdi
callq 0x17ed0
movq %rax, -0x208(%rbp)
movq -0x208(%rbp), %rdi
movl $0x1, %esi
callq 0x18180
movq %rax, -0x498(%rbp)
jmp 0x1568e
movq -0x498(%rbp), %rax
movq %rax, -0x200(%rbp)
leaq -0x1f8(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x18150
testb $0x1, %al
jne 0x156b8
jmp 0x15f06
leaq -0x1f8(%rbp), %rdi
callq 0x17f00
movq %rax, %rsi
leaq -0x228(%rbp), %rdi
callq 0x51b0
jmp 0x156d5
movq -0x1f8(%rbp), %rax
movq %rax, -0x230(%rbp)
leaq -0x230(%rbp), %rdi
movl $0x1, %esi
callq 0x180b0
jmp 0x156f6
movq -0x10(%rbp), %rdi
callq 0x17ed0
movq %rax, -0x238(%rbp)
leaq -0x230(%rbp), %rdi
leaq -0x238(%rbp), %rsi
callq 0x17ea0
testb $0x1, %al
jne 0x1571f
jmp 0x1577f
movl $0x7, -0x104(%rbp)
jmp 0x15eb3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x1e9(%rbp), %rdi
callq 0x54a0
jmp 0x1622d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x16221
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x15ef5
leaq -0x230(%rbp), %rdi
callq 0x17f00
movq %rax, %rsi
leaq -0x258(%rbp), %rdi
callq 0x51b0
jmp 0x1579c
leaq 0x6867(%rip), %rsi      # 0x1c00a
leaq -0x228(%rbp), %rdi
callq 0x17ac0
movb %al, -0x499(%rbp)
jmp 0x157b7
movb -0x499(%rbp), %al
testb $0x1, %al
jne 0x157c6
jmp 0x158f7
leaq 0x6837(%rip), %rsi      # 0x1c004
leaq -0x1e8(%rbp), %rdi
callq 0x17ac0
movb %al, -0x49a(%rbp)
jmp 0x157e1
movb -0x49a(%rbp), %al
testb $0x1, %al
jne 0x157f0
jmp 0x158f7
leaq -0x258(%rbp), %rdi
callq 0x14d50
movb %al, -0x49b(%rbp)
jmp 0x15804
movb -0x49b(%rbp), %al
testb $0x1, %al
jne 0x15833
jmp 0x15810
leaq -0x258(%rbp), %rdi
callq 0x14c30
movb %al, -0x49c(%rbp)
jmp 0x15824
movb -0x49c(%rbp), %al
testb $0x1, %al
jne 0x15833
jmp 0x158f2
movq -0x10(%rbp), %rax
movq %rax, -0x4a8(%rbp)
leaq -0x260(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x18090
movq -0x4a8(%rbp), %rdi
movq -0x260(%rbp), %rsi
callq 0x18100
movq %rax, -0x268(%rbp)
leaq 0x6798(%rip), %rsi      # 0x1c00a
leaq -0x288(%rbp), %rdi
leaq -0x258(%rbp), %rdx
callq 0x17cc0
jmp 0x15887
leaq -0x1f8(%rbp), %rdi
movq %rdi, -0x4b0(%rbp)
callq 0x17f00
movq %rax, %rdi
leaq -0x288(%rbp), %rsi
movq %rsi, -0x4b8(%rbp)
callq 0x5510
movq -0x4b8(%rbp), %rdi
callq 0x52a0
movq -0x4b0(%rbp), %rdi
callq 0x17f00
movq %rax, %rsi
leaq -0x228(%rbp), %rdi
callq 0x5040
jmp 0x158d9
jmp 0x158f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x15ee9
jmp 0x15e88
leaq 0x670c(%rip), %rsi      # 0x1c00a
leaq -0x228(%rbp), %rdi
callq 0x17ac0
movb %al, -0x4b9(%rbp)
jmp 0x15912
movb -0x4b9(%rbp), %al
testb $0x1, %al
jne 0x15921
jmp 0x15e86
leaq -0x1e8(%rbp), %rdi
callq 0x147e0
movb %al, -0x4ba(%rbp)
jmp 0x15935
movb -0x4ba(%rbp), %al
testb $0x1, %al
jne 0x15992
jmp 0x15941
leaq 0x6a8d(%rip), %rsi      # 0x1c3d5
leaq -0x1e8(%rbp), %rdi
callq 0x17ac0
movb %al, -0x4bb(%rbp)
jmp 0x1595c
movb -0x4bb(%rbp), %al
testb $0x1, %al
jne 0x15992
jmp 0x15968
leaq 0x6697(%rip), %rsi      # 0x1c006
leaq -0x1e8(%rbp), %rdi
callq 0x17ac0
movb %al, -0x4bc(%rbp)
jmp 0x15983
movb -0x4bc(%rbp), %al
testb $0x1, %al
jne 0x15992
jmp 0x15e86
leaq 0x6671(%rip), %rsi      # 0x1c00a
leaq -0x228(%rbp), %rdi
callq 0x17ac0
movb %al, -0x4bd(%rbp)
jmp 0x159ad
movb -0x4bd(%rbp), %al
testb $0x1, %al
jne 0x159bc
jmp 0x15bbf
leaq 0x6647(%rip), %rsi      # 0x1c00a
leaq -0x1e8(%rbp), %rdi
callq 0x17ac0
movb %al, -0x4be(%rbp)
jmp 0x159d7
movb -0x4be(%rbp), %al
testb $0x1, %al
jne 0x159e6
jmp 0x15bbf
movq -0x1f8(%rbp), %rax
movq %rax, -0x290(%rbp)
movq -0x290(%rbp), %rax
movq %rax, -0x298(%rbp)
leaq -0x298(%rbp), %rdi
xorl %esi, %esi
callq 0x17e70
movq %rax, -0x2a0(%rbp)
leaq -0x290(%rbp), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0x180b0
jmp 0x15a2a
movq -0x10(%rbp), %rax
movq %rax, -0x4c8(%rbp)
leaq -0x2a8(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
callq 0x18090
movq -0x4c8(%rbp), %rdi
movq -0x2a8(%rbp), %rsi
callq 0x18100
movq %rax, -0x2b0(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x17f00
movq %rax, %rdi
leaq 0x6590(%rip), %rsi      # 0x1c008
callq 0x55a0
jmp 0x15a7f
movq -0x290(%rbp), %rax
movq %rax, -0x2b8(%rbp)
leaq -0x2b8(%rbp), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0x180b0
jmp 0x15aa0
leaq -0x2b8(%rbp), %rdi
callq 0x17f00
movq %rax, %rdi
callq 0x147e0
movb %al, -0x4c9(%rbp)
jmp 0x15abc
movb -0x4c9(%rbp), %al
testb $0x1, %al
jne 0x15af7
jmp 0x15ac8
leaq -0x2b8(%rbp), %rdi
callq 0x17f00
movq %rax, %rdi
leaq 0x6526(%rip), %rsi      # 0x1c004
callq 0x17ac0
movb %al, -0x4ca(%rbp)
jmp 0x15aeb
movb -0x4ca(%rbp), %al
testb $0x1, %al
jne 0x15af7
jmp 0x15b2f
movq -0x10(%rbp), %rax
movq %rax, -0x4d8(%rbp)
leaq -0x2c0(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x18090
movq -0x4d8(%rbp), %rdi
movq -0x2c0(%rbp), %rsi
callq 0x18100
movq %rax, -0x2c8(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x17f00
movq %rax, %rsi
leaq -0x228(%rbp), %rdi
callq 0x5040
jmp 0x15b4c
movq -0x298(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movq -0x10(%rbp), %rdi
callq 0x17ed0
movq %rax, -0x2d8(%rbp)
movq -0x2d8(%rbp), %rdi
movl $0x1, %esi
callq 0x18180
movq %rax, -0x4e0(%rbp)
jmp 0x15b84
movq -0x4e0(%rbp), %rax
movq %rax, -0x2d0(%rbp)
leaq -0x1f8(%rbp), %rdi
leaq -0x2d0(%rbp), %rsi
callq 0x17ea0
testb $0x1, %al
jne 0x15bab
jmp 0x15bba
movl $0x7, -0x104(%rbp)
jmp 0x15ea7
jmp 0x15e84
leaq -0x258(%rbp), %rdi
callq 0x14d50
movb %al, -0x4e1(%rbp)
jmp 0x15bd3
movb -0x4e1(%rbp), %al
testb $0x1, %al
jne 0x15c22
jmp 0x15bdf
leaq -0x258(%rbp), %rdi
callq 0x14c30
movb %al, -0x4e2(%rbp)
jmp 0x15bf3
movb -0x4e2(%rbp), %al
testb $0x1, %al
jne 0x15c22
jmp 0x15bff
leaq -0x258(%rbp), %rdi
callq 0x14ad0
movb %al, -0x4e3(%rbp)
jmp 0x15c13
movb -0x4e3(%rbp), %al
testb $0x1, %al
jne 0x15c22
jmp 0x15d44
movb $0x0, -0x2d9(%rbp)
movq -0x10(%rbp), %rdi
callq 0x17ed0
movq %rax, -0x2f0(%rbp)
movq -0x2f0(%rbp), %rdi
movl $0x1, %esi
callq 0x18180
movq %rax, -0x4f0(%rbp)
jmp 0x15c53
movq -0x4f0(%rbp), %rax
movq %rax, -0x2e8(%rbp)
leaq -0x230(%rbp), %rdi
leaq -0x2e8(%rbp), %rsi
callq 0x17ea0
testb $0x1, %al
jne 0x15c7a
jmp 0x15c81
movb $0x1, -0x2d9(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x4f8(%rbp)
leaq -0x2f8(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x18090
movq -0x4f8(%rbp), %rdi
movq -0x2f8(%rbp), %rsi
callq 0x18100
movq %rax, -0x300(%rbp)
leaq 0x634a(%rip), %rsi      # 0x1c00a
leaq -0x320(%rbp), %rdi
leaq -0x258(%rbp), %rdx
callq 0x17cc0
jmp 0x15cd5
leaq -0x1f8(%rbp), %rdi
movq %rdi, -0x500(%rbp)
callq 0x17f00
movq %rax, %rdi
leaq -0x320(%rbp), %rsi
movq %rsi, -0x508(%rbp)
callq 0x5510
movq -0x508(%rbp), %rdi
callq 0x52a0
movq -0x500(%rbp), %rdi
callq 0x17f00
movq %rax, %rsi
leaq -0x228(%rbp), %rdi
callq 0x5040
jmp 0x15d27
testb $0x1, -0x2d9(%rbp)
je 0x15d3f
movl $0x7, -0x104(%rbp)
jmp 0x15ea7
jmp 0x15e82
leaq 0x62b9(%rip), %rsi      # 0x1c004
leaq -0x258(%rbp), %rdi
callq 0x17ac0
movb %al, -0x509(%rbp)
jmp 0x15d5f
movb -0x509(%rbp), %al
testb $0x1, %al
jne 0x15d6e
jmp 0x15e80
leaq -0x1f8(%rbp), %rdi
callq 0x17f00
movq %rax, %rdi
leaq 0x6b21(%rip), %rsi      # 0x1c8a5
callq 0x55a0
jmp 0x15d8b
leaq -0x1f8(%rbp), %rdi
callq 0x17f00
movq %rax, %rsi
leaq -0x228(%rbp), %rdi
callq 0x5040
jmp 0x15da8
movq -0x10(%rbp), %rax
movq %rax, -0x520(%rbp)
leaq -0x328(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x18090
leaq -0x349(%rbp), %rdi
movq %rdi, -0x518(%rbp)
callq 0x5740
movq -0x518(%rbp), %rdx
leaq 0x6225(%rip), %rsi      # 0x1c00c
leaq -0x348(%rbp), %rdi
callq 0x7360
jmp 0x15df5
movq -0x520(%rbp), %rdi
movq -0x328(%rbp), %rsi
leaq -0x348(%rbp), %rdx
callq 0x18050
movq %rax, -0x528(%rbp)
jmp 0x15e18
movq -0x528(%rbp), %rax
movq %rax, -0x358(%rbp)
leaq -0x348(%rbp), %rdi
callq 0x52a0
leaq -0x349(%rbp), %rdi
callq 0x54a0
jmp 0x15e80
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x15e72
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x348(%rbp), %rdi
callq 0x52a0
leaq -0x349(%rbp), %rdi
callq 0x54a0
jmp 0x15ee9
jmp 0x15e82
jmp 0x15e84
jmp 0x15e86
jmp 0x15e88
leaq -0x1e8(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x5040
jmp 0x15e9d
movl $0x0, -0x104(%rbp)
leaq -0x258(%rbp), %rdi
callq 0x52a0
leaq -0x228(%rbp), %rdi
callq 0x52a0
movl -0x104(%rbp), %eax
testl %eax, %eax
je 0x15ecd
jmp 0x15ecb
jmp 0x15f06
jmp 0x15ecf
leaq -0x1f8(%rbp), %rdi
xorl %esi, %esi
callq 0x17e70
movq %rax, -0x360(%rbp)
jmp 0x15664
leaq -0x258(%rbp), %rdi
callq 0x52a0
leaq -0x228(%rbp), %rdi
callq 0x52a0
jmp 0x16221
leaq 0x6927(%rip), %rsi      # 0x1c834
leaq -0x1e8(%rbp), %rdi
callq 0x55a0
jmp 0x15f1b
leaq -0x368(%rbp), %rdi
callq 0x181c0
movq -0x10(%rbp), %rdi
callq 0x17e40
movq %rax, -0x370(%rbp)
movq -0x10(%rbp), %rdi
callq 0x17ed0
movq %rax, -0x378(%rbp)
leaq -0x370(%rbp), %rdi
leaq -0x378(%rbp), %rsi
callq 0x18150
testb $0x1, %al
jne 0x15f63
jmp 0x161f6
leaq -0x370(%rbp), %rdi
callq 0x17f00
movq %rax, %rsi
leaq -0x398(%rbp), %rdi
callq 0x51b0
jmp 0x15f80
leaq 0x607d(%rip), %rsi      # 0x1c004
leaq -0x398(%rbp), %rdi
callq 0x17ac0
movb %al, -0x529(%rbp)
jmp 0x15f9b
movb -0x529(%rbp), %al
testb $0x1, %al
jne 0x15faa
jmp 0x1619f
leaq 0x6059(%rip), %rsi      # 0x1c00a
leaq -0x1e8(%rbp), %rdi
callq 0x17ac0
movb %al, -0x52a(%rbp)
jmp 0x15fc5
movb -0x52a(%rbp), %al
testb $0x1, %al
jne 0x15fd4
jmp 0x1619f
movq -0x10(%rbp), %rax
movq %rax, -0x540(%rbp)
leaq -0x3a0(%rbp), %rdi
leaq -0x370(%rbp), %rsi
callq 0x18090
leaq -0x3c1(%rbp), %rdi
movq %rdi, -0x538(%rbp)
callq 0x5740
movq -0x538(%rbp), %rdx
leaq 0x6893(%rip), %rsi      # 0x1c8a6
leaq -0x3c0(%rbp), %rdi
callq 0x7360
jmp 0x16021
movq -0x540(%rbp), %rdi
movq -0x3a0(%rbp), %rsi
leaq -0x3c0(%rbp), %rdx
callq 0x18050
movq %rax, -0x548(%rbp)
jmp 0x16044
movq -0x548(%rbp), %rax
movq %rax, -0x3d0(%rbp)
leaq -0x3c0(%rbp), %rdi
callq 0x52a0
leaq -0x3c1(%rbp), %rdi
callq 0x54a0
movq -0x10(%rbp), %rax
movq %rax, -0x558(%rbp)
leaq -0x3d8(%rbp), %rdi
leaq -0x370(%rbp), %rsi
callq 0x18090
leaq -0x3f9(%rbp), %rdi
movq %rdi, -0x550(%rbp)
callq 0x5740
movq -0x550(%rbp), %rdx
leaq 0x5f63(%rip), %rsi      # 0x1c00c
leaq -0x3f8(%rbp), %rdi
callq 0x7360
jmp 0x160b7
movq -0x558(%rbp), %rdi
movq -0x3d8(%rbp), %rsi
leaq -0x3f8(%rbp), %rdx
callq 0x18050
movq %rax, -0x560(%rbp)
jmp 0x160da
movq -0x560(%rbp), %rax
movq %rax, -0x408(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x52a0
leaq -0x3f9(%rbp), %rdi
callq 0x54a0
jmp 0x1619f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x161e8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x1614e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x3c0(%rbp), %rdi
callq 0x52a0
leaq -0x3c1(%rbp), %rdi
callq 0x54a0
jmp 0x161e8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x16191
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x52a0
leaq -0x3f9(%rbp), %rdi
callq 0x54a0
jmp 0x161e8
leaq -0x1e8(%rbp), %rdi
leaq -0x398(%rbp), %rsi
callq 0x5040
jmp 0x161b4
movq -0x370(%rbp), %rax
movq %rax, -0x368(%rbp)
leaq -0x398(%rbp), %rdi
callq 0x52a0
leaq -0x370(%rbp), %rdi
xorl %esi, %esi
callq 0x17e70
movq %rax, -0x410(%rbp)
jmp 0x15f37
leaq -0x398(%rbp), %rdi
callq 0x52a0
jmp 0x16221
leaq -0x1e8(%rbp), %rdi
callq 0x52a0
movl $0x0, -0x104(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x52a0
addq $0x560, %rsp            # imm = 0x560
popq %rbp
retq
leaq -0x1e8(%rbp), %rdi
callq 0x52a0
leaq -0xe8(%rbp), %rdi
callq 0x52a0
movq -0x90(%rbp), %rdi
callq 0x5730
nopw %cs:(%rax,%rax)