// File: nataly-enne[P]pet-fera/pet_fera_cadastrar.cpp
// Function: cadastrar(std::map<int, TRATADOR, std::less<int>, std::allocator<std::pair<int const, TRATADOR>>>&)
void cadastrar(map <int, TRATADOR>  &tratadores){ 
	int id, idade, nivel_seg;
	unsigned int old_size;
	long int cpf;
	string nome, especialidade, tipo_sang, id_string, idade_string, tipo_sang_string, nivel_seg_string, cpf_string, fator_rh_string;
	char fator_rh, continuar, sucesso;
	bool check;
	old_size = tratadores.size();
	ofstream tratador;
	
	do{
		// Recebe o ID e verifica se é valido.
		do{
			cout << "Digite o id:" << endl;
			cin >> id_string;
			if(!verifica_ID(tratadores, 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');

		// 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;
			}
		}while(sucesso == 'n'); 
		
		// Recebe o CPF e verifica se é valido.
		do{
			cout << "Digite o CPF: " << endl;
			getline(cin, cpf_string);
			if(!verifica_CPF(cpf_string, sucesso)){
				cout << "CPF deve conter apenas numeros" << endl << endl;
			}
			else{
				cpf = stoll(cpf_string); //Transforma a string em long int.
				check = check_CPF(tratadores, cpf); // Checa se o CPF existe.
				if(check){
					cout << "CPF já cadastrado!" << endl;
					sucesso = 'n';
				}
			}
		}while(sucesso == 'n');

		
		// Recebe a idade e verifica se é valida.
		do{
			cout << "Digite a idade: " << endl;
			getline(cin, idade_string);
			if(!verifica_idade(idade_string, sucesso)){
				cout << "Idade deve conter apenas inteiros positivos!" << endl << endl;
			}
			else{
				stringstream ss(idade_string);
				ss >> idade;
			}

		}while(sucesso == 'n');

		// Recebe o tipo sanguineo e verifica se é valido.
		do{
			cout << "Insira o tipo sanguineo: " << endl;
			getline(cin, tipo_sang_string);
			if(!verifica_tipo_sang(tipo_sang_string, sucesso)){
				cout << "ERRO: O tipo sanguineo deve ser: A, B, AB ou O!" << endl << endl;
			}
			else{
				tipo_sang = tipo_sang_string;
			}

		}while(sucesso == 'n');

		// Recebe o fator RH e verifica se é valido.
		do{
			cout << "Insira o fator RH: " << endl;
			getline(cin, fator_rh_string);
			if(!verifica_fator(fator_rh_string, sucesso)){
				cout << "ERRO: O fator RH deve ser: + ou -" << endl << endl;
			}
			else{
				fator_rh = (char)fator_rh_string[0];
			}

		}while(sucesso == 'n');

		// Recebe a especialidade e verifica se é valida.
		do{
			cout << "Digite a especialidade: " << endl;
			getline(cin, especialidade);
			if(!verifica_especialidade(especialidade, sucesso)){
				cout << "ERRO: A especialidade deve conter apenas letras!" << endl << endl;
			}
			else{
				transform(especialidade.begin(), especialidade.end(), especialidade.begin(), ::tolower);
				especialidade = especialidade;
			}

		}while(sucesso == 'n');

		// Recebe o nível de segurança e verifica se é valida.
		do{
			cout << "Digite o nivel de seguranca: 0 ou 1 ou 2"<< endl;
			getline(cin, nivel_seg_string);
			if(!verifica_seguranca(nivel_seg_string, sucesso)){
				cout << "ERRO: O nivel de seguranca só pode ser 0, 1 ou 2!" << endl << endl;
			}
			else{
				stringstream ss(nivel_seg_string);
				ss >> nivel_seg;
			}
		}while(sucesso == 'n');

		
		// Armazenando os valores recebidos pelo usuário no map.
		tratadores.insert(pair <int, TRATADOR> (id, TRATADOR(id, nome, cpf, idade, tipo_sang, fator_rh, especialidade, nivel_seg)));
		
		cout << "Deseja cadastrar um novo funcionário? s/n" << endl;
		cin >> continuar;
	}while(continuar == 's');

	if (tratadores.size() == old_size){ 
		cout << "Falha no cadastro do funcionario!" << endl;
	}
	else{
		if(!tratadores.empty()){
			tratador.open("tratadores.txt");
			for(auto it = tratadores.begin(); it != tratadores.end(); it++){
				tratador << (*it).second;
			}
			tratador.close();
		}
		cout << "Cadastro efetuado com sucesso!!" << endl;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc30, %rsp            # imm = 0xC30
movq %rdi, -0x8(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x3300
leaq -0x60(%rbp), %rdi
callq 0x3300
leaq -0x80(%rbp), %rdi
callq 0x3300
leaq -0xa0(%rbp), %rdi
callq 0x3300
leaq -0xc0(%rbp), %rdi
callq 0x3300
leaq -0xe0(%rbp), %rdi
callq 0x3300
leaq -0x100(%rbp), %rdi
callq 0x3300
leaq -0x120(%rbp), %rdi
callq 0x3300
leaq -0x140(%rbp), %rdi
callq 0x3300
movq -0x8(%rbp), %rdi
callq 0x1f7d0
movl %eax, -0x18(%rbp)
leaq -0x348(%rbp), %rdi
callq 0x33b0
jmp 0x15afc
jmp 0x15afe
jmp 0x15b00
movq 0x3b4b1(%rip), %rdi     # 0x50fb8
leaq 0x2bbf1(%rip), %rsi     # 0x416ff
callq 0x3240
movq %rax, -0xa88(%rbp)
jmp 0x15b1c
movq -0xa88(%rbp), %rdi
movq 0x3b476(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x15b31
movq 0x3b4a0(%rip), %rdi     # 0x50fd8
leaq -0xa0(%rbp), %rsi
callq 0x32c0
jmp 0x15b46
movq -0x8(%rbp), %rax
movq %rax, -0xa90(%rbp)
leaq -0x378(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x3100
jmp 0x15b66
movq -0xa90(%rbp), %rdi
leaq -0x378(%rbp), %rsi
leaq -0x143(%rbp), %rdx
callq 0x3dfa0
movb %al, -0xa91(%rbp)
jmp 0x15b88
movb -0xa91(%rbp), %al
xorb $-0x1, %al
movb %al, -0xa92(%rbp)
leaq -0x378(%rbp), %rdi
callq 0x3180
movb -0xa92(%rbp), %al
testb $0x1, %al
jne 0x15bb1
jmp 0x15c54
movq 0x3b400(%rip), %rdi     # 0x50fb8
leaq 0x2bb4d(%rip), %rsi     # 0x4170c
callq 0x3240
movq %rax, -0xaa0(%rbp)
jmp 0x15bcd
movq -0xaa0(%rbp), %rdi
movq 0x3b3c5(%rip), %rsi     # 0x50fa0
callq 0x3280
movq %rax, -0xaa8(%rbp)
jmp 0x15be9
movq -0xaa8(%rbp), %rdi
movq 0x3b3a9(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x15bfe
jmp 0x15cc9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
jmp 0x16a62
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
jmp 0x16a56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
leaq -0x378(%rbp), %rdi
callq 0x3180
jmp 0x16a56
movl $0x10, %edi
movl $0x8, %esi
callq 0x13c90
movl %eax, -0xaac(%rbp)
jmp 0x15c6b
movl -0xaac(%rbp), %edx
leaq -0x500(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x3370
jmp 0x15c86
leaq -0x500(%rbp), %rdi
leaq -0xc(%rbp), %rsi
callq 0x3170
jmp 0x15c98
leaq -0x500(%rbp), %rdi
callq 0x31b0
jmp 0x15cc9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
leaq -0x500(%rbp), %rdi
callq 0x31b0
jmp 0x16a56
jmp 0x15ccb
movsbl -0x143(%rbp), %eax
cmpl $0x6e, %eax
je 0x15b00
jmp 0x15cdd
movq 0x3b2d4(%rip), %rdi     # 0x50fb8
leaq 0x2ba58(%rip), %rsi     # 0x41743
callq 0x3240
movq %rax, -0xab8(%rbp)
jmp 0x15cf9
movq -0xab8(%rbp), %rdi
movq 0x3b299(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x15d0e
movq 0x3b2c3(%rip), %rdi     # 0x50fd8
callq 0x33f0
jmp 0x15d1c
movq 0x3b2b5(%rip), %rdi     # 0x50fd8
leaq -0x40(%rbp), %rsi
callq 0x3070
jmp 0x15d2e
leaq -0x40(%rbp), %rdi
leaq -0x143(%rbp), %rsi
callq 0x3f480
movb %al, -0xab9(%rbp)
jmp 0x15d46
movb -0xab9(%rbp), %al
testb $0x1, %al
jne 0x15da1
jmp 0x15d52
movq 0x3b25f(%rip), %rdi     # 0x50fb8
leaq 0x2b9f2(%rip), %rsi     # 0x41752
callq 0x3240
movq %rax, -0xac8(%rbp)
jmp 0x15d6e
movq -0xac8(%rbp), %rdi
movq 0x3b224(%rip), %rsi     # 0x50fa0
callq 0x3280
movq %rax, -0xad0(%rbp)
jmp 0x15d8a
movq -0xad0(%rbp), %rdi
movq 0x3b208(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x15d9f
jmp 0x15da1
jmp 0x15da3
movsbl -0x143(%rbp), %eax
cmpl $0x6e, %eax
je 0x15cdd
jmp 0x15db5
movq 0x3b1fc(%rip), %rdi     # 0x50fb8
leaq 0x2b9bd(%rip), %rsi     # 0x41780
callq 0x3240
movq %rax, -0xad8(%rbp)
jmp 0x15dd1
movq -0xad8(%rbp), %rdi
movq 0x3b1c1(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x15de6
movq 0x3b1eb(%rip), %rdi     # 0x50fd8
leaq -0x120(%rbp), %rsi
callq 0x3070
jmp 0x15dfb
leaq -0x520(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x3100
jmp 0x15e10
leaq -0x520(%rbp), %rdi
leaq -0x143(%rbp), %rsi
callq 0x3f760
movb %al, -0xad9(%rbp)
jmp 0x15e2b
movb -0xad9(%rbp), %al
xorb $-0x1, %al
movb %al, -0xada(%rbp)
leaq -0x520(%rbp), %rdi
callq 0x3180
movb -0xada(%rbp), %al
testb $0x1, %al
jne 0x15e51
jmp 0x15ec6
movq 0x3b160(%rip), %rdi     # 0x50fb8
leaq 0x2b930(%rip), %rsi     # 0x4178f
callq 0x3240
movq %rax, -0xae8(%rbp)
jmp 0x15e6d
movq -0xae8(%rbp), %rdi
movq 0x3b125(%rip), %rsi     # 0x50fa0
callq 0x3280
movq %rax, -0xaf0(%rbp)
jmp 0x15e89
movq -0xaf0(%rbp), %rdi
movq 0x3b109(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x15e9e
jmp 0x15f55
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
leaq -0x520(%rbp), %rdi
callq 0x3180
jmp 0x16a56
xorl %eax, %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
movl $0xa, %edx
callq 0x1f560
movq %rax, -0xaf8(%rbp)
jmp 0x15ee4
movq -0xaf8(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x3d710
movb %al, -0xaf9(%rbp)
jmp 0x15f04
movb -0xaf9(%rbp), %al
andb $0x1, %al
movb %al, -0x144(%rbp)
testb $0x1, -0x144(%rbp)
je 0x15f53
movq 0x3b096(%rip), %rdi     # 0x50fb8
leaq 0x2b885(%rip), %rsi     # 0x417ae
callq 0x3240
movq %rax, -0xb08(%rbp)
jmp 0x15f37
movq -0xb08(%rbp), %rdi
movq 0x3b05b(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x15f4c
movb $0x6e, -0x143(%rbp)
jmp 0x15f55
jmp 0x15f57
movsbl -0x143(%rbp), %eax
cmpl $0x6e, %eax
je 0x15db5
jmp 0x15f69
movq 0x3b048(%rip), %rdi     # 0x50fb8
leaq 0x2b84b(%rip), %rsi     # 0x417c2
callq 0x3240
movq %rax, -0xb10(%rbp)
jmp 0x15f85
movq -0xb10(%rbp), %rdi
movq 0x3b00d(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x15f9a
movq 0x3b037(%rip), %rdi     # 0x50fd8
leaq -0xc0(%rbp), %rsi
callq 0x3070
jmp 0x15faf
leaq -0x540(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x3100
jmp 0x15fc4
leaq -0x540(%rbp), %rdi
leaq -0x143(%rbp), %rsi
callq 0x3f860
movb %al, -0xb11(%rbp)
jmp 0x15fdf
movb -0xb11(%rbp), %al
xorb $-0x1, %al
movb %al, -0xb12(%rbp)
leaq -0x540(%rbp), %rdi
callq 0x3180
movb -0xb12(%rbp), %al
testb $0x1, %al
jne 0x16005
jmp 0x1607a
movq 0x3afac(%rip), %rdi     # 0x50fb8
leaq 0x2b7c0(%rip), %rsi     # 0x417d3
callq 0x3240
movq %rax, -0xb20(%rbp)
jmp 0x16021
movq -0xb20(%rbp), %rdi
movq 0x3af71(%rip), %rsi     # 0x50fa0
callq 0x3280
movq %rax, -0xb28(%rbp)
jmp 0x1603d
movq -0xb28(%rbp), %rdi
movq 0x3af55(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x16052
jmp 0x160ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
leaq -0x540(%rbp), %rdi
callq 0x3180
jmp 0x16a56
movl $0x10, %edi
movl $0x8, %esi
callq 0x13c90
movl %eax, -0xb2c(%rbp)
jmp 0x16091
movl -0xb2c(%rbp), %edx
leaq -0x6c8(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x3370
jmp 0x160ac
leaq -0x6c8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x3170
jmp 0x160be
leaq -0x6c8(%rbp), %rdi
callq 0x31b0
jmp 0x160ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
leaq -0x6c8(%rbp), %rdi
callq 0x31b0
jmp 0x16a56
jmp 0x160f1
movsbl -0x143(%rbp), %eax
cmpl $0x6e, %eax
je 0x15f69
jmp 0x16103
movq 0x3aeae(%rip), %rdi     # 0x50fb8
leaq 0x2b6ef(%rip), %rsi     # 0x41800
callq 0x3240
movq %rax, -0xb38(%rbp)
jmp 0x1611f
movq -0xb38(%rbp), %rdi
movq 0x3ae73(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x16134
movq 0x3ae9d(%rip), %rdi     # 0x50fd8
leaq -0xe0(%rbp), %rsi
callq 0x3070
jmp 0x16149
leaq -0xe0(%rbp), %rdi
leaq -0x143(%rbp), %rsi
callq 0x3fa60
movb %al, -0xb39(%rbp)
jmp 0x16164
movb -0xb39(%rbp), %al
testb $0x1, %al
jne 0x161bf
jmp 0x16170
movq 0x3ae41(%rip), %rdi     # 0x50fb8
leaq 0x2b69c(%rip), %rsi     # 0x4181a
callq 0x3240
movq %rax, -0xb48(%rbp)
jmp 0x1618c
movq -0xb48(%rbp), %rdi
movq 0x3ae06(%rip), %rsi     # 0x50fa0
callq 0x3280
movq %rax, -0xb50(%rbp)
jmp 0x161a8
movq -0xb50(%rbp), %rdi
movq 0x3adea(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x161bd
jmp 0x161d3
leaq -0x80(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x3030
jmp 0x161d1
jmp 0x161d3
jmp 0x161d5
movsbl -0x143(%rbp), %eax
cmpl $0x6e, %eax
je 0x16103
jmp 0x161e7
movq 0x3adca(%rip), %rdi     # 0x50fb8
leaq 0x2b655(%rip), %rsi     # 0x4184a
callq 0x3240
movq %rax, -0xb58(%rbp)
jmp 0x16203
movq -0xb58(%rbp), %rdi
movq 0x3ad8f(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x16218
movq 0x3adb9(%rip), %rdi     # 0x50fd8
leaq -0x140(%rbp), %rsi
callq 0x3070
jmp 0x1622d
leaq -0x6e8(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x3100
jmp 0x16242
leaq -0x6e8(%rbp), %rdi
leaq -0x143(%rbp), %rsi
callq 0x3fc10
movb %al, -0xb59(%rbp)
jmp 0x1625d
movb -0xb59(%rbp), %al
xorb $-0x1, %al
movb %al, -0xb5a(%rbp)
leaq -0x6e8(%rbp), %rdi
callq 0x3180
movb -0xb5a(%rbp), %al
testb $0x1, %al
jne 0x16283
jmp 0x162f5
movq 0x3ad2e(%rip), %rdi     # 0x50fb8
leaq 0x2b5cd(%rip), %rsi     # 0x4185e
callq 0x3240
movq %rax, -0xb68(%rbp)
jmp 0x1629f
movq -0xb68(%rbp), %rdi
movq 0x3acf3(%rip), %rsi     # 0x50fa0
callq 0x3280
movq %rax, -0xb70(%rbp)
jmp 0x162bb
movq -0xb70(%rbp), %rdi
movq 0x3acd7(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x162d0
jmp 0x1631d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
leaq -0x6e8(%rbp), %rdi
callq 0x3180
jmp 0x16a56
xorl %eax, %eax
movl %eax, %esi
leaq -0x140(%rbp), %rdi
callq 0x3430
movq %rax, -0xb78(%rbp)
jmp 0x1630e
movq -0xb78(%rbp), %rax
movb (%rax), %al
movb %al, -0x141(%rbp)
jmp 0x1631f
movsbl -0x143(%rbp), %eax
cmpl $0x6e, %eax
je 0x161e7
jmp 0x16331
movq 0x3ac80(%rip), %rdi     # 0x50fb8
leaq 0x2b541(%rip), %rsi     # 0x41880
callq 0x3240
movq %rax, -0xb80(%rbp)
jmp 0x1634d
movq -0xb80(%rbp), %rdi
movq 0x3ac45(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x16362
movq 0x3ac6f(%rip), %rdi     # 0x50fd8
leaq -0x60(%rbp), %rsi
callq 0x3070
jmp 0x16374
leaq -0x708(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x3100
jmp 0x16386
leaq -0x708(%rbp), %rdi
leaq -0x143(%rbp), %rsi
callq 0x3fd30
movb %al, -0xb81(%rbp)
jmp 0x163a1
movb -0xb81(%rbp), %al
xorb $-0x1, %al
movb %al, -0xb82(%rbp)
leaq -0x708(%rbp), %rdi
callq 0x3180
movb -0xb82(%rbp), %al
testb $0x1, %al
jne 0x163c7
jmp 0x1643c
movq 0x3abea(%rip), %rdi     # 0x50fb8
leaq 0x2b4c4(%rip), %rsi     # 0x41899
callq 0x3240
movq %rax, -0xb90(%rbp)
jmp 0x163e3
movq -0xb90(%rbp), %rdi
movq 0x3abaf(%rip), %rsi     # 0x50fa0
callq 0x3280
movq %rax, -0xb98(%rbp)
jmp 0x163ff
movq -0xb98(%rbp), %rdi
movq 0x3ab93(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x16414
jmp 0x164c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
leaq -0x708(%rbp), %rdi
callq 0x3180
jmp 0x16a56
leaq -0x60(%rbp), %rdi
movq %rdi, -0xba8(%rbp)
callq 0x31e0
movq -0xba8(%rbp), %rdi
movq %rax, -0x710(%rbp)
callq 0x3120
movq -0xba8(%rbp), %rdi
movq %rax, -0x718(%rbp)
callq 0x31e0
movq %rax, -0x720(%rbp)
movq -0x710(%rbp), %rdi
movq -0x718(%rbp), %rsi
movq -0x720(%rbp), %rdx
movq 0x3ab33(%rip), %rcx     # 0x50fc8
callq 0x1f5a0
movq %rax, -0xba0(%rbp)
jmp 0x164a3
movq -0xba0(%rbp), %rax
movq %rax, -0x728(%rbp)
leaq -0x60(%rbp), %rsi
movq %rsi, %rdi
callq 0x3030
jmp 0x164bf
jmp 0x164c1
jmp 0x164c3
movsbl -0x143(%rbp), %eax
cmpl $0x6e, %eax
je 0x16331
jmp 0x164d5
movq 0x3aadc(%rip), %rdi     # 0x50fb8
leaq 0x2b49e(%rip), %rsi     # 0x41981
callq 0x3240
movq %rax, -0xbb0(%rbp)
jmp 0x164f1
movq -0xbb0(%rbp), %rdi
movq 0x3aaa1(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x16506
movq 0x3aacb(%rip), %rdi     # 0x50fd8
leaq -0x100(%rbp), %rsi
callq 0x3070
jmp 0x1651b
leaq -0x748(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x3100
jmp 0x16530
leaq -0x748(%rbp), %rdi
leaq -0x143(%rbp), %rsi
callq 0x3f310
movb %al, -0xbb1(%rbp)
jmp 0x1654b
movb -0xbb1(%rbp), %al
xorb $-0x1, %al
movb %al, -0xbb2(%rbp)
leaq -0x748(%rbp), %rdi
callq 0x3180
movb -0xbb2(%rbp), %al
testb $0x1, %al
jne 0x16571
jmp 0x165e6
movq 0x3aa40(%rip), %rdi     # 0x50fb8
leaq 0x2b42b(%rip), %rsi     # 0x419aa
callq 0x3240
movq %rax, -0xbc0(%rbp)
jmp 0x1658d
movq -0xbc0(%rbp), %rdi
movq 0x3aa05(%rip), %rsi     # 0x50fa0
callq 0x3280
movq %rax, -0xbc8(%rbp)
jmp 0x165a9
movq -0xbc8(%rbp), %rdi
movq 0x3a9e9(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x165be
jmp 0x1665b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
leaq -0x748(%rbp), %rdi
callq 0x3180
jmp 0x16a56
movl $0x10, %edi
movl $0x8, %esi
callq 0x13c90
movl %eax, -0xbcc(%rbp)
jmp 0x165fd
movl -0xbcc(%rbp), %edx
leaq -0x8d0(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x3370
jmp 0x16618
leaq -0x8d0(%rbp), %rdi
leaq -0x14(%rbp), %rsi
callq 0x3170
jmp 0x1662a
leaq -0x8d0(%rbp), %rdi
callq 0x31b0
jmp 0x1665b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
leaq -0x8d0(%rbp), %rdi
callq 0x31b0
jmp 0x16a56
jmp 0x1665d
movsbl -0x143(%rbp), %eax
cmpl $0x6e, %eax
je 0x164d5
movq -0x8(%rbp), %rax
movq %rax, -0xbd8(%rbp)
movl -0xc(%rbp), %eax
movl %eax, -0xbd0(%rbp)
leaq -0xa18(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x3100
jmp 0x16693
movq -0x20(%rbp), %rax
movq %rax, -0xbe8(%rbp)
movl -0x10(%rbp), %eax
movl %eax, -0xbdc(%rbp)
leaq -0xa38(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x3100
jmp 0x166b9
movb -0x141(%rbp), %al
movb %al, -0xbe9(%rbp)
leaq -0xa58(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x3100
jmp 0x166d7
movl -0xbdc(%rbp), %r8d
movq -0xbe8(%rbp), %rcx
movl -0xbd0(%rbp), %esi
movb -0xbe9(%rbp), %dl
movl -0x14(%rbp), %edi
movq %rsp, %rax
movl %edi, 0x10(%rax)
leaq -0xa58(%rbp), %rdi
movq %rdi, 0x8(%rax)
movsbl %dl, %edx
movl %edx, (%rax)
leaq -0x9f8(%rbp), %rdi
leaq -0xa18(%rbp), %rdx
leaq -0xa38(%rbp), %r9
callq 0x12d60
jmp 0x16726
leaq -0x968(%rbp), %rdi
leaq -0xc(%rbp), %rsi
leaq -0x9f8(%rbp), %rdx
callq 0x1f830
jmp 0x1673f
movq -0xbd8(%rbp), %rdi
leaq -0x968(%rbp), %rsi
callq 0x1f7f0
movb %dl, -0xbf9(%rbp)
movq %rax, -0xbf8(%rbp)
jmp 0x16761
movb -0xbf9(%rbp), %al
movq -0xbf8(%rbp), %rcx
movq %rcx, -0xa68(%rbp)
movb %al, -0xa60(%rbp)
leaq -0x968(%rbp), %rdi
callq 0x1f870
leaq -0x9f8(%rbp), %rdi
callq 0x6570
leaq -0xa58(%rbp), %rdi
callq 0x3180
leaq -0xa38(%rbp), %rdi
callq 0x3180
leaq -0xa18(%rbp), %rdi
callq 0x3180
movq 0x3a7fa(%rip), %rdi     # 0x50fb8
leaq 0x2b218(%rip), %rsi     # 0x419dd
callq 0x3240
movq %rax, -0xc08(%rbp)
jmp 0x167d3
movq -0xc08(%rbp), %rdi
movq 0x3a7bf(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x167e8
movq 0x3a7e9(%rip), %rdi     # 0x50fd8
leaq -0x142(%rbp), %rsi
callq 0x32e0
jmp 0x167fd
jmp 0x167ff
movsbl -0x142(%rbp), %eax
cmpl $0x73, %eax
je 0x15afe
movq -0x8(%rbp), %rdi
callq 0x1f7d0
movl -0x18(%rbp), %ecx
cmpq %rcx, %rax
jne 0x168fd
movq 0x3a78d(%rip), %rdi     # 0x50fb8
leaq 0x2b0fc(%rip), %rsi     # 0x4192e
callq 0x3240
movq %rax, -0xc10(%rbp)
jmp 0x16840
movq -0xc10(%rbp), %rdi
movq 0x3a752(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x16855
jmp 0x169de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
jmp 0x168ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
jmp 0x168e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
jmp 0x168d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
jmp 0x168c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x350(%rbp)
movl %eax, -0x354(%rbp)
leaq -0x968(%rbp), %rdi
callq 0x1f870
leaq -0x9f8(%rbp), %rdi
callq 0x6570
leaq -0xa58(%rbp), %rdi
callq 0x3180
leaq -0xa38(%rbp), %rdi
callq 0x3180
leaq -0xa18(%rbp), %rdi
callq 0x3180
jmp 0x16a56
movq -0x8(%rbp), %rdi
callq 0x1f890
testb $0x1, %al
jne 0x169ab
leaq 0x2b0f3(%rip), %rsi     # 0x41a08
leaq -0x348(%rbp), %rdi
movl $0x10, %edx
callq 0x3050
jmp 0x16928
movq -0x8(%rbp), %rdi
callq 0x1f8b0
movq %rax, -0xa70(%rbp)
movq -0x8(%rbp), %rdi
callq 0x1f910
movq %rax, -0xa78(%rbp)
leaq -0xa70(%rbp), %rdi
leaq -0xa78(%rbp), %rsi
callq 0x1f8e0
testb $0x1, %al
jne 0x16961
jmp 0x1699b
leaq -0xa70(%rbp), %rdi
callq 0x1f940
movq %rax, %rsi
addq $0x8, %rsi
leaq -0x348(%rbp), %rdi
callq 0x13170
jmp 0x16982
jmp 0x16984
leaq -0xa70(%rbp), %rdi
xorl %esi, %esi
callq 0x1f960
movq %rax, -0xa80(%rbp)
jmp 0x16938
leaq -0x348(%rbp), %rdi
callq 0x3310
jmp 0x169a9
jmp 0x169ab
movq 0x3a606(%rip), %rdi     # 0x50fb8
leaq 0x2afa8(%rip), %rsi     # 0x41961
callq 0x3240
movq %rax, -0xc18(%rbp)
jmp 0x169c7
movq -0xc18(%rbp), %rdi
movq 0x3a5cb(%rip), %rsi     # 0x50fa0
callq 0x3280
jmp 0x169dc
jmp 0x169de
leaq -0x348(%rbp), %rdi
callq 0x3340
leaq -0x140(%rbp), %rdi
callq 0x3180
leaq -0x120(%rbp), %rdi
callq 0x3180
leaq -0x100(%rbp), %rdi
callq 0x3180
leaq -0xe0(%rbp), %rdi
callq 0x3180
leaq -0xc0(%rbp), %rdi
callq 0x3180
leaq -0xa0(%rbp), %rdi
callq 0x3180
leaq -0x80(%rbp), %rdi
callq 0x3180
leaq -0x60(%rbp), %rdi
callq 0x3180
leaq -0x40(%rbp), %rdi
callq 0x3180
addq $0xc30, %rsp            # imm = 0xC30
popq %rbp
retq
leaq -0x348(%rbp), %rdi
callq 0x3340
leaq -0x140(%rbp), %rdi
callq 0x3180
leaq -0x120(%rbp), %rdi
callq 0x3180
leaq -0x100(%rbp), %rdi
callq 0x3180
leaq -0xe0(%rbp), %rdi
callq 0x3180
leaq -0xc0(%rbp), %rdi
callq 0x3180
leaq -0xa0(%rbp), %rdi
callq 0x3180
leaq -0x80(%rbp), %rdi
callq 0x3180
leaq -0x60(%rbp), %rdi
callq 0x3180
leaq -0x40(%rbp), %rdi
callq 0x3180
movq -0x350(%rbp), %rdi
callq 0x33d0
nopw %cs:(%rax,%rax)