// File: /workspace/github_cpp_makefile_star2_O1/kaiming[P]Chamber-Crawler-3k/main.cc
// Function: main
int main(int argc, char* argv[]) {
    bool restart = true;

    while (restart) {
        restart = false;

        std::ifstream infile;
        std::vector<std::vector<std::vector<std::shared_ptr<Tile>>>> floors;
        std::vector<std::shared_ptr<WalkableTile>> playerSpawns;
        std::vector<std::vector<std::shared_ptr<WalkableTile>>> enemies;
        std::vector<std::vector<std::shared_ptr<WalkableTile>>> dragonHoards;
        std::vector<bool> filled;
        int winner = -1; // code 0 for restart, code 1 for win, code 2 for loss

        // if no file is passed in command line
        if (argc == 1) {
            try { 
                infile.open("./default.txt");
            } catch (...) {
               std::cerr << "Error reading in default file" << std::endl;
               infile.close();
               return 1;
            }
            
        } else { // if there are at least one command line argument (only take the first one and try to open it as a file)
            try {
                // get file name 
                const std::string fileName {argv[1]};

                infile.open(fileName);
            } catch (...) {
                std::cerr << "Error reading in given file" << std::endl;
                infile.close();
                return 1;
            }
        } 

        // read in file for floor plan
        readFloorPlan(infile, floors, playerSpawns, enemies, dragonHoards, filled);

        // close file
        infile.close();

        TextDisplay td;

        // Ask player to enter one of the specified races or quit
        std::string race, in;

        std::cout << "Welcome to ChamberCrawler3000, prepare to enter the unknown!" << std::endl;
        
        // Extra Features menu
        std::cout << "Enter settings menu? (y or n): ";
        std::cin >> in;

        while (in != "y" && in != "n") {
            std::cerr << "Invalid option" << std::endl;
            std::cout << "Enter here: ";

            if (std::cin.fail()) {
                if (std::cin.eof()) return 0;

                std::cin.clear();
                std::cin.ignore();
            }

            std::cin >> in;
        }

        int seed = -1;
        bool enemyTracking = false;
        int radius = -1;

        if (in == "y") {
            std::cout << "Settings menu"<< std::endl;
            
            // Get seed
            std::cout << "Enter seed (int) or -1 to skip: ";
            std::cin >> seed;
            
            while (std::cin.fail()) {
                if (std::cin.eof()) return 0;

                std::cin.clear();
                std::cin.ignore();
                std::cout << "Invalid int."<< std::endl;
                std::cout << "Enter seed (int) or -1 to skip:";
                std::cin >> seed;
            }

            if (seed != -1) {
                std::cout << "Seed entered: " << std::to_string(seed) << std::endl;
            }


            // Get enemy tracking option
            std::cout << "Enable Enemy Tracking? (y or n): ";

            std::cin >> in;

            while (in != "y" && in != "n") {
                std::cerr << "Invalid option" << std::endl;
                std::cout << "Enter here: ";

                if (std::cin.fail()) {
                    if (std::cin.eof()) return 0;

                    std::cin.clear();
                    std::cin.ignore();
                }
                
                std::cin >> in;
            }

            if (in == "y") {
                enemyTracking = true;
                std::cout << "Enemy Tracking Enabled" << std::endl;
            } else if (in == "n") {
                enemyTracking = false;
                std::cout << "Enemy Tracking Disabled" << std::endl;
            }

            
            // If enemy tracking option activated, get difficulty
            if (enemyTracking) {
                std::cout << "Set Enemy Tracking difficulty (e, m, h): ";
                std::cin >> in;

                while (in != "e" && in != "m" && in != "h") {
                    std::cerr << "Invalid option" << std::endl;
                    std::cout << "Enter here: ";

                    if (std::cin.fail()) {
                        if (std::cin.eof()) return 0;

                        std::cin.clear();
                        std::cin.ignore();
                    }

                    std::cin >> in;
                }

                if (in == "e") {
                    radius = 2;
                    std::cout << "Enemy Tracking Difficulty: Easy (radius 2)" << std::endl;
                } else if (in == "m") {
                    radius = 3;
                    std::cout << "Enemy Tracking Difficulty: Medium (radius 3)" << std::endl;
                } else if (in == "h") {
                    radius = 4;
                    std::cout << "Enemy Tracking Difficulty: Hard (radius 4)" << std::endl;
                }

            }

            std::cout << "End of Settings menu." << std::endl;

        } else if (race == "n") {
            // Continue
            std::cout << "Settings menu bypassed." << std::endl;

        }



        std::cout << "Choose your character: Shade 's' (default), Drow 'd', Vampire 'v', Goblin 'g', Troll 't'" << std::endl;
        std::cout << "Enter here: ";

        std::getline(std::cin, race);
        std::getline(std::cin, race);



        while (race != "" && race != "s" && race != "d" && race != "v" && race != "g" && race != "t") {
            std::cerr << "Invalid race" << std::endl;
            std::cout << "Enter here: ";

            if (std::cin.fail()) {
                if (std::cin.eof()) return 0;

                std::cin.clear();
                std::cin.ignore();
            }

            std::cin >> std::noskipws >> race;
        }

        if (race == "q") {
            return 0; // NOTE: MAYBE HAVE IT SO A NEW GAME STARTS??
        } else if (race == "r") {
            restart = true; // Sort of useless LOL
            continue;
        } else if (race == "") { // default race
            race = "s";
        }

        std::cout << "Race selected: " + race << std::endl;
/*
    int seed = -1;
        bool enemyTracking = false;
        int radius = -1;
*/

        Board b = Board {floors, filled, playerSpawns, enemies, dragonHoards, race, seed, enemyTracking, radius};


        td.drawFloor(std::cout, b, "The adventure begins");

        std::string cmd;

        while (true) {
            std::cout << "Enter command: ";
            getline(std::cin, cmd);

            // break clause
            if (std::cin.fail()) {
                if (std::cin.eof()) {
                    return 0;
                }
            }

            // Process commands
            std::string message;

            if (cmd == "no" || cmd == "so" || cmd == "ea" || cmd == "we" || cmd == "ne" || cmd == "nw" || cmd == "se" || cmd == "sw") {
                // Move player in given direction
                message = b.movePlayer(cmd);

                if (message == "Dungeon cleared. You win!") {
                    // Game Won by Player
                    winner = 1;

                    break;
                } 

            } else if (static_cast<int>(cmd.length()) == 4 && cmd[0] == 'u') {
                // Use potion in given direction
                message = b.usePotion(cmd.substr(cmd.length() - 2));

            } else if (static_cast<int>(cmd.length()) == 4 && cmd[0] == 'a') {
                // Attack enemy in the given direction
                message = b.attackEnemy(cmd.substr(cmd.length() - 2));

            } else if (cmd == "f") {
                // Freeze enemies
                bool isFrozen = b.toggleFreeze();

                message = "Enemies Frozen: ";
                
                if (isFrozen) {
                    message += "Enabled ";
                 } else {
                    message += "Disabled ";
                 }

            } else if (cmd == "r") {
                // Restart game
                std::cout << "Resetting the game..." << std::endl;
                restart = true;
                winner = 0;

                break;
            } else if (cmd == "q") {
                // Quit Game
                std::cout << "You gave up! Better luck next time!" << std::endl;;

                return 0;
            } else {
                // Invalid Command
                std::cerr << "Invalid Command" << std::endl;
                continue;
            }

            // Move Enemies
            if (message.length () > 30 && message.substr(message.length()-26) == "Proceeding to next floor. ") {

            } else {
                std::string e_message = b.moveEnemies();

                if (e_message.length() == 0) {
                    e_message = "Enemies moved.";
                }

                message +=e_message;
            }
            

            td.drawFloor(std::cout, b, message);

            if (message.length() > 12 && message.substr(message.length()-10) == "Game Over!") {
                // Player killed and lost
                winner = 2;
                break;
            }

        } // End of Command Interpreter

        if (winner == 1) {
            // Print winner stuff
            
            std::cout << "Congratulations! You won!" << std::endl;
        } else if (winner == 2) {
            // Print loser stuff
            
            std::cout << "You have been defeated!" << std::endl;

        }

        if (winner != 0) {
            // Ask Player if they want to play again
            std::cout << "Play again? y or n" << std::endl;
            std::string replay = "";
            
            while (replay != "y" && replay != "n") {
                if (replay != "") {
                    std::cerr << "Invalid Answer" << std::endl;
                }
                
                std::cin >> replay;

                if (std::cin.fail()) {
                    if (std::cin.eof()) return 0;

                    std::cin.clear();
                    std::cin.ignore();
                }
            }

            if (replay == "y") {
                restart = true;
            }
        }

    } // End of restart loop

    

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x608, %rsp            # imm = 0x608
movq %rsi, 0x208(%rsp)
movl %edi, 0xe4(%rsp)
movq 0x2084d(%rip), %r12     # 0x25ff0
movq 0x2081e(%rip), %r13     # 0x25fc8
movq 0x20827(%rip), %r15     # 0x25fd8
leaq 0x98(%rsp), %r14
leaq 0x168fa(%rip), %rbp     # 0x1c0ba
movl $0x0, 0x4(%rsp)
leaq 0x400(%rsp), %rbx
movq %rbx, %rdi
callq 0x5250
xorl %eax, %eax
movq %rax, 0x200(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x1f0(%rsp)
movq %rax, 0x1e0(%rsp)
movaps %xmm0, 0x1d0(%rsp)
movq %rax, 0x1c0(%rsp)
movaps %xmm0, 0x1b0(%rsp)
movq %rax, 0x1a0(%rsp)
movaps %xmm0, 0x190(%rsp)
movq %rax, 0xb8(%rsp)
movl %eax, 0xc0(%rsp)
movq %rax, 0xc8(%rsp)
movl %eax, 0xd0(%rsp)
movq %rax, 0xd8(%rsp)
cmpl $0x1, 0xe4(%rsp)
jne 0x5863
movq %rbx, %rdi
leaq 0x167ad(%rip), %rsi     # 0x1c004
movl $0x8, %edx
callq 0x5130
jmp 0x58c6
movq 0x208(%rsp), %rax
movq 0x8(%rax), %rsi
leaq 0x2b0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x58(%rsp), %rdx
callq 0x7394
leaq 0x400(%rsp), %rdi
movq %rbx, %rsi
movl $0x8, %edx
callq 0x51b0
movq 0x2b0(%rsp), %rdi
leaq 0x2c0(%rsp), %rax
cmpq %rax, %rdi
je 0x58be
movq 0x2c0(%rsp), %rsi
incq %rsi
callq 0x5200
leaq 0x400(%rsp), %rbx
movq %rbx, %rdi
leaq 0x1f0(%rsp), %rsi
leaq 0x1d0(%rsp), %rdx
leaq 0x1b0(%rsp), %rcx
leaq 0x190(%rsp), %r8
leaq 0xb8(%rsp), %r9
callq 0x7ffa
movq %rbx, %rdi
callq 0x5060
leaq 0x68(%rsp), %rax
movq %rax, 0x58(%rsp)
xorl %ecx, %ecx
movq %rcx, 0x60(%rsp)
movb %cl, 0x68(%rsp)
leaq 0xa8(%rsp), %rax
movq %rax, 0x98(%rsp)
movq %rcx, 0xa0(%rsp)
movb %cl, 0xa8(%rsp)
movl $0x3c, %edx
movq %r13, %rdi
leaq 0x1670b(%rip), %rsi     # 0x1c04c
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
movl $0x1f, %edx
movq %r13, %rdi
leaq 0x1670c(%rip), %rsi     # 0x1c089
callq 0x5260
movq %r15, %rdi
movq %r14, %rsi
callq 0x5290
movq %r14, %rdi
leaq 0x16712(%rip), %rsi     # 0x1c0a9
callq 0x50a0
testl %eax, %eax
je 0x5a41
movq %r14, %rdi
leaq 0x16a45(%rip), %rsi     # 0x1c3f3
callq 0x50a0
testl %eax, %eax
je 0x5a41
movl $0xe, %edx
movq %r12, %rdi
leaq 0x166e1(%rip), %rsi     # 0x1c0ab
callq 0x5260
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r12, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
movl $0xc, %edx
movq %r13, %rdi
movq %rbp, %rsi
callq 0x5260
movq (%r15), %rax
movq -0x18(%rax), %rdi
movl 0x20(%r15,%rdi), %eax
testb $0x5, %al
je 0x5a31
testb $0x2, %al
jne 0x6ca3
addq %r15, %rdi
xorl %esi, %esi
callq 0x5370
movq %r15, %rdi
callq 0x53b0
movq %r15, %rdi
movq %r14, %rsi
callq 0x5290
jmp 0x598d
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
movq %r14, %rdi
leaq 0x16656(%rip), %rsi     # 0x1c0a9
callq 0x50a0
testl %eax, %eax
je 0x65e4
leaq 0x58(%rsp), %rdi
leaq 0x16987(%rip), %rsi     # 0x1c3f3
callq 0x50a0
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq %rcx, 0x8(%rsp)
testl %eax, %eax
jne 0x5abb
movl $0x17, %edx
movq %r13, %rdi
leaq 0x167bc(%rip), %rsi     # 0x1c24a
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
xorl %ebp, %ebp
movl $0x58, %edx
movq %r13, %rdi
leaq 0x16796(%rip), %rsi     # 0x1c262
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
movl $0xc, %edx
movq %r13, %rdi
leaq 0x165b2(%rip), %rsi     # 0x1c0ba
callq 0x5260
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %edx
movq %r15, %rdi
leaq 0x58(%rsp), %rsi
callq 0x53c0
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %edx
movq %r15, %rdi
leaq 0x58(%rsp), %rsi
callq 0x53c0
leaq 0x58(%rsp), %rbx
movq %rbx, %rdi
leaq 0x172eb(%rip), %rsi     # 0x1ce4f
callq 0x50a0
testl %eax, %eax
je 0x5c80
movq %rbx, %rdi
leaq 0x16774(%rip), %rsi     # 0x1c2ef
callq 0x50a0
testl %eax, %eax
je 0x5c80
movq %rbx, %rdi
leaq 0x165d7(%rip), %rsi     # 0x1c169
callq 0x50a0
testl %eax, %eax
je 0x5c80
movq %rbx, %rdi
leaq 0x16712(%rip), %rsi     # 0x1c2bb
callq 0x50a0
testl %eax, %eax
je 0x5c80
movq %rbx, %rdi
leaq 0x174ef(%rip), %rsi     # 0x1d0af
callq 0x50a0
testl %eax, %eax
je 0x5c80
movq %rbx, %rdi
leaq 0x17207(%rip), %rsi     # 0x1cdde
callq 0x50a0
testl %eax, %eax
je 0x5c80
movl $0xc, %edx
movq %r12, %rdi
leaq 0x166ca(%rip), %rsi     # 0x1c2bd
callq 0x5260
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r12, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
movl $0xc, %edx
movq %r13, %rdi
leaq 0x1648b(%rip), %rsi     # 0x1c0ba
callq 0x5260
movq (%r15), %rax
movq -0x18(%rax), %rdi
movl 0x20(%r15,%rdi), %eax
testb $0x5, %al
je 0x5c5e
testb $0x2, %al
jne 0x6ca3
addq %r15, %rdi
xorl %esi, %esi
callq 0x5370
movq %r15, %rdi
callq 0x53b0
movq (%r15), %rax
movq -0x18(%rax), %rax
andl $0xffffefff, 0x18(%r15,%rax) # imm = 0xFFFFEFFF
movq %r15, %rdi
leaq 0x58(%rsp), %rsi
callq 0x5290
jmp 0x5b55
movq %rbx, %rdi
leaq 0x16640(%rip), %rsi     # 0x1c2ca
callq 0x50a0
testl %eax, %eax
je 0x6ca3
movq %rbx, %rdi
leaq 0x16761(%rip), %rsi     # 0x1c402
callq 0x50a0
testl %eax, %eax
je 0x6751
movq %rbx, %rdi
leaq 0x17197(%rip), %rsi     # 0x1ce4f
callq 0x50a0
testl %eax, %eax
jne 0x5cdf
movq 0x60(%rsp), %rdx
movl $0x1, %r8d
leaq 0x58(%rsp), %rdi
xorl %esi, %esi
leaq 0x16615(%rip), %rcx     # 0x1c2ef
callq 0x52f0
leaq 0x2b0(%rsp), %rdi
leaq 0x165de(%rip), %rsi     # 0x1c2cc
leaq 0x58(%rsp), %rdx
callq 0x73d1
movq 0x2b0(%rsp), %rsi
movq 0x2b8(%rsp), %rdx
movq %r13, %rdi
callq 0x5260
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
movq 0x2b0(%rsp), %rdi
leaq 0x2c0(%rsp), %rax
cmpq %rax, %rdi
je 0x5d5f
movq 0x2c0(%rsp), %rsi
incq %rsi
callq 0x5200
leaq 0x298(%rsp), %rdi
leaq 0x1f0(%rsp), %rsi
callq 0x745a
leaq 0xe8(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
callq 0x74f4
leaq 0x280(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x7586
leaq 0x268(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x7624
leaq 0x250(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x7624
leaq 0x180(%rsp), %rax
movq %rax, 0x170(%rsp)
movq 0x58(%rsp), %rsi
movq 0x60(%rsp), %rdx
addq %rsi, %rdx
leaq 0x170(%rsp), %rbx
movq %rbx, %rdi
callq 0x7954
movl 0x14(%rsp), %eax
movzbl %bpl, %r10d
leaq 0x2b0(%rsp), %r14
movq %r14, %rdi
leaq 0x298(%rsp), %rsi
leaq 0xe8(%rsp), %rdx
leaq 0x280(%rsp), %rcx
leaq 0x268(%rsp), %r8
leaq 0x250(%rsp), %r9
pushq 0x8(%rsp)
pushq %r10
pushq %rax
pushq %rbx
callq 0xd244
addq $0x20, %rsp
movq 0x170(%rsp), %rdi
leaq 0x180(%rsp), %rax
cmpq %rax, %rdi
leaq 0x150(%rsp), %rbx
je 0x5e6e
movq 0x180(%rsp), %rsi
incq %rsi
callq 0x5200
leaq 0x250(%rsp), %rdi
callq 0x76be
leaq 0x268(%rsp), %rdi
callq 0x76be
leaq 0x280(%rsp), %rdi
callq 0x7700
movq 0xe8(%rsp), %rdi
testq %rdi, %rdi
je 0x5eda
movq 0x108(%rsp), %rsi
subq %rdi, %rsi
callq 0x5200
xorl %eax, %eax
movq %rax, 0xe8(%rsp)
movl %eax, 0xf0(%rsp)
movq %rax, 0xf8(%rsp)
movl %eax, 0x100(%rsp)
movq %rax, 0x108(%rsp)
leaq 0x298(%rsp), %rdi
callq 0x7748
leaq 0x160(%rsp), %rax
movq %rax, 0x150(%rsp)
movq %rbx, %rdi
leaq 0x163db(%rip), %rsi     # 0x1c2dc
leaq 0x163e8(%rip), %rdx     # 0x1c2f0
callq 0x7a9c
leaq 0x13(%rsp), %rdi
movq %r13, %rsi
movq %r14, %rdx
movq %rbx, %rcx
callq 0x1a5d0
movq 0x150(%rsp), %rdi
leaq 0x160(%rsp), %rax
cmpq %rax, %rdi
je 0x5f45
movq 0x160(%rsp), %rsi
incq %rsi
callq 0x5200
leaq 0x88(%rsp), %rax
movq %rax, 0x78(%rsp)
movq $0x0, 0x80(%rsp)
movb $0x0, 0x88(%rsp)
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
movl $0x0, 0x8(%rsp)
movl $0xf, %edx
movq %r13, %rdi
leaq 0x1636e(%rip), %rsi     # 0x1c2f1
callq 0x5260
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %edx
movq %r15, %rdi
leaq 0x78(%rsp), %rsi
callq 0x53c0
movq (%r15), %rax
movq -0x18(%rax), %rax
movl 0x20(%r15,%rax), %eax
testb $0x5, %al
setne %cl
andl $0x2, %eax
shrl %eax
testb %al, %cl
jne 0x6761
leaq 0x28(%rsp), %rax
movq %rax, 0x18(%rsp)
movq $0x0, 0x20(%rsp)
movb $0x0, 0x28(%rsp)
leaq 0x78(%rsp), %rbx
movq %rbx, %rdi
leaq 0x16310(%rip), %rsi     # 0x1c301
callq 0x50a0
testl %eax, %eax
je 0x6158
movq %rbx, %rdi
leaq 0x162fc(%rip), %rsi     # 0x1c304
callq 0x50a0
testl %eax, %eax
je 0x6158
movq %rbx, %rdi
leaq 0x162e8(%rip), %rsi     # 0x1c307
callq 0x50a0
testl %eax, %eax
je 0x6158
movq %rbx, %rdi
leaq 0x162d4(%rip), %rsi     # 0x1c30a
callq 0x50a0
testl %eax, %eax
je 0x6158
movq %rbx, %rdi
leaq 0x162c0(%rip), %rsi     # 0x1c30d
callq 0x50a0
testl %eax, %eax
je 0x6158
movq %rbx, %rdi
leaq 0x162ac(%rip), %rsi     # 0x1c310
callq 0x50a0
testl %eax, %eax
je 0x6158
movq %rbx, %rdi
leaq 0x16298(%rip), %rsi     # 0x1c313
callq 0x50a0
testl %eax, %eax
je 0x6158
movq %rbx, %rdi
leaq 0x16284(%rip), %rsi     # 0x1c316
callq 0x50a0
testl %eax, %eax
je 0x6158
movq 0x80(%rsp), %rdx
movl %edx, %eax
cmpq $0x4, %rax
leaq 0x2b0(%rsp), %rbp
jne 0x64af
movq 0x78(%rsp), %rcx
cmpb $0x75, (%rcx)
jne 0x6411
addq $-0x2, %rdx
leaq 0x230(%rsp), %rbp
movq %rbp, %rdi
leaq 0x78(%rsp), %rsi
movq $-0x1, %rcx
callq 0x5220
leaq 0x38(%rsp), %rbx
movq %rbx, %rdi
leaq 0x2b0(%rsp), %rsi
movq %rbp, %rdx
callq 0x15948
leaq 0x18(%rsp), %rdi
movq %rbx, %rsi
callq 0x5280
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x612a
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5200
movq 0x230(%rsp), %rdi
leaq 0x240(%rsp), %rax
cmpq %rax, %rdi
je 0x6203
movq 0x240(%rsp), %rsi
incq %rsi
callq 0x5200
jmp 0x6203
leaq 0x140(%rsp), %rax
movq %rax, 0x130(%rsp)
movq 0x78(%rsp), %rsi
movq 0x80(%rsp), %rdx
addq %rsi, %rdx
leaq 0x130(%rsp), %rbx
movq %rbx, %rdi
callq 0x7954
leaq 0x2b0(%rsp), %rsi
leaq 0x38(%rsp), %rbp
movq %rbp, %rdi
movq %rbx, %rdx
callq 0xf8c0
leaq 0x18(%rsp), %rdi
movq %rbp, %rsi
callq 0x5280
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x61c9
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5200
movq 0x130(%rsp), %rdi
leaq 0x140(%rsp), %rax
cmpq %rax, %rdi
je 0x61ee
movq 0x140(%rsp), %rsi
incq %rsi
callq 0x5200
leaq 0x18(%rsp), %rdi
leaq 0x1611f(%rip), %rsi     # 0x1c319
callq 0x50a0
testl %eax, %eax
je 0x6244
movq 0x20(%rsp), %rbp
cmpq $0x1f, %rbp
jb 0x6254
leaq -0x1a(%rbp), %rdx
leaq 0x3e0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x18(%rsp), %rsi
movq $-0x1, %rcx
callq 0x5220
movq %rbx, %rdi
leaq 0x16a97(%rip), %rsi     # 0x1cccf
callq 0x50a0
testl %eax, %eax
sete %bl
jmp 0x6256
movl $0xf, %ebp
movl $0x1, %r14d
jmp 0x63df
xorl %ebx, %ebx
cmpq $0x1f, %rbp
leaq 0x2b0(%rsp), %rbp
jb 0x6289
movq 0x3e0(%rsp), %rdi
leaq 0x3f0(%rsp), %rax
cmpq %rax, %rdi
je 0x6289
movq 0x3f0(%rsp), %rsi
incq %rsi
callq 0x5200
testb %bl, %bl
jne 0x62ed
leaq 0x38(%rsp), %rdi
movq %rbp, %rsi
callq 0x12bb0
movq 0x40(%rsp), %rdx
testq %rdx, %rdx
jne 0x62bd
movl $0xe, %r8d
leaq 0x38(%rsp), %rdi
xorl %esi, %esi
leaq 0x160e9(%rip), %rcx     # 0x1c3a1
callq 0x52f0
movq 0x38(%rsp), %rsi
movq 0x40(%rsp), %rdx
leaq 0x18(%rsp), %rdi
callq 0x50b0
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x62ed
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5200
leaq 0x120(%rsp), %rax
movq %rax, 0x110(%rsp)
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
addq %rsi, %rdx
leaq 0x110(%rsp), %rdi
callq 0x7954
leaq 0x13(%rsp), %rdi
movq %r13, %rsi
leaq 0x2b0(%rsp), %rdx
leaq 0x110(%rsp), %rcx
callq 0x1a5d0
movq 0x110(%rsp), %rdi
leaq 0x120(%rsp), %rax
cmpq %rax, %rdi
je 0x6359
movq 0x120(%rsp), %rsi
incq %rsi
callq 0x5200
movq 0x20(%rsp), %rbp
cmpq $0xd, %rbp
jb 0x639a
leaq -0xa(%rbp), %rdx
leaq 0x3c0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x18(%rsp), %rsi
movq $-0x1, %rcx
callq 0x5220
movq %rbx, %rdi
leaq 0x16b08(%rip), %rsi     # 0x1ce96
callq 0x50a0
testl %eax, %eax
sete %bl
jmp 0x639c
xorl %ebx, %ebx
cmpq $0xd, %rbp
jb 0x63c7
movq 0x3c0(%rsp), %rdi
leaq 0x3d0(%rsp), %rax
cmpq %rax, %rdi
je 0x63c7
movq 0x3d0(%rsp), %rsi
incq %rsi
callq 0x5200
testb %bl, %bl
movl $0x2, %eax
cmovnel %eax, %r14d
movl $0x0, %ebp
movl $0xf, %eax
cmovnel %eax, %ebp
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x63fb
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x5200
testl %ebp, %ebp
je 0x5f74
cmpl $0xe, %ebp
je 0x5f74
jmp 0x6773
cmpl $0x4, %eax
jne 0x64af
movq 0x78(%rsp), %rax
cmpb $0x61, (%rax)
jne 0x64af
addq $-0x2, %rdx
leaq 0x210(%rsp), %rbp
movq %rbp, %rdi
leaq 0x78(%rsp), %rsi
movq $-0x1, %rcx
callq 0x5220
leaq 0x38(%rsp), %rbx
movq %rbx, %rdi
leaq 0x2b0(%rsp), %rsi
movq %rbp, %rdx
callq 0x110e0
leaq 0x18(%rsp), %rdi
movq %rbx, %rsi
callq 0x5280
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x6489
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x5200
movq 0x210(%rsp), %rdi
leaq 0x220(%rsp), %rax
cmpq %rax, %rdi
je 0x6203
movq 0x220(%rsp), %rsi
jmp 0x614b
leaq 0x78(%rsp), %rbx
movq %rbx, %rdi
leaq 0x16bd4(%rip), %rsi     # 0x1d092
callq 0x50a0
testl %eax, %eax
je 0x651b
movq %rbx, %rdi
leaq 0x15f31(%rip), %rsi     # 0x1c402
callq 0x50a0
testl %eax, %eax
je 0x6567
movq %rbx, %rdi
leaq 0x15de2(%rip), %rsi     # 0x1c2ca
callq 0x50a0
testl %eax, %eax
je 0x65b6
movl $0xf, %edx
movq %r12, %rdi
leaq 0x15e8d(%rip), %rsi     # 0x1c391
callq 0x5260
movl $0xe, %ebp
movq %r12, %rdi
callq 0x5100
jmp 0x63df
movq %rbp, %rdi
callq 0xeba4
movl %eax, %ebp
movq 0x20(%rsp), %rdx
movl $0x10, %r8d
leaq 0x18(%rsp), %rdi
xorl %esi, %esi
leaq 0x15df5(%rip), %rcx     # 0x1c333
callq 0x52f0
testb %bpl, %bpl
leaq 0x15e00(%rip), %rsi     # 0x1c34d
leaq 0x15df0(%rip), %rax     # 0x1c344
cmovneq %rax, %rsi
leaq 0x18(%rsp), %rdi
callq 0x53d0
jmp 0x6203
movl $0x15, %edx
movq %r13, %rdi
leaq 0x15de1(%rip), %rsi     # 0x1c357
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
movl $0xf, %ebp
xorl %r14d, %r14d
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x63df
movl $0x23, %edx
movq %r13, %rdi
leaq 0x15da8(%rip), %rsi     # 0x1c36d
callq 0x5260
movq %r13, %rdi
callq 0x5100
movl $0x0, 0x4(%rsp)
movl $0x1, %ebp
jmp 0x63df
movl $0xd, %edx
movq %r13, %rdi
leaq 0x15ad4(%rip), %rsi     # 0x1c0c7
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
movl $0x20, %edx
movq %r13, %rdi
leaq 0x15aa6(%rip), %rsi     # 0x1c0d5
callq 0x5260
movq %r15, %rdi
leaq 0x14(%rsp), %rsi
callq 0x5120
movq (%r15), %rax
movq -0x18(%rax), %rdi
movl 0x20(%r15,%rdi), %eax
testb $0x5, %al
je 0x66cd
testb $0x2, %al
jne 0x6ca3
addq %r15, %rdi
xorl %esi, %esi
callq 0x5370
movq %r15, %rdi
callq 0x53b0
movl $0xc, %edx
movq %r13, %rdi
leaq 0x15a7c(%rip), %rsi     # 0x1c0f6
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
movl $0x1f, %edx
movq %r13, %rdi
leaq 0x15a4d(%rip), %rsi     # 0x1c103
callq 0x5260
movq %r15, %rdi
leaq 0x14(%rsp), %rsi
callq 0x5120
jmp 0x6641
cmpl $-0x1, 0x14(%rsp)
je 0x6a08
movl $0xe, %edx
movq %r13, %rdi
leaq 0x15a3c(%rip), %rsi     # 0x1c123
callq 0x5260
movl 0x14(%rsp), %r14d
movl %r14d, %ebx
negl %ebx
cmovsl %r14d, %ebx
movl $0x1, %ebp
cmpl $0xa, %ebx
jb 0x6963
movl $0x4, %ebp
movl %ebx, %eax
cmpl $0x63, %eax
jbe 0x695c
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x6961
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x6963
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebp
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x670f
addl $-0x3, %ebp
jmp 0x6963
movl $0x2, %ebp
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x6e49
movl $0x0, 0x4(%rsp)
movl $0x1, %ebp
jmp 0x6e1a
cmpl $0xf, %ebp
jne 0x6e1a
testl %r14d, %r14d
je 0x6954
cmpl $0x2, %r14d
je 0x67a6
movl $0x19, %edx
leaq 0x15c19(%rip), %rsi     # 0x1c3b0
cmpl $0x1, %r14d
leaq 0x15c53(%rip), %rbp     # 0x1c3f5
je 0x67b9
jmp 0x67f2
movl $0x17, %edx
leaq 0x15c18(%rip), %rsi     # 0x1c3ca
leaq 0x15c3c(%rip), %rbp     # 0x1c3f5
movq %r13, %rdi
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
testl %r14d, %r14d
je 0x6e18
movl $0x12, %edx
movq %r13, %rdi
leaq 0x15be1(%rip), %rsi     # 0x1c3e2
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
leaq 0x28(%rsp), %rax
movq %rax, 0x18(%rsp)
leaq 0x18(%rsp), %rbx
movq %rbx, %rdi
leaq 0x16608(%rip), %rdx     # 0x1ce4f
movq %rdx, %rsi
callq 0x7a9c
movq %rbx, %rdi
leaq 0x15850(%rip), %rsi     # 0x1c0a9
callq 0x50a0
testl %eax, %eax
je 0x6909
movq %rbx, %rdi
leaq 0x15b83(%rip), %rsi     # 0x1c3f3
callq 0x50a0
testl %eax, %eax
je 0x6909
movq %rbx, %rdi
leaq 0x165c8(%rip), %rsi     # 0x1ce4f
callq 0x50a0
testl %eax, %eax
je 0x68c8
movl $0xe, %edx
movq %r12, %rdi
movq %rbp, %rsi
callq 0x5260
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r12, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
movq %r15, %rdi
leaq 0x18(%rsp), %rsi
callq 0x5290
movq (%r15), %rax
movq -0x18(%rax), %rdi
movl 0x20(%r15,%rdi), %eax
testb $0x5, %al
je 0x68ff
testb $0x2, %al
jne 0x6f3b
addq %r15, %rdi
xorl %esi, %esi
callq 0x5370
movq %r15, %rdi
callq 0x53b0
leaq 0x18(%rsp), %rbx
jmp 0x684f
movq %rbx, %rdi
leaq 0x15796(%rip), %rsi     # 0x1c0a9
callq 0x50a0
testl %eax, %eax
movl 0x8(%rsp), %ecx
movzbl %cl, %ecx
movl $0x1, %eax
cmovel %eax, %ecx
movl %ecx, 0x8(%rsp)
xorl %ebp, %ebp
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x6e1a
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x5200
jmp 0x6e1a
movl %r14d, %ebp
jmp 0x6e1a
addl $-0x2, %ebp
jmp 0x6963
decl %ebp
shrl $0x1f, %r14d
leal (%r14,%rbp), %esi
leaq 0x2c0(%rsp), %rax
movq %rax, 0x2b0(%rsp)
leaq 0x2b0(%rsp), %rdi
movl $0x2d, %edx
callq 0x5270
addq 0x2b0(%rsp), %r14
movq %r14, %rdi
movl %ebp, %esi
movl %ebx, %edx
callq 0x781b
movq 0x2b0(%rsp), %rsi
movq 0x2b8(%rsp), %rdx
movq %r13, %rdi
callq 0x5260
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
movq 0x2b0(%rsp), %rdi
leaq 0x2c0(%rsp), %rax
cmpq %rax, %rdi
je 0x6a08
movq 0x2c0(%rsp), %rsi
incq %rsi
callq 0x5200
movl $0x21, %edx
movq %r13, %rdi
leaq 0x1571b(%rip), %rsi     # 0x1c132
callq 0x5260
movq %r15, %rdi
leaq 0x98(%rsp), %rsi
callq 0x5290
leaq 0x98(%rsp), %r14
leaq 0x1567f(%rip), %rbp     # 0x1c0ba
movq %r14, %rdi
leaq 0x15664(%rip), %rsi     # 0x1c0a9
callq 0x50a0
testl %eax, %eax
je 0x6aef
movq %r14, %rdi
leaq 0x15997(%rip), %rsi     # 0x1c3f3
callq 0x50a0
testl %eax, %eax
je 0x6aef
movl $0xe, %edx
movq %r12, %rdi
leaq 0x15633(%rip), %rsi     # 0x1c0ab
callq 0x5260
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r12, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
movl $0xc, %edx
movq %r13, %rdi
movq %rbp, %rsi
callq 0x5260
movq (%r15), %rax
movq -0x18(%rax), %rdi
movl 0x20(%r15,%rdi), %eax
testb $0x5, %al
je 0x6adf
testb $0x2, %al
jne 0x6ca3
addq %r15, %rdi
xorl %esi, %esi
callq 0x5370
movq %r15, %rdi
callq 0x53b0
movq %r15, %rdi
movq %r14, %rsi
callq 0x5290
jmp 0x6a3b
movq %r14, %rdi
leaq 0x155b0(%rip), %rsi     # 0x1c0a9
callq 0x50a0
testl %eax, %eax
je 0x6b55
movq %r14, %rdi
leaq 0x158e7(%rip), %rsi     # 0x1c3f3
callq 0x50a0
testl %eax, %eax
jne 0x6b51
movl $0x17, %edx
movq %r13, %rdi
leaq 0x15647(%rip), %rsi     # 0x1c16b
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
xorl %ebp, %ebp
jmp 0x6b94
movl $0x16, %edx
movq %r13, %rdi
leaq 0x155f0(%rip), %rsi     # 0x1c154
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movb $0x1, %bpl
movq %rax, %rdi
callq 0x5140
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movq %rax, 0x8(%rsp)
testb %bpl, %bpl
je 0x6dd7
movl $0x29, %edx
movq %r13, %rdi
leaq 0x155cd(%rip), %rsi     # 0x1c183
callq 0x5260
movq %r15, %rdi
leaq 0x98(%rsp), %rsi
callq 0x5290
leaq 0x98(%rsp), %r14
movq %r14, %rdi
leaq 0x156eb(%rip), %rsi     # 0x1c2c8
callq 0x50a0
testl %eax, %eax
je 0x6cbd
movq %r14, %rdi
leaq 0x155b9(%rip), %rsi     # 0x1c1ad
callq 0x50a0
testl %eax, %eax
je 0x6cbd
movq %r14, %rdi
leaq 0x155a4(%rip), %rsi     # 0x1c1af
callq 0x50a0
testl %eax, %eax
je 0x6cbd
movl $0xe, %edx
movq %r12, %rdi
leaq 0x15484(%rip), %rsi     # 0x1c0ab
callq 0x5260
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r12, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
movl $0xc, %edx
movq %r13, %rdi
leaq 0x15457(%rip), %rsi     # 0x1c0ba
callq 0x5260
movq (%r15), %rax
movq -0x18(%rax), %rdi
movl 0x20(%r15,%rdi), %eax
testb $0x5, %al
je 0x6c8e
testb $0x2, %al
jne 0x6ca3
addq %r15, %rdi
xorl %esi, %esi
callq 0x5370
movq %r15, %rdi
callq 0x53b0
movq %r15, %rdi
leaq 0x98(%rsp), %rsi
callq 0x5290
jmp 0x6bcb
movl $0x0, 0x8(%rsp)
movl $0x1, %ebp
movl $0x0, 0x4(%rsp)
jmp 0x6e49
movq %r14, %rdi
leaq 0x15601(%rip), %rsi     # 0x1c2c8
callq 0x50a0
testl %eax, %eax
je 0x6d49
movq %r14, %rdi
leaq 0x154d3(%rip), %rsi     # 0x1c1ad
callq 0x50a0
testl %eax, %eax
je 0x6d91
movq %r14, %rdi
leaq 0x154be(%rip), %rsi     # 0x1c1af
callq 0x50a0
testl %eax, %eax
jne 0x6dd7
movl $0x2a, %edx
movq %r13, %rdi
leaq 0x154fc(%rip), %rsi     # 0x1c209
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movl $0x4, %ecx
movq %rcx, 0x8(%rsp)
movq %rax, %rdi
callq 0x5140
jmp 0x6dd7
movl $0x2a, %edx
movq %r13, %rdi
leaq 0x15459(%rip), %rsi     # 0x1c1b1
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movl $0x2, %ecx
movq %rcx, 0x8(%rsp)
movq %rax, %rdi
callq 0x5140
jmp 0x6dd7
movl $0x2c, %edx
movq %r13, %rdi
leaq 0x1543c(%rip), %rsi     # 0x1c1dc
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movl $0x3, %ecx
movq %rcx, 0x8(%rsp)
movq %rax, %rdi
callq 0x5140
movl $0x15, %edx
movq %r13, %rdi
leaq 0x1544e(%rip), %rsi     # 0x1c234
callq 0x5260
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x51e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5140
jmp 0x5abd
xorl %ebp, %ebp
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x6e3c
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5200
leaq 0x2b0(%rsp), %rdi
callq 0x778a
movq 0x98(%rsp), %rdi
leaq 0xa8(%rsp), %rax
cmpq %rax, %rdi
je 0x6e6e
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x5200
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x6e8a
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5200
movq 0xb8(%rsp), %rdi
testq %rdi, %rdi
je 0x6ecf
movq 0xd8(%rsp), %rsi
subq %rdi, %rsi
callq 0x5200
xorl %eax, %eax
movq %rax, 0xb8(%rsp)
movl %eax, 0xc0(%rsp)
movq %rax, 0xc8(%rsp)
movl %eax, 0xd0(%rsp)
movq %rax, 0xd8(%rsp)
leaq 0x190(%rsp), %rdi
callq 0x76be
leaq 0x1b0(%rsp), %rdi
callq 0x76be
leaq 0x1d0(%rsp), %rdi
callq 0x7700
leaq 0x1f0(%rsp), %rdi
callq 0x7748
leaq 0x400(%rsp), %rdi
callq 0x5070
testl $0xfffffffd, %ebp       # imm = 0xFFFFFFFD
leaq 0x98(%rsp), %r14
leaq 0x15195(%rip), %rbp     # 0x1c0ba
jne 0x6ffd
testb $0x1, 0x8(%rsp)
jne 0x57c8
jmp 0x6ffd
movl $0x0, 0x4(%rsp)
movl $0x1, %ebp
jmp 0x692f
movq %rax, %r14
movq 0x2b0(%rsp), %rdi
leaq 0x2c0(%rsp), %rax
cmpq %rax, %rdi
je 0x6f7a
movq 0x2c0(%rsp), %rsi
incq %rsi
callq 0x5200
jmp 0x6f7a
movq %rax, %r14
movq %r14, %rdi
callq 0x50e0
movl $0x1b, %edx
movq %r12, %rdi
leaq 0x1509f(%rip), %rsi     # 0x1c030
callq 0x5260
movq %r12, %rdi
callq 0x5100
leaq 0x400(%rsp), %rdi
callq 0x5060
jmp 0x6fde
movq %rax, %rdi
callq 0x50e0
movl $0x1d, %edx
movq %r12, %rdi
leaq 0x1504e(%rip), %rsi     # 0x1c012
callq 0x5260
movq %r12, %rdi
callq 0x5100
leaq 0x400(%rsp), %rdi
callq 0x5060
callq 0x5340
movl $0x1, %ebp
movl $0x0, 0x8(%rsp)
movl $0x1, 0x4(%rsp)
jmp 0x6e8a
movl 0x4(%rsp), %eax
addq $0x608, %rsp            # imm = 0x608
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
callq 0x5340
jmp 0x72fa
movq %rax, %rbx
callq 0x5340
jmp 0x72fa
movq %rax, %rdi
callq 0x7388
movq %rax, %rbx
movq 0x210(%rsp), %rdi
leaq 0x220(%rsp), %rax
cmpq %rax, %rdi
je 0x7258
movq 0x220(%rsp), %rsi
jmp 0x7250
jmp 0x722b
movq %rax, %rbx
movq 0x230(%rsp), %rdi
leaq 0x240(%rsp), %rax
cmpq %rax, %rdi
je 0x7258
movq 0x240(%rsp), %rsi
jmp 0x7250
jmp 0x722b
jmp 0x727c
jmp 0x722b
jmp 0x72b6
movq %rax, %rbx
jmp 0x7135
movq %rax, %rbx
jmp 0x7142
movq %rax, %rbx
jmp 0x714f
movq %rax, %rbx
jmp 0x7194
jmp 0x72b6
jmp 0x72b6
movq %rax, %rbx
movq 0x150(%rsp), %rdi
leaq 0x160(%rsp), %rax
cmpq %rax, %rdi
je 0x72a1
movq 0x160(%rsp), %rsi
jmp 0x7299
movq %rax, %rbx
jmp 0x72a1
movq %rax, %rbx
movq 0x170(%rsp), %rdi
leaq 0x180(%rsp), %rax
cmpq %rax, %rdi
je 0x7128
movq 0x180(%rsp), %rsi
incq %rsi
callq 0x5200
jmp 0x7128
movq %rax, %rbx
leaq 0x250(%rsp), %rdi
callq 0x76be
leaq 0x268(%rsp), %rdi
callq 0x76be
leaq 0x280(%rsp), %rdi
callq 0x7700
movq 0xe8(%rsp), %rdi
testq %rdi, %rdi
je 0x7194
movq 0x108(%rsp), %rsi
subq %rdi, %rsi
callq 0x5200
xorl %eax, %eax
movq %rax, 0xe8(%rsp)
movl %eax, 0xf0(%rsp)
movq %rax, 0xf8(%rsp)
movl %eax, 0x100(%rsp)
movq %rax, 0x108(%rsp)
leaq 0x298(%rsp), %rdi
callq 0x7748
jmp 0x72b9
jmp 0x727c
jmp 0x71ad
movq %rax, %rbx
movq 0x2b0(%rsp), %rdi
leaq 0x2c0(%rsp), %rax
cmpq %rax, %rdi
je 0x72b9
movq 0x2c0(%rsp), %rsi
incq %rsi
callq 0x5200
jmp 0x72b9
jmp 0x722b
jmp 0x722b
jmp 0x722b
jmp 0x722b
movq %rax, %rbx
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x7258
movq 0x48(%rsp), %rsi
jmp 0x7250
movq %rax, %rbx
jmp 0x72fa
movq %rax, %rbx
movq 0x110(%rsp), %rdi
leaq 0x120(%rsp), %rax
cmpq %rax, %rdi
je 0x7258
movq 0x120(%rsp), %rsi
jmp 0x7250
jmp 0x722b
movq %rax, %rbx
jmp 0x7258
movq %rax, %rbx
movq 0x130(%rsp), %rdi
leaq 0x140(%rsp), %rax
cmpq %rax, %rdi
je 0x7258
movq 0x140(%rsp), %rsi
incq %rsi
callq 0x5200
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x727f
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x5200
jmp 0x727f
jmp 0x72b6
jmp 0x72b6
jmp 0x72b6
movq %rax, %rbx
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x72a1
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x5200
leaq 0x2b0(%rsp), %rdi
callq 0x778a
jmp 0x72b9
jmp 0x72b6
jmp 0x72b6
jmp 0x72b6
movq %rax, %rbx
movq 0x98(%rsp), %rdi
leaq 0xa8(%rsp), %rax
cmpq %rax, %rdi
je 0x72de
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x5200
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x72fa
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x5200
movq 0xb8(%rsp), %rdi
testq %rdi, %rdi
je 0x733f
movq 0xd8(%rsp), %rsi
subq %rdi, %rsi
callq 0x5200
xorl %eax, %eax
movq %rax, 0xb8(%rsp)
movl %eax, 0xc0(%rsp)
movq %rax, 0xc8(%rsp)
movl %eax, 0xd0(%rsp)
movq %rax, 0xd8(%rsp)
leaq 0x190(%rsp), %rdi
callq 0x76be
leaq 0x1b0(%rsp), %rdi
callq 0x76be
leaq 0x1d0(%rsp), %rdi
callq 0x7700
leaq 0x1f0(%rsp), %rdi
callq 0x7748
leaq 0x400(%rsp), %rdi
callq 0x5070
movq %rbx, %rdi
callq 0x5390