// File: harry830622[P]floorplanner/src/floorplanner.cpp
// Function: Floorplanner::FastSA()
void Floorplanner::FastSA() {
  const double initial_uphill_probability = 0.99;
  const double initial_temperature =
      average_uphill_cost_ / (-1 * log(initial_uphill_probability));
  const int num_perturbations =
      database_.num_macros() * database_.num_macros() * 3;
  const double frozen_temperature = initial_temperature / 1.0e50;
  const double frozen_acceptance_rate = 0.01;
  const double alpha = alpha_;
  const double beta = (1 - alpha);
  const double adaptive_alpha_base = alpha / 4.0;
  const double adaptive_beta_base = beta / 4.0;
  const int c = 100;
  const int k = 7;

  if (is_drawing_) {
    drawing_ = Json::object();
    drawing_["config"] = {{"initialTemperature", initial_temperature},
                          {"c", c},
                          {"k", k},
                          {"numPerturbations", num_perturbations}};
    drawing_["iterations"] = Json::array();
  }

  Floorplan floorplan(best_floorplan_);
  floorplan.Pack(database_);

  if (is_drawing_) {
    drawing_["initialFloorplan"] = floorplan.drawing();
  }

  double adaptive_alpha = adaptive_alpha_base;
  double adaptive_beta = adaptive_beta_base;
  double best_cost = ComputeCost(floorplan, adaptive_alpha, adaptive_beta);
  double last_cost = best_cost;
  double temperature = initial_temperature;
  int nth_iteration = 0;
  while (temperature > frozen_temperature) {
    ++nth_iteration;

    double total_delta_cost = 0.0;
    int num_accepted_floorplans = 0;
    int num_feasible_floorplans = 0;

    if (is_drawing_) {
      Json iteration = Json::object();
      iteration["temperature"] = temperature;
      iteration["floorplans"] = Json::array();
      drawing_["iterations"].push_back(iteration);
    }

    for (int i = 0; i < num_perturbations; ++i) {
      Floorplan new_floorplan(floorplan);
      new_floorplan.Perturb(database_);
      new_floorplan.Pack(database_);

      const double cost =
          ComputeCost(new_floorplan, adaptive_alpha, adaptive_beta);
      const double delta_cost = cost - last_cost;
      if (delta_cost < 0) {
        total_delta_cost += delta_cost;

        ++num_accepted_floorplans;
        floorplan = new_floorplan;
        last_cost = cost;

        const double outline_width = database_.outline_width();
        const double outline_height = database_.outline_height();
        if (new_floorplan.width() <= outline_width &&
            new_floorplan.height() <= outline_height) {
          ++num_feasible_floorplans;
          if (cost < best_cost) {
            best_floorplan_ = new_floorplan;
            best_cost = cost;
          }
        }

        if (is_drawing_) {
          Json floorplan_drawing = floorplan.drawing();
          floorplan_drawing["isAccepted"] = true;
          floorplan_drawing["cost"] = cost;
          Json& iteration = drawing_["iterations"].back();
          iteration["floorplans"].push_back(floorplan_drawing);
        }
      } else {
        const double p = exp(-1 * delta_cost / temperature);
        if (rand() / static_cast<double>(RAND_MAX) < p) {
          total_delta_cost += delta_cost;

          ++num_accepted_floorplans;
          floorplan = new_floorplan;
          last_cost = cost;

          if (is_drawing_) {
            Json floorplan_drawing = floorplan.drawing();
            floorplan_drawing["isAccepted"] = true;
            floorplan_drawing["cost"] = cost;
            Json& iteration = drawing_["iterations"].back();
            iteration["floorplans"].push_back(floorplan_drawing);
          }
        } else {
          if (is_drawing_) {
            Json new_floorplan_drawing = new_floorplan.drawing();
            new_floorplan_drawing["isAccepted"] = false;
            new_floorplan_drawing["cost"] = cost;
            Json& iteration = drawing_["iterations"].back();
            iteration["floorplans"].push_back(new_floorplan_drawing);
          }
        }
      }
    }

    if (is_verbose_) {
      cout << "  nth_iteration: " << nth_iteration << endl;
      cout << "    temperature: " << temperature << endl;
      cout << "    total_delta_cost: " << total_delta_cost << endl;
      cout << "    num_accepted_floorplans: " << num_accepted_floorplans
           << endl;
      cout << "    num_feasible_floorplans: " << num_feasible_floorplans
           << endl;
      cout << "    num_perturbations: " << num_perturbations << endl;
      cout << "    adaptive_alpha: " << adaptive_alpha
           << "\tadaptive_beta: " << adaptive_beta << endl;
      cout << "    Best area: " << best_floorplan_.area()
           << "\tBest wirelength: " << best_floorplan_.wirelength() << endl;
    }

    if (num_accepted_floorplans / static_cast<double>(num_perturbations) <
        frozen_acceptance_rate) {
      break;
    }

    adaptive_alpha =
        adaptive_alpha_base +
        (alpha - adaptive_alpha_base) *
            (num_feasible_floorplans / static_cast<double>(num_perturbations));
    adaptive_beta =
        adaptive_beta_base +
        (beta - adaptive_beta_base) *
            (num_feasible_floorplans / static_cast<double>(num_perturbations));

    const double average_delta_cost = abs(total_delta_cost / num_perturbations);
    if (nth_iteration >= 1 && nth_iteration < k) {
      temperature =
          initial_temperature * average_delta_cost / (nth_iteration + 1) / c;
    } else {
      temperature =
          initial_temperature * average_delta_cost / (nth_iteration + 1);
    }

    if (is_drawing_) {
      Json& iteration = drawing_["iterations"].back();
      iteration["numFeasibleFloorplans"] = num_feasible_floorplans;
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x880, %rsp            # imm = 0x880
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x500(%rbp)
movsd 0x2098e(%rip), %xmm0    # 0x4b280
movsd %xmm0, -0x10(%rbp)
movsd 0x68(%rax), %xmm0
movsd %xmm0, -0x510(%rbp)
movsd 0x20974(%rip), %xmm0    # 0x4b280
callq 0x93f0
movq -0x500(%rbp), %rax
movaps %xmm0, %xmm2
movsd -0x510(%rbp), %xmm0
movsd 0x2094d(%rip), %xmm1    # 0x4b278
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rbp)
movq (%rax), %rdi
callq 0xddf0
movl %eax, %ecx
movq -0x500(%rbp), %rax
movl %ecx, -0x504(%rbp)
movq (%rax), %rdi
callq 0xddf0
movl -0x504(%rbp), %ecx
movl %eax, %edx
movq -0x500(%rbp), %rax
imull %edx, %ecx
imull $0x3, %ecx, %ecx
movl %ecx, -0x1c(%rbp)
movsd -0x18(%rbp), %xmm0
movsd 0x208f4(%rip), %xmm1    # 0x4b270
divsd %xmm1, %xmm0
movsd %xmm0, -0x28(%rbp)
movsd 0x208db(%rip), %xmm0    # 0x4b268
movsd %xmm0, -0x30(%rbp)
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x38(%rbp)
movsd 0x208a4(%rip), %xmm0    # 0x4b248
subsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x38(%rbp), %xmm0
movsd 0x208a5(%rip), %xmm1    # 0x4b260
divsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x40(%rbp), %xmm0
movsd 0x2088f(%rip), %xmm1    # 0x4b260
divsd %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movl $0x64, -0x54(%rbp)
movl $0x7, -0x58(%rbp)
testb $0x1, 0x31(%rax)
je 0x2b2d0
leaq -0x78(%rbp), %rdi
callq 0x1bdd0
movq -0x78(%rbp), %rsi
movq -0x70(%rbp), %rdx
leaq -0x68(%rbp), %rdi
movq %rdi, -0x518(%rbp)
callq 0x1bd80
movq -0x500(%rbp), %rdi
movq -0x518(%rbp), %rsi
addq $0x118, %rdi            # imm = 0x118
callq 0x1c590
movq -0x518(%rbp), %rdi
callq 0x1c060
movb $0x1, -0x1d1(%rbp)
leaq -0xd8(%rbp), %rax
movq %rax, -0xe0(%rbp)
leaq -0x110(%rbp), %rdi
movq %rdi, -0x118(%rbp)
leaq 0x20874(%rip), %rsi     # 0x4b2d7
callq 0x2c650
jmp 0x2aa6a
leaq -0x100(%rbp), %rdi
movq %rdi, -0x118(%rbp)
leaq -0x18(%rbp), %rsi
callq 0x2c6a0
leaq -0x110(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq $0x2, -0xe8(%rbp)
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
leaq -0xd8(%rbp), %rdi
movl $0x1, %ecx
movl $0x2, %r8d
callq 0x1c180
jmp 0x2aac1
leaq -0xc8(%rbp), %rax
movq %rax, -0x520(%rbp)
movq %rax, -0xe0(%rbp)
leaq -0x158(%rbp), %rdi
movq %rdi, -0x160(%rbp)
leaq 0x213ab(%rip), %rsi     # 0x4be96
callq 0x1ca90
jmp 0x2aaf2
leaq -0x148(%rbp), %rdi
movq %rdi, -0x160(%rbp)
leaq -0x54(%rbp), %rsi
callq 0x2c740
movq -0x520(%rbp), %rdi
leaq -0x158(%rbp), %rax
movq %rax, -0x138(%rbp)
movq $0x2, -0x130(%rbp)
movq -0x138(%rbp), %rsi
movq -0x130(%rbp), %rdx
movl $0x1, %ecx
movl $0x2, %r8d
callq 0x1c180
jmp 0x2ab49
leaq -0xb8(%rbp), %rax
movq %rax, -0x528(%rbp)
movq %rax, -0xe0(%rbp)
leaq -0x190(%rbp), %rdi
movq %rdi, -0x198(%rbp)
leaq 0x212d0(%rip), %rsi     # 0x4be43
callq 0x1ca90
jmp 0x2ab7a
leaq -0x180(%rbp), %rdi
movq %rdi, -0x198(%rbp)
leaq -0x58(%rbp), %rsi
callq 0x2c740
movq -0x528(%rbp), %rdi
leaq -0x190(%rbp), %rax
movq %rax, -0x170(%rbp)
movq $0x2, -0x168(%rbp)
movq -0x170(%rbp), %rsi
movq -0x168(%rbp), %rdx
movl $0x1, %ecx
movl $0x2, %r8d
callq 0x1c180
jmp 0x2abd1
leaq -0xa8(%rbp), %rax
movq %rax, -0x530(%rbp)
movq %rax, -0xe0(%rbp)
leaq -0x1c8(%rbp), %rdi
movq %rdi, -0x1d0(%rbp)
leaq 0x206ef(%rip), %rsi     # 0x4b2ea
callq 0x2c6f0
jmp 0x2ac02
leaq -0x1b8(%rbp), %rdi
movq %rdi, -0x1d0(%rbp)
leaq -0x1c(%rbp), %rsi
callq 0x2c740
movq -0x530(%rbp), %rdi
leaq -0x1c8(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq $0x2, -0x1a0(%rbp)
movq -0x1a8(%rbp), %rsi
movq -0x1a0(%rbp), %rdx
movl $0x1, %ecx
movl $0x2, %r8d
callq 0x1c180
jmp 0x2ac59
movb $0x0, -0x1d1(%rbp)
leaq -0xd8(%rbp), %rax
movq %rax, -0x98(%rbp)
movq $0x4, -0x90(%rbp)
movq -0x98(%rbp), %rsi
movq -0x90(%rbp), %rdx
leaq -0x88(%rbp), %rdi
movl $0x1, %ecx
movl $0x2, %r8d
callq 0x1c180
jmp 0x2aca0
movq -0x500(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq 0x20646(%rip), %rsi     # 0x4b2fb
callq 0x1c390
movq %rax, -0x538(%rbp)
jmp 0x2acc3
movq -0x538(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x1c590
leaq -0x88(%rbp), %rdi
callq 0x1c060
leaq -0xd8(%rbp), %rax
movq %rax, -0x548(%rbp)
addq $0x40, %rax
movq %rax, -0x540(%rbp)
movq -0x540(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x550(%rbp)
callq 0x1c060
movq -0x548(%rbp), %rcx
movq -0x550(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x540(%rbp)
jne 0x2acfb
leaq -0x1c8(%rbp), %rax
movq %rax, -0x560(%rbp)
addq $0x20, %rax
movq %rax, -0x558(%rbp)
movq -0x558(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x568(%rbp)
callq 0x1c060
movq -0x560(%rbp), %rcx
movq -0x568(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x558(%rbp)
jne 0x2ad45
leaq -0x190(%rbp), %rax
movq %rax, -0x578(%rbp)
addq $0x20, %rax
movq %rax, -0x570(%rbp)
movq -0x570(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x580(%rbp)
callq 0x1c060
movq -0x578(%rbp), %rcx
movq -0x580(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x570(%rbp)
jne 0x2ad8f
leaq -0x158(%rbp), %rax
movq %rax, -0x590(%rbp)
addq $0x20, %rax
movq %rax, -0x588(%rbp)
movq -0x588(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x598(%rbp)
callq 0x1c060
movq -0x590(%rbp), %rcx
movq -0x598(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x588(%rbp)
jne 0x2add9
leaq -0x110(%rbp), %rax
movq %rax, -0x5a8(%rbp)
addq $0x20, %rax
movq %rax, -0x5a0(%rbp)
movq -0x5a0(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x5b0(%rbp)
callq 0x1c060
movq -0x5a8(%rbp), %rcx
movq -0x5b0(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x5a0(%rbp)
jne 0x2ae23
leaq -0x1f8(%rbp), %rdi
callq 0x1bdd0
movq -0x1f8(%rbp), %rsi
movq -0x1f0(%rbp), %rdx
leaq -0x1e8(%rbp), %rdi
callq 0x1c860
movq -0x500(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq 0x20473(%rip), %rsi     # 0x4b302
callq 0x1c390
movq %rax, -0x5b8(%rbp)
jmp 0x2ae9d
movq -0x5b8(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x1c590
leaq -0x1e8(%rbp), %rdi
callq 0x1c060
jmp 0x2b2d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
movq -0x118(%rbp), %rax
leaq -0x110(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x5c0(%rbp)
je 0x2af1e
movq -0x5c0(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x5c8(%rbp)
callq 0x1c060
movq -0x5c8(%rbp), %rax
leaq -0x110(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x5c0(%rbp)
jne 0x2aeed
jmp 0x2b250
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
jmp 0x2b204
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
movq -0x160(%rbp), %rax
leaq -0x158(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x5d0(%rbp)
je 0x2af97
movq -0x5d0(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x5d8(%rbp)
callq 0x1c060
movq -0x5d8(%rbp), %rax
leaq -0x158(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x5d0(%rbp)
jne 0x2af66
jmp 0x2b204
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
jmp 0x2b1b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
movq -0x198(%rbp), %rax
leaq -0x190(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x5e0(%rbp)
je 0x2b010
movq -0x5e0(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x5e8(%rbp)
callq 0x1c060
movq -0x5e8(%rbp), %rax
leaq -0x190(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x5e0(%rbp)
jne 0x2afdf
jmp 0x2b1b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
jmp 0x2b16c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
movq -0x1d0(%rbp), %rax
leaq -0x1c8(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x5f0(%rbp)
je 0x2b089
movq -0x5f0(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x5f8(%rbp)
callq 0x1c060
movq -0x5f8(%rbp), %rax
leaq -0x1c8(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x5f0(%rbp)
jne 0x2b058
jmp 0x2b16c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
jmp 0x2b120
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
jmp 0x2b0d4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x1c060
leaq -0xd8(%rbp), %rax
movq %rax, -0x608(%rbp)
addq $0x40, %rax
movq %rax, -0x600(%rbp)
movq -0x600(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x610(%rbp)
callq 0x1c060
movq -0x608(%rbp), %rcx
movq -0x610(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x600(%rbp)
jne 0x2b0ed
jmp 0x2b120
leaq -0x1c8(%rbp), %rax
movq %rax, -0x620(%rbp)
addq $0x20, %rax
movq %rax, -0x618(%rbp)
movq -0x618(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x628(%rbp)
callq 0x1c060
movq -0x620(%rbp), %rcx
movq -0x628(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x618(%rbp)
jne 0x2b139
jmp 0x2b16c
leaq -0x190(%rbp), %rax
movq %rax, -0x638(%rbp)
addq $0x20, %rax
movq %rax, -0x630(%rbp)
movq -0x630(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x640(%rbp)
callq 0x1c060
movq -0x638(%rbp), %rcx
movq -0x640(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x630(%rbp)
jne 0x2b185
jmp 0x2b1b8
leaq -0x158(%rbp), %rax
movq %rax, -0x650(%rbp)
addq $0x20, %rax
movq %rax, -0x648(%rbp)
movq -0x648(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x658(%rbp)
callq 0x1c060
movq -0x650(%rbp), %rcx
movq -0x658(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x648(%rbp)
jne 0x2b1d1
jmp 0x2b204
leaq -0x110(%rbp), %rax
movq %rax, -0x668(%rbp)
addq $0x20, %rax
movq %rax, -0x660(%rbp)
movq -0x660(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x670(%rbp)
callq 0x1c060
movq -0x668(%rbp), %rcx
movq -0x670(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x660(%rbp)
jne 0x2b21d
jmp 0x2b250
testb $0x1, -0x1d1(%rbp)
jne 0x2b25b
jmp 0x2b2a8
movq -0xe0(%rbp), %rax
leaq -0xd8(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x678(%rbp)
je 0x2b2a6
movq -0x678(%rbp), %rdi
addq $-0x10, %rdi
movq %rdi, -0x680(%rbp)
callq 0x1c060
movq -0x680(%rbp), %rax
leaq -0xd8(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x678(%rbp)
jne 0x2b275
jmp 0x2b2a8
jmp 0x2c3c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x1c060
jmp 0x2c3c5
movq -0x500(%rbp), %rsi
addq $0x70, %rsi
leaq -0x2a0(%rbp), %rdi
movq %rdi, -0x688(%rbp)
callq 0x2c3f0
movq -0x500(%rbp), %rax
movq -0x688(%rbp), %rdi
movq (%rax), %rsi
callq 0x17e90
jmp 0x2b306
movq -0x500(%rbp), %rax
testb $0x1, 0x31(%rax)
je 0x2b3bf
leaq -0x2a0(%rbp), %rdi
callq 0x16740
movq %rax, -0x690(%rbp)
jmp 0x2b32c
movq -0x690(%rbp), %rsi
leaq -0x2b0(%rbp), %rdi
callq 0x22df0
jmp 0x2b341
movq -0x500(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq 0x1ffb7(%rip), %rsi     # 0x4b30d
callq 0x1c390
movq %rax, -0x698(%rbp)
jmp 0x2b364
movq -0x698(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x1c590
leaq -0x2b0(%rbp), %rdi
callq 0x1c060
jmp 0x2b3bf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
jmp 0x2c3b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0x1c060
jmp 0x2c3b9
movq -0x500(%rbp), %rdi
movsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x2b8(%rbp)
movsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x2c0(%rbp)
movsd -0x2b8(%rbp), %xmm0
movsd -0x2c0(%rbp), %xmm1
leaq -0x2a0(%rbp), %rsi
callq 0x285e0
movsd %xmm0, -0x6a0(%rbp)
jmp 0x2b406
movsd -0x6a0(%rbp), %xmm0
movsd %xmm0, -0x2c8(%rbp)
movsd -0x2c8(%rbp), %xmm0
movsd %xmm0, -0x2d0(%rbp)
movsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x2d8(%rbp)
movl $0x0, -0x2dc(%rbp)
movsd -0x2d8(%rbp), %xmm0
ucomisd -0x28(%rbp), %xmm0
jbe 0x2c3a4
movq -0x500(%rbp), %rax
movl -0x2dc(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, -0x2dc(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x2e8(%rbp)
movl $0x0, -0x2ec(%rbp)
movl $0x0, -0x2f0(%rbp)
testb $0x1, 0x31(%rax)
je 0x2b61f
leaq -0x310(%rbp), %rdi
callq 0x1bdd0
movq -0x310(%rbp), %rsi
movq -0x308(%rbp), %rdx
leaq -0x300(%rbp), %rdi
callq 0x1bd80
jmp 0x2b4b7
leaq -0x320(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0x2c790
leaq 0x1fe4d(%rip), %rsi     # 0x4b31e
leaq -0x300(%rbp), %rdi
callq 0x1c390
movq %rax, -0x6a8(%rbp)
jmp 0x2b4e6
movq -0x6a8(%rbp), %rdi
leaq -0x320(%rbp), %rsi
movq %rsi, -0x6b0(%rbp)
callq 0x1c590
movq -0x6b0(%rbp), %rdi
callq 0x1c060
leaq -0x340(%rbp), %rdi
callq 0x1bdd0
movq -0x340(%rbp), %rsi
movq -0x338(%rbp), %rdx
leaq -0x330(%rbp), %rdi
callq 0x1c860
jmp 0x2b534
leaq 0x206d4(%rip), %rsi     # 0x4bc0f
leaq -0x300(%rbp), %rdi
callq 0x1c390
movq %rax, -0x6b8(%rbp)
jmp 0x2b550
movq -0x6b8(%rbp), %rdi
leaq -0x330(%rbp), %rsi
movq %rsi, -0x6c8(%rbp)
callq 0x1c590
movq -0x6c8(%rbp), %rdi
callq 0x1c060
movq -0x500(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq 0x1fd77(%rip), %rsi     # 0x4b302
callq 0x1c390
movq %rax, -0x6c0(%rbp)
jmp 0x2b599
movq -0x6c0(%rbp), %rdi
leaq -0x300(%rbp), %rsi
callq 0x2c7e0
jmp 0x2b5ae
leaq -0x300(%rbp), %rdi
callq 0x1c060
jmp 0x2b61f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x1c060
jmp 0x2b60e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
jmp 0x2b60e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x330(%rbp), %rdi
callq 0x1c060
leaq -0x300(%rbp), %rdi
callq 0x1c060
jmp 0x2c3b9
movl $0x0, -0x344(%rbp)
movl -0x344(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jge 0x2be9c
leaq -0x3f0(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
callq 0x2c3f0
jmp 0x2b64d
movq -0x500(%rbp), %rax
movq (%rax), %rsi
leaq -0x3f0(%rbp), %rdi
callq 0x16830
jmp 0x2b665
movq -0x500(%rbp), %rax
movq (%rax), %rsi
leaq -0x3f0(%rbp), %rdi
callq 0x17e90
jmp 0x2b67d
movq -0x500(%rbp), %rdi
movsd -0x2b8(%rbp), %xmm0
movsd -0x2c0(%rbp), %xmm1
leaq -0x3f0(%rbp), %rsi
callq 0x285e0
movsd %xmm0, -0x6d0(%rbp)
jmp 0x2b6aa
movsd -0x6d0(%rbp), %xmm0
movsd %xmm0, -0x3f8(%rbp)
movsd -0x3f8(%rbp), %xmm0
subsd -0x2d0(%rbp), %xmm0
movsd %xmm0, -0x400(%rbp)
xorps %xmm0, %xmm0
ucomisd -0x400(%rbp), %xmm0
jbe 0x2ba22
movsd -0x400(%rbp), %xmm1
movsd -0x2e8(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x2e8(%rbp)
movl -0x2ec(%rbp), %eax
incl %eax
movl %eax, -0x2ec(%rbp)
leaq -0x2a0(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0x2c570
jmp 0x2b722
movq -0x500(%rbp), %rax
movsd -0x3f8(%rbp), %xmm0
movsd %xmm0, -0x2d0(%rbp)
movq (%rax), %rdi
callq 0xdd40
movsd %xmm0, -0x6d8(%rbp)
jmp 0x2b74b
movq -0x500(%rbp), %rax
movsd -0x6d8(%rbp), %xmm0
movsd %xmm0, -0x408(%rbp)
movq (%rax), %rdi
callq 0xdd60
movsd %xmm0, -0x6e0(%rbp)
jmp 0x2b774
movsd -0x6e0(%rbp), %xmm0
movsd %xmm0, -0x410(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x16780
movsd %xmm0, -0x6e8(%rbp)
jmp 0x2b79a
movsd -0x6e8(%rbp), %xmm1
movsd -0x408(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jb 0x2b849
leaq -0x3f0(%rbp), %rdi
callq 0x167a0
movsd %xmm0, -0x6f0(%rbp)
jmp 0x2b7ca
movsd -0x6f0(%rbp), %xmm1
movsd -0x410(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jb 0x2b849
movl -0x2f0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2f0(%rbp)
movsd -0x3f8(%rbp), %xmm1
movsd -0x2c8(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2b847
movq -0x500(%rbp), %rdi
addq $0x70, %rdi
leaq -0x3f0(%rbp), %rsi
callq 0x2c570
jmp 0x2b81e
movsd -0x3f8(%rbp), %xmm0
movsd %xmm0, -0x2c8(%rbp)
jmp 0x2b847
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
jmp 0x2be8b
jmp 0x2b849
movq -0x500(%rbp), %rax
testb $0x1, 0x31(%rax)
je 0x2ba1d
leaq -0x2a0(%rbp), %rdi
callq 0x16740
movq %rax, -0x6f8(%rbp)
jmp 0x2b86f
movq -0x6f8(%rbp), %rsi
leaq -0x420(%rbp), %rdi
callq 0x22df0
jmp 0x2b884
movb $0x1, -0x431(%rbp)
leaq -0x430(%rbp), %rdi
leaq -0x431(%rbp), %rsi
callq 0x2c930
leaq 0x1fa85(%rip), %rsi     # 0x4b32a
leaq -0x420(%rbp), %rdi
callq 0x1c390
movq %rax, -0x700(%rbp)
jmp 0x2b8ba
movq -0x700(%rbp), %rdi
leaq -0x430(%rbp), %rsi
movq %rsi, -0x710(%rbp)
callq 0x1c590
movq -0x710(%rbp), %rdi
callq 0x1c060
leaq -0x448(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x2c6a0
leaq 0x1fa3b(%rip), %rsi     # 0x4b335
leaq -0x420(%rbp), %rdi
callq 0x1c390
movq %rax, -0x708(%rbp)
jmp 0x2b90f
movq -0x708(%rbp), %rdi
leaq -0x448(%rbp), %rsi
movq %rsi, -0x720(%rbp)
callq 0x1c590
movq -0x720(%rbp), %rdi
callq 0x1c060
movq -0x500(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq 0x1f9b8(%rip), %rsi     # 0x4b302
callq 0x1c390
movq %rax, -0x718(%rbp)
jmp 0x2b958
movq -0x718(%rbp), %rdi
callq 0x2c980
movq %rax, -0x728(%rbp)
jmp 0x2b96d
movq -0x728(%rbp), %rax
movq %rax, -0x450(%rbp)
movq -0x450(%rbp), %rdi
leaq 0x20286(%rip), %rsi     # 0x4bc0f
callq 0x1c390
movq %rax, -0x730(%rbp)
jmp 0x2b997
movq -0x730(%rbp), %rdi
leaq -0x420(%rbp), %rsi
callq 0x2c7e0
jmp 0x2b9ac
leaq -0x420(%rbp), %rdi
callq 0x1c060
jmp 0x2ba1d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x430(%rbp), %rdi
callq 0x1c060
jmp 0x2ba0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x448(%rbp), %rdi
callq 0x1c060
jmp 0x2ba0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x420(%rbp), %rdi
callq 0x1c060
jmp 0x2be8b
jmp 0x2be6b
movsd 0x1f84e(%rip), %xmm0    # 0x4b278
mulsd -0x400(%rbp), %xmm0
divsd -0x2d8(%rbp), %xmm0
callq 0x9920
movsd %xmm0, -0x458(%rbp)
callq 0x9150
cvtsi2sd %eax, %xmm1
movsd 0x1f838(%rip), %xmm0    # 0x4b290
divsd %xmm0, %xmm1
movsd -0x458(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2bc96
movsd -0x400(%rbp), %xmm1
movsd -0x2e8(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x2e8(%rbp)
movl -0x2ec(%rbp), %eax
incl %eax
movl %eax, -0x2ec(%rbp)
leaq -0x2a0(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0x2c570
jmp 0x2baad
movq -0x500(%rbp), %rax
movsd -0x3f8(%rbp), %xmm0
movsd %xmm0, -0x2d0(%rbp)
testb $0x1, 0x31(%rax)
je 0x2bc91
leaq -0x2a0(%rbp), %rdi
callq 0x16740
movq %rax, -0x738(%rbp)
jmp 0x2bae3
movq -0x738(%rbp), %rsi
leaq -0x468(%rbp), %rdi
callq 0x22df0
jmp 0x2baf8
movb $0x1, -0x479(%rbp)
leaq -0x478(%rbp), %rdi
leaq -0x479(%rbp), %rsi
callq 0x2c930
leaq 0x1f811(%rip), %rsi     # 0x4b32a
leaq -0x468(%rbp), %rdi
callq 0x1c390
movq %rax, -0x740(%rbp)
jmp 0x2bb2e
movq -0x740(%rbp), %rdi
leaq -0x478(%rbp), %rsi
movq %rsi, -0x750(%rbp)
callq 0x1c590
movq -0x750(%rbp), %rdi
callq 0x1c060
leaq -0x490(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x2c6a0
leaq 0x1f7c7(%rip), %rsi     # 0x4b335
leaq -0x468(%rbp), %rdi
callq 0x1c390
movq %rax, -0x748(%rbp)
jmp 0x2bb83
movq -0x748(%rbp), %rdi
leaq -0x490(%rbp), %rsi
movq %rsi, -0x760(%rbp)
callq 0x1c590
movq -0x760(%rbp), %rdi
callq 0x1c060
movq -0x500(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq 0x1f744(%rip), %rsi     # 0x4b302
callq 0x1c390
movq %rax, -0x758(%rbp)
jmp 0x2bbcc
movq -0x758(%rbp), %rdi
callq 0x2c980
movq %rax, -0x768(%rbp)
jmp 0x2bbe1
movq -0x768(%rbp), %rax
movq %rax, -0x498(%rbp)
movq -0x498(%rbp), %rdi
leaq 0x20012(%rip), %rsi     # 0x4bc0f
callq 0x1c390
movq %rax, -0x770(%rbp)
jmp 0x2bc0b
movq -0x770(%rbp), %rdi
leaq -0x468(%rbp), %rsi
callq 0x2c7e0
jmp 0x2bc20
leaq -0x468(%rbp), %rdi
callq 0x1c060
jmp 0x2bc91
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x478(%rbp), %rdi
callq 0x1c060
jmp 0x2bc80
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x490(%rbp), %rdi
callq 0x1c060
jmp 0x2bc80
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x468(%rbp), %rdi
callq 0x1c060
jmp 0x2be8b
jmp 0x2be69
movq -0x500(%rbp), %rax
testb $0x1, 0x31(%rax)
je 0x2be67
leaq -0x3f0(%rbp), %rdi
callq 0x16740
movq %rax, -0x778(%rbp)
jmp 0x2bcbc
movq -0x778(%rbp), %rsi
leaq -0x4a8(%rbp), %rdi
callq 0x22df0
jmp 0x2bcd1
movb $0x0, -0x4b9(%rbp)
leaq -0x4b8(%rbp), %rdi
leaq -0x4b9(%rbp), %rsi
callq 0x2c930
leaq 0x1f638(%rip), %rsi     # 0x4b32a
leaq -0x4a8(%rbp), %rdi
callq 0x1c390
movq %rax, -0x780(%rbp)
jmp 0x2bd07
movq -0x780(%rbp), %rdi
leaq -0x4b8(%rbp), %rsi
movq %rsi, -0x790(%rbp)
callq 0x1c590
movq -0x790(%rbp), %rdi
callq 0x1c060
leaq -0x4d0(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x2c6a0
leaq 0x1f5ee(%rip), %rsi     # 0x4b335
leaq -0x4a8(%rbp), %rdi
callq 0x1c390
movq %rax, -0x788(%rbp)
jmp 0x2bd5c
movq -0x788(%rbp), %rdi
leaq -0x4d0(%rbp), %rsi
movq %rsi, -0x7a0(%rbp)
callq 0x1c590
movq -0x7a0(%rbp), %rdi
callq 0x1c060
movq -0x500(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq 0x1f56b(%rip), %rsi     # 0x4b302
callq 0x1c390
movq %rax, -0x798(%rbp)
jmp 0x2bda5
movq -0x798(%rbp), %rdi
callq 0x2c980
movq %rax, -0x7a8(%rbp)
jmp 0x2bdba
movq -0x7a8(%rbp), %rax
movq %rax, -0x4d8(%rbp)
movq -0x4d8(%rbp), %rdi
leaq 0x1fe39(%rip), %rsi     # 0x4bc0f
callq 0x1c390
movq %rax, -0x7b0(%rbp)
jmp 0x2bde4
movq -0x7b0(%rbp), %rdi
leaq -0x4a8(%rbp), %rsi
callq 0x2c7e0
jmp 0x2bdf9
leaq -0x4a8(%rbp), %rdi
callq 0x1c060
jmp 0x2be67
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x4b8(%rbp), %rdi
callq 0x1c060
jmp 0x2be59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x4d0(%rbp), %rdi
callq 0x1c060
jmp 0x2be59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x4a8(%rbp), %rdi
callq 0x1c060
jmp 0x2be8b
jmp 0x2be69
jmp 0x2be6b
leaq -0x3f0(%rbp), %rdi
callq 0x2c510
movl -0x344(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x344(%rbp)
jmp 0x2b629
leaq -0x3f0(%rbp), %rdi
callq 0x2c510
jmp 0x2c3b9
movq -0x500(%rbp), %rax
testb $0x1, 0x30(%rax)
je 0x2c1ba
movq 0x400ec(%rip), %rdi     # 0x6bfa0
leaq 0x1f47f(%rip), %rsi     # 0x4b33a
callq 0x94c0
movq %rax, -0x7b8(%rbp)
jmp 0x2bec9
movq -0x7b8(%rbp), %rdi
movl -0x2dc(%rbp), %esi
callq 0x98c0
movq %rax, -0x7c0(%rbp)
jmp 0x2bee4
movq -0x7c0(%rbp), %rdi
movq 0x40046(%rip), %rsi     # 0x6bf38
callq 0x9500
jmp 0x2bef9
movq 0x400a0(%rip), %rdi     # 0x6bfa0
leaq 0x1f445(%rip), %rsi     # 0x4b34c
callq 0x94c0
movq %rax, -0x7c8(%rbp)
jmp 0x2bf15
movq -0x7c8(%rbp), %rdi
movsd -0x2d8(%rbp), %xmm0
callq 0x99a0
movq %rax, -0x7d0(%rbp)
jmp 0x2bf32
movq -0x7d0(%rbp), %rdi
movq 0x3fff8(%rip), %rsi     # 0x6bf38
callq 0x9500
jmp 0x2bf47
movq 0x40052(%rip), %rdi     # 0x6bfa0
leaq 0x1f4bc(%rip), %rsi     # 0x4b411
callq 0x94c0
movq %rax, -0x7d8(%rbp)
jmp 0x2bf63
movq -0x7d8(%rbp), %rdi
movsd -0x2e8(%rbp), %xmm0
callq 0x99a0
movq %rax, -0x7e0(%rbp)
jmp 0x2bf80
movq -0x7e0(%rbp), %rdi
movq 0x3ffaa(%rip), %rsi     # 0x6bf38
callq 0x9500
jmp 0x2bf95
movq 0x40004(%rip), %rdi     # 0x6bfa0
leaq 0x1f3bb(%rip), %rsi     # 0x4b35e
callq 0x94c0
movq %rax, -0x7e8(%rbp)
jmp 0x2bfb1
movq -0x7e8(%rbp), %rdi
movl -0x2ec(%rbp), %esi
callq 0x98c0
movq %rax, -0x7f0(%rbp)
jmp 0x2bfcc
movq -0x7f0(%rbp), %rdi
movq 0x3ff5e(%rip), %rsi     # 0x6bf38
callq 0x9500
jmp 0x2bfe1
movq 0x3ffb8(%rip), %rdi     # 0x6bfa0
leaq 0x1f38d(%rip), %rsi     # 0x4b37c
callq 0x94c0
movq %rax, -0x7f8(%rbp)
jmp 0x2bffd
movq -0x7f8(%rbp), %rdi
movl -0x2f0(%rbp), %esi
callq 0x98c0
movq %rax, -0x800(%rbp)
jmp 0x2c018
movq -0x800(%rbp), %rdi
movq 0x3ff12(%rip), %rsi     # 0x6bf38
callq 0x9500
jmp 0x2c02d
movq 0x3ff6c(%rip), %rdi     # 0x6bfa0
leaq 0x1f35f(%rip), %rsi     # 0x4b39a
callq 0x94c0
movq %rax, -0x808(%rbp)
jmp 0x2c049
movq -0x808(%rbp), %rdi
movl -0x1c(%rbp), %esi
callq 0x98c0
movq %rax, -0x810(%rbp)
jmp 0x2c061
movq -0x810(%rbp), %rdi
movq 0x3fec9(%rip), %rsi     # 0x6bf38
callq 0x9500
jmp 0x2c076
movq 0x3ff23(%rip), %rdi     # 0x6bfa0
leaq 0x1f32e(%rip), %rsi     # 0x4b3b2
callq 0x94c0
movq %rax, -0x818(%rbp)
jmp 0x2c092
movq -0x818(%rbp), %rdi
movsd -0x2b8(%rbp), %xmm0
callq 0x99a0
movq %rax, -0x820(%rbp)
jmp 0x2c0af
movq -0x820(%rbp), %rdi
leaq 0x1f30a(%rip), %rsi     # 0x4b3c7
callq 0x94c0
movq %rax, -0x828(%rbp)
jmp 0x2c0cb
movq -0x828(%rbp), %rdi
movsd -0x2c0(%rbp), %xmm0
callq 0x99a0
movq %rax, -0x830(%rbp)
jmp 0x2c0e8
movq -0x830(%rbp), %rdi
movq 0x3fe42(%rip), %rsi     # 0x6bf38
callq 0x9500
jmp 0x2c0fd
movq 0x3fe9c(%rip), %rdi     # 0x6bfa0
leaq 0x1f2cd(%rip), %rsi     # 0x4b3d8
callq 0x94c0
movq %rax, -0x838(%rbp)
jmp 0x2c119
movq -0x500(%rbp), %rdi
addq $0x70, %rdi
callq 0x167c0
movsd %xmm0, -0x840(%rbp)
jmp 0x2c133
movsd -0x840(%rbp), %xmm0
movq -0x838(%rbp), %rdi
callq 0x99a0
movq %rax, -0x848(%rbp)
jmp 0x2c150
movq -0x848(%rbp), %rdi
leaq 0x1f28a(%rip), %rsi     # 0x4b3e8
callq 0x94c0
movq %rax, -0x850(%rbp)
jmp 0x2c16c
movq -0x500(%rbp), %rdi
addq $0x70, %rdi
callq 0x167e0
movsd %xmm0, -0x858(%rbp)
jmp 0x2c186
movsd -0x858(%rbp), %xmm0
movq -0x850(%rbp), %rdi
callq 0x99a0
movq %rax, -0x860(%rbp)
jmp 0x2c1a3
movq -0x860(%rbp), %rdi
movq 0x3fd87(%rip), %rsi     # 0x6bf38
callq 0x9500
jmp 0x2c1b8
jmp 0x2c1ba
cvtsi2sdl -0x2ec(%rbp), %xmm1
cvtsi2sdl -0x1c(%rbp), %xmm0
divsd %xmm0, %xmm1
movsd 0x1f095(%rip), %xmm0    # 0x4b268
ucomisd %xmm1, %xmm0
jbe 0x2c1de
jmp 0x2c3a4
movsd -0x48(%rbp), %xmm1
movsd -0x38(%rbp), %xmm0
subsd %xmm1, %xmm0
cvtsi2sdl -0x2f0(%rbp), %xmm2
cvtsi2sdl -0x1c(%rbp), %xmm3
divsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x2b8(%rbp)
movsd -0x50(%rbp), %xmm1
movsd -0x40(%rbp), %xmm0
subsd %xmm1, %xmm0
cvtsi2sdl -0x2f0(%rbp), %xmm2
cvtsi2sdl -0x1c(%rbp), %xmm3
divsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x2c0(%rbp)
movsd -0x2e8(%rbp), %xmm0
cvtsi2sdl -0x1c(%rbp), %xmm1
divsd %xmm1, %xmm0
callq 0x2ca10
movsd %xmm0, -0x868(%rbp)
jmp 0x2c25c
movsd -0x868(%rbp), %xmm0
movsd %xmm0, -0x4e0(%rbp)
cmpl $0x1, -0x2dc(%rbp)
jl 0x2c2b2
cmpl $0x7, -0x2dc(%rbp)
jge 0x2c2b2
movsd -0x18(%rbp), %xmm0
mulsd -0x4e0(%rbp), %xmm0
movl -0x2dc(%rbp), %eax
addl $0x1, %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd 0x1efb4(%rip), %xmm1    # 0x4b258
divsd %xmm1, %xmm0
movsd %xmm0, -0x2d8(%rbp)
jmp 0x2c2d8
movsd -0x18(%rbp), %xmm0
mulsd -0x4e0(%rbp), %xmm0
movl -0x2dc(%rbp), %eax
addl $0x1, %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x2d8(%rbp)
movq -0x500(%rbp), %rax
testb $0x1, 0x31(%rax)
je 0x2c39f
movq -0x500(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq 0x1f004(%rip), %rsi     # 0x4b302
callq 0x1c390
movq %rax, -0x870(%rbp)
jmp 0x2c30c
movq -0x870(%rbp), %rdi
callq 0x2c980
movq %rax, -0x878(%rbp)
jmp 0x2c321
movq -0x878(%rbp), %rax
movq %rax, -0x4e8(%rbp)
leaq -0x4f8(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
callq 0x2c9c0
movq -0x4e8(%rbp), %rdi
leaq 0x1f0ab(%rip), %rsi     # 0x4b3fb
callq 0x1c390
movq %rax, -0x880(%rbp)
jmp 0x2c35e
movq -0x880(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
callq 0x1c590
leaq -0x4f8(%rbp), %rdi
callq 0x1c060
jmp 0x2c39f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x120(%rbp)
movl %eax, -0x124(%rbp)
leaq -0x4f8(%rbp), %rdi
callq 0x1c060
jmp 0x2c3b9
jmp 0x2b43d
leaq -0x2a0(%rbp), %rdi
callq 0x2c510
addq $0x880, %rsp            # imm = 0x880
popq %rbp
retq
leaq -0x2a0(%rbp), %rdi
callq 0x2c510
movq -0x120(%rbp), %rdi
callq 0x98f0
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)