// File: rfotino[P]consolite-assembler/src/parser.cpp
// Function: Parser::_validateInstruction(std::vector<Token, std::allocator<Token>> const&, unsigned int const&)
bool Parser::_validateInstruction(const std::vector<Token>& tokens,
                                  const unsigned& line) {
  const std::string opcode = tokens[0].getData();
  if ("NOP" == opcode || "TIMERST" == opcode) {
    if (1 < tokens.size()) {
      std::cerr << "Error: Invalid syntax for " << opcode
                << ", must be by itself on line " << line << "." << std::endl;
      return false;
    }
  } else if ("INPUT" == opcode || "LOAD" == opcode || "MOV" == opcode ||
             "ADD" == opcode || "SUB" == opcode || "MUL" == opcode ||
             "DIV" == opcode || "AND" == opcode || "OR" == opcode ||
             "XOR" == opcode || "SHL" == opcode || "SHRA" == opcode ||
             "SHRL" == opcode || "CMP" == opcode || "TST" == opcode ||
             "PIXEL" == opcode || "STOR" == opcode) {
    if (3 != tokens.size() ||
        REGISTER != tokens[1].getType() ||
        REGISTER != tokens[2].getType()) {
      std::cerr << "Error: Invalid syntax for " << opcode
                << ", expected " << opcode << " REG1 REG2 on line "
                << line << "." << std::endl;
      return false;
    }
  } else if ("PUSH" == opcode || "POP" == opcode || "COLOR" == opcode ||
             "JMP" == opcode || "TIME" == opcode || "RND" == opcode) {
    if (2 != tokens.size() ||
        REGISTER != tokens[1].getType()) {
      std::cerr << "Error: Invalid syntax for " << opcode
                << ", expected " << opcode << " REG on line "
                << line << "." << std::endl;
      return false;
    }
  } else if ("CALL" == opcode || "JMPI" == opcode || "JEQ" == opcode ||
             "JNE" == opcode || "JG" == opcode || "JGE" == opcode ||
             "JA" == opcode || "JAE" == opcode || "JL" == opcode ||
             "JLE" == opcode || "JB" == opcode || "JBE" == opcode ||
             "JO" == opcode || "JNO" == opcode || "JS" == opcode ||
             "JNS" == opcode) {
    if (2 != tokens.size() ||
        (DATA != tokens[1].getType() &&
         LABELREF != tokens[1].getType())) {
      std::cerr << "Error: Invalid syntax for " << opcode
                << ", expected " << opcode << " LABEL|DATA on line "
                << line << "." << std::endl;
      return false;
    } else if (DATA == tokens[1].getType() && 2 < tokens[1].getSize()) {
      std::cerr << "Error: Data too large, max of 16 bits on line "
                << line << "." << std::endl;
      return false;
    } else if (LABELREF == tokens[1].getType()) {
      // Save the label reference for later validation against
      // the full list of label declarations.
      _labelRefs.push_back(make_pair(tokens[1].getData(), line));
    }
  } else if ("RET" == opcode) {
    if (2 < tokens.size() ||
        (2 == tokens.size() && DATA != tokens[1].getType())) {
      std::cerr << "Error: Invalid syntax for " << opcode
                << ", expected " << opcode << " [DATA] on line "
                << line << "." << std::endl;
      return false;
    } else if (2 == tokens.size() && 1 < tokens[1].getSize()) {
      std::cerr << "Error: Data too large, max of 8 bits on line "
                << line << "." << std::endl;
      return false;
    }
  } else if ("LOADI" == opcode || "STORI" == opcode || "MOVI" == opcode) {
    if (3 != tokens.size() ||
        REGISTER != tokens[1].getType() ||
        (DATA != tokens[2].getType() &&
         LABELREF != tokens[2].getType())) {
      std::cerr << "Error: Invalid syntax for " << opcode
                << ", expected " << opcode << " REG LABEL|DATA on line "
                << line << "." << std::endl;
      return false;
    } else if (DATA == tokens[2].getType() && 2 < tokens[2].getSize()) {
      std::cerr << "Error: Data too large, max of 16 bits on line "
                << line << "." << std::endl;
      return false;
    } else if (LABELREF == tokens[2].getType()) {
      // Save the label reference for later validation against
      // the full list of label declarations.
      _labelRefs.push_back(make_pair(tokens[2].getData(), line));
    }
  }
  return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x330, %rsp            # imm = 0x330
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x18(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xc4a0
movq %rax, %rsi
leaq -0x40(%rbp), %rdi
movq %rdi, -0xf0(%rbp)
callq 0xc4c0
movq -0xf0(%rbp), %rsi
leaq 0x51f0(%rip), %rdi      # 0xf040
callq 0xc4f0
movb %al, -0xe1(%rbp)
jmp 0x9e5d
movb -0xe1(%rbp), %al
testb $0x1, %al
jne 0x9e90
jmp 0x9e69
leaq 0x524a(%rip), %rdi      # 0xf0ba
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0xf9(%rbp)
jmp 0x9e81
movb -0xf9(%rbp), %al
testb $0x1, %al
jne 0x9e90
jmp 0x9f6d
movq -0x18(%rbp), %rdi
callq 0x9620
movq %rax, %rcx
movl $0x1, %eax
cmpq %rcx, %rax
jae 0x9f68
movq 0xc13f(%rip), %rdi      # 0x15ff0
leaq 0x52fc(%rip), %rsi      # 0xf1b4
callq 0x21e0
movq %rax, -0x108(%rbp)
jmp 0x9ec6
movq -0x108(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x21c0
movq %rax, -0x110(%rbp)
jmp 0x9edf
movq -0x110(%rbp), %rdi
leaq 0x52e2(%rip), %rsi      # 0xf1cf
callq 0x21e0
movq %rax, -0x118(%rbp)
jmp 0x9efb
movq -0x118(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %esi
callq 0x22c0
movq %rax, -0x120(%rbp)
jmp 0x9f16
movq -0x120(%rbp), %rdi
leaq 0x5242(%rip), %rsi      # 0xf166
callq 0x21e0
movq %rax, -0x128(%rbp)
jmp 0x9f32
movq -0x128(%rbp), %rdi
movq 0xc080(%rip), %rsi      # 0x15fc0
callq 0x2240
jmp 0x9f47
movb $0x0, -0x1(%rbp)
movl $0x1, -0x50(%rbp)
jmp 0xb0f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0xb10e
jmp 0xb0ec
leaq 0x50d0(%rip), %rdi      # 0xf044
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x129(%rbp)
jmp 0x9f85
movb -0x129(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0x9f95
leaq 0x50b7(%rip), %rdi      # 0xf053
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x12a(%rbp)
jmp 0x9fad
movb -0x12a(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0x9fbd
leaq 0x509a(%rip), %rdi      # 0xf05e
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x12b(%rbp)
jmp 0x9fd5
movb -0x12b(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0x9fe5
leaq 0x5084(%rip), %rdi      # 0xf070
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x12c(%rbp)
jmp 0x9ffd
movb -0x12c(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa00d
leaq 0x5060(%rip), %rdi      # 0xf074
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x12d(%rbp)
jmp 0xa025
movb -0x12d(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa035
leaq 0x503c(%rip), %rdi      # 0xf078
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x12e(%rbp)
jmp 0xa04d
movb -0x12e(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa05d
leaq 0x5018(%rip), %rdi      # 0xf07c
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x12f(%rbp)
jmp 0xa075
movb -0x12f(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa085
leaq 0x4ff4(%rip), %rdi      # 0xf080
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x130(%rbp)
jmp 0xa09d
movb -0x130(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa0ad
leaq 0x4fed(%rip), %rdi      # 0xf0a1
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x131(%rbp)
jmp 0xa0c5
movb -0x131(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa0d5
leaq 0x4fa8(%rip), %rdi      # 0xf084
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x132(%rbp)
jmp 0xa0ed
movb -0x132(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa0fd
leaq 0x4f84(%rip), %rdi      # 0xf088
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x133(%rbp)
jmp 0xa115
movb -0x133(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa125
leaq 0x4f60(%rip), %rdi      # 0xf08c
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x134(%rbp)
jmp 0xa13d
movb -0x134(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa14d
leaq 0x4f3d(%rip), %rdi      # 0xf091
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x135(%rbp)
jmp 0xa165
movb -0x135(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa175
leaq 0x4f1a(%rip), %rdi      # 0xf096
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x136(%rbp)
jmp 0xa18d
movb -0x136(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa199
leaq 0x4efa(%rip), %rdi      # 0xf09a
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x137(%rbp)
jmp 0xa1b1
movb -0x137(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa1bd
leaq 0x4ee0(%rip), %rdi      # 0xf0a4
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x138(%rbp)
jmp 0xa1d5
movb -0x138(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa1e1
leaq 0x4ec2(%rip), %rdi      # 0xf0aa
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x139(%rbp)
jmp 0xa1f9
movb -0x139(%rbp), %al
testb $0x1, %al
jne 0xa208
jmp 0xa363
movq -0x18(%rbp), %rdi
callq 0x9620
movq %rax, %rcx
movl $0x3, %eax
cmpq %rcx, %rax
jne 0xa27c
movq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x140(%rbp)
jmp 0xa23c
movl -0x140(%rbp), %ecx
movl $0x1, %eax
cmpl %ecx, %eax
jne 0xa27c
movq -0x18(%rbp), %rdi
movl $0x2, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x144(%rbp)
jmp 0xa269
movl -0x144(%rbp), %ecx
movl $0x1, %eax
cmpl %ecx, %eax
je 0xa35e
movq 0xbd6d(%rip), %rdi      # 0x15ff0
leaq 0x4f2a(%rip), %rsi      # 0xf1b4
callq 0x21e0
movq %rax, -0x150(%rbp)
jmp 0xa298
movq -0x150(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x21c0
movq %rax, -0x158(%rbp)
jmp 0xa2b1
movq -0x158(%rbp), %rdi
leaq 0x4f2d(%rip), %rsi      # 0xf1ec
callq 0x21e0
movq %rax, -0x160(%rbp)
jmp 0xa2cd
movq -0x160(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x21c0
movq %rax, -0x168(%rbp)
jmp 0xa2e6
movq -0x168(%rbp), %rdi
leaq 0x4f04(%rip), %rsi      # 0xf1f8
callq 0x21e0
movq %rax, -0x170(%rbp)
jmp 0xa302
movq -0x170(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %esi
callq 0x22c0
movq %rax, -0x178(%rbp)
jmp 0xa31d
movq -0x178(%rbp), %rdi
leaq 0x4e3b(%rip), %rsi      # 0xf166
callq 0x21e0
movq %rax, -0x180(%rbp)
jmp 0xa339
movq -0x180(%rbp), %rdi
movq 0xbc79(%rip), %rsi      # 0x15fc0
callq 0x2240
jmp 0xa34e
movb $0x0, -0x1(%rbp)
movl $0x1, -0x50(%rbp)
jmp 0xb0f7
jmp 0xb0ea
leaq 0x4cfd(%rip), %rdi      # 0xf067
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x181(%rbp)
jmp 0xa37b
movb -0x181(%rbp), %al
testb $0x1, %al
jne 0xa446
jmp 0xa38b
leaq 0x4cda(%rip), %rdi      # 0xf06c
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x182(%rbp)
jmp 0xa3a3
movb -0x182(%rbp), %al
testb $0x1, %al
jne 0xa446
jmp 0xa3b3
leaq 0x4ce4(%rip), %rdi      # 0xf09e
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x183(%rbp)
jmp 0xa3cb
movb -0x183(%rbp), %al
testb $0x1, %al
jne 0xa446
jmp 0xa3d7
leaq 0x4ce8(%rip), %rdi      # 0xf0c6
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x184(%rbp)
jmp 0xa3ef
movb -0x184(%rbp), %al
testb $0x1, %al
jne 0xa446
jmp 0xa3fb
leaq 0x4cb3(%rip), %rdi      # 0xf0b5
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x185(%rbp)
jmp 0xa413
movb -0x185(%rbp), %al
testb $0x1, %al
jne 0xa446
jmp 0xa41f
leaq 0x4c9c(%rip), %rdi      # 0xf0c2
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x186(%rbp)
jmp 0xa437
movb -0x186(%rbp), %al
testb $0x1, %al
jne 0xa446
jmp 0xa574
movq -0x18(%rbp), %rdi
callq 0x9620
movq %rax, %rcx
movl $0x2, %eax
cmpq %rcx, %rax
jne 0xa48d
movq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x18c(%rbp)
jmp 0xa47a
movl -0x18c(%rbp), %ecx
movl $0x1, %eax
cmpl %ecx, %eax
je 0xa56f
movq 0xbb5c(%rip), %rdi      # 0x15ff0
leaq 0x4d19(%rip), %rsi      # 0xf1b4
callq 0x21e0
movq %rax, -0x198(%rbp)
jmp 0xa4a9
movq -0x198(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x21c0
movq %rax, -0x1a0(%rbp)
jmp 0xa4c2
movq -0x1a0(%rbp), %rdi
leaq 0x4d1c(%rip), %rsi      # 0xf1ec
callq 0x21e0
movq %rax, -0x1a8(%rbp)
jmp 0xa4de
movq -0x1a8(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x21c0
movq %rax, -0x1b0(%rbp)
jmp 0xa4f7
movq -0x1b0(%rbp), %rdi
leaq 0x4d07(%rip), %rsi      # 0xf20c
callq 0x21e0
movq %rax, -0x1b8(%rbp)
jmp 0xa513
movq -0x1b8(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %esi
callq 0x22c0
movq %rax, -0x1c0(%rbp)
jmp 0xa52e
movq -0x1c0(%rbp), %rdi
leaq 0x4c2a(%rip), %rsi      # 0xf166
callq 0x21e0
movq %rax, -0x1c8(%rbp)
jmp 0xa54a
movq -0x1c8(%rbp), %rdi
movq 0xba68(%rip), %rsi      # 0x15fc0
callq 0x2240
jmp 0xa55f
movb $0x0, -0x1(%rbp)
movl $0x1, -0x50(%rbp)
jmp 0xb0f7
jmp 0xb0e8
leaq 0x4acf(%rip), %rdi      # 0xf04a
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1c9(%rbp)
jmp 0xa58c
movb -0x1c9(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa59c
leaq 0x4b27(%rip), %rdi      # 0xf0ca
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1ca(%rbp)
jmp 0xa5b4
movb -0x1ca(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa5c4
leaq 0x4b04(%rip), %rdi      # 0xf0cf
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1cb(%rbp)
jmp 0xa5dc
movb -0x1cb(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa5ec
leaq 0x4ae0(%rip), %rdi      # 0xf0d3
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1cc(%rbp)
jmp 0xa604
movb -0x1cc(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa614
leaq 0x4abc(%rip), %rdi      # 0xf0d7
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1cd(%rbp)
jmp 0xa62c
movb -0x1cd(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa63c
leaq 0x4a97(%rip), %rdi      # 0xf0da
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1ce(%rbp)
jmp 0xa654
movb -0x1ce(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa664
leaq 0x4a73(%rip), %rdi      # 0xf0de
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1cf(%rbp)
jmp 0xa67c
movb -0x1cf(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa68c
leaq 0x4a4e(%rip), %rdi      # 0xf0e1
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1d0(%rbp)
jmp 0xa6a4
movb -0x1d0(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa6b4
leaq 0x4a2a(%rip), %rdi      # 0xf0e5
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1d1(%rbp)
jmp 0xa6cc
movb -0x1d1(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa6dc
leaq 0x4a05(%rip), %rdi      # 0xf0e8
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1d2(%rbp)
jmp 0xa6f4
movb -0x1d2(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa704
leaq 0x49e1(%rip), %rdi      # 0xf0ec
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1d3(%rbp)
jmp 0xa71c
movb -0x1d3(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa72c
leaq 0x49bc(%rip), %rdi      # 0xf0ef
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1d4(%rbp)
jmp 0xa744
movb -0x1d4(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa754
leaq 0x4998(%rip), %rdi      # 0xf0f3
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1d5(%rbp)
jmp 0xa76c
movb -0x1d5(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa778
leaq 0x4977(%rip), %rdi      # 0xf0f6
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1d6(%rbp)
jmp 0xa790
movb -0x1d6(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa79c
leaq 0x4957(%rip), %rdi      # 0xf0fa
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1d7(%rbp)
jmp 0xa7b4
movb -0x1d7(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xa7c0
leaq 0x4936(%rip), %rdi      # 0xf0fd
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x1d8(%rbp)
jmp 0xa7d8
movb -0x1d8(%rbp), %al
testb $0x1, %al
jne 0xa7e7
jmp 0xaaf8
movq -0x18(%rbp), %rdi
callq 0x9620
movq %rax, %rcx
movl $0x2, %eax
cmpq %rcx, %rax
jne 0xa85f
movq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x1dc(%rbp)
jmp 0xa81b
movl -0x1dc(%rbp), %ecx
movl $0x2, %eax
cmpl %ecx, %eax
je 0xa941
movq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x1e0(%rbp)
jmp 0xa84c
movl -0x1e0(%rbp), %ecx
movl $0x4, %eax
cmpl %ecx, %eax
je 0xa941
movq 0xb78a(%rip), %rdi      # 0x15ff0
leaq 0x4947(%rip), %rsi      # 0xf1b4
callq 0x21e0
movq %rax, -0x1e8(%rbp)
jmp 0xa87b
movq -0x1e8(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x21c0
movq %rax, -0x1f0(%rbp)
jmp 0xa894
movq -0x1f0(%rbp), %rdi
leaq 0x494a(%rip), %rsi      # 0xf1ec
callq 0x21e0
movq %rax, -0x1f8(%rbp)
jmp 0xa8b0
movq -0x1f8(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x21c0
movq %rax, -0x200(%rbp)
jmp 0xa8c9
movq -0x200(%rbp), %rdi
leaq 0x49b5(%rip), %rsi      # 0xf28c
callq 0x21e0
movq %rax, -0x208(%rbp)
jmp 0xa8e5
movq -0x208(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %esi
callq 0x22c0
movq %rax, -0x210(%rbp)
jmp 0xa900
movq -0x210(%rbp), %rdi
leaq 0x4858(%rip), %rsi      # 0xf166
callq 0x21e0
movq %rax, -0x218(%rbp)
jmp 0xa91c
movq -0x218(%rbp), %rdi
movq 0xb696(%rip), %rsi      # 0x15fc0
callq 0x2240
jmp 0xa931
movb $0x0, -0x1(%rbp)
movl $0x1, -0x50(%rbp)
jmp 0xb0f7
movq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x21c(%rbp)
jmp 0xa95f
movl -0x21c(%rbp), %ecx
movl $0x2, %eax
cmpl %ecx, %eax
jne 0xaa1a
movq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc530
movq %rax, -0x228(%rbp)
jmp 0xa991
movq -0x228(%rbp), %rcx
movl $0x2, %eax
cmpq %rcx, %rax
jae 0xaa1a
movq 0xb647(%rip), %rdi      # 0x15ff0
leaq 0x486a(%rip), %rsi      # 0xf21a
callq 0x21e0
movq %rax, -0x230(%rbp)
jmp 0xa9be
movq -0x230(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %esi
callq 0x22c0
movq %rax, -0x238(%rbp)
jmp 0xa9d9
movq -0x238(%rbp), %rdi
leaq 0x477f(%rip), %rsi      # 0xf166
callq 0x21e0
movq %rax, -0x240(%rbp)
jmp 0xa9f5
movq -0x240(%rbp), %rdi
movq 0xb5bd(%rip), %rsi      # 0x15fc0
callq 0x2240
jmp 0xaa0a
movb $0x0, -0x1(%rbp)
movl $0x1, -0x50(%rbp)
jmp 0xb0f7
movq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x244(%rbp)
jmp 0xaa38
movl -0x244(%rbp), %ecx
movl $0x4, %eax
cmpl %ecx, %eax
jne 0xaaef
movq -0xf8(%rbp), %rax
addq $0x38, %rax
movq %rax, -0x250(%rbp)
movq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0xc4a0
movq %rax, %rsi
leaq -0x98(%rbp), %rdi
callq 0xc4c0
jmp 0xaa7c
movq -0x20(%rbp), %rdx
leaq -0x78(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0xc580
jmp 0xaa92
movq -0x250(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xc550
jmp 0xaaa4
leaq -0x78(%rbp), %rdi
callq 0x4f90
leaq -0x98(%rbp), %rdi
callq 0x2120
jmp 0xaaef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0xaade
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x4f90
leaq -0x98(%rbp), %rdi
callq 0x2120
jmp 0xb10e
jmp 0xaaf1
jmp 0xaaf3
jmp 0xb0e6
leaq 0x4550(%rip), %rdi      # 0xf04f
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x251(%rbp)
jmp 0xab10
movb -0x251(%rbp), %al
testb $0x1, %al
jne 0xab1f
jmp 0xad2b
movq -0x18(%rbp), %rdi
callq 0x9620
movq %rax, %rcx
movl $0x2, %eax
cmpq %rcx, %rax
jb 0xab80
movq -0x18(%rbp), %rdi
callq 0x9620
movq %rax, %rcx
movl $0x2, %eax
cmpq %rcx, %rax
jne 0xac62
movq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x258(%rbp)
jmp 0xab6d
movl -0x258(%rbp), %ecx
movl $0x2, %eax
cmpl %ecx, %eax
je 0xac62
movq 0xb469(%rip), %rdi      # 0x15ff0
leaq 0x4626(%rip), %rsi      # 0xf1b4
callq 0x21e0
movq %rax, -0x260(%rbp)
jmp 0xab9c
movq -0x260(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x21c0
movq %rax, -0x268(%rbp)
jmp 0xabb5
movq -0x268(%rbp), %rdi
leaq 0x4629(%rip), %rsi      # 0xf1ec
callq 0x21e0
movq %rax, -0x270(%rbp)
jmp 0xabd1
movq -0x270(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x21c0
movq %rax, -0x278(%rbp)
jmp 0xabea
movq -0x278(%rbp), %rdi
leaq 0x4651(%rip), %rsi      # 0xf249
callq 0x21e0
movq %rax, -0x280(%rbp)
jmp 0xac06
movq -0x280(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %esi
callq 0x22c0
movq %rax, -0x288(%rbp)
jmp 0xac21
movq -0x288(%rbp), %rdi
leaq 0x4537(%rip), %rsi      # 0xf166
callq 0x21e0
movq %rax, -0x290(%rbp)
jmp 0xac3d
movq -0x290(%rbp), %rdi
movq 0xb375(%rip), %rsi      # 0x15fc0
callq 0x2240
jmp 0xac52
movb $0x0, -0x1(%rbp)
movl $0x1, -0x50(%rbp)
jmp 0xb0f7
movq -0x18(%rbp), %rdi
callq 0x9620
movq %rax, %rcx
movl $0x2, %eax
cmpq %rcx, %rax
jne 0xad24
movq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc530
movq %rax, -0x298(%rbp)
jmp 0xac9b
movq -0x298(%rbp), %rcx
movl $0x1, %eax
cmpq %rcx, %rax
jae 0xad24
movq 0xb33d(%rip), %rdi      # 0x15ff0
leaq 0x45a0(%rip), %rsi      # 0xf25a
callq 0x21e0
movq %rax, -0x2a0(%rbp)
jmp 0xacc8
movq -0x2a0(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %esi
callq 0x22c0
movq %rax, -0x2a8(%rbp)
jmp 0xace3
movq -0x2a8(%rbp), %rdi
leaq 0x4475(%rip), %rsi      # 0xf166
callq 0x21e0
movq %rax, -0x2b0(%rbp)
jmp 0xacff
movq -0x2b0(%rbp), %rdi
movq 0xb2b3(%rip), %rsi      # 0x15fc0
callq 0x2240
jmp 0xad14
movb $0x0, -0x1(%rbp)
movl $0x1, -0x50(%rbp)
jmp 0xb0f7
jmp 0xad26
jmp 0xb0e4
leaq 0x4326(%rip), %rdi      # 0xf058
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x2b1(%rbp)
jmp 0xad43
movb -0x2b1(%rbp), %al
testb $0x1, %al
jne 0xad9a
jmp 0xad4f
leaq 0x4359(%rip), %rdi      # 0xf0af
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x2b2(%rbp)
jmp 0xad67
movb -0x2b2(%rbp), %al
testb $0x1, %al
jne 0xad9a
jmp 0xad73
leaq 0x42e8(%rip), %rdi      # 0xf062
leaq -0x40(%rbp), %rsi
callq 0xc4f0
movb %al, -0x2b3(%rbp)
jmp 0xad8b
movb -0x2b3(%rbp), %al
testb $0x1, %al
jne 0xad9a
jmp 0xb0e2
movq -0x18(%rbp), %rdi
callq 0x9620
movq %rax, %rcx
movl $0x3, %eax
cmpq %rcx, %rax
jne 0xae43
movq -0x18(%rbp), %rdi
movl $0x1, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x2b8(%rbp)
jmp 0xadd2
movl -0x2b8(%rbp), %ecx
movl $0x1, %eax
cmpl %ecx, %eax
jne 0xae43
movq -0x18(%rbp), %rdi
movl $0x2, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x2bc(%rbp)
jmp 0xadff
movl -0x2bc(%rbp), %ecx
movl $0x2, %eax
cmpl %ecx, %eax
je 0xaf25
movq -0x18(%rbp), %rdi
movl $0x2, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x2c0(%rbp)
jmp 0xae30
movl -0x2c0(%rbp), %ecx
movl $0x4, %eax
cmpl %ecx, %eax
je 0xaf25
movq 0xb1a6(%rip), %rdi      # 0x15ff0
leaq 0x4363(%rip), %rsi      # 0xf1b4
callq 0x21e0
movq %rax, -0x2c8(%rbp)
jmp 0xae5f
movq -0x2c8(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x21c0
movq %rax, -0x2d0(%rbp)
jmp 0xae78
movq -0x2d0(%rbp), %rdi
leaq 0x4366(%rip), %rsi      # 0xf1ec
callq 0x21e0
movq %rax, -0x2d8(%rbp)
jmp 0xae94
movq -0x2d8(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x21c0
movq %rax, -0x2e0(%rbp)
jmp 0xaead
movq -0x2e0(%rbp), %rdi
leaq 0x43cd(%rip), %rsi      # 0xf288
callq 0x21e0
movq %rax, -0x2e8(%rbp)
jmp 0xaec9
movq -0x2e8(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %esi
callq 0x22c0
movq %rax, -0x2f0(%rbp)
jmp 0xaee4
movq -0x2f0(%rbp), %rdi
leaq 0x4274(%rip), %rsi      # 0xf166
callq 0x21e0
movq %rax, -0x2f8(%rbp)
jmp 0xaf00
movq -0x2f8(%rbp), %rdi
movq 0xb0b2(%rip), %rsi      # 0x15fc0
callq 0x2240
jmp 0xaf15
movb $0x0, -0x1(%rbp)
movl $0x1, -0x50(%rbp)
jmp 0xb0f7
movq -0x18(%rbp), %rdi
movl $0x2, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x2fc(%rbp)
jmp 0xaf43
movl -0x2fc(%rbp), %ecx
movl $0x2, %eax
cmpl %ecx, %eax
jne 0xaffe
movq -0x18(%rbp), %rdi
movl $0x2, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc530
movq %rax, -0x308(%rbp)
jmp 0xaf75
movq -0x308(%rbp), %rcx
movl $0x2, %eax
cmpq %rcx, %rax
jae 0xaffe
movq 0xb063(%rip), %rdi      # 0x15ff0
leaq 0x4286(%rip), %rsi      # 0xf21a
callq 0x21e0
movq %rax, -0x310(%rbp)
jmp 0xafa2
movq -0x310(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %esi
callq 0x22c0
movq %rax, -0x318(%rbp)
jmp 0xafbd
movq -0x318(%rbp), %rdi
leaq 0x419b(%rip), %rsi      # 0xf166
callq 0x21e0
movq %rax, -0x320(%rbp)
jmp 0xafd9
movq -0x320(%rbp), %rdi
movq 0xafd9(%rip), %rsi      # 0x15fc0
callq 0x2240
jmp 0xafee
movb $0x0, -0x1(%rbp)
movl $0x1, -0x50(%rbp)
jmp 0xb0f7
movq -0x18(%rbp), %rdi
movl $0x2, %esi
callq 0xc4a0
movq %rax, %rdi
callq 0xc520
movl %eax, -0x324(%rbp)
jmp 0xb01c
movl -0x324(%rbp), %ecx
movl $0x4, %eax
cmpl %ecx, %eax
jne 0xb0dc
movq -0xf8(%rbp), %rax
addq $0x38, %rax
movq %rax, -0x330(%rbp)
movq -0x18(%rbp), %rdi
movl $0x2, %esi
callq 0xc4a0
movq %rax, %rsi
leaq -0xe0(%rbp), %rdi
callq 0xc4c0
jmp 0xb060
movq -0x20(%rbp), %rdx
leaq -0xc0(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0xc580
jmp 0xb079
movq -0x330(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0xc550
jmp 0xb08e
leaq -0xc0(%rbp), %rdi
callq 0x4f90
leaq -0xe0(%rbp), %rdi
callq 0x2120
jmp 0xb0dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0xb0ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x4f90
leaq -0xe0(%rbp), %rdi
callq 0x2120
jmp 0xb10e
jmp 0xb0de
jmp 0xb0e0
jmp 0xb0e2
jmp 0xb0e4
jmp 0xb0e6
jmp 0xb0e8
jmp 0xb0ea
jmp 0xb0ec
movb $0x1, -0x1(%rbp)
movl $0x1, -0x50(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x2120
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x330, %rsp            # imm = 0x330
popq %rbp
retq
leaq -0x40(%rbp), %rdi
callq 0x2120
movq -0x48(%rbp), %rdi
callq 0x23a0