// File: nataly-enne[P]pet-fera/pet_fera_remover.cpp
// Function: remover_animal(std::map<int, ANFIBIO_NATIVO, std::less<int>, std::allocator<std::pair<int const, ANFIBIO_NATIVO>>>&, std::map<int, ANFIBIO_EXOTICO, std::less<int>, std::allocator<std::pair<int const, ANFIBIO_EXOTICO>>>&, std::map<int, MAMIFERO_NATIVO, std::less<int>, std::allocator<std::pair<int const, MAMIFERO_NATIVO>>>&, std::map<int, MAMIFERO_EXOTICO, std::less<int>, std::allocator<std::pair<int const, MAMIFERO_EXOTICO>>>&, std::map<int, REPTIL_NATIVO, std::less<int>, std::allocator<std::pair<int const, REPTIL_NATIVO>>>&, std::map<int, REPTIL_EXOTICO, std::less<int>, std::allocator<std::pair<int const, REPTIL_EXOTICO>>>&, std::map<int, AVE_NATIVO, std::less<int>, std::allocator<std::pair<int const, AVE_NATIVO>>>&, std::map<int, AVE_EXOTICO, std::less<int>, std::allocator<std::pair<int const, AVE_EXOTICO>>>&)
void remover_animal(map <int, ANFIBIO_NATIVO> &anfibios_nat, map <int, ANFIBIO_EXOTICO> &anfibios_ex, map <int, MAMIFERO_NATIVO> &mamiferos_nat, map <int, MAMIFERO_EXOTICO> &mamiferos_ex, map <int, REPTIL_NATIVO> &repteis_nat, map <int, REPTIL_EXOTICO> &repteis_ex, map <int, AVE_NATIVO> &aves_nat, map <int, AVE_EXOTICO> &aves_ex){
	char tipo_animal;
	char resp, op = 'n';

	do{  
		cout << "Qual animal deseja remover? \n a - anfíbio\n m - mamífero \n r - reptil \n v - ave" << endl;
		cin >> tipo_animal;
		if(tipo_animal != 'a' && tipo_animal != 'm' && tipo_animal != 'r' && tipo_animal != 'v' ){
			cout << "Opção inválida!! Tente novamente!\n" << endl;
			cout << endl;
			cout << "Deseja sair? s/n" << endl;
			cin >> resp;
			if(resp == 's'){
				break;
			}
		}
		else{
			if(tipo_animal == 'a'){
				remover(anfibios_nat, anfibios_ex); // Função remover sobrecarregada.
			}
			else if(tipo_animal == 'm'){
				remover(mamiferos_nat, mamiferos_ex);
			}
			else if(tipo_animal == 'r'){
				remover(repteis_nat, repteis_ex);
			}
			else{
				remover(aves_nat, aves_ex);
			}
		
		} // Primeiro else.
	}while(op == 's');
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movb $0x6e, -0x33(%rbp)
movq 0x18515(%rip), %rdi     # 0x50fb8
leaq 0x98dd(%rip), %rsi      # 0x42387
callq 0x3240
movq %rax, %rdi
movq 0x184e7(%rip), %rsi     # 0x50fa0
callq 0x3280
movq 0x18513(%rip), %rdi     # 0x50fd8
leaq -0x31(%rbp), %rsi
callq 0x32e0
movsbl -0x31(%rbp), %eax
cmpl $0x61, %eax
je 0x38b6e
movsbl -0x31(%rbp), %eax
cmpl $0x6d, %eax
je 0x38b6e
movsbl -0x31(%rbp), %eax
cmpl $0x72, %eax
je 0x38b6e
movsbl -0x31(%rbp), %eax
cmpl $0x76, %eax
je 0x38b6e
movq 0x184b7(%rip), %rdi     # 0x50fb8
leaq 0x96c9(%rip), %rsi      # 0x421d1
callq 0x3240
movq %rax, %rdi
movq 0x18489(%rip), %rsi     # 0x50fa0
callq 0x3280
movq 0x18495(%rip), %rdi     # 0x50fb8
movq 0x18476(%rip), %rsi     # 0x50fa0
callq 0x3280
movq 0x18482(%rip), %rdi     # 0x50fb8
leaq 0x8a9b(%rip), %rsi      # 0x415d8
callq 0x3240
movq %rax, %rdi
movq 0x18454(%rip), %rsi     # 0x50fa0
callq 0x3280
movq 0x18480(%rip), %rdi     # 0x50fd8
leaq -0x32(%rbp), %rsi
callq 0x32e0
movsbl -0x32(%rbp), %eax
cmpl $0x73, %eax
jne 0x38b6c
jmp 0x38bd8
jmp 0x38bc9
movsbl -0x31(%rbp), %eax
cmpl $0x61, %eax
jne 0x38b86
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x38be0
jmp 0x38bc7
movsbl -0x31(%rbp), %eax
cmpl $0x6d, %eax
jne 0x38b9e
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x39370
jmp 0x38bc5
movsbl -0x31(%rbp), %eax
cmpl $0x72, %eax
jne 0x38bb6
movq -0x28(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0x39b00
jmp 0x38bc3
movq 0x10(%rbp), %rdi
movq 0x18(%rbp), %rsi
callq 0x3a290
jmp 0x38bc5
jmp 0x38bc7
jmp 0x38bc9
jmp 0x38bcb
movsbl -0x33(%rbp), %eax
cmpl $0x73, %eax
je 0x38a9c
addq $0x40, %rsp
popq %rbp
retq
nop