// File: /workspace/github_cpp_makefile_star2_O2/nataly-enne[P]pet-fera/pet_fera_cadastrar.cpp
// Function: cadastrar(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>>>&, std::map<int, VETERINARIO, std::less<int>, std::allocator<std::pair<int const, VETERINARIO>>>, std::map<int, TRATADOR, std::less<int>, std::allocator<std::pair<int const, TRATADOR>>>)
void cadastrar(map <int, AVE_NATIVO> &aves_nat, map <int, AVE_EXOTICO> &aves_ex, map <int, VETERINARIO> vets, map <int, TRATADOR> tratadores){
	int id;
	bool check;
	double tam_bico, envergadura, tamanho;;
	string classe, nome_cientifico, dieta, veterinario, tratador, nome_batismo, autorizacao, autorizacao_IBAMA, origem, nome, id_string, sexo_string, tamanho_string, tam_bico_string, envergadura_string;
	char sexo, tipo_animal, sucesso, continuar = 's', tipo = 'v';
	unsigned int old_size;
	ofstream nativos;
	ofstream exoticos;

	do{
		cout << "Deseja cadastrar um AVE NATIVA ou AVE EXÓTICA? \n n - NATIVA\n e - EXÓTICA" << endl;
		cin >> tipo_animal;
		if(tipo_animal != 'n' && tipo_animal != 'e'){
			continuar = 's';
			continue;
		}
		else{
			// Recebe o ID e verifica se é valido.
			do{
				cout << "Digite o id:" << endl;
				cin >> id_string;
				if(!verifica_ID(aves_nat, aves_ex, tipo_animal, id_string, sucesso)){
					cout << "O ID deve conter apenas inteiros ou ID já cadastrado!" << endl << endl;
				}
				else{
					stringstream ss(id_string); // Converte string para int.
					ss >> id;
				}

			}while(sucesso == 'n');
			
			classe = "Aves";

			// Recebe o nome e verifica se é valido.
			do{
				cout << "Digite o nome:" << endl;
				cin.ignore();
				getline(cin, nome);
				if(!verifica_nome(nome, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
				transform(nome.begin(), nome.end(), nome.begin(), ::tolower); // Converte a string nome para caracteres maiúsculos.
			}while(sucesso == 'n');


			// Recebe o nome cientifico e verifica se é valido.
			do{
				cout << "Digite o nome científico:" << endl;
				getline(cin, nome_cientifico);
				if(!verifica_nome_cient(nome_cientifico, sucesso)){
					cout << "ERRO: só pode ser inserido letra, espaço ou traço!" << endl << endl;
				}
			}while(sucesso == 'n');

			// Recebe a dieta e verifica se não possui caracteres proibidos.
			do{
				cout << "Digite a dieta: " << endl;
				getline(cin, dieta);
				if(!verifica_dieta(dieta, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
			}while(sucesso == 'n');

			// Recebe o nome do veterinario e verifica se não possui caracteres proibidos.
			do{
				cout << "Digite o nome do veterinario: " << endl;
				getline(cin, veterinario);
				
				if(!verifica_nome(veterinario, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
				check = check_vet(vets, veterinario);
				if(!check){
					cout << endl;
					cout << "ERRO: Veterinario não cadastrado!" << endl;
					sucesso = 'n';
				}
			}while(sucesso == 'n');

			// Recebe o nome do tratador e verifica se não possui caracteres proibido, se já foi cadastrado ou se possui nivel de segurança adequado.
			do{
				cout << "Digite o nome do tratador: " << endl;
				getline(cin, tratador);
				if(!verifica_nome(tratador, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
				check = check_tratador(0, tratadores, tratador, tipo);
				if(!check){
					cout << endl;
					cout << "ERRO: Tratador não cadastrado ou não se adequa!" << endl << endl;
					sucesso = 'n';
				}
			}while(sucesso == 'n');

			// Recebe o nome e verifica se é valido.
			do{
				cout << "Digite o nome de batismo: " << endl;
				getline(cin, nome_batismo);
				if(!verifica_nome(nome_batismo, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
				transform(nome_batismo.begin(), nome_batismo.end(), nome_batismo.begin(), ::tolower); // Converte a string nome_batismo para caracteres minusculos.
			}while(sucesso == 'n');

			// Recebe o sexo do animal e verifica se é F ou M.
			do{
				cout << "Digite o sexo do animal: " << endl;
				getline(cin, sexo_string);
				transform(sexo_string.begin(), sexo_string.end(), sexo_string.begin(), ::toupper); // Converte a string sexo para caracteres maiúsculos.
				if(sexo_string != "F" && sexo_string != "M" ){
					sucesso = 'n';
					cout << "ERRO: só são permitidos F ou M!" << endl << endl;
				}
				else{
					sexo = (char)sexo_string[0];
					sucesso = 's';
				}
			}while(sucesso == 'n');

			// Recebe o tamanho do animal e verifica se não há caracteres proibidos.
			do{
				cout << "Digite o tamanho do animal: " << endl;
				getline(cin, tamanho_string);
				if(!verifica_tamanho(tamanho_string, sucesso)){
					cout << "ERRO: o tamanho do animal tem que ter apenas um '.' " << endl << endl;
				}
				tamanho = stod(tamanho_string);
			}while(sucesso == 'n');
				
			// Recebe o tamanho do bico do animal e verifica se não há caracteres proibidos.
			do{
				cout << "Digite o tamanho do bico: " << endl;
				getline(cin, tam_bico_string);
				if(!verifica_tamanho(tam_bico_string, sucesso)){
					cout << "ERRO: o tamanho do animal tem que ter apenas um '.' " << endl << endl;
				}
				tam_bico = stod(tam_bico_string);
			}while(sucesso == 'n');
			
			// Recebe a envergadura do animal e verifica se não há caracteres proibidos.
			do{
				cout << "Digite a envergadura: " << endl;
				getline(cin, envergadura_string);
				if(!verifica_tamanho(envergadura_string, sucesso)){
					cout << "ERRO: o tamanho do animal tem que ter apenas um '.' " << endl << endl;
				}
				envergadura = stod(envergadura_string);
			}while(sucesso == 'n');
			
			// Verifica se a autorizacao está no formato correto.
			do{
				cout << "Insira a autorizacao do IBAMA: " << endl;
				getline(cin, autorizacao_IBAMA);
				if(!verifica_autorizacao(autorizacao_IBAMA, sucesso)){
					cout << "ERRO: A autorizacao deve conter letras, numeros ou '-'" << endl << endl;
				}
			}while(sucesso == 'n');
			

			if(tipo_animal == 'n'){
				old_size = aves_nat.size();
				// Verifica se foi passado uma string.
				do{
					cout << "Digite a UF de origem: " << endl;
					getline(cin, origem);
					if(!verifica_origem(origem, sucesso)){
						cout << "ERRO: Deve-se colocar apenas letras!" << endl << endl;
					}
				}while(sucesso == 'n');
				
				// Verifica se a autorizacao está no formato correto.
				do{
					cout << "Insira a autorizacao do animal: " << endl;
					getline(cin, autorizacao);
					if(!verifica_autorizacao(autorizacao, sucesso)){
						cout << "ERRO: A autorizacao deve conter letras, numeros e '-'" << endl << endl;
					}
				}while(sucesso == 'n');

				// Armazenando valores do tipo ave nativa no map passado pelo usuário.
				aves_nat.insert(pair <int, AVE_NATIVO> (id, AVE_NATIVO(id, classe, nome, nome_cientifico, sexo, tamanho, dieta, veterinario, tratador, nome_batismo, tam_bico, envergadura, autorizacao_IBAMA, origem, autorizacao)));
				
				if (aves_nat.size() == old_size){
					cout << "Falha no cadastro do animal! Tente novamente!" << endl;
					continuar = 's';
					continue;
				}
			}
			else{
				// Verifica se foi passado uma string.
				do{
					cout << "Digite o País de origem: " << endl;
					getline(cin, origem);
					if(!verifica_origem(origem, sucesso)){
						cout << "ERRO: Deve-se colocar apenas letras!" << endl << endl;
					}
				}while(sucesso == 'n');

				// Verifica se a autorizacao está no formato correto.
				do{
					cout << "Insira a autorizacao do animal: " << endl;
					getline(cin, autorizacao);
					if(!verifica_autorizacao(autorizacao, sucesso)){
						cout << "ERRO: A autorizacao deve conter letras, numeros e '-'"<< endl << endl;
					}
				}while(sucesso == 'n');

				// Armazenando valores de ave exótica no map passada pelo usuário.
				aves_ex.insert(pair <int, AVE_EXOTICO> (id, AVE_EXOTICO(id, classe, nome, nome_cientifico, sexo, tamanho, dieta, veterinario, tratador, nome_batismo, tam_bico, envergadura, autorizacao_IBAMA, origem, autorizacao)));
				
				if (aves_ex.size() == old_size){
					cout << "Falha no cadastro do animal! Tente novamente!" << endl;
					continuar = 's';
					continue;
				}
			}
		}
		cout << "\nAnimal cadastrado com sucesso!" << endl << endl;
		cout << "Deseja cadastrar um novo animal? s/n" << endl;
		cin >> continuar;
	}while(continuar == 's');
	
	if(!aves_nat.empty()){
		nativos.open("aves_nat.txt");
		for(auto it = aves_nat.begin(); it != aves_nat.end(); it++){
			nativos << (*it).second;
		}
		nativos.close();
	}
	if(!aves_ex.empty()){
		exoticos.open("aves_ex.txt");
		for(auto it = aves_ex.begin(); it != aves_ex.end(); it++){
			exoticos << (*it).second;
		}
		exoticos.close();
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xc88, %rsp            # imm = 0xC88
movq %rcx, -0x120(%rbp)
movq %rdx, -0x128(%rbp)
movq %rsi, %rbx
leaq -0x258(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
movq %rdi, %r14
xorl %eax, %eax
leaq -0x1b8(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
leaq -0x198(%rbp), %rsi
movq %rsi, -0x10(%rsi)
andq $0x0, -0x8(%rsi)
movb %al, (%rcx)
movb %al, (%rdx)
leaq -0x158(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x138(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rsi)
movb %al, (%rcx)
leaq -0x108(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0xe8(%rbp), %rsi
movq %rsi, -0x10(%rsi)
andq $0x0, -0x8(%rsi)
movb %al, (%rdx)
movb %al, (%rcx)
leaq -0x178(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0xc8(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rsi)
movb %al, (%rcx)
leaq -0xa8(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x238(%rbp), %rsi
movq %rsi, -0x10(%rsi)
andq $0x0, -0x8(%rsi)
movb %al, (%rdx)
movb %al, (%rcx)
leaq -0x88(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x218(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rsi)
movb %al, (%rcx)
leaq -0x1f8(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x1d8(%rbp), %rsi
movq %rsi, -0x10(%rsi)
andq $0x0, -0x8(%rsi)
movb %al, (%rdx)
movb %al, (%rcx)
movb %al, (%rsi)
movb $0x73, -0x2a(%rbp)
leaq -0xca8(%rbp), %rdi
callq 0x3350
movq %r14, -0x40(%rbp)
movq %rbx, -0x50(%rbp)
leaq -0xaa8(%rbp), %rdi
callq 0x3350
movq 0x2042a(%rip), %r13     # 0x30fc8
movq 0x2043b(%rip), %r14     # 0x30fe0
leaq -0x5a8(%rbp), %r12
movq %rax, -0x60(%rbp)
movl -0x60(%rbp), %eax
movq %rax, -0x48(%rbp)
movq %r13, %rdi
leaq 0x13515(%rip), %rsi     # 0x240d6
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x2b(%rbp), %rsi
callq 0x3280
movzbl -0x2b(%rbp), %eax
cmpl $0x6e, %eax
je 0x10bee
cmpl $0x65, %eax
je 0x10bee
movb $0x73, -0x2a(%rbp)
jmp 0x10bb7
movq %r13, %rdi
leaq 0x12b07(%rip), %rsi     # 0x236ff
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x248(%rbp), %rsi
callq 0x3260
movb -0x2b(%rbp), %bl
movq %r12, %rdi
leaq -0x248(%rbp), %rsi
callq 0x3290
movsbl %bl, %edx
movq -0x40(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq %r12, %rcx
leaq -0x29(%rbp), %r8
callq 0x21857
movl %eax, %r15d
movq %r12, %rdi
callq 0x3100
testb %r15b, %r15b
je 0x10c7c
leaq -0x730(%rbp), %rbx
movq %rbx, %rdi
leaq -0x248(%rbp), %rsi
pushq $0x18
popq %rdx
callq 0x3300
movq %rbx, %rdi
leaq -0x30(%rbp), %rsi
callq 0x3150
movq %rbx, %rdi
callq 0x3170
jmp 0x10c9b
movq %r13, %rdi
leaq 0x12a86(%rip), %rsi     # 0x2370c
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0x10bee
leaq -0x268(%rbp), %rdi
leaq 0x128fb(%rip), %rsi     # 0x235ae
callq 0x33b0
movq %r13, %rdi
leaq 0x12a81(%rip), %rsi     # 0x23743
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
callq 0x3380
movq %r14, %rdi
leaq -0xb8(%rbp), %rsi
callq 0x3060
leaq -0xb8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21b16
testb %al, %al
jne 0x10d19
movq %r13, %rdi
leaq 0x12a4e(%rip), %rsi     # 0x23752
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
movq -0xb8(%rbp), %r15
movq -0xb0(%rbp), %r12
xorl %ebx, %ebx
cmpq %rbx, %r12
je 0x10d41
movsbl (%r15,%rbx), %edi
callq 0x32c0
movb %al, (%r15,%rbx)
incq %rbx
jmp 0x10d29
cmpb $0x6e, -0x29(%rbp)
je 0x10cb8
movq %r13, %rdi
leaq 0x12dc1(%rip), %rsi     # 0x23b16
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x3060
leaq -0x1c8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21bd2
testb %al, %al
jne 0x10da4
movq %r13, %rdi
leaq 0x12da2(%rip), %rsi     # 0x23b31
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0x10d4b
movq %r13, %rdi
leaq 0x12db3(%rip), %rsi     # 0x23b67
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x3060
leaq -0x1a8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x22195
testb %al, %al
jne 0x10e03
movq %r13, %rdi
leaq 0x12964(%rip), %rsi     # 0x23752
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0x10daa
jmp 0x10e2e
movq %r13, %rdi
callq 0x3110
movq %r13, %rdi
leaq 0x12d7a(%rip), %rsi     # 0x23b97
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movb $0x6e, -0x29(%rbp)
movq %r13, %rdi
leaq 0x12d40(%rip), %rsi     # 0x23b78
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x168(%rbp), %rsi
callq 0x3060
leaq -0x168(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21b16
testb %al, %al
jne 0x10e87
movq %r13, %rdi
leaq 0x128e0(%rip), %rsi     # 0x23752
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
leaq -0x588(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x3290
movq -0x128(%rbp), %rdi
leaq -0x588(%rbp), %rbx
movq %rbx, %rsi
callq 0x20e46
movl %eax, %r15d
movq %rbx, %rdi
callq 0x3100
testb %r15b, %r15b
je 0x10e0b
cmpb $0x6e, -0x29(%rbp)
je 0x10e2e
movq %r13, %rdi
leaq 0x12ce2(%rip), %rsi     # 0x23bba
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x148(%rbp), %rsi
callq 0x3060
leaq -0x148(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21b16
testb %al, %al
jne 0x10f27
movq %r13, %rdi
leaq 0x12840(%rip), %rsi     # 0x23752
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
leaq -0x568(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x3290
xorl %edi, %edi
movq -0x120(%rbp), %rsi
leaq -0x568(%rbp), %rbx
movq %rbx, %rdx
pushq $0x76
popq %rcx
callq 0x20eb7
movl %eax, %r15d
movq %rbx, %rdi
callq 0x3100
testb %r15b, %r15b
je 0x10f71
cmpb $0x6e, -0x29(%rbp)
je 0x10ece
jmp 0x10fa1
movq %r13, %rdi
callq 0x3110
movq %r13, %rdi
leaq 0x12c53(%rip), %rsi     # 0x23bd6
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
movb $0x6e, -0x29(%rbp)
jmp 0x10ece
movq %r13, %rdi
leaq 0x12c5d(%rip), %rsi     # 0x23c08
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x118(%rbp), %rsi
callq 0x3060
leaq -0x118(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21b16
testb %al, %al
jne 0x10ffa
movq %r13, %rdi
leaq 0x1276d(%rip), %rsi     # 0x23752
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
movq -0x118(%rbp), %r15
movq -0x110(%rbp), %r12
xorl %ebx, %ebx
cmpq %rbx, %r12
je 0x11022
movsbl (%r15,%rbx), %edi
callq 0x32c0
movb %al, (%r15,%rbx)
incq %rbx
jmp 0x1100a
cmpb $0x6e, -0x29(%rbp)
je 0x10fa1
movq %r13, %rdi
leaq 0x12bed(%rip), %rsi     # 0x23c23
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x98(%rbp), %rsi
callq 0x3060
movq -0x98(%rbp), %r15
movq -0x90(%rbp), %r12
xorl %ebx, %ebx
cmpq %rbx, %r12
je 0x1107a
movsbl (%r15,%rbx), %edi
callq 0x33a0
movb %al, (%r15,%rbx)
incq %rbx
jmp 0x11062
leaq -0x98(%rbp), %rdi
leaq 0x12bb5(%rip), %rsi     # 0x23c3d
callq 0xb86b
leaq -0x5a8(%rbp), %r12
testb %al, %al
je 0x110de
leaq -0x98(%rbp), %rdi
leaq 0x12b99(%rip), %rsi     # 0x23c3f
callq 0xb86b
testb %al, %al
je 0x110de
movb $0x6e, -0x29(%rbp)
movq %r13, %rdi
leaq 0x12b84(%rip), %rsi     # 0x23c41
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0x1102c
jmp 0x110ee
movq -0x98(%rbp), %rax
movb (%rax), %al
movb %al, -0x2c(%rbp)
movb $0x73, -0x29(%rbp)
movq %r13, %rdi
leaq 0x12b6b(%rip), %rsi     # 0x23c63
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x228(%rbp), %rsi
callq 0x3060
leaq -0x548(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x3290
leaq -0x548(%rbp), %rbx
movq %rbx, %rdi
leaq -0x29(%rbp), %rsi
callq 0x22273
movl %eax, %r15d
movq %rbx, %rdi
callq 0x3100
testb %r15b, %r15b
jne 0x11169
movq %r13, %rdi
leaq 0x12b2c(%rip), %rsi     # 0x23c80
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
leaq -0x228(%rbp), %rdi
xorl %esi, %esi
callq 0x11e17
movsd %xmm0, -0x78(%rbp)
cmpb $0x6e, -0x29(%rbp)
je 0x110ee
movq %r13, %rdi
leaq 0x12f91(%rip), %rsi     # 0x24121
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x208(%rbp), %rsi
callq 0x3060
leaq -0x528(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x3290
leaq -0x528(%rbp), %rbx
movq %rbx, %rdi
leaq -0x29(%rbp), %rsi
callq 0x22273
movl %eax, %r15d
movq %rbx, %rdi
callq 0x3100
testb %r15b, %r15b
jne 0x11201
movq %r13, %rdi
leaq 0x12a94(%rip), %rsi     # 0x23c80
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
leaq -0x208(%rbp), %rdi
xorl %esi, %esi
callq 0x11e17
movsd %xmm0, -0x70(%rbp)
cmpb $0x6e, -0x29(%rbp)
je 0x11186
movq %r13, %rdi
leaq 0x12f14(%rip), %rsi     # 0x2413c
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x3060
leaq -0x508(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x3290
leaq -0x508(%rbp), %rbx
movq %rbx, %rdi
leaq -0x29(%rbp), %rsi
callq 0x22273
movl %eax, %r15d
movq %rbx, %rdi
callq 0x3100
testb %r15b, %r15b
jne 0x11299
movq %r13, %rdi
leaq 0x129fc(%rip), %rsi     # 0x23c80
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
leaq -0x1e8(%rbp), %rdi
xorl %esi, %esi
callq 0x11e17
movsd %xmm0, -0x68(%rbp)
cmpb $0x6e, -0x29(%rbp)
je 0x1121e
movq %r13, %rdi
leaq 0x12ab1(%rip), %rsi     # 0x23d71
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x188(%rbp), %rsi
callq 0x3060
leaq -0x188(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x2238b
testb %al, %al
jne 0x1130f
movq %r13, %rdi
leaq 0x12c88(%rip), %rsi     # 0x23f82
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0x112b6
cmpb $0x6e, -0x2b(%rbp)
movsbl -0x2c(%rbp), %eax
movl %eax, -0x34(%rbp)
je 0x11600
movq %r13, %rdi
leaq 0x12b23(%rip), %rsi     # 0x23e53
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0xd8(%rbp), %rsi
callq 0x3060
leaq -0xd8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x22480
testb %al, %al
jne 0x1137f
movq %r13, %rdi
leaq 0x12a75(%rip), %rsi     # 0x23ddf
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0x11326
movq %r13, %rdi
leaq 0x12a75(%rip), %rsi     # 0x23e04
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0xf8(%rbp), %rsi
callq 0x3060
leaq -0xf8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x2238b
testb %al, %al
jne 0x113de
movq %r13, %rdi
leaq 0x129c8(%rip), %rsi     # 0x23d91
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0x11385
movl -0x30(%rbp), %ebx
leaq -0x388(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0x3290
leaq -0x368(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x3290
leaq -0x348(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x3290
leaq -0x328(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x3290
leaq -0x308(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x3290
leaq -0x2e8(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x3290
leaq -0x2c8(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x3290
leaq -0x2a8(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x3290
leaq -0x288(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x3290
leaq -0x4c8(%rbp), %r15
movq %r15, %rdi
leaq -0xf8(%rbp), %rsi
callq 0x3290
subq $0x8, %rsp
movl %ebx, %esi
leaq -0x8a8(%rbp), %rbx
movq %rbx, %rdi
leaq -0x388(%rbp), %rdx
leaq -0x368(%rbp), %rcx
leaq -0x348(%rbp), %r8
movl -0x34(%rbp), %r9d
movsd -0x78(%rbp), %xmm0
movsd -0x70(%rbp), %xmm1
movsd -0x68(%rbp), %xmm2
pushq %r15
leaq -0x288(%rbp), %rax
pushq %rax
leaq -0x2a8(%rbp), %rax
pushq %rax
leaq -0x2c8(%rbp), %rax
pushq %rax
leaq -0x2e8(%rbp), %rax
pushq %rax
leaq -0x308(%rbp), %rax
pushq %rax
leaq -0x328(%rbp), %rax
pushq %rax
callq 0x6918
addq $0x40, %rsp
movl -0x30(%rbp), %eax
movl %eax, -0x730(%rbp)
leaq -0x728(%rbp), %rdi
movq %rbx, %rsi
callq 0x1259a
movq -0x50(%rbp), %rbx
movq %rbx, %rdi
leaq -0x730(%rbp), %rsi
callq 0x137cc
leaq -0x728(%rbp), %rdi
callq 0x6ba6
leaq -0x8a8(%rbp), %rdi
callq 0x6ba6
leaq -0x4c8(%rbp), %rdi
callq 0x3100
leaq -0x288(%rbp), %rdi
callq 0x3100
leaq -0x2a8(%rbp), %rdi
callq 0x3100
leaq -0x2c8(%rbp), %rdi
callq 0x3100
leaq -0x2e8(%rbp), %rdi
callq 0x3100
leaq -0x308(%rbp), %rdi
callq 0x3100
leaq -0x328(%rbp), %rdi
callq 0x3100
leaq -0x348(%rbp), %rdi
callq 0x3100
leaq -0x368(%rbp), %rdi
callq 0x3100
leaq -0x388(%rbp), %rdi
callq 0x3100
movq -0x48(%rbp), %rax
cmpq %rax, 0x28(%rbx)
jne 0x118ef
movq %r13, %rdi
leaq 0x12837(%rip), %rsi     # 0x23e25
callq 0x31f0
movq %rax, %rdi
callq 0x3110
jmp 0x10be8
movq -0x40(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x60(%rbp)
movl %eax, %eax
movq %rax, -0x48(%rbp)
movq %r13, %rdi
leaq 0x127ab(%rip), %rsi     # 0x23dc7
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0xd8(%rbp), %rsi
callq 0x3060
leaq -0xd8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x22480
testb %al, %al
jne 0x1166b
movq %r13, %rdi
leaq 0x12789(%rip), %rsi     # 0x23ddf
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0x11612
movq %r13, %rdi
leaq 0x12789(%rip), %rsi     # 0x23e04
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0xf8(%rbp), %rsi
callq 0x3060
leaq -0xf8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x2238b
testb %al, %al
jne 0x116ca
movq %r13, %rdi
leaq 0x126dc(%rip), %rsi     # 0x23d91
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0x11671
movl -0x30(%rbp), %ebx
leaq -0x4a8(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0x3290
leaq -0x488(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x3290
leaq -0x468(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x3290
leaq -0x448(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x3290
leaq -0x428(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x3290
leaq -0x408(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x3290
leaq -0x3e8(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x3290
leaq -0x3c8(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x3290
leaq -0x3a8(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x3290
movl %ebx, -0x54(%rbp)
leaq -0x4e8(%rbp), %rbx
movq %rbx, %rdi
leaq -0xf8(%rbp), %rsi
callq 0x3290
subq $0x8, %rsp
leaq -0x8a8(%rbp), %r15
movq %r15, %rdi
movl -0x54(%rbp), %esi
leaq -0x4a8(%rbp), %rdx
leaq -0x488(%rbp), %rcx
leaq -0x468(%rbp), %r8
movl -0x34(%rbp), %r9d
movsd -0x78(%rbp), %xmm0
movsd -0x70(%rbp), %xmm1
movsd -0x68(%rbp), %xmm2
pushq %rbx
leaq -0x3a8(%rbp), %rax
pushq %rax
leaq -0x3c8(%rbp), %rax
pushq %rax
leaq -0x3e8(%rbp), %rax
pushq %rax
leaq -0x408(%rbp), %rax
pushq %rax
leaq -0x428(%rbp), %rax
pushq %rax
leaq -0x448(%rbp), %rax
pushq %rax
callq 0x6660
addq $0x40, %rsp
movl -0x30(%rbp), %eax
movl %eax, -0x730(%rbp)
leaq -0x728(%rbp), %rdi
movq %r15, %rsi
callq 0x1255a
movq -0x40(%rbp), %rbx
movq %rbx, %rdi
leaq -0x730(%rbp), %rsi
callq 0x135a6
leaq -0x728(%rbp), %rdi
callq 0x68fe
leaq -0x8a8(%rbp), %rdi
callq 0x68fe
leaq -0x4e8(%rbp), %rdi
callq 0x3100
leaq -0x3a8(%rbp), %rdi
callq 0x3100
leaq -0x3c8(%rbp), %rdi
callq 0x3100
leaq -0x3e8(%rbp), %rdi
callq 0x3100
leaq -0x408(%rbp), %rdi
callq 0x3100
leaq -0x428(%rbp), %rdi
callq 0x3100
leaq -0x448(%rbp), %rdi
callq 0x3100
leaq -0x468(%rbp), %rdi
callq 0x3100
leaq -0x488(%rbp), %rdi
callq 0x3100
leaq -0x4a8(%rbp), %rdi
callq 0x3100
movq -0x48(%rbp), %rax
cmpq %rax, 0x28(%rbx)
jne 0x118ef
movq %r13, %rdi
leaq 0x1254c(%rip), %rsi     # 0x23e25
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movb $0x73, -0x2a(%rbp)
jmp 0x10bb0
movq %r13, %rdi
leaq 0x12575(%rip), %rsi     # 0x23e6e
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
movq %r13, %rdi
leaq 0x12576(%rip), %rsi     # 0x23e8e
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %r14, %rdi
leaq -0x2a(%rbp), %rsi
callq 0x3280
cmpb $0x73, -0x2a(%rbp)
je 0x10bb0
movq -0x40(%rbp), %r12
cmpq $0x0, 0x28(%r12)
movq -0x50(%rbp), %r15
je 0x1199b
leaq 0x12801(%rip), %rsi     # 0x24153
leaq -0xca8(%rbp), %rdi
pushq $0x10
popq %rdx
callq 0x3040
movq 0x18(%r12), %r14
addq $0x8, %r12
leaq -0xca8(%rbp), %rbx
cmpq %r12, %r14
je 0x1198f
leaq 0x28(%r14), %rsi
movq %rbx, %rdi
callq 0xa1fb
movq %r14, %rdi
callq 0x3160
movq %rax, %r14
jmp 0x11971
leaq -0xca8(%rbp), %rdi
callq 0x32a0
cmpq $0x0, 0x28(%r15)
je 0x119f1
leaq 0x127b7(%rip), %rsi     # 0x24160
leaq -0xaa8(%rbp), %rdi
pushq $0x10
popq %rdx
callq 0x3040
movq 0x18(%r15), %r14
addq $0x8, %r15
leaq -0xaa8(%rbp), %rbx
cmpq %r15, %r14
je 0x119e5
leaq 0x28(%r14), %rsi
movq %rbx, %rdi
callq 0xa5df
movq %r14, %rdi
callq 0x3160
movq %rax, %r14
jmp 0x119c7
leaq -0xaa8(%rbp), %rdi
callq 0x32a0
leaq -0xaa8(%rbp), %rdi
callq 0x32e0
leaq -0xca8(%rbp), %rdi
callq 0x32e0
leaq -0x1e8(%rbp), %rdi
callq 0x3100
leaq -0x208(%rbp), %rdi
callq 0x3100
leaq -0x228(%rbp), %rdi
callq 0x3100
leaq -0x98(%rbp), %rdi
callq 0x3100
leaq -0x248(%rbp), %rdi
callq 0x3100
leaq -0xb8(%rbp), %rdi
callq 0x3100
leaq -0xd8(%rbp), %rdi
callq 0x3100
leaq -0x188(%rbp), %rdi
callq 0x3100
leaq -0xf8(%rbp), %rdi
callq 0x3100
leaq -0x118(%rbp), %rdi
callq 0x3100
leaq -0x148(%rbp), %rdi
callq 0x3100
leaq -0x168(%rbp), %rdi
callq 0x3100
leaq -0x1a8(%rbp), %rdi
callq 0x3100
leaq -0x1c8(%rbp), %rdi
callq 0x3100
leaq -0x268(%rbp), %rdi
callq 0x3100
addq $0xc88, %rsp            # imm = 0xC88
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x11d1f
movq %rax, %rbx
jmp 0x11d2e
movq %rax, %rbx
jmp 0x11d3a
jmp 0x11d1f
jmp 0x11d1f
movq %rax, %rbx
jmp 0x11b7c
movq %rax, %rbx
jmp 0x11b70
movq %rax, %rbx
jmp 0x11b64
movq %rax, %rbx
jmp 0x11b58
movq %rax, %rbx
jmp 0x11b4c
movq %rax, %rbx
jmp 0x11b34
movq %rax, %rbx
jmp 0x11b40
movq %rax, %rbx
jmp 0x11b28
movq %rax, %rbx
leaq -0x728(%rbp), %rdi
callq 0x68fe
leaq -0x8a8(%rbp), %rdi
callq 0x68fe
leaq -0x4e8(%rbp), %rdi
callq 0x3100
leaq -0x3a8(%rbp), %rdi
callq 0x3100
leaq -0x3c8(%rbp), %rdi
callq 0x3100
leaq -0x3e8(%rbp), %rdi
callq 0x3100
leaq -0x408(%rbp), %rdi
callq 0x3100
leaq -0x428(%rbp), %rdi
callq 0x3100
leaq -0x448(%rbp), %rdi
callq 0x3100
leaq -0x468(%rbp), %rdi
callq 0x3100
leaq -0x488(%rbp), %rdi
callq 0x3100
leaq -0x4a8(%rbp), %rdi
jmp 0x11cfe
movq %rax, %rbx
jmp 0x11ba0
jmp 0x11d1f
movq %rax, %rbx
jmp 0x11b94
movq %rax, %rbx
jmp 0x11b88
jmp 0x11d1f
jmp 0x11d1f
movq %rax, %rbx
jmp 0x11c85
movq %rax, %rbx
jmp 0x11c6d
movq %rax, %rbx
jmp 0x11c55
movq %rax, %rbx
jmp 0x11c25
movq %rax, %rbx
jmp 0x11c3d
movq %rax, %rbx
leaq -0x728(%rbp), %rdi
callq 0x6ba6
jmp 0x11c19
movq %rax, %rbx
jmp 0x11c61
movq %rax, %rbx
jmp 0x11c79
movq %rax, %rbx
jmp 0x11c91
movq %rax, %rbx
jmp 0x11c49
movq %rax, %rbx
jmp 0x11c31
movq %rax, %rbx
leaq -0x8a8(%rbp), %rdi
callq 0x6ba6
leaq -0x4c8(%rbp), %rdi
callq 0x3100
leaq -0x288(%rbp), %rdi
callq 0x3100
leaq -0x2a8(%rbp), %rdi
callq 0x3100
leaq -0x2c8(%rbp), %rdi
callq 0x3100
leaq -0x2e8(%rbp), %rdi
callq 0x3100
leaq -0x308(%rbp), %rdi
callq 0x3100
leaq -0x328(%rbp), %rdi
callq 0x3100
leaq -0x348(%rbp), %rdi
callq 0x3100
leaq -0x368(%rbp), %rdi
callq 0x3100
leaq -0x388(%rbp), %rdi
jmp 0x11cfe
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
movq %rax, %rbx
leaq -0x730(%rbp), %rdi
callq 0x3170
jmp 0x11d22
movq %rax, %rbx
leaq -0x508(%rbp), %rdi
jmp 0x11cfe
movq %rax, %rbx
leaq -0x528(%rbp), %rdi
jmp 0x11cfe
movq %rax, %rbx
leaq -0x548(%rbp), %rdi
jmp 0x11cfe
movq %rax, %rbx
leaq -0x5a8(%rbp), %rdi
jmp 0x11cfe
jmp 0x11d1f
movq %rax, %rbx
leaq -0x568(%rbp), %rdi
jmp 0x11cfe
movq %rax, %rbx
leaq -0x588(%rbp), %rdi
callq 0x3100
jmp 0x11d22
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
jmp 0x11d1f
movq %rax, %rbx
leaq -0xaa8(%rbp), %rdi
callq 0x32e0
leaq -0xca8(%rbp), %rdi
callq 0x32e0
leaq -0x1e8(%rbp), %rdi
callq 0x3100
leaq -0x208(%rbp), %rdi
callq 0x3100
leaq -0x228(%rbp), %rdi
callq 0x3100
leaq -0x98(%rbp), %rdi
callq 0x3100
leaq -0x248(%rbp), %rdi
callq 0x3100
leaq -0xb8(%rbp), %rdi
callq 0x3100
leaq -0xd8(%rbp), %rdi
callq 0x3100
leaq -0x188(%rbp), %rdi
callq 0x3100
leaq -0xf8(%rbp), %rdi
callq 0x3100
leaq -0x118(%rbp), %rdi
callq 0x3100
leaq -0x148(%rbp), %rdi
callq 0x3100
leaq -0x168(%rbp), %rdi
callq 0x3100
leaq -0x1a8(%rbp), %rdi
callq 0x3100
leaq -0x1c8(%rbp), %rdi
callq 0x3100
leaq -0x268(%rbp), %rdi
callq 0x3100
movq %rbx, %rdi
callq 0x3370