// File: brashi[P]PetFera/src/./petshop.cpp
// Function: Petshop::listarAnimais(bool)
void Petshop::listarAnimais(bool autoList) {
    shared_ptr<Veterinario> vet;
    shared_ptr<Tratador> trt;
    string filtro = {}, idPessoa = {}, animalID = {};

    if(autoList)
        goto listBypass;

    if(this->animais.size() == 0)
        throw "Não há animais para visualizar no sistema!";

    cout << "Escolha seu filtro: " << endl << endl;
    cout << "Enter - Todos (sem filtro)" << endl;
    cout << "A - Apenas aves" << endl;
    cout << "F - Apenas anfíbios" << endl;
    cout << "R - Apenas répteis" << endl;
    cout << "M - Apenas mamíferos" << endl;
    cout << "D - Apenas animais domésticos" << endl;
    cout << "E - Apenas silvestres exóticos" << endl;
    cout << "N - Apenas silvestres nativos" << endl;
    cout << "T - Filtrar por tratador" << endl;
    cout << "V - Filtrar por veterinário" << endl;

    getline(cin, filtro);
    long unsigned int num;

listBypass:
    if(filtro.empty())
        filtro = "X";

    if(filtro == "T" || filtro == "t") {
        if(this->tratadores.size() == 0)
            throw "Não há tratadores no sistema!";

        cout << "Digite o ID do tratador responsável: " << endl;
        this->listarTratadores();
        getline(cin, idPessoa);
        num = stoi(idPessoa);
        if(num >= 0 && num < this->tratadores.size())
            trt = this->tratadores[num];
        else
            throw "Tratador não existe!";
    } else if(filtro == "V" || filtro == "v") {
        if(this->veterinarios.size() == 0)
            throw "Não há veterinários no sistema!";

        cout << "Digite o ID do veterinário responsável: " << endl;
        this->listarVeterinarios();
        getline(cin, idPessoa);
        num = stoi(idPessoa);
        if(num >= 0 && num < this->veterinarios.size())
            vet = this->veterinarios[num];
        else
            throw "Veterinário não existe!";
    }

    // Imprime cabeçalho:
    cout << endl << "=-=-=-=-=- Lista de animais -=-=-=-=-=-" << endl;
    cout << right << setfill(' ') << setw(6) << "ID"
         << setfill(' ') << setw(23) << "Nome"
         << setfill(' ') << setw(23) << "Espécie"
         << setfill(' ') << setw(23) << "Ameaçado por"
         << setfill(' ') << setw(23) << "Perigoso" << endl;

    int index = 0;
    char selecao = toupper(filtro[0]);
    for(auto& animal : this->animais) {
        if(selecao == 'V') {
            if(animal->getVeterinario() == vet)
                cout << setfill(' ') << setw(6) << index << animal;
        } else if(selecao == 'T') {
            if(animal->getTratador() == trt)
                cout << setfill(' ') << setw(6) << index << animal;
        } else {
            if(casts.filtro[selecao](animal))
                cout << setfill(' ') << setw(6) << index << animal;
        }
        index++;
    }
    cout << endl << "-=-=-=-=-=-=-=-=- Fim -=-=-=-=-=-=-=-=-" << endl << endl;

    if(!autoList) {
        cout << endl << "Digite o ID de um animal a ser visualizado: " << endl;
        cout << "(Mantenha em branco para cancelar a operação)" << endl;
        getline(cin, animalID);
        if(animalID.size() != 0) {
            num = stoi(animalID);
            if(num >= 0 && num < this->animais.size())
                Animal::printOutDetails(this->animais[num]);
            else
                throw "Animal não existe!";
        } else
            cout << "Operação cancelada..." << endl;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x410, %rsp            # imm = 0x410
movb %sil, %al
movq %rdi, -0x8(%rbp)
andb $0x1, %al
movb %al, -0x9(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x198(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x21bf0
leaq -0x30(%rbp), %rdi
callq 0x21c40
leaq -0x50(%rbp), %rdi
callq 0x6480
leaq -0x70(%rbp), %rdi
callq 0x6480
leaq -0x90(%rbp), %rdi
callq 0x6480
testb $0x1, -0x9(%rbp)
je 0x1f35d
jmp 0x1f601
movq -0x198(%rbp), %rdi
addq $0x30, %rdi
callq 0x21d80
cmpq $0x0, %rax
jne 0x1f3b6
movl $0x8, %edi
callq 0x61e0
movq %rax, %rdi
leaq 0x22939(%rip), %rax     # 0x41cc0
movq %rax, (%rdi)
movq 0x43c17(%rip), %rsi     # 0x62fa8
xorl %eax, %eax
movl %eax, %edx
callq 0x6570
jmp 0x20453
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x20417
movq 0x43c0b(%rip), %rdi     # 0x62fc8
leaq 0x22929(%rip), %rsi     # 0x41ced
callq 0x6310
movq %rax, -0x1a0(%rbp)
jmp 0x1f3d2
movq -0x1a0(%rbp), %rdi
movq 0x43bc0(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x1a8(%rbp)
jmp 0x1f3ee
movq -0x1a8(%rbp), %rdi
movq 0x43ba4(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f403
movq 0x43bbe(%rip), %rdi     # 0x62fc8
leaq 0x228f1(%rip), %rsi     # 0x41d02
callq 0x6310
movq %rax, -0x1b0(%rbp)
jmp 0x1f41f
movq -0x1b0(%rbp), %rdi
movq 0x43b73(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f434
movq 0x43b8d(%rip), %rdi     # 0x62fc8
leaq 0x228db(%rip), %rsi     # 0x41d1d
callq 0x6310
movq %rax, -0x1b8(%rbp)
jmp 0x1f450
movq -0x1b8(%rbp), %rdi
movq 0x43b42(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f465
movq 0x43b5c(%rip), %rdi     # 0x62fc8
leaq 0x228ba(%rip), %rsi     # 0x41d2d
callq 0x6310
movq %rax, -0x1c0(%rbp)
jmp 0x1f481
movq -0x1c0(%rbp), %rdi
movq 0x43b11(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f496
movq 0x43b2b(%rip), %rdi     # 0x62fc8
leaq 0x2289e(%rip), %rsi     # 0x41d42
callq 0x6310
movq %rax, -0x1c8(%rbp)
jmp 0x1f4b2
movq -0x1c8(%rbp), %rdi
movq 0x43ae0(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f4c7
movq 0x43afa(%rip), %rdi     # 0x62fc8
leaq 0x22881(%rip), %rsi     # 0x41d56
callq 0x6310
movq %rax, -0x1d0(%rbp)
jmp 0x1f4e3
movq -0x1d0(%rbp), %rdi
movq 0x43aaf(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f4f8
movq 0x43ac9(%rip), %rdi     # 0x62fc8
leaq 0x22866(%rip), %rsi     # 0x41d6c
callq 0x6310
movq %rax, -0x1d8(%rbp)
jmp 0x1f514
movq -0x1d8(%rbp), %rdi
movq 0x43a7e(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f529
movq 0x43a98(%rip), %rdi     # 0x62fc8
leaq 0x22854(%rip), %rsi     # 0x41d8b
callq 0x6310
movq %rax, -0x1e0(%rbp)
jmp 0x1f545
movq -0x1e0(%rbp), %rdi
movq 0x43a4d(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f55a
movq 0x43a67(%rip), %rdi     # 0x62fc8
leaq 0x22843(%rip), %rsi     # 0x41dab
callq 0x6310
movq %rax, -0x1e8(%rbp)
jmp 0x1f576
movq -0x1e8(%rbp), %rdi
movq 0x43a1c(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f58b
movq 0x43a36(%rip), %rdi     # 0x62fc8
leaq 0x22830(%rip), %rsi     # 0x41dc9
callq 0x6310
movq %rax, -0x1f0(%rbp)
jmp 0x1f5a7
movq -0x1f0(%rbp), %rdi
movq 0x439eb(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f5bc
movq 0x43a05(%rip), %rdi     # 0x62fc8
leaq 0x22818(%rip), %rsi     # 0x41de2
callq 0x6310
movq %rax, -0x1f8(%rbp)
jmp 0x1f5d8
movq -0x1f8(%rbp), %rdi
movq 0x439ba(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f5ed
movq 0x439ec(%rip), %rdi     # 0x62fe0
leaq -0x50(%rbp), %rsi
callq 0x6090
jmp 0x1f5ff
jmp 0x1f601
leaq -0x50(%rbp), %rdi
callq 0x6560
testb $0x1, %al
jne 0x1f610
jmp 0x1f624
leaq 0x227e8(%rip), %rsi     # 0x41dff
leaq -0x50(%rbp), %rdi
callq 0x6470
jmp 0x1f622
jmp 0x1f624
leaq 0x227d6(%rip), %rsi     # 0x41e01
leaq -0x50(%rbp), %rdi
callq 0xbc30
movb %al, -0x1f9(%rbp)
jmp 0x1f63c
movb -0x1f9(%rbp), %al
testb $0x1, %al
jne 0x1f66f
jmp 0x1f648
leaq 0x20c47(%rip), %rsi     # 0x40296
leaq -0x50(%rbp), %rdi
callq 0xbc30
movb %al, -0x1fa(%rbp)
jmp 0x1f660
movb -0x1fa(%rbp), %al
testb $0x1, %al
jne 0x1f66f
jmp 0x1f7b8
movq -0x198(%rbp), %rdi
addq $0x18, %rdi
callq 0x21b60
cmpq $0x0, %rax
jne 0x1f6b1
movl $0x8, %edi
callq 0x61e0
movq %rax, %rdi
leaq 0x21b6f(%rip), %rax     # 0x41208
movq %rax, (%rdi)
movq 0x43905(%rip), %rsi     # 0x62fa8
xorl %eax, %eax
movl %eax, %edx
callq 0x6570
jmp 0x20453
movq 0x43910(%rip), %rdi     # 0x62fc8
leaq 0x21de4(%rip), %rsi     # 0x414a3
callq 0x6310
movq %rax, -0x208(%rbp)
jmp 0x1f6cd
movq -0x208(%rbp), %rdi
movq 0x438c5(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f6e2
movq -0x198(%rbp), %rdi
callq 0x1cb60
jmp 0x1f6f0
movq 0x438e9(%rip), %rdi     # 0x62fe0
leaq -0x70(%rbp), %rsi
callq 0x6090
jmp 0x1f702
xorl %eax, %eax
movl %eax, %esi
leaq -0x70(%rbp), %rdi
movl $0xa, %edx
callq 0xbdc0
movl %eax, -0x20c(%rbp)
jmp 0x1f71c
movl -0x20c(%rbp), %eax
cltq
movq %rax, -0xa8(%rbp)
cmpq $0x0, -0xa8(%rbp)
jb 0x1f787
movq -0x198(%rbp), %rdi
movq -0xa8(%rbp), %rax
movq %rax, -0x218(%rbp)
addq $0x18, %rdi
callq 0x21b60
movq %rax, %rcx
movq -0x218(%rbp), %rax
cmpq %rcx, %rax
jae 0x1f787
movq -0x198(%rbp), %rdi
addq $0x18, %rdi
movq -0xa8(%rbp), %rsi
callq 0x21bd0
movq %rax, %rsi
leaq -0x30(%rbp), %rdi
callq 0x21ca0
jmp 0x1f7b3
movl $0x8, %edi
callq 0x61e0
movq %rax, %rdi
leaq 0x21d2f(%rip), %rax     # 0x414ca
movq %rax, (%rdi)
movq 0x43803(%rip), %rsi     # 0x62fa8
xorl %eax, %eax
movl %eax, %edx
callq 0x6570
jmp 0x20453
jmp 0x1f93f
leaq 0x21915(%rip), %rsi     # 0x410d4
leaq -0x50(%rbp), %rdi
callq 0xbc30
movb %al, -0x219(%rbp)
jmp 0x1f7d0
movb -0x219(%rbp), %al
testb $0x1, %al
jne 0x1f803
jmp 0x1f7dc
leaq 0x208f6(%rip), %rsi     # 0x400d9
leaq -0x50(%rbp), %rdi
callq 0xbc30
movb %al, -0x21a(%rbp)
jmp 0x1f7f4
movb -0x21a(%rbp), %al
testb $0x1, %al
jne 0x1f803
jmp 0x1f93d
movq -0x198(%rbp), %rdi
callq 0x21b40
cmpq $0x0, %rax
jne 0x1f841
movl $0x8, %edi
callq 0x61e0
movq %rax, %rdi
leaq 0x219bc(%rip), %rax     # 0x411e5
movq %rax, (%rdi)
movq 0x43775(%rip), %rsi     # 0x62fa8
xorl %eax, %eax
movl %eax, %edx
callq 0x6570
jmp 0x20453
movq 0x43780(%rip), %rdi     # 0x62fc8
leaq 0x21aae(%rip), %rsi     # 0x412fd
callq 0x6310
movq %rax, -0x228(%rbp)
jmp 0x1f85d
movq -0x228(%rbp), %rdi
movq 0x43735(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f872
movq -0x198(%rbp), %rdi
callq 0x1c820
jmp 0x1f880
movq 0x43759(%rip), %rdi     # 0x62fe0
leaq -0x70(%rbp), %rsi
callq 0x6090
jmp 0x1f892
xorl %eax, %eax
movl %eax, %esi
leaq -0x70(%rbp), %rdi
movl $0xa, %edx
callq 0xbdc0
movl %eax, -0x22c(%rbp)
jmp 0x1f8ac
movl -0x22c(%rbp), %eax
cltq
movq %rax, -0xa8(%rbp)
cmpq $0x0, -0xa8(%rbp)
jb 0x1f90f
movq -0x198(%rbp), %rdi
movq -0xa8(%rbp), %rax
movq %rax, -0x238(%rbp)
callq 0x21b40
movq %rax, %rcx
movq -0x238(%rbp), %rax
cmpq %rcx, %rax
jae 0x1f90f
movq -0x198(%rbp), %rdi
movq -0xa8(%rbp), %rsi
callq 0x21bb0
movq %rax, %rsi
leaq -0x20(%rbp), %rdi
callq 0x21c10
jmp 0x1f93b
movl $0x8, %edi
callq 0x61e0
movq %rax, %rdi
leaq 0x21a05(%rip), %rax     # 0x41328
movq %rax, (%rdi)
movq 0x4367b(%rip), %rsi     # 0x62fa8
xorl %eax, %eax
movl %eax, %edx
callq 0x6570
jmp 0x20453
jmp 0x1f93d
jmp 0x1f93f
movq 0x43682(%rip), %rdi     # 0x62fc8
movq 0x43653(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x240(%rbp)
jmp 0x1f95b
movq -0x240(%rbp), %rdi
leaq 0x2249a(%rip), %rsi     # 0x41e03
callq 0x6310
movq %rax, -0x248(%rbp)
jmp 0x1f977
movq -0x248(%rbp), %rdi
movq 0x4361b(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1f98c
movq 0x43635(%rip), %rdi     # 0x62fc8
leaq 0x2a56(%rip), %rsi      # 0x223f0
callq 0x6120
movq %rax, -0x250(%rbp)
jmp 0x1f9a8
movl $0x20, %edi
callq 0x22420
movb %al, -0x251(%rbp)
jmp 0x1f9ba
movq -0x250(%rbp), %rdi
movb -0x251(%rbp), %al
movb %al, -0xa9(%rbp)
movzbl -0xa9(%rbp), %esi
callq 0x6520
movq %rax, -0x260(%rbp)
jmp 0x1f9e2
movl $0x6, %edi
callq 0x22440
movl %eax, -0x264(%rbp)
jmp 0x1f9f4
movq -0x260(%rbp), %rdi
movl -0x264(%rbp), %eax
movl %eax, -0xb0(%rbp)
movl -0xb0(%rbp), %esi
callq 0x63d0
movq %rax, -0x270(%rbp)
jmp 0x1fa1b
movq -0x270(%rbp), %rdi
leaq 0x221fd(%rip), %rsi     # 0x41c26
callq 0x6310
movq %rax, -0x278(%rbp)
jmp 0x1fa37
movl $0x20, %edi
callq 0x22420
movb %al, -0x279(%rbp)
jmp 0x1fa49
movq -0x278(%rbp), %rdi
movb -0x279(%rbp), %al
movb %al, -0xb1(%rbp)
movzbl -0xb1(%rbp), %esi
callq 0x6520
movq %rax, -0x288(%rbp)
jmp 0x1fa71
movl $0x17, %edi
callq 0x22440
movl %eax, -0x28c(%rbp)
jmp 0x1fa83
movq -0x288(%rbp), %rdi
movl -0x28c(%rbp), %eax
movl %eax, -0xb8(%rbp)
movl -0xb8(%rbp), %esi
callq 0x63d0
movq %rax, -0x298(%rbp)
jmp 0x1faaa
movq -0x298(%rbp), %rdi
leaq 0x22171(%rip), %rsi     # 0x41c29
callq 0x6310
movq %rax, -0x2a0(%rbp)
jmp 0x1fac6
movl $0x20, %edi
callq 0x22420
movb %al, -0x2a1(%rbp)
jmp 0x1fad8
movq -0x2a0(%rbp), %rdi
movb -0x2a1(%rbp), %al
movb %al, -0xb9(%rbp)
movzbl -0xb9(%rbp), %esi
callq 0x6520
movq %rax, -0x2b0(%rbp)
jmp 0x1fb00
movl $0x17, %edi
callq 0x22440
movl %eax, -0x2b4(%rbp)
jmp 0x1fb12
movq -0x2b0(%rbp), %rdi
movl -0x2b4(%rbp), %eax
movl %eax, -0xc0(%rbp)
movl -0xc0(%rbp), %esi
callq 0x63d0
movq %rax, -0x2c0(%rbp)
jmp 0x1fb39
movq -0x2c0(%rbp), %rdi
leaq 0x222e4(%rip), %rsi     # 0x41e2b
callq 0x6310
movq %rax, -0x2c8(%rbp)
jmp 0x1fb55
movl $0x20, %edi
callq 0x22420
movb %al, -0x2c9(%rbp)
jmp 0x1fb67
movq -0x2c8(%rbp), %rdi
movb -0x2c9(%rbp), %al
movb %al, -0xc1(%rbp)
movzbl -0xc1(%rbp), %esi
callq 0x6520
movq %rax, -0x2d8(%rbp)
jmp 0x1fb8f
movl $0x17, %edi
callq 0x22440
movl %eax, -0x2dc(%rbp)
jmp 0x1fba1
movq -0x2d8(%rbp), %rdi
movl -0x2dc(%rbp), %eax
movl %eax, -0xc8(%rbp)
movl -0xc8(%rbp), %esi
callq 0x63d0
movq %rax, -0x2e8(%rbp)
jmp 0x1fbc8
movq -0x2e8(%rbp), %rdi
leaq 0x2225e(%rip), %rsi     # 0x41e34
callq 0x6310
movq %rax, -0x2f0(%rbp)
jmp 0x1fbe4
movl $0x20, %edi
callq 0x22420
movb %al, -0x2f1(%rbp)
jmp 0x1fbf6
movq -0x2f0(%rbp), %rdi
movb -0x2f1(%rbp), %al
movb %al, -0xc9(%rbp)
movzbl -0xc9(%rbp), %esi
callq 0x6520
movq %rax, -0x300(%rbp)
jmp 0x1fc1e
movl $0x17, %edi
callq 0x22440
movl %eax, -0x304(%rbp)
jmp 0x1fc30
movq -0x300(%rbp), %rdi
movl -0x304(%rbp), %eax
movl %eax, -0xd0(%rbp)
movl -0xd0(%rbp), %esi
callq 0x63d0
movq %rax, -0x310(%rbp)
jmp 0x1fc57
movq -0x310(%rbp), %rdi
leaq 0x221dd(%rip), %rsi     # 0x41e42
callq 0x6310
movq %rax, -0x318(%rbp)
jmp 0x1fc73
movq -0x318(%rbp), %rdi
movq 0x4331f(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x1fc88
movl $0x0, -0xd4(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x50(%rbp), %rdi
callq 0x6660
movq %rax, -0x320(%rbp)
jmp 0x1fca8
movq -0x320(%rbp), %rax
movsbl (%rax), %edi
callq 0x6600
movl %eax, %ecx
movq -0x198(%rbp), %rax
movb %cl, -0xd5(%rbp)
addq $0x30, %rax
movq %rax, -0xe0(%rbp)
movq -0xe0(%rbp), %rdi
callq 0xb370
movq %rax, -0xe8(%rbp)
movq -0xe0(%rbp), %rdi
callq 0xb3a0
movq %rax, -0xf0(%rbp)
leaq -0xe8(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0xb3d0
testb $0x1, %al
jne 0x1fd13
jmp 0x2018c
leaq -0xe8(%rbp), %rdi
callq 0xb410
movq %rax, -0xf8(%rbp)
movsbl -0xd5(%rbp), %eax
cmpl $0x56, %eax
jne 0x1fe77
movq -0xf8(%rbp), %rdi
callq 0xb480
movq %rax, %rsi
leaq -0x108(%rbp), %rdi
callq 0x29c70
jmp 0x1fd53
leaq -0x108(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0x21e20
movb %al, -0x321(%rbp)
leaq -0x108(%rbp), %rdi
callq 0xb4c0
movb -0x321(%rbp), %al
testb $0x1, %al
jne 0x1fd84
jmp 0x1fe72
movl $0x20, %edi
callq 0x22420
movb %al, -0x322(%rbp)
jmp 0x1fd96
movb -0x322(%rbp), %al
movb %al, -0x109(%rbp)
movzbl -0x109(%rbp), %esi
movq 0x43218(%rip), %rdi     # 0x62fc8
callq 0x6520
movq %rax, -0x330(%rbp)
jmp 0x1fdbe
movl $0x6, %edi
callq 0x22440
movl %eax, -0x334(%rbp)
jmp 0x1fdd0
movq -0x330(%rbp), %rdi
movl -0x334(%rbp), %eax
movl %eax, -0x110(%rbp)
movl -0x110(%rbp), %esi
callq 0x63d0
movq %rax, -0x340(%rbp)
jmp 0x1fdf7
movq -0x340(%rbp), %rdi
movl -0xd4(%rbp), %esi
callq 0x6580
movq %rax, -0x348(%rbp)
jmp 0x1fe12
movq -0xf8(%rbp), %rsi
leaq -0x120(%rbp), %rdi
movq %rdi, -0x350(%rbp)
callq 0xb430
movq -0x348(%rbp), %rdi
movq -0x350(%rbp), %rsi
callq 0x2bff0
jmp 0x1fe41
leaq -0x120(%rbp), %rdi
callq 0xb460
jmp 0x1fe72
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x120(%rbp), %rdi
callq 0xb460
jmp 0x20417
jmp 0x2016c
movsbl -0xd5(%rbp), %eax
cmpl $0x54, %eax
jne 0x1ffc8
movq -0xf8(%rbp), %rdi
callq 0xb480
movq %rax, %rsi
leaq -0x130(%rbp), %rdi
callq 0x29cd0
jmp 0x1fea4
leaq -0x130(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x21d40
movb %al, -0x351(%rbp)
leaq -0x130(%rbp), %rdi
callq 0xb4a0
movb -0x351(%rbp), %al
testb $0x1, %al
jne 0x1fed5
jmp 0x1ffc3
movl $0x20, %edi
callq 0x22420
movb %al, -0x352(%rbp)
jmp 0x1fee7
movb -0x352(%rbp), %al
movb %al, -0x131(%rbp)
movzbl -0x131(%rbp), %esi
movq 0x430c7(%rip), %rdi     # 0x62fc8
callq 0x6520
movq %rax, -0x360(%rbp)
jmp 0x1ff0f
movl $0x6, %edi
callq 0x22440
movl %eax, -0x364(%rbp)
jmp 0x1ff21
movq -0x360(%rbp), %rdi
movl -0x364(%rbp), %eax
movl %eax, -0x138(%rbp)
movl -0x138(%rbp), %esi
callq 0x63d0
movq %rax, -0x370(%rbp)
jmp 0x1ff48
movq -0x370(%rbp), %rdi
movl -0xd4(%rbp), %esi
callq 0x6580
movq %rax, -0x378(%rbp)
jmp 0x1ff63
movq -0xf8(%rbp), %rsi
leaq -0x148(%rbp), %rdi
movq %rdi, -0x380(%rbp)
callq 0xb430
movq -0x378(%rbp), %rdi
movq -0x380(%rbp), %rsi
callq 0x2bff0
jmp 0x1ff92
leaq -0x148(%rbp), %rdi
callq 0xb460
jmp 0x1ffc3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x148(%rbp), %rdi
callq 0xb460
jmp 0x20417
jmp 0x2016a
movq -0x198(%rbp), %rdi
addq $0x78, %rdi
leaq -0xd5(%rbp), %rsi
callq 0x22490
movq %rax, -0x388(%rbp)
jmp 0x1ffe8
movq -0xf8(%rbp), %rsi
leaq -0x168(%rbp), %rdi
movq %rdi, -0x390(%rbp)
callq 0xb430
movq -0x388(%rbp), %rsi
movq -0x390(%rbp), %rdx
leaq -0x158(%rbp), %rdi
callq 0x22570
jmp 0x2001e
leaq -0x158(%rbp), %rdi
callq 0x22060
movb %al, -0x391(%rbp)
leaq -0x158(%rbp), %rdi
callq 0xb460
leaq -0x168(%rbp), %rdi
callq 0xb460
movb -0x391(%rbp), %al
testb $0x1, %al
jne 0x20057
jmp 0x20168
movl $0x20, %edi
callq 0x22420
movb %al, -0x392(%rbp)
jmp 0x20069
movb -0x392(%rbp), %al
movb %al, -0x169(%rbp)
movzbl -0x169(%rbp), %esi
movq 0x42f45(%rip), %rdi     # 0x62fc8
callq 0x6520
movq %rax, -0x3a0(%rbp)
jmp 0x20091
movl $0x6, %edi
callq 0x22440
movl %eax, -0x3a4(%rbp)
jmp 0x200a3
movq -0x3a0(%rbp), %rdi
movl -0x3a4(%rbp), %eax
movl %eax, -0x170(%rbp)
movl -0x170(%rbp), %esi
callq 0x63d0
movq %rax, -0x3b0(%rbp)
jmp 0x200ca
movq -0x3b0(%rbp), %rdi
movl -0xd4(%rbp), %esi
callq 0x6580
movq %rax, -0x3b8(%rbp)
jmp 0x200e5
movq -0xf8(%rbp), %rsi
leaq -0x180(%rbp), %rdi
movq %rdi, -0x3c0(%rbp)
callq 0xb430
movq -0x3b8(%rbp), %rdi
movq -0x3c0(%rbp), %rsi
callq 0x2bff0
jmp 0x20114
leaq -0x180(%rbp), %rdi
callq 0xb460
jmp 0x20168
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x168(%rbp), %rdi
callq 0xb460
jmp 0x20417
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x180(%rbp), %rdi
callq 0xb460
jmp 0x20417
jmp 0x2016a
jmp 0x2016c
movl -0xd4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xd4(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0xbac0
jmp 0x1fcf7
movq 0x42e35(%rip), %rdi     # 0x62fc8
movq 0x42e06(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x3c8(%rbp)
jmp 0x201a8
movq -0x3c8(%rbp), %rdi
leaq 0x21a96(%rip), %rsi     # 0x41c4c
callq 0x6310
movq %rax, -0x3d0(%rbp)
jmp 0x201c4
movq -0x3d0(%rbp), %rdi
movq 0x42dce(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x3d8(%rbp)
jmp 0x201e0
movq -0x3d8(%rbp), %rdi
movq 0x42db2(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x201f5
testb $0x1, -0x9(%rbp)
jne 0x203de
movq 0x42dc2(%rip), %rdi     # 0x62fc8
movq 0x42d93(%rip), %rsi     # 0x62fa0
callq 0x6360
movq %rax, -0x3e0(%rbp)
jmp 0x2021b
movq -0x3e0(%rbp), %rdi
leaq 0x21c22(%rip), %rsi     # 0x41e4b
callq 0x6310
movq %rax, -0x3e8(%rbp)
jmp 0x20237
movq -0x3e8(%rbp), %rdi
movq 0x42d5b(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x2024c
movq 0x42d75(%rip), %rdi     # 0x62fc8
leaq 0x21c1e(%rip), %rsi     # 0x41e78
callq 0x6310
movq %rax, -0x3f0(%rbp)
jmp 0x20268
movq -0x3f0(%rbp), %rdi
movq 0x42d2a(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x2027d
movq 0x42d5c(%rip), %rdi     # 0x62fe0
leaq -0x90(%rbp), %rsi
callq 0x6090
jmp 0x20292
leaq -0x90(%rbp), %rdi
callq 0x6250
cmpq $0x0, %rax
je 0x203a9
xorl %eax, %eax
movl %eax, %esi
leaq -0x90(%rbp), %rdi
movl $0xa, %edx
callq 0xbdc0
movl %eax, -0x3f4(%rbp)
jmp 0x202c5
movl -0x3f4(%rbp), %eax
cltq
movq %rax, -0xa8(%rbp)
cmpq $0x0, -0xa8(%rbp)
jb 0x2037b
movq -0x198(%rbp), %rdi
movq -0xa8(%rbp), %rax
movq %rax, -0x400(%rbp)
addq $0x30, %rdi
callq 0x21d80
movq %rax, %rcx
movq -0x400(%rbp), %rax
cmpq %rcx, %rax
jae 0x2037b
movq -0x198(%rbp), %rdi
addq $0x30, %rdi
movq -0xa8(%rbp), %rsi
callq 0x21da0
movq %rax, %rsi
leaq -0x190(%rbp), %rdi
movq %rdi, -0x408(%rbp)
callq 0xb430
movq -0x408(%rbp), %rdi
callq 0x2ab50
jmp 0x2034a
leaq -0x190(%rbp), %rdi
callq 0xb460
jmp 0x203a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x190(%rbp), %rdi
callq 0xb460
jmp 0x20417
movl $0x8, %edi
callq 0x61e0
movq %rax, %rdi
leaq 0x214f4(%rip), %rax     # 0x41883
movq %rax, (%rdi)
movq 0x42c0f(%rip), %rsi     # 0x62fa8
xorl %eax, %eax
movl %eax, %edx
callq 0x6570
jmp 0x20453
jmp 0x203dc
movq 0x42c18(%rip), %rdi     # 0x62fc8
leaq 0x20879(%rip), %rsi     # 0x40c30
callq 0x6310
movq %rax, -0x410(%rbp)
jmp 0x203c5
movq -0x410(%rbp), %rdi
movq 0x42bcd(%rip), %rsi     # 0x62fa0
callq 0x6360
jmp 0x203da
jmp 0x203dc
jmp 0x203de
leaq -0x90(%rbp), %rdi
callq 0x6678
leaq -0x70(%rbp), %rdi
callq 0x6678
leaq -0x50(%rbp), %rdi
callq 0x6678
leaq -0x30(%rbp), %rdi
callq 0xb4a0
leaq -0x20(%rbp), %rdi
callq 0xb4c0
addq $0x410, %rsp            # imm = 0x410
popq %rbp
retq
leaq -0x90(%rbp), %rdi
callq 0x6678
leaq -0x70(%rbp), %rdi
callq 0x6678
leaq -0x50(%rbp), %rdi
callq 0x6678
leaq -0x30(%rbp), %rdi
callq 0xb4a0
leaq -0x20(%rbp), %rdi
callq 0xb4c0
movq -0x98(%rbp), %rdi
callq 0x6590
nopw %cs:(%rax,%rax)