// File: araujoigor[P]ipp-compiler/./src/include/IAssignment.hpp
// Function: IAssignment::generateCode(std::basic_fstream<char, std::char_traits<char>>&)
void generateCode(std::fstream& fileStream) {

	  /* Se um bloco pai não foi atribuido, algo saiu errado */
	  if(ownerBlock == NULL){
		  std::string errorMsg = "Atribuicao sem bloco de codigo pai.";
		  throw ISourceErrorException(errorMsg, myLine);
	  }

	  /* Realiza-se a obtenção das variáveis utilizadas na atribuição.
	   * Ambas devem ter sido previamente definidas, uma vez que se trata
	   * de uma atribuição e não definição.
	   */
	  leftVariable = ownerBlock->getLocalVariable(leftVariableId);
	  rightVariable = ownerBlock->getLocalVariable(rightVariableId);

	  /* Como dito, a variável que receberá o valor deve ter sido previamente
	   * definida.
	   */
	  if(leftVariable == NULL){
		  std::string errorMsg = "Variavel " + *leftVariableId + "nao definida.";
		  throw ISourceErrorException(errorMsg, myLine);
	  }

	  /* Escreve-se o nome da variável e o simbolo de atribuição no codigo parcial. */
	  fileStream << leftVariable->getId() + " = ";

	  /* Caso o valor de atribuição seja numérico ou string
	   * verifica-se se existe compatibilidade de tipos
	   */
	  if(rightIsValue || rightIsStrValue){
		  bool attrError = false, attrWarning = false;

		  /* Não pode-se atribuir valores numericos a valores String */
		  if( leftVariable->getType() == IString::myType && rightIsValue)
			  attrError = true;
		  /* Não pode-se atribuir valores string a valores numéricos */
		  else if( (leftVariable->getType() == IInteger::myType || leftVariable->getType() == IReal::myType ) &&
				  rightIsStrValue)
			  attrError = true;
		  /* Atribuições reais a variaveis inteiras causam perdas de dados */
		  else  if( leftVariable->getType() == IInteger::myType && rightIsValue && !rightIsInteger)
			  attrWarning = true;

		  if(attrError){
			  //Erro
			  std::string rightType = (rightIsValue) ? "numerica" : "string";
			  std::string errorMsg = "Impossível atribuir um tipo " + rightType + " a uma variavel do tipo " + leftVariable->getType();
			  throw ISourceErrorException(errorMsg, myLine);
		  }else if(attrWarning){
			  //Warning.
			  std::cout << "Atencao: usar uma variavel real em uma operacao para uma variavel inteira causa perda de dados. " << std::endl;
			  fileStream << "(int)";
		  }

		  std::string outValue;

		  /* Escreve-se o valor no código parcial */
		  if(rightIsStrValue)
			  outValue = ("\"" + (*rightStrValue) + "\"");
		  else
			  outValue = (rightIsInteger) ? std::to_string(rightValueInt) : std::to_string(rightValue);

		  fileStream << outValue << ";\n";
	  }
	  /* Do contrário, se o valor for uma expressão matemática,
	   * verifica-se a compatibilidade de tipos
	   */
	  else if(rightIsMath){
		  /* Escreve-se a expressão no código parcial */
		  fileStream << rightVariableMath->checkAndGetExpression(ownerBlock, myLine) << ";\n";

		  /* Analisa-se o tipo de retorno da expressão matemática e o tipo da
		   * variável que receberá o valor. Se o valor o tipo da variável for String,
		   * então a atribuição não é permitida.
		   * Se a variável for inteira e o valor de retorno da expressão for real,
		   * existe perda de dados, e gera-se um warning.
		   */
		  std::string type = leftVariable->getType();
		  if(rightVariableMath->getMathType() == IMath::TYPE_REAL && type == IInteger::myType){
			  //warning
			  std::cout << "Atencao: usar uma variavel real em uma operacao para uma variavel inteira causa perda de dados. " << std::endl;
		  }else if(type == IString::myType){
			  std::string errorMsg = "Impossivel atribuir uma expressao matematica a variavel string " + leftVariable->getId();
			  throw ISourceErrorException(errorMsg, myLine);
		  }
	  }
	  /*
	   * Finalmente, se o valor de atribuição for outra variável, garante-se a compatibilidade de tipo
	   * e escreve-se seu nome do código parcial.
	   */
	  else{
		  if(rightVariable != NULL ){

			  if(rightVariable->getType() != leftVariable->getType() && !(leftVariable->getType() == "real" && rightVariable->getType() == "inteiro") ){
				  std::string errorMsg = "Impossivel atribuir '" + rightVariable->getId() + "' (" + rightVariable->getType() + ") a '" + leftVariable->getId() + "' (" + leftVariable->getType() + "). Tipos incompativeis.";
				  throw ISourceErrorException(errorMsg, myLine);
			  }

			  fileStream  << rightVariable->getId() << ";\n";
		  }
		  else{
			  std::string errorMsg = "Variavel " + *rightVariableId + " nao declarada.";
			  throw ISourceErrorException(errorMsg, myLine);
		  }

	  }

  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x730, %rsp            # imm = 0x730
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x668(%rbp)
cmpq $0x0, 0x10(%rax)
jne 0x1726d
leaq -0x31(%rbp), %rdi
movq %rdi, -0x670(%rbp)
callq 0x9ab0
movq -0x670(%rbp), %rdx
leaq 0x46926(%rip), %rsi     # 0x5dabd
leaq -0x30(%rbp), %rdi
callq 0x97c0
jmp 0x171a2
leaq -0x31(%rbp), %rdi
callq 0x95e0
movb $0x1, -0x69(%rbp)
movl $0x28, %edi
callq 0x9290
movq %rax, -0x678(%rbp)
leaq -0x68(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x9240
jmp 0x171cf
movq -0x678(%rbp), %rdi
movq -0x668(%rbp), %rax
movl 0x8(%rax), %edx
leaq -0x68(%rbp), %rsi
callq 0x12a70
jmp 0x171eb
movq -0x678(%rbp), %rdi
movb $0x0, -0x69(%rbp)
leaq 0x69e5b(%rip), %rsi     # 0x81058
leaq -0x4724(%rip), %rdx     # 0x12ae0
callq 0x9a20
jmp 0x184d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x31(%rbp), %rdi
callq 0x95e0
jmp 0x184cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1724b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x9c30
testb $0x1, -0x69(%rbp)
jne 0x17253
jmp 0x1725f
movq -0x678(%rbp), %rdi
callq 0x9400
leaq -0x30(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq -0x668(%rbp), %rax
movq 0x10(%rax), %rdi
movq 0x48(%rax), %rsi
callq 0x18610
movq %rax, %rcx
movq -0x668(%rbp), %rax
movq %rcx, 0x18(%rax)
movq 0x10(%rax), %rdi
movq 0x50(%rax), %rsi
callq 0x18610
movq %rax, %rcx
movq -0x668(%rbp), %rax
movq %rcx, 0x20(%rax)
cmpq $0x0, 0x18(%rax)
jne 0x173df
movq -0x668(%rbp), %rax
movq 0x48(%rax), %rdx
leaq 0x46368(%rip), %rsi     # 0x5d62f
leaq -0xb0(%rbp), %rdi
movq %rdi, -0x680(%rbp)
callq 0x12960
movq -0x680(%rbp), %rsi
leaq 0x467f9(%rip), %rdx     # 0x5dae1
leaq -0x90(%rbp), %rdi
callq 0x123f0
jmp 0x172f6
leaq -0xb0(%rbp), %rdi
callq 0x9c30
movb $0x1, -0xd1(%rbp)
movl $0x28, %edi
callq 0x9290
movq %rax, -0x688(%rbp)
leaq -0xd0(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x9240
jmp 0x1732f
movq -0x688(%rbp), %rdi
movq -0x668(%rbp), %rax
movl 0x8(%rax), %edx
leaq -0xd0(%rbp), %rsi
callq 0x12a70
jmp 0x1734e
movq -0x688(%rbp), %rdi
movb $0x0, -0xd1(%rbp)
leaq 0x69cf5(%rip), %rsi     # 0x81058
leaq -0x488a(%rip), %rdx     # 0x12ae0
callq 0x9a20
jmp 0x184d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x173b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x9c30
testb $0x1, -0xd1(%rbp)
jne 0x173c2
jmp 0x173ce
movq -0x688(%rbp), %rdi
callq 0x9400
leaq -0x90(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq -0x668(%rbp), %rax
movq -0x10(%rbp), %rcx
addq $0x10, %rcx
movq %rcx, -0x698(%rbp)
movq 0x18(%rax), %rsi
leaq -0x118(%rbp), %rdi
movq %rdi, -0x690(%rbp)
callq 0x12700
movq -0x690(%rbp), %rsi
leaq 0x461f4(%rip), %rdx     # 0x5d60e
leaq -0xf8(%rbp), %rdi
callq 0x123f0
jmp 0x17428
movq -0x698(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x9490
jmp 0x1743d
leaq -0xf8(%rbp), %rdi
callq 0x9c30
leaq -0x118(%rbp), %rdi
callq 0x9c30
movq -0x668(%rbp), %rax
testb $0x1, 0x59(%rax)
jne 0x17473
movq -0x668(%rbp), %rax
testb $0x1, 0x5a(%rax)
je 0x17ab1
movq -0x668(%rbp), %rax
movb $0x0, -0x119(%rbp)
movb $0x0, -0x11a(%rbp)
movq 0x18(%rax), %rsi
movq (%rsi), %rax
leaq -0x140(%rbp), %rdi
callq *0x10(%rax)
leaq -0x140(%rbp), %rdi
leaq 0x6b1b9(%rip), %rsi     # 0x82660
callq 0x13620
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x699(%rbp)
jne 0x174bd
jmp 0x174cd
movq -0x668(%rbp), %rax
movb 0x59(%rax), %al
movb %al, -0x699(%rbp)
movb -0x699(%rbp), %al
movb %al, -0x69a(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x9c30
movb -0x69a(%rbp), %al
testb $0x1, %al
jne 0x174f1
jmp 0x17534
movb $0x1, -0x119(%rbp)
jmp 0x176b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x17523
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x9c30
leaq -0x118(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq -0x668(%rbp), %rax
movq 0x18(%rax), %rsi
movq (%rsi), %rax
leaq -0x160(%rbp), %rdi
callq *0x10(%rax)
leaq -0x160(%rbp), %rdi
leaq 0x6b146(%rip), %rsi     # 0x826a0
callq 0x13620
movb $0x0, -0x181(%rbp)
testb $0x1, %al
jne 0x175b2
movq -0x668(%rbp), %rax
movq 0x18(%rax), %rsi
movq (%rsi), %rax
movq 0x10(%rax), %rax
leaq -0x180(%rbp), %rdi
callq *%rax
jmp 0x17587
movb $0x1, -0x181(%rbp)
leaq -0x180(%rbp), %rdi
leaq 0x6b0e4(%rip), %rsi     # 0x82680
callq 0x13620
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x69b(%rbp)
jne 0x175b2
jmp 0x175c2
movq -0x668(%rbp), %rax
movb 0x5a(%rax), %al
movb %al, -0x69b(%rbp)
movb -0x69b(%rbp), %al
movb %al, -0x69c(%rbp)
testb $0x1, -0x181(%rbp)
jne 0x175d9
jmp 0x175e5
leaq -0x180(%rbp), %rdi
callq 0x9c30
leaq -0x160(%rbp), %rdi
callq 0x9c30
movb -0x69c(%rbp), %al
testb $0x1, %al
jne 0x175fd
jmp 0x17626
movb $0x1, -0x119(%rbp)
jmp 0x176b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq -0x668(%rbp), %rax
movq 0x18(%rax), %rsi
movq (%rsi), %rax
leaq -0x1a8(%rbp), %rdi
callq *0x10(%rax)
leaq -0x1a8(%rbp), %rdi
leaq 0x6b054(%rip), %rsi     # 0x826a0
callq 0x13620
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x69d(%rbp)
jne 0x17662
jmp 0x17689
movq -0x668(%rbp), %rcx
xorl %eax, %eax
testb $0x1, 0x59(%rcx)
movb %al, -0x69d(%rbp)
je 0x17689
movq -0x668(%rbp), %rax
movb 0x58(%rax), %al
xorb $-0x1, %al
movb %al, -0x69d(%rbp)
movb -0x69d(%rbp), %al
movb %al, -0x69e(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x9c30
movb -0x69e(%rbp), %al
testb $0x1, %al
jne 0x176ad
jmp 0x176b4
movb $0x1, -0x11a(%rbp)
jmp 0x176b6
jmp 0x176b8
testb $0x1, -0x119(%rbp)
je 0x17903
movq -0x668(%rbp), %rax
movb 0x59(%rax), %dl
leaq 0x46419(%rip), %rcx     # 0x5daef
leaq 0x46045(%rip), %rax     # 0x5d722
testb $0x1, %dl
cmovneq %rcx, %rax
movq %rax, -0x6b0(%rbp)
leaq -0x1c9(%rbp), %rdi
movq %rdi, -0x6a8(%rbp)
callq 0x9ab0
movq -0x6b0(%rbp), %rsi
movq -0x6a8(%rbp), %rdx
leaq -0x1c8(%rbp), %rdi
callq 0x97c0
jmp 0x1771a
leaq -0x1c9(%rbp), %rdi
callq 0x95e0
leaq 0x463cb(%rip), %rsi     # 0x5daf8
leaq -0x230(%rbp), %rdi
leaq -0x1c8(%rbp), %rdx
callq 0x12960
jmp 0x17742
leaq 0x463cd(%rip), %rdx     # 0x5db16
leaq -0x210(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x123f0
jmp 0x1775e
movq -0x668(%rbp), %rax
movq 0x18(%rax), %rsi
movq (%rsi), %rax
movq 0x10(%rax), %rax
leaq -0x250(%rbp), %rdi
callq *%rax
jmp 0x1777b
leaq -0x1f0(%rbp), %rdi
leaq -0x210(%rbp), %rsi
leaq -0x250(%rbp), %rdx
callq 0x12b80
jmp 0x17797
leaq -0x250(%rbp), %rdi
callq 0x9c30
leaq -0x210(%rbp), %rdi
callq 0x9c30
leaq -0x230(%rbp), %rdi
callq 0x9c30
movb $0x1, -0x271(%rbp)
movl $0x28, %edi
callq 0x9290
movq %rax, -0x6b8(%rbp)
leaq -0x270(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x9240
jmp 0x177e8
movq -0x6b8(%rbp), %rdi
movq -0x668(%rbp), %rax
movl 0x8(%rax), %edx
leaq -0x270(%rbp), %rsi
callq 0x12a70
jmp 0x17807
movq -0x6b8(%rbp), %rdi
movb $0x0, -0x271(%rbp)
leaq 0x6983c(%rip), %rsi     # 0x81058
leaq -0x4d43(%rip), %rdx     # 0x12ae0
callq 0x9a20
jmp 0x184d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1c9(%rbp), %rdi
callq 0x95e0
jmp 0x184cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x178f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1789b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1788f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x9c30
leaq -0x210(%rbp), %rdi
callq 0x9c30
leaq -0x230(%rbp), %rdi
callq 0x9c30
jmp 0x178f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x178cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x9c30
testb $0x1, -0x271(%rbp)
jne 0x178da
jmp 0x178e6
movq -0x6b8(%rbp), %rdi
callq 0x9400
leaq -0x1f0(%rbp), %rdi
callq 0x9c30
leaq -0x1c8(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
testb $0x1, -0x11a(%rbp)
je 0x17942
movq 0x6a6b5(%rip), %rdi     # 0x81fc8
leaq 0x45d57(%rip), %rsi     # 0x5d671
callq 0x9500
movq %rax, %rdi
movq 0x6a66f(%rip), %rsi     # 0x81f98
callq 0x95a0
movq -0x10(%rbp), %rdi
addq $0x10, %rdi
leaq 0x45e98(%rip), %rsi     # 0x5d7d5
callq 0x9500
jmp 0x17944
leaq -0x298(%rbp), %rdi
callq 0x97d0
movq -0x668(%rbp), %rax
testb $0x1, 0x5a(%rax)
je 0x179fb
movq -0x668(%rbp), %rax
movq 0x38(%rax), %rdx
leaq 0x45b39(%rip), %rsi     # 0x5d4ac
leaq -0x2d8(%rbp), %rdi
callq 0x12960
jmp 0x17981
leaq 0x45b24(%rip), %rdx     # 0x5d4ac
leaq -0x2b8(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0x123f0
jmp 0x1799d
leaq -0x298(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x96a0
leaq -0x2b8(%rbp), %rdi
callq 0x9c30
leaq -0x2d8(%rbp), %rdi
callq 0x9c30
jmp 0x17a5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x17aa0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0x9c30
jmp 0x17aa0
movq -0x668(%rbp), %rax
testb $0x1, 0x58(%rax)
je 0x17a22
movq -0x668(%rbp), %rax
movl 0x30(%rax), %esi
leaq -0x2f8(%rbp), %rdi
callq 0x186a0
jmp 0x17a20
jmp 0x17a3e
movq -0x668(%rbp), %rax
movsd 0x28(%rax), %xmm0
leaq -0x2f8(%rbp), %rdi
callq 0x187c0
jmp 0x17a3c
jmp 0x17a3e
leaq -0x298(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0x96a0
leaq -0x2f8(%rbp), %rdi
callq 0x9c30
movq -0x10(%rbp), %rdi
addq $0x10, %rdi
leaq -0x298(%rbp), %rsi
callq 0x9490
movq %rax, -0x6c0(%rbp)
jmp 0x17a7a
movq -0x6c0(%rbp), %rdi
leaq 0x4a23a(%rip), %rsi     # 0x61cc2
callq 0x9500
jmp 0x17a8f
leaq -0x298(%rbp), %rdi
callq 0x9c30
jmp 0x184c2
leaq -0x298(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq -0x668(%rbp), %rax
testb $0x1, 0x5b(%rax)
je 0x17d35
movq -0x668(%rbp), %rax
movq -0x10(%rbp), %rcx
addq $0x10, %rcx
movq %rcx, -0x6d8(%rbp)
movq 0x40(%rax), %rsi
movq 0x10(%rax), %rdx
movl 0x8(%rax), %ecx
leaq -0x318(%rbp), %rdi
movq %rdi, -0x6d0(%rbp)
callq 0x12dc0
movq -0x6d8(%rbp), %rdi
movq -0x6d0(%rbp), %rsi
callq 0x9490
movq %rax, -0x6c8(%rbp)
jmp 0x17b12
movq -0x6c8(%rbp), %rdi
leaq 0x4a1a2(%rip), %rsi     # 0x61cc2
callq 0x9500
jmp 0x17b27
leaq -0x318(%rbp), %rdi
callq 0x9c30
movq -0x668(%rbp), %rax
movq 0x18(%rax), %rsi
movq (%rsi), %rax
leaq -0x338(%rbp), %rdi
callq *0x10(%rax)
movq -0x668(%rbp), %rax
movq 0x40(%rax), %rdi
callq 0x13600
cmpl $0x1, %eax
jne 0x17bdd
leaq -0x338(%rbp), %rdi
leaq 0x6ab32(%rip), %rsi     # 0x826a0
callq 0x13620
testb $0x1, %al
jne 0x17b79
jmp 0x17bdd
movq 0x6a448(%rip), %rdi     # 0x81fc8
leaq 0x45aea(%rip), %rsi     # 0x5d671
callq 0x9500
movq %rax, -0x6e0(%rbp)
jmp 0x17b95
movq -0x6e0(%rbp), %rdi
movq 0x6a3f5(%rip), %rsi     # 0x81f98
callq 0x95a0
jmp 0x17baa
jmp 0x17d13
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x318(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x17d24
leaq -0x338(%rbp), %rdi
leaq 0x6aa75(%rip), %rsi     # 0x82660
callq 0x13620
testb $0x1, %al
jne 0x17bf9
jmp 0x17d11
movq -0x668(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x378(%rbp), %rdi
callq 0x12700
jmp 0x17c12
leaq 0x45ab9(%rip), %rsi     # 0x5d6d2
leaq -0x358(%rbp), %rdi
leaq -0x378(%rbp), %rdx
callq 0x18810
jmp 0x17c2e
leaq -0x378(%rbp), %rdi
callq 0x9c30
movb $0x1, -0x399(%rbp)
movl $0x28, %edi
callq 0x9290
movq %rax, -0x6e8(%rbp)
leaq -0x398(%rbp), %rdi
leaq -0x358(%rbp), %rsi
callq 0x9240
jmp 0x17c67
movq -0x6e8(%rbp), %rdi
movq -0x668(%rbp), %rax
movl 0x8(%rax), %edx
leaq -0x398(%rbp), %rsi
callq 0x12a70
jmp 0x17c86
movq -0x6e8(%rbp), %rdi
movb $0x0, -0x399(%rbp)
leaq 0x693bd(%rip), %rsi     # 0x81058
leaq -0x51c2(%rip), %rdx     # 0x12ae0
callq 0x9a20
jmp 0x184d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x378(%rbp), %rdi
callq 0x9c30
jmp 0x17d24
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x17cec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x398(%rbp), %rdi
callq 0x9c30
testb $0x1, -0x399(%rbp)
jne 0x17cf7
jmp 0x17d03
movq -0x6e8(%rbp), %rdi
callq 0x9400
leaq -0x358(%rbp), %rdi
callq 0x9c30
jmp 0x17d24
jmp 0x17d13
leaq -0x338(%rbp), %rdi
callq 0x9c30
jmp 0x184c0
leaq -0x338(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq -0x668(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0x1839d
movq -0x668(%rbp), %rax
movq 0x20(%rax), %rsi
movq (%rsi), %rax
movq 0x10(%rax), %rax
leaq -0x3c0(%rbp), %rdi
callq *%rax
movq -0x668(%rbp), %rax
movq 0x18(%rax), %rsi
movq (%rsi), %rax
movq 0x10(%rax), %rax
movb $0x0, -0x401(%rbp)
movb $0x0, -0x429(%rbp)
leaq -0x3e0(%rbp), %rdi
callq *%rax
jmp 0x17d8d
leaq -0x3c0(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
callq 0x12b00
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x6e9(%rbp)
jne 0x17db4
jmp 0x17e63
movq -0x668(%rbp), %rax
movq 0x18(%rax), %rsi
movq (%rsi), %rax
movq 0x10(%rax), %rax
leaq -0x400(%rbp), %rdi
callq *%rax
jmp 0x17dd1
movb $0x1, -0x401(%rbp)
leaq 0x45273(%rip), %rsi     # 0x5d052
leaq -0x400(%rbp), %rdi
callq 0xd860
movb %al, -0x6ea(%rbp)
jmp 0x17df3
movb -0x6ea(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x6eb(%rbp)
jne 0x17e08
jmp 0x17e55
movq -0x668(%rbp), %rax
movq 0x20(%rax), %rsi
movq (%rsi), %rax
movq 0x10(%rax), %rax
leaq -0x428(%rbp), %rdi
callq *%rax
jmp 0x17e25
movb $0x1, -0x429(%rbp)
leaq 0x45224(%rip), %rsi     # 0x5d057
leaq -0x428(%rbp), %rdi
callq 0xd860
movb %al, -0x6ec(%rbp)
jmp 0x17e47
movb -0x6ec(%rbp), %al
movb %al, -0x6eb(%rbp)
jmp 0x17e55
movb -0x6eb(%rbp), %al
xorb $-0x1, %al
movb %al, -0x6e9(%rbp)
movb -0x6e9(%rbp), %al
movb %al, -0x6ed(%rbp)
testb $0x1, -0x429(%rbp)
jne 0x17e7a
jmp 0x17e86
leaq -0x428(%rbp), %rdi
callq 0x9c30
testb $0x1, -0x401(%rbp)
jne 0x17e91
jmp 0x17e9d
leaq -0x400(%rbp), %rdi
callq 0x9c30
leaq -0x3e0(%rbp), %rdi
callq 0x9c30
leaq -0x3c0(%rbp), %rdi
callq 0x9c30
movb -0x6ed(%rbp), %al
testb $0x1, %al
jne 0x17ec4
jmp 0x18311
movq -0x668(%rbp), %rax
movq 0x20(%rax), %rsi
leaq -0x550(%rbp), %rdi
movq %rdi, -0x6f8(%rbp)
callq 0x12700
movq -0x6f8(%rbp), %rdx
leaq 0x45749(%rip), %rsi     # 0x5d639
leaq -0x530(%rbp), %rdi
callq 0x18810
jmp 0x17efe
leaq 0x4574a(%rip), %rdx     # 0x5d64f
leaq -0x510(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0x123f0
jmp 0x17f1a
movq -0x668(%rbp), %rax
movq 0x20(%rax), %rsi
movq (%rsi), %rax
movq 0x10(%rax), %rax
leaq -0x570(%rbp), %rdi
callq *%rax
jmp 0x17f37
leaq -0x4f0(%rbp), %rdi
leaq -0x510(%rbp), %rsi
leaq -0x570(%rbp), %rdx
callq 0x12b80
jmp 0x17f53
leaq 0x456f9(%rip), %rdx     # 0x5d653
leaq -0x4d0(%rbp), %rdi
leaq -0x4f0(%rbp), %rsi
callq 0x123f0
jmp 0x17f6f
movq -0x668(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x590(%rbp), %rdi
callq 0x12700
jmp 0x17f88
leaq -0x4b0(%rbp), %rdi
leaq -0x4d0(%rbp), %rsi
leaq -0x590(%rbp), %rdx
callq 0x12b80
jmp 0x17fa4
leaq 0x456a4(%rip), %rdx     # 0x5d64f
leaq -0x490(%rbp), %rdi
leaq -0x4b0(%rbp), %rsi
callq 0x123f0
jmp 0x17fc0
movq -0x668(%rbp), %rax
movq 0x18(%rax), %rsi
movq (%rsi), %rax
movq 0x10(%rax), %rax
leaq -0x5b0(%rbp), %rdi
callq *%rax
jmp 0x17fdd
leaq -0x470(%rbp), %rdi
leaq -0x490(%rbp), %rsi
leaq -0x5b0(%rbp), %rdx
callq 0x12b80
jmp 0x17ff9
leaq 0x45659(%rip), %rdx     # 0x5d659
leaq -0x450(%rbp), %rdi
leaq -0x470(%rbp), %rsi
callq 0x123f0
jmp 0x18015
leaq -0x470(%rbp), %rdi
callq 0x9c30
leaq -0x5b0(%rbp), %rdi
callq 0x9c30
leaq -0x490(%rbp), %rdi
callq 0x9c30
leaq -0x4b0(%rbp), %rdi
callq 0x9c30
leaq -0x590(%rbp), %rdi
callq 0x9c30
leaq -0x4d0(%rbp), %rdi
callq 0x9c30
leaq -0x4f0(%rbp), %rdi
callq 0x9c30
leaq -0x570(%rbp), %rdi
callq 0x9c30
leaq -0x510(%rbp), %rdi
callq 0x9c30
leaq -0x530(%rbp), %rdi
callq 0x9c30
leaq -0x550(%rbp), %rdi
callq 0x9c30
movb $0x1, -0x5d1(%rbp)
movl $0x28, %edi
callq 0x9290
movq %rax, -0x700(%rbp)
leaq -0x5d0(%rbp), %rdi
leaq -0x450(%rbp), %rsi
callq 0x9240
jmp 0x180c6
movq -0x700(%rbp), %rdi
movq -0x668(%rbp), %rax
movl 0x8(%rax), %edx
leaq -0x5d0(%rbp), %rsi
callq 0x12a70
jmp 0x180e5
movq -0x700(%rbp), %rdi
movb $0x0, -0x5d1(%rbp)
leaq 0x68f5e(%rip), %rsi     # 0x81058
leaq -0x5621(%rip), %rdx     # 0x12ae0
callq 0x9a20
jmp 0x184d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1817f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x18173
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1815a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
testb $0x1, -0x429(%rbp)
jne 0x1814c
jmp 0x18158
leaq -0x428(%rbp), %rdi
callq 0x9c30
jmp 0x1815a
testb $0x1, -0x401(%rbp)
jne 0x18165
jmp 0x18171
leaq -0x400(%rbp), %rdi
callq 0x9c30
jmp 0x18173
leaq -0x3e0(%rbp), %rdi
callq 0x9c30
leaq -0x3c0(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x182b2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x182a6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1829a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1828e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x18282
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x18276
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1826a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1825e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x18252
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x18246
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x470(%rbp), %rdi
callq 0x9c30
leaq -0x5b0(%rbp), %rdi
callq 0x9c30
leaq -0x490(%rbp), %rdi
callq 0x9c30
leaq -0x4b0(%rbp), %rdi
callq 0x9c30
leaq -0x590(%rbp), %rdi
callq 0x9c30
leaq -0x4d0(%rbp), %rdi
callq 0x9c30
leaq -0x4f0(%rbp), %rdi
callq 0x9c30
leaq -0x570(%rbp), %rdi
callq 0x9c30
leaq -0x510(%rbp), %rdi
callq 0x9c30
leaq -0x530(%rbp), %rdi
callq 0x9c30
leaq -0x550(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x182e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x5d0(%rbp), %rdi
callq 0x9c30
testb $0x1, -0x5d1(%rbp)
jne 0x182f4
jmp 0x18300
movq -0x700(%rbp), %rdi
callq 0x9400
leaq -0x450(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq -0x668(%rbp), %rax
movq -0x10(%rbp), %rcx
addq $0x10, %rcx
movq %rcx, -0x718(%rbp)
movq 0x20(%rax), %rsi
leaq -0x5f8(%rbp), %rdi
movq %rdi, -0x710(%rbp)
callq 0x12700
movq -0x718(%rbp), %rdi
movq -0x710(%rbp), %rsi
callq 0x9490
movq %rax, -0x708(%rbp)
jmp 0x1835a
movq -0x708(%rbp), %rdi
leaq 0x4995a(%rip), %rsi     # 0x61cc2
callq 0x9500
jmp 0x1836f
leaq -0x5f8(%rbp), %rdi
callq 0x9c30
jmp 0x184be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x5f8(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq -0x668(%rbp), %rax
movq 0x50(%rax), %rdx
leaq 0x45280(%rip), %rsi     # 0x5d62f
leaq -0x638(%rbp), %rdi
movq %rdi, -0x720(%rbp)
callq 0x12960
movq -0x720(%rbp), %rsi
leaq 0x497bf(%rip), %rdx     # 0x61b8f
leaq -0x618(%rbp), %rdi
callq 0x123f0
jmp 0x183de
leaq -0x638(%rbp), %rdi
callq 0x9c30
movb $0x1, -0x659(%rbp)
movl $0x28, %edi
callq 0x9290
movq %rax, -0x728(%rbp)
leaq -0x658(%rbp), %rdi
leaq -0x618(%rbp), %rsi
callq 0x9240
jmp 0x18417
movq -0x728(%rbp), %rdi
movq -0x668(%rbp), %rax
movl 0x8(%rax), %edx
leaq -0x658(%rbp), %rsi
callq 0x12a70
jmp 0x18436
movq -0x728(%rbp), %rdi
movb $0x0, -0x659(%rbp)
leaq 0x68c0d(%rip), %rsi     # 0x81058
leaq -0x5972(%rip), %rdx     # 0x12ae0
callq 0x9a20
jmp 0x184d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x638(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x18499
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x658(%rbp), %rdi
callq 0x9c30
testb $0x1, -0x659(%rbp)
jne 0x184a4
jmp 0x184b0
movq -0x728(%rbp), %rdi
callq 0x9400
leaq -0x618(%rbp), %rdi
callq 0x9c30
jmp 0x184cb
jmp 0x184c0
jmp 0x184c2
addq $0x730, %rsp            # imm = 0x730
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x9a90
nopw %cs:(%rax,%rax)
nop