// File: kaiming[P]Chamber-Crawler-3k/Board/board.cc
// Function: Board::attackEnemy(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
std::string Board::attackEnemy(std::string direction) {
    std::shared_ptr<WalkableTile> target = validDest(player, direction);
    std::string message = "";

    // Check if valid destination
    if (target == nullptr) {
        return "Invalid Attack Target. ";
    }

    // Check if destination is occupied by an enemy
    if (target->getOccupant() != nullptr) {
        std::string merchantStatus = "";

        // Check if target is merchant, if merchants are not hostile
        if (!merchantAgro && std::dynamic_pointer_cast<Merchant>(target->getOccupant())) {
            // Merchants are now hostile
            merchantAgro = true;
            merchantStatus = "Merchants are now hostile. ";
        }

        // Begin attack sequence and store resulting enemy state
        double enemyOgHP = target->getOccupant()->getHP();
        bool EnemyKilled = std::dynamic_pointer_cast<Enemy>(target->getOccupant())->getAttacked(*(std::dynamic_pointer_cast<Player>(player->getOccupant())));
    
        if (EnemyKilled) {
            // Enemy killed, determine Enemy type to generate gold dropped

            // Check if target is dragon
            if (target->getOccupant()->getRace() == "Dragon") {
                // Dragon Type, drop nothing
                
                // Remove this dragon from dragons
                for (auto it = dragonHoards[floorNum-1].begin(); it != dragonHoards[floorNum-1].end(); ++it) {
                    if (std::dynamic_pointer_cast<DragonHoard>((*it)->getGold())->getDragon() == target->getOccupant()) {
                        std::dynamic_pointer_cast<DragonHoard>((*it)->getGold())->getDragon()->setState(false);
                    }
                }
                
                message = "Dragon killed. " + merchantStatus;

                // Remove enemy + move player to old spot
                target->setOccupant(nullptr);
                player = player->move(target);

            } else {
                
                std::string eRace = target->getOccupant()->getRace();
                message = eRace + " killed. ";

                // Check if target is human or merchant
                if (target->getOccupant()->getRace() == "Human") {
                    // Human type, drop 2 Normal Piles
                    playerPtr->setGold(playerPtr->getGold() + 2);
                    message += "Normal hoard picked up. ";

                    // RNG a second pile nearby
                    std::shared_ptr<WalkableTile> destination = nullptr;
                    std::vector<std::string> directions;
                    directions.push_back("no");
                    directions.push_back("ea");
                    directions.push_back("so");
                    directions.push_back("we");
                    directions.push_back("ne");
                    directions.push_back("nw");
                    directions.push_back("se");
                    directions.push_back("sw");
                    int i = 0;

                    do {
                        // Exit case in event that no suitable location found
                        if (i > 80) {
                            destination = nullptr;
                            break;
                        } else {
                            i++;
                        }
                        
                        int rng = std::rand() % directions.size();

                        destination = validDest(target, directions[rng]);

                    } while (!destination || !isUnoccupied(destination)); 

                    destination->setGold(std::make_shared<Gold>("Normal Hoard", 2));

                } else if (target->getOccupant()->getRace() == "Merchant") {
                    // Merchant Type, drop Merchant Hoard
                    playerPtr->setGold(playerPtr->getGold() + 4);
                    message += "Merchant Hoard picked up. ";

                } else {
                    // Other type, RNG gold
                    if (std::rand() % 2 == 0) {
                        // Small pile
                        playerPtr->setGold(playerPtr->getGold() + 1);
                        message += "Small Hoard picked up. ";
                    } else {
                        // Normal pile
                        playerPtr->setGold(playerPtr->getGold() + 2);
                        message += "Normal Hoard picked up. ";
                    }
                }

                message += merchantStatus;

                // Remove this enemy from enemies
                for (auto it = enemies[floorNum-1].begin(); it != enemies[floorNum-1].end(); ++it) {
                    if ((*it)->getOccupant() == target->getOccupant()) {
                        enemies[floorNum-1].erase(it); 
                    }
                }

                // Remove enemy + move player to old spot
                target->setOccupant(nullptr);
                player = player->move(target);
                
            }

        } else {
            std::stringstream dealt, left;
            dealt << std::fixed << std::setprecision(2) << enemyOgHP - target->getOccupant()->getHP();
            left << std::fixed << std::setprecision(2) << target->getOccupant()->getHP();

            message = target->getOccupant()->getRace() + " attacked for " + dealt.str() + "HP (" + left.str() + "HP remaining). "  + merchantStatus;
        }
    } else {
        message = "No Enemy to Attack. ";
    }

    return message;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xbe0, %rsp            # imm = 0xBE0
movq %rdx, -0x9d8(%rbp)
movq %rdi, -0x9f0(%rbp)
movq %rdi, %rax
movq %rax, -0x9e8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rsi
movq %rsi, -0x9e0(%rbp)
addq $0xb8, %rsi
leaq -0x38(%rbp), %rdi
callq 0xd550
movq -0x9d8(%rbp), %rsi
leaq -0x58(%rbp), %rdi
callq 0x6130
jmp 0x27e5c
movq -0x9e0(%rbp), %rsi
leaq -0x28(%rbp), %rdi
leaq -0x38(%rbp), %rdx
leaq -0x58(%rbp), %rcx
callq 0x250e0
jmp 0x27e76
leaq -0x58(%rbp), %rdi
callq 0x61c0
leaq -0x38(%rbp), %rdi
callq 0x99e0
leaq -0x89(%rbp), %rdi
movq %rdi, -0x9f8(%rbp)
callq 0x6550
movq -0x9f8(%rbp), %rdx
leaq 0x15f8e(%rip), %rsi     # 0x3de37
leaq -0x88(%rbp), %rdi
callq 0x8a00
jmp 0x27eb7
leaq -0x89(%rbp), %rdi
callq 0x6340
leaq -0x28(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x12ac0
testb $0x1, %al
jne 0x27ed9
jmp 0x27f8e
leaq -0x8a(%rbp), %rdi
movq %rdi, -0xa00(%rbp)
callq 0x6550
movq -0x9f0(%rbp), %rdi
movq -0xa00(%rbp), %rdx
leaq 0x15e54(%rip), %rsi     # 0x3dd55
callq 0x8a00
jmp 0x27f08
leaq -0x8a(%rbp), %rdi
callq 0x6340
movl $0x1, -0x90(%rbp)
jmp 0x29a88
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x27f46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x61c0
leaq -0x38(%rbp), %rdi
callq 0x99e0
jmp 0x29ac2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x89(%rbp), %rdi
callq 0x6340
jmp 0x29ab9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x8a(%rbp), %rdi
callq 0x6340
jmp 0x29aad
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0xa0(%rbp), %rdi
callq 0x3bf60
jmp 0x27fa8
leaq -0xa0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2e4a0
movb %al, -0xa01(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x11fa0
movb -0xa01(%rbp), %al
testb $0x1, %al
jne 0x27fd9
jmp 0x29a54
leaq -0xc1(%rbp), %rdi
movq %rdi, -0xa10(%rbp)
callq 0x6550
movq -0xa10(%rbp), %rdx
leaq 0x15e3d(%rip), %rsi     # 0x3de37
leaq -0xc0(%rbp), %rdi
callq 0x8a00
jmp 0x28008
leaq -0xc1(%rbp), %rdi
callq 0x6340
movq -0x9e0(%rbp), %rax
movb 0x10c(%rax), %cl
movb $0x0, -0xe9(%rbp)
movb $0x0, -0xea(%rbp)
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0xa11(%rbp)
jne 0x28089
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0xe8(%rbp), %rdi
callq 0x3bf60
jmp 0x28056
movb $0x1, -0xe9(%rbp)
leaq -0xd8(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x2eaf0
movb $0x1, -0xea(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x2eb80
movb %al, -0xa11(%rbp)
movb -0xa11(%rbp), %al
movb %al, -0xa12(%rbp)
testb $0x1, -0xea(%rbp)
jne 0x280a0
jmp 0x280ac
leaq -0xd8(%rbp), %rdi
callq 0x12ef0
testb $0x1, -0xe9(%rbp)
jne 0x280b7
jmp 0x280c3
leaq -0xe8(%rbp), %rdi
callq 0x11fa0
movb -0xa12(%rbp), %al
testb $0x1, %al
jne 0x280cf
jmp 0x28133
movq -0x9e0(%rbp), %rax
movb $0x1, 0x10c(%rax)
leaq 0x15c89(%rip), %rsi     # 0x3dd6d
leaq -0xc0(%rbp), %rdi
callq 0x6420
jmp 0x280f2
jmp 0x28133
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x29aad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0xc1(%rbp), %rdi
callq 0x6340
jmp 0x29aad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x29a46
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x108(%rbp), %rdi
callq 0x3bf60
jmp 0x2814d
leaq -0x108(%rbp), %rdi
callq 0x2e3e0
movq %rax, %rdi
callq 0x34760
movsd %xmm0, -0xa20(%rbp)
jmp 0x2816b
leaq -0x108(%rbp), %rdi
callq 0x11fa0
movsd -0xa20(%rbp), %xmm0
movsd %xmm0, -0xf8(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x130(%rbp), %rdi
callq 0x3bf60
jmp 0x281a1
leaq -0x120(%rbp), %rdi
movq %rdi, -0xa30(%rbp)
leaq -0x130(%rbp), %rsi
callq 0x2eba0
movq -0xa30(%rbp), %rdi
callq 0x2ec30
movq -0x9e0(%rbp), %rdi
movq %rax, -0xa28(%rbp)
addq $0xb8, %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x150(%rbp), %rdi
callq 0x3bf60
jmp 0x281f2
leaq -0x140(%rbp), %rdi
movq %rdi, -0xa40(%rbp)
leaq -0x150(%rbp), %rsi
callq 0x2e600
movq -0xa40(%rbp), %rdi
callq 0x2ec50
movq -0xa28(%rbp), %rdi
movq %rax, %rsi
movq (%rdi), %rax
movq 0x8(%rax), %rax
callq *%rax
movb %al, -0xa31(%rbp)
jmp 0x28233
leaq -0x140(%rbp), %rdi
callq 0x9960
leaq -0x150(%rbp), %rdi
callq 0x11fa0
leaq -0x120(%rbp), %rdi
callq 0x2ec80
leaq -0x130(%rbp), %rdi
callq 0x11fa0
movb -0xa31(%rbp), %al
andb $0x1, %al
movb %al, -0x109(%rbp)
testb $0x1, -0x109(%rbp)
je 0x29584
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x180(%rbp), %rdi
callq 0x3bf60
jmp 0x28298
leaq -0x180(%rbp), %rdi
callq 0x2e3e0
movq %rax, %rsi
movq (%rsi), %rax
movq (%rax), %rax
leaq -0x170(%rbp), %rdi
callq *%rax
jmp 0x282b8
leaq 0x15aca(%rip), %rsi     # 0x3dd89
leaq -0x170(%rbp), %rdi
callq 0x8ae0
movb %al, -0xa41(%rbp)
jmp 0x282d3
leaq -0x170(%rbp), %rdi
callq 0x61c0
leaq -0x180(%rbp), %rdi
callq 0x11fa0
movb -0xa41(%rbp), %al
testb $0x1, %al
jne 0x282fa
jmp 0x28761
movq -0x9e0(%rbp), %rax
movq %rax, %rdi
addq $0x70, %rdi
movl 0x108(%rax), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x12870
movq %rax, %rdi
callq 0x1e020
movq %rax, -0x188(%rbp)
movq -0x9e0(%rbp), %rax
movq %rax, %rdi
addq $0x70, %rdi
movl 0x108(%rax), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x12870
movq %rax, %rdi
callq 0x1ddd0
movq %rax, -0x190(%rbp)
leaq -0x188(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x2e780
testb $0x1, %al
jne 0x28372
jmp 0x28619
leaq -0x188(%rbp), %rdi
callq 0x1e350
movq %rax, %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x1c0(%rbp), %rdi
callq 0x3c020
jmp 0x28397
leaq -0x1b0(%rbp), %rdi
movq %rdi, -0xa50(%rbp)
leaq -0x1c0(%rbp), %rsi
callq 0x2e530
movq -0xa50(%rbp), %rdi
callq 0x12af0
movq %rax, %rsi
leaq -0x1a0(%rbp), %rdi
callq 0x38670
jmp 0x283ce
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x1d0(%rbp), %rdi
callq 0x3bf60
jmp 0x283e8
leaq -0x1a0(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x2eca0
movb %al, -0xa51(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x11fa0
leaq -0x1a0(%rbp), %rdi
callq 0x12b30
leaq -0x1b0(%rbp), %rdi
callq 0x12910
leaq -0x1c0(%rbp), %rdi
callq 0x11f60
movb -0xa51(%rbp), %al
testb $0x1, %al
jne 0x28440
jmp 0x28606
leaq -0x188(%rbp), %rdi
callq 0x1e350
movq %rax, %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x200(%rbp), %rdi
callq 0x3c020
jmp 0x28465
leaq -0x1f0(%rbp), %rdi
movq %rdi, -0xa60(%rbp)
leaq -0x200(%rbp), %rsi
callq 0x2e530
movq -0xa60(%rbp), %rdi
callq 0x12af0
movq %rax, %rsi
leaq -0x1e0(%rbp), %rdi
callq 0x38670
jmp 0x2849c
leaq -0x1e0(%rbp), %rdi
callq 0x2e5e0
movq %rax, %rdi
xorl %esi, %esi
callq 0x348d0
jmp 0x284b4
leaq -0x1e0(%rbp), %rdi
callq 0x12b30
leaq -0x1f0(%rbp), %rdi
callq 0x12910
leaq -0x200(%rbp), %rdi
callq 0x11f60
jmp 0x28606
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x11fa0
jmp 0x29a46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x2852c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x9960
leaq -0x150(%rbp), %rdi
callq 0x11fa0
leaq -0x120(%rbp), %rdi
callq 0x2ec80
leaq -0x130(%rbp), %rdi
callq 0x11fa0
jmp 0x29a46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x2856f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x61c0
leaq -0x180(%rbp), %rdi
callq 0x11fa0
jmp 0x29a46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x285a6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x1a0(%rbp), %rdi
callq 0x12b30
leaq -0x1b0(%rbp), %rdi
callq 0x12910
leaq -0x1c0(%rbp), %rdi
callq 0x11f60
jmp 0x29a46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x285e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x12b30
leaq -0x1f0(%rbp), %rdi
callq 0x12910
leaq -0x200(%rbp), %rdi
callq 0x11f60
jmp 0x29a46
jmp 0x28608
leaq -0x188(%rbp), %rdi
callq 0x2ece0
jmp 0x28328
leaq 0x15770(%rip), %rsi     # 0x3dd90
leaq -0x220(%rbp), %rdi
leaq -0xc0(%rbp), %rdx
callq 0x8c60
jmp 0x28635
leaq -0x88(%rbp), %rdi
leaq -0x220(%rbp), %rsi
movq %rsi, -0xa78(%rbp)
callq 0x63c0
movq -0xa78(%rbp), %rdi
callq 0x61c0
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, -0xa70(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x230(%rbp), %rdi
movq %rdi, -0xa68(%rbp)
callq 0x11f00
movq -0xa70(%rbp), %rdi
movq -0xa68(%rbp), %rsi
callq 0x3bf90
jmp 0x28697
leaq -0x230(%rbp), %rdi
callq 0x11fa0
movq -0x9e0(%rbp), %rdi
addq $0xb8, %rdi
callq 0x2e040
movq %rax, -0xa88(%rbp)
leaq -0x250(%rbp), %rdi
movq %rdi, -0xa80(%rbp)
leaq -0x28(%rbp), %rsi
callq 0xd550
movq -0xa88(%rbp), %rsi
movq -0xa80(%rbp), %rdx
leaq -0x240(%rbp), %rdi
callq 0x3c100
jmp 0x286f0
movq -0x9e0(%rbp), %rdi
addq $0xb8, %rdi
leaq -0x240(%rbp), %rsi
callq 0x2e8f0
leaq -0x240(%rbp), %rdi
callq 0x99e0
leaq -0x250(%rbp), %rdi
callq 0x99e0
jmp 0x2957f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x11fa0
jmp 0x29a46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x99e0
jmp 0x29a46
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x280(%rbp), %rdi
callq 0x3bf60
jmp 0x2877b
leaq -0x280(%rbp), %rdi
callq 0x2e3e0
movq %rax, %rsi
movq (%rsi), %rax
movq (%rax), %rax
leaq -0x270(%rbp), %rdi
callq *%rax
jmp 0x2879b
leaq -0x280(%rbp), %rdi
callq 0x11fa0
leaq 0x155e8(%rip), %rdx     # 0x3dd96
leaq -0x2a0(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x2ed00
jmp 0x287c3
leaq -0x88(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
movq %rsi, -0xa90(%rbp)
callq 0x63c0
movq -0xa90(%rbp), %rdi
callq 0x61c0
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x2d0(%rbp), %rdi
callq 0x3bf60
jmp 0x28803
leaq -0x2d0(%rbp), %rdi
callq 0x2e3e0
movq %rax, %rsi
movq (%rsi), %rax
movq (%rax), %rax
leaq -0x2c0(%rbp), %rdi
callq *%rax
jmp 0x28823
leaq 0x15576(%rip), %rsi     # 0x3dda0
leaq -0x2c0(%rbp), %rdi
callq 0x8ae0
movb %al, -0xa91(%rbp)
jmp 0x2883e
leaq -0x2c0(%rbp), %rdi
callq 0x61c0
leaq -0x2d0(%rbp), %rdi
callq 0x11fa0
movb -0xa91(%rbp), %al
testb $0x1, %al
jne 0x28865
jmp 0x290bb
movq -0x9e0(%rbp), %rdi
addq $0xf8, %rdi
movq %rdi, -0xaa8(%rbp)
callq 0x2e020
movq -0xaa8(%rbp), %rdi
movq %rax, -0xaa0(%rbp)
callq 0x2e020
movq %rax, %rdi
callq 0x396b0
movl %eax, -0xa98(%rbp)
jmp 0x288a2
movq -0xaa0(%rbp), %rdi
movl -0xa98(%rbp), %esi
addl $0x2, %esi
callq 0x396d0
jmp 0x288b9
leaq 0x154e6(%rip), %rsi     # 0x3dda6
leaq -0x88(%rbp), %rdi
callq 0x62b0
jmp 0x288ce
xorl %eax, %eax
movl %eax, %esi
leaq -0x2e0(%rbp), %rdi
callq 0x2dc90
leaq -0x2f8(%rbp), %rdi
callq 0x2dcb0
leaq -0x319(%rbp), %rdi
movq %rdi, -0xab0(%rbp)
callq 0x6550
movq -0xab0(%rbp), %rdx
leaq 0x149f6(%rip), %rsi     # 0x3d301
leaq -0x318(%rbp), %rdi
callq 0x8a00
jmp 0x28919
leaq -0x2f8(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x2e970
jmp 0x2892e
leaq -0x318(%rbp), %rdi
callq 0x61c0
leaq -0x319(%rbp), %rdi
callq 0x6340
leaq -0x341(%rbp), %rdi
movq %rdi, -0xab8(%rbp)
callq 0x6550
movq -0xab8(%rbp), %rdx
leaq 0x149a0(%rip), %rsi     # 0x3d307
leaq -0x340(%rbp), %rdi
callq 0x8a00
jmp 0x28975
leaq -0x2f8(%rbp), %rdi
leaq -0x340(%rbp), %rsi
callq 0x2e970
jmp 0x2898a
leaq -0x340(%rbp), %rdi
callq 0x61c0
leaq -0x341(%rbp), %rdi
callq 0x6340
leaq -0x369(%rbp), %rdi
movq %rdi, -0xac0(%rbp)
callq 0x6550
movq -0xac0(%rbp), %rdx
leaq 0x14941(%rip), %rsi     # 0x3d304
leaq -0x368(%rbp), %rdi
callq 0x8a00
jmp 0x289d1
leaq -0x2f8(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0x2e970
jmp 0x289e6
leaq -0x368(%rbp), %rdi
callq 0x61c0
leaq -0x369(%rbp), %rdi
callq 0x6340
leaq -0x391(%rbp), %rdi
movq %rdi, -0xac8(%rbp)
callq 0x6550
movq -0xac8(%rbp), %rdx
leaq 0x148eb(%rip), %rsi     # 0x3d30a
leaq -0x390(%rbp), %rdi
callq 0x8a00
jmp 0x28a2d
leaq -0x2f8(%rbp), %rdi
leaq -0x390(%rbp), %rsi
callq 0x2e970
jmp 0x28a42
leaq -0x390(%rbp), %rdi
callq 0x61c0
leaq -0x391(%rbp), %rdi
callq 0x6340
leaq -0x3b9(%rbp), %rdi
movq %rdi, -0xad0(%rbp)
callq 0x6550
movq -0xad0(%rbp), %rdx
leaq 0x14892(%rip), %rsi     # 0x3d30d
leaq -0x3b8(%rbp), %rdi
callq 0x8a00
jmp 0x28a89
leaq -0x2f8(%rbp), %rdi
leaq -0x3b8(%rbp), %rsi
callq 0x2e970
jmp 0x28a9e
leaq -0x3b8(%rbp), %rdi
callq 0x61c0
leaq -0x3b9(%rbp), %rdi
callq 0x6340
leaq -0x3e1(%rbp), %rdi
movq %rdi, -0xad8(%rbp)
callq 0x6550
movq -0xad8(%rbp), %rdx
leaq 0x14839(%rip), %rsi     # 0x3d310
leaq -0x3e0(%rbp), %rdi
callq 0x8a00
jmp 0x28ae5
leaq -0x2f8(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
callq 0x2e970
jmp 0x28afa
leaq -0x3e0(%rbp), %rdi
callq 0x61c0
leaq -0x3e1(%rbp), %rdi
callq 0x6340
leaq -0x409(%rbp), %rdi
movq %rdi, -0xae0(%rbp)
callq 0x6550
movq -0xae0(%rbp), %rdx
leaq 0x147e0(%rip), %rsi     # 0x3d313
leaq -0x408(%rbp), %rdi
callq 0x8a00
jmp 0x28b41
leaq -0x2f8(%rbp), %rdi
leaq -0x408(%rbp), %rsi
callq 0x2e970
jmp 0x28b56
leaq -0x408(%rbp), %rdi
callq 0x61c0
leaq -0x409(%rbp), %rdi
callq 0x6340
leaq -0x431(%rbp), %rdi
movq %rdi, -0xae8(%rbp)
callq 0x6550
movq -0xae8(%rbp), %rdx
leaq 0x14787(%rip), %rsi     # 0x3d316
leaq -0x430(%rbp), %rdi
callq 0x8a00
jmp 0x28b9d
leaq -0x2f8(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x2e970
jmp 0x28bb2
leaq -0x430(%rbp), %rdi
callq 0x61c0
leaq -0x431(%rbp), %rdi
callq 0x6340
movl $0x0, -0x438(%rbp)
cmpl $0x50, -0x438(%rbp)
jle 0x28e32
leaq -0x448(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2dc90
leaq -0x2e0(%rbp), %rdi
leaq -0x448(%rbp), %rsi
callq 0x2e8f0
leaq -0x448(%rbp), %rdi
callq 0x99e0
jmp 0x28fa8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x280(%rbp), %rdi
callq 0x11fa0
jmp 0x29a46
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x2956e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x28c69
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x2c0(%rbp), %rdi
callq 0x61c0
leaq -0x2d0(%rbp), %rdi
callq 0x11fa0
jmp 0x2956e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x28ca0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x318(%rbp), %rdi
callq 0x61c0
leaq -0x319(%rbp), %rdi
callq 0x6340
jmp 0x2909e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x28cd7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x340(%rbp), %rdi
callq 0x61c0
leaq -0x341(%rbp), %rdi
callq 0x6340
jmp 0x2909e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x28d0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x61c0
leaq -0x369(%rbp), %rdi
callq 0x6340
jmp 0x2909e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x28d45
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x390(%rbp), %rdi
callq 0x61c0
leaq -0x391(%rbp), %rdi
callq 0x6340
jmp 0x2909e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x28d7c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x3b8(%rbp), %rdi
callq 0x61c0
leaq -0x3b9(%rbp), %rdi
callq 0x6340
jmp 0x2909e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x28db3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x3e0(%rbp), %rdi
callq 0x61c0
leaq -0x3e1(%rbp), %rdi
callq 0x6340
jmp 0x2909e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x28dea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x408(%rbp), %rdi
callq 0x61c0
leaq -0x409(%rbp), %rdi
callq 0x6340
jmp 0x2909e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x28e21
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x430(%rbp), %rdi
callq 0x61c0
leaq -0x431(%rbp), %rdi
callq 0x6340
jmp 0x2909e
movl -0x438(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x438(%rbp)
callq 0x60c0
cltq
movq %rax, -0xaf8(%rbp)
leaq -0x2f8(%rbp), %rdi
movq %rdi, -0xaf0(%rbp)
callq 0x2e9a0
movq %rax, %rcx
movq -0xaf8(%rbp), %rax
xorl %edx, %edx
divq %rcx
movl %edx, %eax
movl %eax, -0x44c(%rbp)
leaq -0x470(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0xd550
movq -0xaf0(%rbp), %rdi
movslq -0x44c(%rbp), %rsi
callq 0x2e9c0
movq %rax, %rsi
leaq -0x490(%rbp), %rdi
callq 0x6130
jmp 0x28ead
movq -0x9e0(%rbp), %rsi
leaq -0x460(%rbp), %rdi
leaq -0x470(%rbp), %rdx
leaq -0x490(%rbp), %rcx
callq 0x250e0
jmp 0x28ed0
leaq -0x2e0(%rbp), %rdi
leaq -0x460(%rbp), %rsi
callq 0x2e8f0
leaq -0x460(%rbp), %rdi
callq 0x99e0
leaq -0x490(%rbp), %rdi
callq 0x61c0
leaq -0x470(%rbp), %rdi
callq 0x99e0
leaq -0x2e0(%rbp), %rdi
callq 0x1ed00
movb %al, %cl
movb $0x0, -0x4a1(%rbp)
movb $0x1, %al
testb $0x1, %cl
movb %al, -0xaf9(%rbp)
jne 0x28f2b
jmp 0x28f75
leaq -0x4a0(%rbp), %rdi
movq %rdi, -0xb08(%rbp)
leaq -0x2e0(%rbp), %rsi
callq 0xd550
movq -0x9e0(%rbp), %rdi
movq -0xb08(%rbp), %rsi
movb $0x1, -0x4a1(%rbp)
callq 0x26090
movb %al, -0xafa(%rbp)
jmp 0x28f67
movb -0xafa(%rbp), %al
xorb $-0x1, %al
movb %al, -0xaf9(%rbp)
movb -0xaf9(%rbp), %al
movb %al, -0xb09(%rbp)
testb $0x1, -0x4a1(%rbp)
jne 0x28f8c
jmp 0x28f98
leaq -0x4a0(%rbp), %rdi
callq 0x99e0
movb -0xb09(%rbp), %al
testb $0x1, %al
jne 0x28bd4
jmp 0x28fa8
leaq -0x2e0(%rbp), %rdi
callq 0x2e040
movq %rax, -0xb18(%rbp)
movl $0x2, -0x4bc(%rbp)
leaq 0x14606(%rip), %rsi     # 0x3d5d2
leaq -0x4b8(%rbp), %rdi
leaq -0x4bc(%rbp), %rdx
callq 0x12560
jmp 0x28fe1
movq -0xb18(%rbp), %rdi
leaq -0x4b8(%rbp), %rsi
callq 0x3c050
jmp 0x28ff6
leaq -0x4b8(%rbp), %rdi
callq 0x11f60
leaq -0x2f8(%rbp), %rdi
callq 0x9980
leaq -0x2e0(%rbp), %rdi
callq 0x99e0
jmp 0x292c7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x29045
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x490(%rbp), %rdi
callq 0x61c0
leaq -0x470(%rbp), %rdi
callq 0x99e0
jmp 0x2909e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
testb $0x1, -0x4a1(%rbp)
jne 0x2906a
jmp 0x29076
leaq -0x4a0(%rbp), %rdi
callq 0x99e0
jmp 0x2909e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x2909e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x4b8(%rbp), %rdi
callq 0x11f60
leaq -0x2f8(%rbp), %rdi
callq 0x9980
leaq -0x2e0(%rbp), %rdi
callq 0x99e0
jmp 0x2956e
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x4f0(%rbp), %rdi
callq 0x3bf60
jmp 0x290d5
leaq -0x4f0(%rbp), %rdi
callq 0x2e3e0
movq %rax, %rsi
movq (%rsi), %rax
movq (%rax), %rax
leaq -0x4e0(%rbp), %rdi
callq *%rax
jmp 0x290f5
leaq 0x14cc3(%rip), %rsi     # 0x3ddbf
leaq -0x4e0(%rbp), %rdi
callq 0x8ae0
movb %al, -0xb19(%rbp)
jmp 0x29110
leaq -0x4e0(%rbp), %rdi
callq 0x61c0
leaq -0x4f0(%rbp), %rdi
callq 0x11fa0
movb -0xb19(%rbp), %al
testb $0x1, %al
jne 0x29137
jmp 0x291dc
movq -0x9e0(%rbp), %rdi
addq $0xf8, %rdi
movq %rdi, -0xb30(%rbp)
callq 0x2e020
movq -0xb30(%rbp), %rdi
movq %rax, -0xb28(%rbp)
callq 0x2e020
movq %rax, %rdi
callq 0x396b0
movl %eax, -0xb20(%rbp)
jmp 0x29174
movq -0xb28(%rbp), %rdi
movl -0xb20(%rbp), %esi
addl $0x4, %esi
callq 0x396d0
jmp 0x2918b
leaq 0x14c36(%rip), %rsi     # 0x3ddc8
leaq -0x88(%rbp), %rdi
callq 0x62b0
jmp 0x291a0
jmp 0x292c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x291cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x4e0(%rbp), %rdi
callq 0x61c0
leaq -0x4f0(%rbp), %rdi
callq 0x11fa0
jmp 0x2956e
callq 0x60c0
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x29258
movq -0x9e0(%rbp), %rdi
addq $0xf8, %rdi
movq %rdi, -0xb48(%rbp)
callq 0x2e020
movq -0xb48(%rbp), %rdi
movq %rax, -0xb40(%rbp)
callq 0x2e020
movq %rax, %rdi
callq 0x396b0
movl %eax, -0xb34(%rbp)
jmp 0x2922b
movq -0xb40(%rbp), %rdi
movl -0xb34(%rbp), %esi
incl %esi
callq 0x396d0
jmp 0x29241
leaq 0x14b9b(%rip), %rsi     # 0x3dde3
leaq -0x88(%rbp), %rdi
callq 0x62b0
jmp 0x29256
jmp 0x292c3
movq -0x9e0(%rbp), %rdi
addq $0xf8, %rdi
movq %rdi, -0xb60(%rbp)
callq 0x2e020
movq -0xb60(%rbp), %rdi
movq %rax, -0xb58(%rbp)
callq 0x2e020
movq %rax, %rdi
callq 0x396b0
movl %eax, -0xb4c(%rbp)
jmp 0x29295
movq -0xb58(%rbp), %rdi
movl -0xb4c(%rbp), %esi
addl $0x2, %esi
callq 0x396d0
jmp 0x292ac
leaq 0x14b48(%rip), %rsi     # 0x3ddfb
leaq -0x88(%rbp), %rdi
callq 0x62b0
jmp 0x292c1
jmp 0x292c3
jmp 0x292c5
jmp 0x292c7
leaq -0x88(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x63f0
jmp 0x292dc
movq -0x9e0(%rbp), %rax
movq %rax, %rdi
addq $0x58, %rdi
movl 0x108(%rax), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x12870
movq %rax, %rdi
callq 0x1e020
movq %rax, -0x4f8(%rbp)
movq -0x9e0(%rbp), %rax
movq %rax, %rdi
addq $0x58, %rdi
movl 0x108(%rax), %eax
subl $0x1, %eax
movslq %eax, %rsi
callq 0x12870
movq %rax, %rdi
callq 0x1ddd0
movq %rax, -0x500(%rbp)
leaq -0x4f8(%rbp), %rdi
leaq -0x500(%rbp), %rsi
callq 0x2e780
testb $0x1, %al
jne 0x29354
jmp 0x29467
leaq -0x4f8(%rbp), %rdi
callq 0x1e350
movq %rax, %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x510(%rbp), %rdi
callq 0x3bf60
jmp 0x29379
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x520(%rbp), %rdi
callq 0x3bf60
jmp 0x29393
leaq -0x510(%rbp), %rdi
leaq -0x520(%rbp), %rsi
callq 0x2ed80
movb %al, -0xb61(%rbp)
leaq -0x520(%rbp), %rdi
callq 0x11fa0
leaq -0x510(%rbp), %rdi
callq 0x11fa0
movb -0xb61(%rbp), %al
testb $0x1, %al
jne 0x293d3
jmp 0x29454
movq -0x9e0(%rbp), %rax
movq %rax, %rdi
addq $0x58, %rdi
movl 0x108(%rax), %eax
decl %eax
movslq %eax, %rsi
callq 0x12870
movq %rax, -0xb78(%rbp)
leaq -0x528(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
callq 0x2e870
movq -0xb78(%rbp), %rdi
movq -0x528(%rbp), %rsi
callq 0x2e800
movq %rax, -0xb70(%rbp)
jmp 0x29427
movq -0xb70(%rbp), %rax
movq %rax, -0x530(%rbp)
jmp 0x29454
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x510(%rbp), %rdi
callq 0x11fa0
jmp 0x2956e
jmp 0x29456
leaq -0x4f8(%rbp), %rdi
callq 0x2ece0
jmp 0x2930a
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, -0xb88(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x540(%rbp), %rdi
movq %rdi, -0xb80(%rbp)
callq 0x11f00
movq -0xb88(%rbp), %rdi
movq -0xb80(%rbp), %rsi
callq 0x3bf90
jmp 0x294a3
leaq -0x540(%rbp), %rdi
callq 0x11fa0
movq -0x9e0(%rbp), %rdi
addq $0xb8, %rdi
callq 0x2e040
movq %rax, -0xb98(%rbp)
leaq -0x560(%rbp), %rdi
movq %rdi, -0xb90(%rbp)
leaq -0x28(%rbp), %rsi
callq 0xd550
movq -0xb98(%rbp), %rsi
movq -0xb90(%rbp), %rdx
leaq -0x550(%rbp), %rdi
callq 0x3c100
jmp 0x294fc
movq -0x9e0(%rbp), %rdi
addq $0xb8, %rdi
leaq -0x550(%rbp), %rsi
callq 0x2e8f0
leaq -0x550(%rbp), %rdi
callq 0x99e0
leaq -0x560(%rbp), %rdi
callq 0x99e0
leaq -0x270(%rbp), %rdi
callq 0x61c0
jmp 0x2957f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x540(%rbp), %rdi
callq 0x11fa0
jmp 0x2956e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x560(%rbp), %rdi
callq 0x99e0
leaq -0x270(%rbp), %rdi
callq 0x61c0
jmp 0x29a46
jmp 0x29a38
leaq -0x6e8(%rbp), %rdi
callq 0x6200
jmp 0x29592
leaq -0x870(%rbp), %rdi
callq 0x6200
jmp 0x295a0
leaq -0x6d8(%rbp), %rdi
leaq 0x5812(%rip), %rsi      # 0x2edc0
callq 0x60f0
movq %rax, -0xba0(%rbp)
jmp 0x295bc
movl $0x2, %edi
callq 0x2edf0
movl %eax, -0xba4(%rbp)
jmp 0x295ce
movq -0xba0(%rbp), %rdi
movl -0xba4(%rbp), %eax
movl %eax, -0x874(%rbp)
movl -0x874(%rbp), %esi
callq 0x6490
movq %rax, -0xbb0(%rbp)
jmp 0x295f5
movsd -0xf8(%rbp), %xmm0
movsd %xmm0, -0xbb8(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x888(%rbp), %rdi
callq 0x3bf60
jmp 0x2961f
leaq -0x888(%rbp), %rdi
callq 0x2e3e0
movq %rax, %rdi
callq 0x34760
movsd %xmm0, -0xbc0(%rbp)
jmp 0x2963d
movq -0xbb0(%rbp), %rdi
movsd -0xbc0(%rbp), %xmm1
movsd -0xbb8(%rbp), %xmm0
subsd %xmm1, %xmm0
callq 0x6590
jmp 0x2965f
leaq -0x888(%rbp), %rdi
callq 0x11fa0
leaq -0x860(%rbp), %rdi
leaq 0x5747(%rip), %rsi      # 0x2edc0
callq 0x60f0
movq %rax, -0xbc8(%rbp)
jmp 0x29687
movl $0x2, %edi
callq 0x2edf0
movl %eax, -0xbcc(%rbp)
jmp 0x29699
movq -0xbc8(%rbp), %rdi
movl -0xbcc(%rbp), %eax
movl %eax, -0x88c(%rbp)
movl -0x88c(%rbp), %esi
callq 0x6490
movq %rax, -0xbd8(%rbp)
jmp 0x296c0
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x8a0(%rbp), %rdi
callq 0x3bf60
jmp 0x296da
leaq -0x8a0(%rbp), %rdi
callq 0x2e3e0
movq %rax, %rdi
callq 0x34760
movsd %xmm0, -0xbe0(%rbp)
jmp 0x296f8
movsd -0xbe0(%rbp), %xmm0
movq -0xbd8(%rbp), %rdi
callq 0x6590
jmp 0x2970e
leaq -0x8a0(%rbp), %rdi
callq 0x11fa0
leaq -0x28(%rbp), %rdi
callq 0x2e040
movq %rax, %rsi
leaq -0x990(%rbp), %rdi
callq 0x3bf60
jmp 0x29734
leaq -0x990(%rbp), %rdi
callq 0x2e3e0
movq %rax, %rsi
movq (%rsi), %rax
movq (%rax), %rax
leaq -0x980(%rbp), %rdi
callq *%rax
jmp 0x29754
leaq 0x146b9(%rip), %rdx     # 0x3de14
leaq -0x960(%rbp), %rdi
leaq -0x980(%rbp), %rsi
callq 0x2e400
jmp 0x29770
leaq -0x9b0(%rbp), %rdi
leaq -0x6e8(%rbp), %rsi
callq 0x62d0
jmp 0x29785
leaq -0x940(%rbp), %rdi
leaq -0x960(%rbp), %rsi
leaq -0x9b0(%rbp), %rdx
callq 0x2e6b0
jmp 0x297a1
leaq 0x1467b(%rip), %rdx     # 0x3de23
leaq -0x920(%rbp), %rdi
leaq -0x940(%rbp), %rsi
callq 0x2e400
jmp 0x297bd
leaq -0x9d0(%rbp), %rdi
leaq -0x870(%rbp), %rsi
callq 0x62d0
jmp 0x297d2
leaq -0x900(%rbp), %rdi
leaq -0x920(%rbp), %rsi
leaq -0x9d0(%rbp), %rdx
callq 0x2e6b0
jmp 0x297ee
leaq 0x14633(%rip), %rdx     # 0x3de28
leaq -0x8e0(%rbp), %rdi
leaq -0x900(%rbp), %rsi
callq 0x2e400
jmp 0x2980a
leaq -0x8c0(%rbp), %rdi
leaq -0x8e0(%rbp), %rsi
leaq -0xc0(%rbp), %rdx
callq 0x2e920
jmp 0x29826
leaq -0x88(%rbp), %rdi
leaq -0x8c0(%rbp), %rsi
callq 0x63c0
leaq -0x8c0(%rbp), %rdi
callq 0x61c0
leaq -0x8e0(%rbp), %rdi
callq 0x61c0
leaq -0x900(%rbp), %rdi
callq 0x61c0
leaq -0x9d0(%rbp), %rdi
callq 0x61c0
leaq -0x920(%rbp), %rdi
callq 0x61c0
leaq -0x940(%rbp), %rdi
callq 0x61c0
leaq -0x9b0(%rbp), %rdi
callq 0x61c0
leaq -0x960(%rbp), %rdi
callq 0x61c0
leaq -0x980(%rbp), %rdi
callq 0x61c0
leaq -0x990(%rbp), %rdi
callq 0x11fa0
leaq -0x870(%rbp), %rdi
callq 0x6220
leaq -0x6e8(%rbp), %rdi
callq 0x6220
jmp 0x29a38
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x29a2a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x29a1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x888(%rbp), %rdi
callq 0x11fa0
jmp 0x29a1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x8a0(%rbp), %rdi
callq 0x11fa0
jmp 0x29a1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x29a12
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x29a06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x299fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x299ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x299e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x299d6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x299ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x299be
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x8e0(%rbp), %rdi
callq 0x61c0
leaq -0x900(%rbp), %rdi
callq 0x61c0
leaq -0x9d0(%rbp), %rdi
callq 0x61c0
leaq -0x920(%rbp), %rdi
callq 0x61c0
leaq -0x940(%rbp), %rdi
callq 0x61c0
leaq -0x9b0(%rbp), %rdi
callq 0x61c0
leaq -0x960(%rbp), %rdi
callq 0x61c0
leaq -0x980(%rbp), %rdi
callq 0x61c0
leaq -0x990(%rbp), %rdi
callq 0x11fa0
leaq -0x870(%rbp), %rdi
callq 0x6220
leaq -0x6e8(%rbp), %rdi
callq 0x6220
jmp 0x29a46
leaq -0xc0(%rbp), %rdi
callq 0x61c0
jmp 0x29a6b
leaq -0xc0(%rbp), %rdi
callq 0x61c0
jmp 0x29aad
leaq 0x143dd(%rip), %rsi     # 0x3de38
leaq -0x88(%rbp), %rdi
callq 0x6420
jmp 0x29a69
jmp 0x29a6b
movq -0x9f0(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x61a0
movl $0x1, -0x90(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x61c0
leaq -0x28(%rbp), %rdi
callq 0x99e0
movq -0x9e8(%rbp), %rax
addq $0xbe0, %rsp            # imm = 0xBE0
popq %rbp
retq
leaq -0x88(%rbp), %rdi
callq 0x61c0
leaq -0x28(%rbp), %rdi
callq 0x99e0
movq -0x60(%rbp), %rdi
callq 0x6540
nopl (%rax,%rax)