// File: /workspace/github_cpp_makefile_star2_O2/joao18araujo[P]pierluigi/src/first_species_counterpoint.cpp
// Function: FirstSpeciesCounterpoint::solve(unsigned int, int, int, Song&, bool)
bool FirstSpeciesCounterpoint::solve(unsigned position, int paralels, int same_movements, Song & counterpoint, bool ascendant){
  if(position == 0){
    memset(dp, true, sizeof dp);
    srand(clock());
  }

  if(position >= song->size()){
    // printf("Total: %d %lu\n", paralels, song->size() - same_movements);
    return true;
  }

  // printf("size: %d\n", (int) counterpoint.size());
  // if(position) printf("[%d][%d][%d][%d][%d]\n", position, 0, counterpoint.back().midi_number, paralels, same_movements);
  if(position && !dp[position][0][counterpoint.back().midi_number][paralels][same_movements]) return false;

  vector<Interval> possible_intervals;

  Note note = song->notes[position];
  bool reverse_movement = true;

  if(position){
    auto previous_note = song->notes[position - 1];
    auto previous_counterpoint_note = counterpoint.back();
    auto melodic_cantus_interval = Interval(previous_note, note);
    bool melodic_ascendant = !melodic_cantus_interval.ascendant();
    auto previous_interval = Interval(previous_note, previous_counterpoint_note);
    string previous = previous_interval.description();

    if(not note.rest()){
      if(previous != "P8")
        analyse_and_add_interval(reverse_movement, melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("P8", ascendant), nullptr);

      if(previous != "P5" && ascendant)
        analyse_and_add_interval(reverse_movement, melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("P5", ascendant), nullptr);

      if(position == song->size() - 1){
        analyse_and_add_interval(reverse_movement, melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("P1", ascendant), nullptr);
      }else{
        analyse_and_add_interval(reverse_movement, melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("m3", ascendant), nullptr);
        analyse_and_add_interval(reverse_movement, melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("M3", ascendant), nullptr);
        analyse_and_add_interval(reverse_movement, melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("m6", ascendant), nullptr);
        analyse_and_add_interval(reverse_movement, melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("M6", ascendant), nullptr);
        analyse_and_add_interval(reverse_movement, melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("m10", ascendant), nullptr);
        analyse_and_add_interval(reverse_movement, melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("M10", ascendant), nullptr);
      }
      random_shuffle(possible_intervals.begin(), possible_intervals.end());
      int size = possible_intervals.size();

      //intervals with same movement
      if(previous != "P8")
        analyse_and_add_interval(!reverse_movement, !melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("P8", ascendant), nullptr);
      if(previous != "P5" && ascendant)
        analyse_and_add_interval(!reverse_movement, !melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("P5", ascendant), nullptr);

      if(position == song->size() - 1){
        analyse_and_add_interval(!reverse_movement, !melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("P1", ascendant), nullptr);
      }else{
        analyse_and_add_interval(!reverse_movement, !melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("m3", ascendant), nullptr);
        analyse_and_add_interval(!reverse_movement, !melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("M3", ascendant), nullptr);
        analyse_and_add_interval(!reverse_movement, !melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("m6", ascendant), nullptr);
        analyse_and_add_interval(!reverse_movement, !melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("M6", ascendant), nullptr);
        analyse_and_add_interval(!reverse_movement, !melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("m10", ascendant), nullptr);
        analyse_and_add_interval(!reverse_movement, !melodic_ascendant, possible_intervals, previous_counterpoint_note, note, Interval("M10", ascendant), nullptr);
      }
      random_shuffle(possible_intervals.begin() + size, possible_intervals.end());
    }else{
      possible_intervals.push_back(Interval("P1"));
    }

    int par, sm;
    for(auto interval : possible_intervals){
      auto c_note = Interval::interval_to_note(note, interval);
      Interval melodic_interval(previous_counterpoint_note, note);

      // FIXME confirmar regra de sextas paralelas
      par = paralels - (interval.quantitative == previous_interval.quantitative and (interval.quantitative == 3 || interval.quantitative == 6 || interval.quantitative == 10)); //TODO: criar método retornando qualidade
      sm = same_movements - (melodic_interval.ascendant() != melodic_ascendant);
      if(par < 0 || sm < 0) continue;
      counterpoint.notes.push_back(c_note);
      if(solve(position + 1, par, sm, counterpoint, ascendant)) return true;
      counterpoint.notes.pop_back();
    }
  }else{
    possible_intervals.push_back(Interval("P1", ascendant));
    possible_intervals.push_back(Interval("P8", ascendant));
    if(ascendant) possible_intervals.push_back(Interval("P5", ascendant));
    random_shuffle(possible_intervals.begin(), possible_intervals.end());

    for(auto interval : possible_intervals){
      auto c_note = Interval::interval_to_note(note, interval);
      counterpoint.notes.push_back(c_note);
      if(solve(position + 1, paralels, same_movements, counterpoint, ascendant)) return true;
      counterpoint.notes.pop_back();
    }
  }

  dp[position][0][counterpoint.back().midi_number][paralels][same_movements] = false;
  return false;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1848, %rsp           # imm = 0x1848
movl %r8d, %ebp
movq %rcx, 0x30(%rsp)
movl %edx, 0x3c(%rsp)
movl %esi, 0x38(%rsp)
movl %edi, %r14d
testl %edi, %edi
jne 0xa4ca
leaq 0x302ff(%rip), %rdi     # 0x3a7b0
pushq $0x1
popq %rsi
movl $0x9bc8cf8, %edx        # imm = 0x9BC8CF8
callq 0x5220
callq 0x5270
movl %eax, %edi
callq 0x5330
leaq 0x9bf8fd7(%rip), %rax   # 0x9c034a8
movq (%rax), %rdi
callq 0x17ce4
movb $0x1, %bl
cmpl %r14d, %eax
jbe 0xb999
movl %ebp, 0x40(%rsp)
movslq 0x38(%rsp), %rbp
movslq 0x3c(%rsp), %r12
testl %r14d, %r14d
movq %r12, 0x168(%rsp)
movq %rbp, 0x160(%rsp)
je 0xa561
movq %r14, %r13
movl %r14d, %r15d
imulq $0x1081c8, %r15, %r14   # imm = 0x1081C8
addq 0x2fa5d(%rip), %r14     # 0x39f78
leaq 0xa0(%rsp), %rbx
movq %rbx, %rdi
movq 0x30(%rsp), %rsi
callq 0x17d60
movslq 0x4c(%rbx), %rax
imulq $0xbbd, %rax, %rax      # imm = 0xBBD
imulq $0x259, %rbp, %rcx      # imm = 0x259
addq %r14, %rcx
addq %rax, %rcx
movb (%r12,%rcx), %bpl
movq %rbx, %rdi
callq 0x979a
cmpb $0x1, %bpl
je 0xa567
xorl %ebx, %ebx
jmp 0xb999
movq %r14, %r13
xorl %r15d, %r15d
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
andq $0x0, 0x20(%rsp)
leaq 0x9bf8f2c(%rip), %rax   # 0x9c034a8
movq (%rax), %rax
movq %r15, 0x158(%rsp)
imulq $0x58, %r15, %rsi
addq (%rax), %rsi
leaq 0xa0(%rsp), %rdi
callq 0x12676
movl 0x40(%rsp), %ebp
movzbl %bpl, %eax
movl %eax, 0x8(%rsp)
movq %r13, %r12
testl %r12d, %r12d
je 0xa74d
leaq 0x9bf8eee(%rip), %r15   # 0x9c034a8
movq (%r15), %rax
leal -0x1(%r12), %ecx
imulq $0x58, %rcx, %rsi
addq (%rax), %rsi
leaq 0x170(%rsp), %rdi
callq 0x12676
leaq 0x48(%rsp), %rdi
movq 0x30(%rsp), %rsi
callq 0x17d60
leaq 0x13d0(%rsp), %rdi
leaq 0x170(%rsp), %rsi
callq 0x12676
leaq 0x1378(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x898(%rsp), %rdi
leaq 0x13d0(%rsp), %rsi
leaq 0x1378(%rsp), %rdx
callq 0xf41a
leaq 0x1378(%rsp), %rdi
callq 0x979a
leaq 0x13d0(%rsp), %rdi
callq 0x979a
leaq 0x898(%rsp), %rdi
callq 0xf856
movl %eax, %r13d
leaq 0x1320(%rsp), %rdi
leaq 0x170(%rsp), %rsi
callq 0x12676
leaq 0x12c8(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0x4d8(%rsp), %rdi
leaq 0x1320(%rsp), %rsi
leaq 0x12c8(%rsp), %rdx
callq 0xf41a
leaq 0x12c8(%rsp), %rdi
callq 0x979a
leaq 0x1320(%rsp), %rdi
callq 0x979a
leaq 0x1c8(%rsp), %rdi
leaq 0x4d8(%rsp), %rsi
callq 0xf548
leaq 0xa0(%rsp), %rdi
callq 0x1302a
movl %r13d, %ecx
xorb $0x1, %cl
movb %cl, 0xf(%rsp)
testb %al, %al
je 0xa958
leaq 0x1e931(%rip), %rsi     # 0x29020
leaq 0x278(%rsp), %rdi
leaq 0x248(%rsp), %rdx
callq 0x96e6
leaq 0xf8(%rsp), %rdi
leaq 0x278(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0xf280
leaq 0x10(%rsp), %rdi
leaq 0xf8(%rsp), %rsi
callq 0xc54a
leaq 0x100(%rsp), %rdi
callq 0x51b0
leaq 0x278(%rsp), %rdi
callq 0x51b0
jmp 0xb723
leaq 0x1e8cc(%rip), %rsi     # 0x29020
leaq 0x228(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x96e6
leaq 0x170(%rsp), %rdi
leaq 0x228(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
leaq 0x10(%rsp), %rdi
leaq 0x170(%rsp), %rsi
callq 0xc54a
leaq 0x178(%rsp), %rdi
callq 0x51b0
leaq 0x228(%rsp), %rdi
callq 0x51b0
leaq 0x1e871(%rip), %rsi     # 0x29023
leaq 0x208(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x96e6
leaq 0x170(%rsp), %rdi
leaq 0x208(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
leaq 0x10(%rsp), %rdi
leaq 0x170(%rsp), %rsi
callq 0xc54a
leaq 0x178(%rsp), %rdi
callq 0x51b0
leaq 0x208(%rsp), %rdi
callq 0x51b0
testb %bpl, %bpl
je 0xa86b
leaq 0x1e811(%rip), %rsi     # 0x29026
leaq 0x1e8(%rsp), %rdi
leaq 0x48(%rsp), %rdx
callq 0x96e6
leaq 0x170(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0xf280
leaq 0x10(%rsp), %rdi
leaq 0x170(%rsp), %rsi
callq 0xc54a
leaq 0x178(%rsp), %rdi
callq 0x51b0
leaq 0x1e8(%rsp), %rdi
callq 0x51b0
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0xc3c6
movq 0x10(%rsp), %rbx
movq 0x18(%rsp), %rax
movq %rax, 0x40(%rsp)
leaq 0x48(%rsp), %r12
leaq 0x1798(%rsp), %r13
leaq 0x8c8(%rsp), %rbp
leaq 0x170(%rsp), %r15
cmpq 0x40(%rsp), %rbx
je 0xb925
movq %r12, %rdi
movq %rbx, %rsi
callq 0x97b4
movq %r13, %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
movq %rbp, %rdi
movq %r12, %rsi
callq 0x97b4
movq %rbp, %rdx
movq %r12, %r14
movq %r15, %rdi
movq %r13, %rsi
movq %rdx, %rbp
callq 0xf750
leaq 0x8d0(%rsp), %rdi
callq 0x51b0
movq %r13, %rdi
callq 0x979a
movq 0x30(%rsp), %r12
movq %r12, %rdi
movq %r15, %rsi
callq 0x986e
pushq $0x1
popq %rdi
movl 0x38(%rsp), %esi
movl 0x3c(%rsp), %edx
movq %r12, %rcx
movl 0x8(%rsp), %r8d
callq 0xa482
testb %al, %al
jne 0xabc6
movq %r14, %r12
movq 0x30(%rsp), %rdi
callq 0xc42c
movq %r15, %rdi
callq 0x979a
leaq 0x50(%rsp), %rdi
callq 0x51b0
addq $0x30, %rbx
jmp 0xa8a6
leaq 0x1e6c4(%rip), %rsi     # 0x29023
leaq 0x1c8(%rsp), %rdi
callq 0x982d
movzbl 0xf(%rsp), %r15d
testb %al, %al
je 0xaa32
leaq 0x1270(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0x1218(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1e67b(%rip), %rsi     # 0x29023
leaq 0x4b8(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x868(%rsp), %rdi
leaq 0x4b8(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
pushq $0x1
popq %rdi
leaq 0x10(%rsp), %rdx
leaq 0x1270(%rsp), %rcx
leaq 0x1218(%rsp), %r8
leaq 0x868(%rsp), %r9
movl %r15d, %esi
callq 0xc0ee
leaq 0x870(%rsp), %rdi
callq 0x51b0
leaq 0x4b8(%rsp), %rdi
callq 0x51b0
leaq 0x1218(%rsp), %rdi
callq 0x979a
leaq 0x1270(%rsp), %rdi
callq 0x979a
leaq 0x1e5ed(%rip), %rsi     # 0x29026
leaq 0x1c8(%rsp), %rdi
callq 0x982d
andb %bpl, %al
cmpb $0x1, %al
jne 0xab08
leaq 0x11c0(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0x1168(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1e5a7(%rip), %rsi     # 0x29026
leaq 0x498(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x838(%rsp), %rdi
leaq 0x498(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0xf280
pushq $0x1
popq %rdi
leaq 0x10(%rsp), %rdx
leaq 0x11c0(%rsp), %rcx
leaq 0x1168(%rsp), %r8
leaq 0x838(%rsp), %r9
movl %r15d, %esi
callq 0xc0ee
leaq 0x840(%rsp), %rdi
callq 0x51b0
leaq 0x498(%rsp), %rdi
callq 0x51b0
leaq 0x1168(%rsp), %rdi
callq 0x979a
leaq 0x11c0(%rsp), %rdi
callq 0x979a
leaq 0x9bf8999(%rip), %rax   # 0x9c034a8
movq (%rax), %rdi
callq 0x17ce4
decl %eax
cmpl %r12d, %eax
jne 0xabe4
leaq 0x1740(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0x16e8(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1e4d0(%rip), %rsi     # 0x29020
leaq 0x478(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x808(%rsp), %rdi
leaq 0x478(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
pushq $0x1
popq %rdi
leaq 0x10(%rsp), %rdx
leaq 0x1740(%rsp), %rbx
leaq 0x16e8(%rsp), %r14
leaq 0x808(%rsp), %r9
movl %r15d, %esi
movq %rbx, %rcx
movq %r14, %r8
callq 0xc0ee
leaq 0x810(%rsp), %rdi
callq 0x51b0
leaq 0x478(%rsp), %rdi
jmp 0xb01b
leaq 0x170(%rsp), %rdi
callq 0x979a
leaq 0x50(%rsp), %rdi
callq 0x51b0
movb $0x1, %bl
jmp 0xb982
leaq 0x1110(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0x10b8(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1e417(%rip), %rsi     # 0x29029
leaq 0x458(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x7d8(%rsp), %rdi
leaq 0x458(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
pushq $0x1
popq %rdi
leaq 0x10(%rsp), %rdx
leaq 0x1110(%rsp), %rcx
leaq 0x10b8(%rsp), %r8
leaq 0x7d8(%rsp), %r9
movl %r15d, %esi
callq 0xc0ee
leaq 0x7e0(%rsp), %rdi
callq 0x51b0
leaq 0x458(%rsp), %rdi
callq 0x51b0
leaq 0x10b8(%rsp), %rdi
callq 0x979a
leaq 0x1110(%rsp), %rdi
callq 0x979a
leaq 0x1060(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0x1008(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1e362(%rip), %rsi     # 0x2902c
leaq 0x438(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x7a8(%rsp), %rdi
leaq 0x438(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
pushq $0x1
popq %rdi
leaq 0x10(%rsp), %rdx
leaq 0x1060(%rsp), %rcx
leaq 0x1008(%rsp), %r8
leaq 0x7a8(%rsp), %r9
movl %r15d, %esi
callq 0xc0ee
leaq 0x7b0(%rsp), %rdi
callq 0x51b0
leaq 0x438(%rsp), %rdi
callq 0x51b0
leaq 0x1008(%rsp), %rdi
callq 0x979a
leaq 0x1060(%rsp), %rdi
callq 0x979a
leaq 0xfb0(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0xf58(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1e2ad(%rip), %rsi     # 0x2902f
leaq 0x418(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x778(%rsp), %rdi
leaq 0x418(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
pushq $0x1
popq %rdi
leaq 0x10(%rsp), %rdx
leaq 0xfb0(%rsp), %rcx
leaq 0xf58(%rsp), %r8
leaq 0x778(%rsp), %r9
movl %r15d, %esi
callq 0xc0ee
leaq 0x780(%rsp), %rdi
callq 0x51b0
leaq 0x418(%rsp), %rdi
callq 0x51b0
leaq 0xf58(%rsp), %rdi
callq 0x979a
leaq 0xfb0(%rsp), %rdi
callq 0x979a
leaq 0xf00(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0xea8(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1e1f8(%rip), %rsi     # 0x29032
leaq 0x3f8(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x748(%rsp), %rdi
leaq 0x3f8(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
pushq $0x1
popq %rdi
leaq 0x10(%rsp), %rdx
leaq 0xf00(%rsp), %rcx
leaq 0xea8(%rsp), %r8
leaq 0x748(%rsp), %r9
movl %r15d, %esi
callq 0xc0ee
leaq 0x750(%rsp), %rdi
callq 0x51b0
leaq 0x3f8(%rsp), %rdi
callq 0x51b0
leaq 0xea8(%rsp), %rdi
callq 0x979a
leaq 0xf00(%rsp), %rdi
callq 0x979a
leaq 0xe50(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0xdf8(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1e143(%rip), %rsi     # 0x29035
leaq 0x3d8(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x718(%rsp), %rdi
leaq 0x3d8(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
pushq $0x1
popq %rdi
leaq 0x10(%rsp), %rdx
leaq 0xe50(%rsp), %rcx
leaq 0xdf8(%rsp), %r8
leaq 0x718(%rsp), %r9
movl %r15d, %esi
callq 0xc0ee
leaq 0x720(%rsp), %rdi
callq 0x51b0
leaq 0x3d8(%rsp), %rdi
callq 0x51b0
leaq 0xdf8(%rsp), %rdi
callq 0x979a
leaq 0xe50(%rsp), %rdi
callq 0x979a
leaq 0x1690(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0x1638(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1e08f(%rip), %rsi     # 0x29039
leaq 0x3b8(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x6e8(%rsp), %rdi
leaq 0x3b8(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
pushq $0x1
popq %rdi
leaq 0x10(%rsp), %rdx
leaq 0x1690(%rsp), %rbx
leaq 0x1638(%rsp), %r14
leaq 0x6e8(%rsp), %r9
movl %r15d, %esi
movq %rbx, %rcx
movq %r14, %r8
callq 0xc0ee
leaq 0x6f0(%rsp), %rdi
callq 0x51b0
leaq 0x3b8(%rsp), %rdi
callq 0x51b0
movq %r14, %rdi
callq 0x979a
movq %rbx, %rdi
callq 0x979a
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0xc3c6
movq 0x18(%rsp), %rax
subq 0x10(%rsp), %rax
pushq $0x30
popq %rcx
cqto
idivq %rcx
movq %rax, 0x150(%rsp)
leaq 0x1dfc3(%rip), %rsi     # 0x29023
leaq 0x1c8(%rsp), %rdi
callq 0x982d
movzbl %r13b, %r15d
testb %al, %al
je 0xb130
leaq 0xda0(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0xd48(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1df7c(%rip), %rsi     # 0x29023
leaq 0x398(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x6b8(%rsp), %rdi
leaq 0x398(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
leaq 0x10(%rsp), %rdx
leaq 0xda0(%rsp), %rcx
leaq 0xd48(%rsp), %r8
leaq 0x6b8(%rsp), %r9
xorl %edi, %edi
movl %r15d, %esi
callq 0xc0ee
leaq 0x6c0(%rsp), %rdi
callq 0x51b0
leaq 0x398(%rsp), %rdi
callq 0x51b0
leaq 0xd48(%rsp), %rdi
callq 0x979a
leaq 0xda0(%rsp), %rdi
callq 0x979a
leaq 0x1deef(%rip), %rsi     # 0x29026
leaq 0x1c8(%rsp), %rdi
callq 0x982d
andb %bpl, %al
cmpb $0x1, %al
jne 0xb205
leaq 0xcf0(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0xc98(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1dea9(%rip), %rsi     # 0x29026
leaq 0x378(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x688(%rsp), %rdi
leaq 0x378(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0xf280
leaq 0x10(%rsp), %rdx
leaq 0xcf0(%rsp), %rcx
leaq 0xc98(%rsp), %r8
leaq 0x688(%rsp), %r9
xorl %edi, %edi
movl %r15d, %esi
callq 0xc0ee
leaq 0x690(%rsp), %rdi
callq 0x51b0
leaq 0x378(%rsp), %rdi
callq 0x51b0
leaq 0xc98(%rsp), %rdi
callq 0x979a
leaq 0xcf0(%rsp), %rdi
callq 0x979a
leaq 0x9bf829c(%rip), %rax   # 0x9c034a8
movq (%rax), %rdi
callq 0x17ce4
decl %eax
cmpl %r12d, %eax
jne 0xb2c2
leaq 0x15e0(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0x1588(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1ddd3(%rip), %rsi     # 0x29020
leaq 0x358(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x658(%rsp), %rdi
leaq 0x358(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
leaq 0x10(%rsp), %rdx
leaq 0x15e0(%rsp), %rbx
leaq 0x1588(%rsp), %r14
leaq 0x658(%rsp), %r9
xorl %edi, %edi
movl %r15d, %esi
movq %rbx, %rcx
movq %r14, %r8
callq 0xc0ee
leaq 0x660(%rsp), %rdi
callq 0x51b0
leaq 0x358(%rsp), %rdi
jmp 0xb6f3
leaq 0xc40(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0xbe8(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1dd39(%rip), %rsi     # 0x29029
leaq 0x338(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x628(%rsp), %rdi
leaq 0x338(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
leaq 0x10(%rsp), %rdx
leaq 0xc40(%rsp), %rcx
leaq 0xbe8(%rsp), %r8
leaq 0x628(%rsp), %r9
xorl %edi, %edi
movl %r15d, %esi
callq 0xc0ee
leaq 0x630(%rsp), %rdi
callq 0x51b0
leaq 0x338(%rsp), %rdi
callq 0x51b0
leaq 0xbe8(%rsp), %rdi
callq 0x979a
leaq 0xc40(%rsp), %rdi
callq 0x979a
leaq 0xb90(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0xb38(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1dc85(%rip), %rsi     # 0x2902c
leaq 0x318(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x5f8(%rsp), %rdi
leaq 0x318(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
leaq 0x10(%rsp), %rdx
leaq 0xb90(%rsp), %rcx
leaq 0xb38(%rsp), %r8
leaq 0x5f8(%rsp), %r9
xorl %edi, %edi
movl %r15d, %esi
callq 0xc0ee
leaq 0x600(%rsp), %rdi
callq 0x51b0
leaq 0x318(%rsp), %rdi
callq 0x51b0
leaq 0xb38(%rsp), %rdi
callq 0x979a
leaq 0xb90(%rsp), %rdi
callq 0x979a
leaq 0xae0(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0xa88(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1dbd1(%rip), %rsi     # 0x2902f
leaq 0x2f8(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x5c8(%rsp), %rdi
leaq 0x2f8(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
leaq 0x10(%rsp), %rdx
leaq 0xae0(%rsp), %rcx
leaq 0xa88(%rsp), %r8
leaq 0x5c8(%rsp), %r9
xorl %edi, %edi
movl %r15d, %esi
callq 0xc0ee
leaq 0x5d0(%rsp), %rdi
callq 0x51b0
leaq 0x2f8(%rsp), %rdi
callq 0x51b0
leaq 0xa88(%rsp), %rdi
callq 0x979a
leaq 0xae0(%rsp), %rdi
callq 0x979a
leaq 0xa30(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0x9d8(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1db1d(%rip), %rsi     # 0x29032
leaq 0x2d8(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x598(%rsp), %rdi
leaq 0x2d8(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
leaq 0x10(%rsp), %rdx
leaq 0xa30(%rsp), %rcx
leaq 0x9d8(%rsp), %r8
leaq 0x598(%rsp), %r9
xorl %edi, %edi
movl %r15d, %esi
callq 0xc0ee
leaq 0x5a0(%rsp), %rdi
callq 0x51b0
leaq 0x2d8(%rsp), %rdi
callq 0x51b0
leaq 0x9d8(%rsp), %rdi
callq 0x979a
leaq 0xa30(%rsp), %rdi
callq 0x979a
leaq 0x980(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0x928(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1da69(%rip), %rsi     # 0x29035
leaq 0x2b8(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x568(%rsp), %rdi
leaq 0x2b8(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
leaq 0x10(%rsp), %rdx
leaq 0x980(%rsp), %rcx
leaq 0x928(%rsp), %r8
leaq 0x568(%rsp), %r9
xorl %edi, %edi
movl %r15d, %esi
callq 0xc0ee
leaq 0x570(%rsp), %rdi
callq 0x51b0
leaq 0x2b8(%rsp), %rdi
callq 0x51b0
leaq 0x928(%rsp), %rdi
callq 0x979a
leaq 0x980(%rsp), %rdi
callq 0x979a
leaq 0x1530(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0x14d8(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x1d9b6(%rip), %rsi     # 0x29039
leaq 0x298(%rsp), %rdi
leaq 0xf8(%rsp), %rdx
callq 0x96e6
leaq 0x538(%rsp), %rdi
leaq 0x298(%rsp), %rsi
movl 0x8(%rsp), %edx
callq 0xf280
leaq 0x10(%rsp), %rdx
leaq 0x1530(%rsp), %rbx
leaq 0x14d8(%rsp), %r14
leaq 0x538(%rsp), %r9
xorl %edi, %edi
movl %r15d, %esi
movq %rbx, %rcx
movq %r14, %r8
callq 0xc0ee
leaq 0x540(%rsp), %rdi
callq 0x51b0
leaq 0x298(%rsp), %rdi
callq 0x51b0
movq %r14, %rdi
callq 0x979a
movq %rbx, %rdi
callq 0x979a
movslq 0x150(%rsp), %rax
imulq $0x30, %rax, %rdi
addq 0x10(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0xc3c6
movq 0x10(%rsp), %r14
movq 0x18(%rsp), %rax
movq %rax, 0x40(%rsp)
incl %r12d
leaq 0x8f8(%rsp), %r13
cmpq 0x40(%rsp), %r14
je 0xb8db
leaq 0x248(%rsp), %rdi
movq %r14, %rsi
callq 0x97b4
leaq 0x1480(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
movq %r13, %rdi
leaq 0x248(%rsp), %rsi
callq 0x97b4
movq %r13, %rdx
leaq 0xf8(%rsp), %rdi
leaq 0x1480(%rsp), %rbx
movq %rbx, %rsi
movq %rdx, %r13
callq 0xf750
leaq 0x900(%rsp), %rdi
callq 0x51b0
movq %rbx, %rdi
callq 0x979a
leaq 0x1428(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x12676
leaq 0x17f0(%rsp), %r15
movq %r15, %rdi
leaq 0xa0(%rsp), %rsi
callq 0x12676
leaq 0x508(%rsp), %rdi
leaq 0x1428(%rsp), %rbx
movq %rbx, %rsi
movq %r15, %rdx
callq 0xf41a
movq %r15, %rdi
callq 0x979a
movq %rbx, %rdi
callq 0x979a
movl 0x248(%rsp), %eax
xorl %r15d, %r15d
cmpl 0x4d8(%rsp), %eax
jne 0xb833
pushq $-0x1
popq %r15
cmpl $0x3, %eax
je 0xb833
cmpl $0x6, %eax
je 0xb833
xorl %r15d, %r15d
cmpl $0xa, %eax
sete %r15b
negl %r15d
movq %r12, %rbx
leaq 0x508(%rsp), %rdi
callq 0xf856
addl 0x38(%rsp), %r15d
xorb 0xf(%rsp), %al
movzbl %al, %eax
movl 0x3c(%rsp), %ebp
subl %eax, %ebp
movl %ebp, %eax
orl %r15d, %eax
pushq $0x3
popq %r12
js 0xb89d
movq 0x30(%rsp), %rdi
leaq 0xf8(%rsp), %rsi
callq 0x986e
movl %ebx, %edi
movl %r15d, %esi
movl %ebp, %edx
movq 0x30(%rsp), %rcx
movl 0x8(%rsp), %r8d
callq 0xa482
pushq $0x1
popq %r12
testb %al, %al
jne 0xb89d
movq 0x30(%rsp), %rdi
callq 0xc42c
xorl %r12d, %r12d
leaq 0x510(%rsp), %rdi
callq 0x51b0
leaq 0xf8(%rsp), %rdi
callq 0x979a
leaq 0x250(%rsp), %rdi
callq 0x51b0
cmpl $0x3, %r12d
je 0xb8cf
testl %r12d, %r12d
jne 0xb8df
addq $0x30, %r14
movq %rbx, %r12
jmp 0xb73d
pushq $0x2
popq %r12
leaq 0x1c8(%rsp), %rdi
callq 0x51b0
leaq 0x4e0(%rsp), %rdi
callq 0x51b0
leaq 0x8a0(%rsp), %rdi
callq 0x51b0
leaq 0x48(%rsp), %rdi
callq 0x979a
leaq 0x170(%rsp), %rdi
callq 0x979a
movb $0x1, %bl
testb $0x1, %r12b
jne 0xb982
leaq 0x170(%rsp), %rdi
movq 0x30(%rsp), %rsi
callq 0x17d60
imulq $0x1081c8, 0x158(%rsp), %rax # imm = 0x1081C8
addq 0x2e62e(%rip), %rax     # 0x39f78
leaq 0x170(%rsp), %rdi
movslq 0x4c(%rdi), %rcx
imulq $0xbbd, %rcx, %rcx      # imm = 0xBBD
imulq $0x259, 0x160(%rsp), %rdx # imm = 0x259
addq %rax, %rdx
addq %rcx, %rdx
movq 0x168(%rsp), %rax
movb $0x0, (%rax,%rdx)
callq 0x979a
xorl %ebx, %ebx
leaq 0xa0(%rsp), %rdi
callq 0x979a
leaq 0x10(%rsp), %rdi
callq 0x98a8
movl %ebx, %eax
addq $0x1848, %rsp           # imm = 0x1848
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x540(%rsp), %rdi
callq 0x51b0
jmp 0xb9c2
movq %rax, %rbx
leaq 0x298(%rsp), %rdi
callq 0x51b0
jmp 0xb9d4
movq %rax, %rbx
leaq 0x14d8(%rsp), %rdi
callq 0x979a
jmp 0xb9e6
movq %rax, %rbx
leaq 0x1530(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x570(%rsp), %rdi
callq 0x51b0
jmp 0xba08
movq %rax, %rbx
leaq 0x2b8(%rsp), %rdi
callq 0x51b0
jmp 0xba1a
movq %rax, %rbx
leaq 0x928(%rsp), %rdi
callq 0x979a
jmp 0xba2c
movq %rax, %rbx
leaq 0x980(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x5a0(%rsp), %rdi
callq 0x51b0
jmp 0xba4e
movq %rax, %rbx
leaq 0x2d8(%rsp), %rdi
callq 0x51b0
jmp 0xba60
movq %rax, %rbx
leaq 0x9d8(%rsp), %rdi
callq 0x979a
jmp 0xba72
movq %rax, %rbx
leaq 0xa30(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x5d0(%rsp), %rdi
callq 0x51b0
jmp 0xba94
movq %rax, %rbx
leaq 0x2f8(%rsp), %rdi
callq 0x51b0
jmp 0xbaa6
movq %rax, %rbx
leaq 0xa88(%rsp), %rdi
callq 0x979a
jmp 0xbab8
movq %rax, %rbx
leaq 0xae0(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x600(%rsp), %rdi
callq 0x51b0
jmp 0xbada
movq %rax, %rbx
leaq 0x318(%rsp), %rdi
callq 0x51b0
jmp 0xbaec
movq %rax, %rbx
leaq 0xb38(%rsp), %rdi
callq 0x979a
jmp 0xbafe
movq %rax, %rbx
leaq 0xb90(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x630(%rsp), %rdi
callq 0x51b0
jmp 0xbb32
movq %rax, %rbx
leaq 0x660(%rsp), %rdi
callq 0x51b0
jmp 0xbb44
movq %rax, %rbx
leaq 0x338(%rsp), %rdi
callq 0x51b0
jmp 0xbb68
movq %rax, %rbx
leaq 0x358(%rsp), %rdi
callq 0x51b0
jmp 0xbb7a
movq %rax, %rbx
leaq 0x6f0(%rsp), %rdi
callq 0x51b0
jmp 0xbb8c
movq %rax, %rbx
leaq 0xbe8(%rsp), %rdi
callq 0x979a
jmp 0xbb9e
movq %rax, %rbx
leaq 0x1588(%rsp), %rdi
callq 0x979a
jmp 0xbbae
movq %rax, %rbx
leaq 0x3b8(%rsp), %rdi
callq 0x51b0
jmp 0xbbbe
movq %rax, %rbx
leaq 0xc40(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x15e0(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x1638(%rsp), %rdi
callq 0x979a
jmp 0xbbf4
movq %rax, %rbx
leaq 0x690(%rsp), %rdi
callq 0x51b0
jmp 0xbbe2
movq %rax, %rbx
leaq 0x378(%rsp), %rdi
callq 0x51b0
jmp 0xbc04
movq %rax, %rbx
leaq 0x1690(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0xc98(%rsp), %rdi
callq 0x979a
jmp 0xbc16
movq %rax, %rbx
leaq 0xcf0(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x720(%rsp), %rdi
callq 0x51b0
jmp 0xbc4a
movq %rax, %rbx
leaq 0x6c0(%rsp), %rdi
callq 0x51b0
jmp 0xbc5c
movq %rax, %rbx
leaq 0x3d8(%rsp), %rdi
callq 0x51b0
jmp 0xbc6e
movq %rax, %rbx
leaq 0x398(%rsp), %rdi
callq 0x51b0
jmp 0xbc80
movq %rax, %rbx
leaq 0xdf8(%rsp), %rdi
callq 0x979a
jmp 0xbc92
movq %rax, %rbx
leaq 0xd48(%rsp), %rdi
callq 0x979a
jmp 0xbca2
movq %rax, %rbx
leaq 0xe50(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0xda0(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x750(%rsp), %rdi
callq 0x51b0
jmp 0xbcc4
movq %rax, %rbx
leaq 0x3f8(%rsp), %rdi
callq 0x51b0
jmp 0xbcd6
movq %rax, %rbx
leaq 0xea8(%rsp), %rdi
callq 0x979a
jmp 0xbce8
movq %rax, %rbx
leaq 0xf00(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x780(%rsp), %rdi
callq 0x51b0
jmp 0xbd0a
movq %rax, %rbx
leaq 0x418(%rsp), %rdi
callq 0x51b0
jmp 0xbd1c
movq %rax, %rbx
leaq 0xf58(%rsp), %rdi
callq 0x979a
jmp 0xbd2e
movq %rax, %rbx
leaq 0xfb0(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x7b0(%rsp), %rdi
callq 0x51b0
jmp 0xbd50
movq %rax, %rbx
leaq 0x438(%rsp), %rdi
callq 0x51b0
jmp 0xbd62
movq %rax, %rbx
leaq 0x1008(%rsp), %rdi
callq 0x979a
jmp 0xbd74
movq %rax, %rbx
leaq 0x1060(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x7e0(%rsp), %rdi
callq 0x51b0
jmp 0xbda8
movq %rax, %rbx
leaq 0x810(%rsp), %rdi
callq 0x51b0
jmp 0xbdba
movq %rax, %rbx
leaq 0x458(%rsp), %rdi
callq 0x51b0
jmp 0xbdcc
movq %rax, %rbx
leaq 0x478(%rsp), %rdi
callq 0x51b0
jmp 0xbdde
movq %rax, %rbx
leaq 0x10b8(%rsp), %rdi
callq 0x979a
jmp 0xbdf0
movq %rax, %rbx
leaq 0x16e8(%rsp), %rdi
callq 0x979a
jmp 0xbe00
movq %rax, %rbx
leaq 0x1110(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x1740(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x840(%rsp), %rdi
callq 0x51b0
jmp 0xbe22
movq %rax, %rbx
leaq 0x498(%rsp), %rdi
callq 0x51b0
jmp 0xbe34
movq %rax, %rbx
leaq 0x1168(%rsp), %rdi
callq 0x979a
jmp 0xbe46
movq %rax, %rbx
leaq 0x11c0(%rsp), %rdi
jmp 0xbe91
movq %rax, %rbx
leaq 0x870(%rsp), %rdi
callq 0x51b0
jmp 0xbe65
movq %rax, %rbx
leaq 0x4b8(%rsp), %rdi
callq 0x51b0
jmp 0xbe77
movq %rax, %rbx
leaq 0x1218(%rsp), %rdi
callq 0x979a
jmp 0xbe89
movq %rax, %rbx
leaq 0x1270(%rsp), %rdi
callq 0x979a
jmp 0xc091
movq %rax, %rbx
leaq 0x178(%rsp), %rdi
callq 0x51b0
jmp 0xbeb0
movq %rax, %rbx
leaq 0x1e8(%rsp), %rdi
jmp 0xc00b
jmp 0xbfca
jmp 0xc05d
movq %rax, %rbx
leaq 0x100(%rsp), %rdi
callq 0x51b0
jmp 0xbedc
movq %rax, %rbx
leaq 0x278(%rsp), %rdi
jmp 0xc08c
jmp 0xc05d
jmp 0xbfca
movq %rax, %rbx
leaq 0x178(%rsp), %rdi
callq 0x51b0
jmp 0xbf08
movq %rax, %rbx
leaq 0x208(%rsp), %rdi
jmp 0xc00b
jmp 0xbfca
movq %rax, %rbx
leaq 0x178(%rsp), %rdi
callq 0x51b0
jmp 0xbf2f
movq %rax, %rbx
leaq 0x228(%rsp), %rdi
jmp 0xc00b
jmp 0xbfca
jmp 0xbfca
movq %rax, %rbx
jmp 0xc09e
movq %rax, %rbx
leaq 0x12c8(%rsp), %rdi
callq 0x979a
jmp 0xbf63
movq %rax, %rbx
leaq 0x1320(%rsp), %rdi
callq 0x979a
jmp 0xc0ab
jmp 0xbf77
movq %rax, %rbx
jmp 0xc0ab
movq %rax, %rbx
leaq 0x1378(%rsp), %rdi
callq 0x979a
jmp 0xbf94
movq %rax, %rbx
leaq 0x13d0(%rsp), %rdi
callq 0x979a
jmp 0xc0b8
movq %rax, %rbx
jmp 0xc0b8
movq %rax, %rbx
jmp 0xc0c2
jmp 0xbfca
movq %rax, %rbx
jmp 0xc0dc
jmp 0xc05d
jmp 0xc05d
movq %rax, %rbx
jmp 0xc0cf
movq %rax, %rbx
jmp 0xbfec
movq %rax, %rbx
jmp 0xc006
movq %rax, %rbx
leaq 0x8d0(%rsp), %rdi
callq 0x51b0
leaq 0x1798(%rsp), %rdi
jmp 0xc001
movq %rax, %rbx
leaq 0x170(%rsp), %rdi
callq 0x979a
leaq 0x50(%rsp), %rdi
callq 0x51b0
jmp 0xc0cf
movq %rax, %rbx
jmp 0xc02a
movq %rax, %rbx
leaq 0x900(%rsp), %rdi
callq 0x51b0
leaq 0x1480(%rsp), %rdi
jmp 0xc07f
movq %rax, %rbx
jmp 0xc077
movq %rax, %rbx
jmp 0xc04e
movq %rax, %rbx
leaq 0x17f0(%rsp), %rdi
callq 0x979a
leaq 0x1428(%rsp), %rdi
callq 0x979a
jmp 0xc077
movq %rax, %rbx
jmp 0xc091
movq %rax, %rbx
jmp 0xc084
movq %rax, %rbx
leaq 0x510(%rsp), %rdi
callq 0x51b0
leaq 0xf8(%rsp), %rdi
callq 0x979a
leaq 0x250(%rsp), %rdi
callq 0x51b0
leaq 0x1c8(%rsp), %rdi
callq 0x51b0
leaq 0x4e0(%rsp), %rdi
callq 0x51b0
leaq 0x8a0(%rsp), %rdi
callq 0x51b0
leaq 0x48(%rsp), %rdi
callq 0x979a
leaq 0x170(%rsp), %rdi
callq 0x979a
leaq 0xa0(%rsp), %rdi
callq 0x979a
leaq 0x10(%rsp), %rdi
callq 0x98a8
movq %rbx, %rdi
callq 0x55d0