// File: /workspace/github_cpp_makefile_star2_O2/harry830622[P]floorplanner/src/floorplanner.cpp
// Function: Floorplanner::SA()
void Floorplanner::SA() {
  const double initial_uphill_probability = 0.99;
  const double r = 0.75;
  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;

  if (is_drawing_) {
    drawing_ = Json::object();
    drawing_["config"] = {{"initialTemperature", initial_temperature},
                          {"r", r},
                          {"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;

    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) {
        ++num_accepted_floorplans;
        floorplan = new_floorplan;
        last_cost = cost;

        const double outline_width = database_.outline_width();
        const double outline_height = database_.outline_height();
        if (floorplan.width() <= outline_width &&
            floorplan.height() <= outline_height) {
          ++num_feasible_floorplans;
          if (cost < best_cost) {
            best_floorplan_ = 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) {
          ++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 << "    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));

    temperature *= r;

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

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x318, %rsp            # imm = 0x318
movq %rdi, %rbx
movabsq $0x3fe8000000000000, %rax # imm = 0x3FE8000000000000
movq %rax, 0xe8(%rsp)
movsd 0x68(%rdi), %xmm0
divsd 0xb325(%rip), %xmm0     # 0x1b700
movsd %xmm0, 0x28(%rsp)
movsd %xmm0, 0x88(%rsp)
movq (%rdi), %rdi
callq 0x8d3c
movl %eax, %ebp
movq (%rbx), %rdi
callq 0x8d3c
imull %ebp, %eax
leal (%rax,%rax,2), %eax
movl %eax, 0xc(%rsp)
movsd 0x8(%rbx), %xmm0
movapd %xmm0, 0x50(%rsp)
cmpb $0x1, 0x31(%rbx)
jne 0x10617
leaq 0x260(%rsp), %r14
movq %r14, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0xd1f4
leaq 0x118(%rbx), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0xd4fc
movq %r14, %rdi
callq 0xd290
leaq 0xb337(%rip), %rsi      # 0x1b787
leaq 0x270(%rsp), %rdi
callq 0x12084
leaq 0x280(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x1209e
leaq 0x1b8(%rsp), %r14
leaq 0x270(%rsp), %rsi
pushq $0x2
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
movq %r14, %rdi
callq 0xd2e8
leaq 0x1c8(%rsp), %r14
leaq 0xb19a(%rip), %rsi      # 0x1b63d
leaq 0xa0(%rsp), %rdi
callq 0xd6e2
leaq 0xb0(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x1209e
leaq 0xa0(%rsp), %rsi
pushq $0x2
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
movq %r14, %rdi
callq 0xd2e8
leaq 0x1d8(%rsp), %r14
leaq 0xb2ac(%rip), %rsi      # 0x1b79a
leaq 0x68(%rsp), %rdi
callq 0x120b8
leaq 0x78(%rsp), %rdi
leaq 0xc(%rsp), %rsi
callq 0x120d2
leaq 0x68(%rsp), %rsi
pushq $0x2
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
movq %r14, %rdi
callq 0xd2e8
leaq 0x138(%rsp), %rdi
leaq 0x1b8(%rsp), %rsi
pushq $0x3
popq %rdx
pushq $0x1
popq %rcx
pushq $0x2
popq %r8
callq 0xd2e8
leaq 0xb267(%rip), %rsi      # 0x1b7ab
movq %r15, %rdi
callq 0xd3fa
leaq 0x138(%rsp), %r14
movq %rax, %rdi
movq %r14, %rsi
callq 0xd4fc
movq %r14, %rdi
callq 0xd290
pushq $0x20
popq %r14
leaq (%rsp,%r14), %rdi
addq $0x1b8, %rdi            # imm = 0x1B8
callq 0xd290
addq $-0x10, %r14
cmpq $-0x10, %r14
jne 0x1056b
pushq $0x10
popq %r14
leaq (%rsp,%r14), %rdi
addq $0x68, %rdi
callq 0xd290
addq $-0x10, %r14
cmpq $-0x10, %r14
jne 0x10589
pushq $0x10
popq %r14
leaq (%rsp,%r14), %rdi
addq $0xa0, %rdi
callq 0xd290
addq $-0x10, %r14
cmpq $-0x10, %r14
jne 0x105a4
pushq $0x10
popq %r14
leaq (%rsp,%r14), %rdi
addq $0x270, %rdi            # imm = 0x270
callq 0xd290
addq $-0x10, %r14
cmpq $-0x10, %r14
jne 0x105c2
leaq 0x128(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0xd5e8
leaq 0xb1be(%rip), %rsi      # 0x1b7b2
movq %r15, %rdi
callq 0xd3fa
leaq 0x128(%rsp), %r14
movq %rax, %rdi
movq %r14, %rsi
callq 0xd4fc
movq %r14, %rdi
callq 0xd290
leaq 0x70(%rbx), %rsi
leaq 0x1b8(%rsp), %r14
movq %r14, %rdi
movq %rsi, 0x38(%rsp)
callq 0x11ef8
movq (%rbx), %rsi
movq %r14, %rdi
callq 0xb566
cmpb $0x1, 0x31(%rbx)
jne 0x1068c
leaq 0x1b8(%rsp), %rdi
callq 0xacba
leaq 0x118(%rsp), %rdi
movq %rax, %rsi
callq 0xe86a
leaq 0x118(%rbx), %rdi
leaq 0xb151(%rip), %rsi      # 0x1b7bd
callq 0xd3fa
leaq 0x118(%rsp), %r14
movq %rax, %rdi
movq %r14, %rsi
callq 0xd4fc
movq %r14, %rdi
callq 0xd290
movsd 0xb054(%rip), %xmm2     # 0x1b6e8
movapd 0x50(%rsp), %xmm0
subsd %xmm0, %xmm2
unpcklpd %xmm0, %xmm2            # xmm2 = xmm2[0],xmm0[0]
movapd 0xb086(%rip), %xmm1     # 0x1b730
movapd %xmm2, 0xc0(%rsp)
mulpd %xmm2, %xmm1
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
leaq 0x1b8(%rsp), %rsi
movq %rbx, %rdi
movapd %xmm1, 0xf0(%rsp)
callq 0xfdc6
movapd %xmm0, %xmm1
movsd 0x28(%rsp), %xmm0
divsd 0xb01e(%rip), %xmm0     # 0x1b708
movsd %xmm0, 0x28(%rsp)
movsd 0x88(%rsp), %xmm0
leaq 0x68(%rsp), %rax
movsd %xmm0, (%rax)
leaq 0x118(%rbx), %rax
movq %rax, 0x18(%rsp)
movapd 0xf0(%rsp), %xmm2
movapd 0xc0(%rsp), %xmm3
subpd %xmm2, %xmm3
movapd %xmm3, 0xc0(%rsp)
movq $0x0, 0x30(%rsp)
leaq 0x270(%rsp), %rbp
leaq 0xd8(%rsp), %r13
leaq 0x1b8(%rsp), %r14
leaq 0xa0(%rsp), %r15
movsd %xmm1, 0x60(%rsp)
movsd %xmm1, 0x50(%rsp)
movapd %xmm2, 0x40(%rsp)
ucomisd 0x28(%rsp), %xmm0
jbe 0x10e7c
andl $0x0, 0x8(%rsp)
cmpb $0x0, 0x31(%rbx)
je 0x1081d
movq %rbp, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0xd1f4
movq %r13, %rdi
leaq 0x68(%rsp), %rsi
callq 0x120ec
movq %rbp, %rdi
leaq 0xb028(%rip), %rsi      # 0x1b7ce
callq 0xd3fa
movq %rax, %rdi
movq %r13, %rsi
callq 0xd4fc
movq %r13, %rdi
callq 0xd290
leaq 0x108(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0xd5e8
movq %rbp, %rdi
leaq 0xb761(%rip), %rsi      # 0x1bf3a
callq 0xd3fa
movq %rax, %rdi
leaq 0x108(%rsp), %r12
movq %r12, %rsi
callq 0xd4fc
movq %r12, %rdi
callq 0xd290
movq 0x18(%rsp), %rdi
leaq 0xafad(%rip), %rsi      # 0x1b7b2
callq 0xd3fa
movq %rax, %rdi
movq %rbp, %rsi
callq 0x12106
movq %rbp, %rdi
callq 0xd290
movq 0x30(%rsp), %rax
incl %eax
movq %rax, 0x30(%rsp)
movapd 0x40(%rsp), %xmm0
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
movapd %xmm0, 0x90(%rsp)
movl $0x0, 0x4(%rsp)
xorl %r13d, %r13d
movl 0xc(%rsp), %eax
cmpl %eax, %r13d
jge 0x10c23
movq %rbp, %rdi
movq %r14, %rsi
callq 0x11ef8
movq (%rbx), %rsi
movq %rbp, %rdi
callq 0xacf6
movq (%rbx), %rsi
movq %rbp, %rdi
callq 0xb566
movq %rbx, %rdi
movq %rbp, %rsi
movapd 0x90(%rsp), %xmm0
movapd 0x40(%rsp), %xmm1
callq 0xfdc6
movsd %xmm0, 0x10(%rsp)
subsd 0x50(%rsp), %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm0, %xmm1
jbe 0x10a2b
movq %r14, %rdi
movq %rbp, %rsi
callq 0x11fee
movsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x50(%rsp)
movq (%rbx), %rdi
callq 0x8d06
movsd %xmm0, 0x20(%rsp)
movq (%rbx), %rdi
callq 0x8d0c
movsd %xmm0, 0xd0(%rsp)
movq %r14, %rdi
callq 0xaccc
movsd 0x20(%rsp), %xmm1
ucomisd %xmm0, %xmm1
jb 0x10935
movq %r14, %rdi
callq 0xacd2
movsd 0xd0(%rsp), %xmm1
ucomisd %xmm0, %xmm1
jb 0x10935
incl 0x8(%rsp)
movsd 0x60(%rsp), %xmm0
ucomisd 0x10(%rsp), %xmm0
jbe 0x10935
movq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x11fee
movsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x60(%rsp)
incl 0x4(%rsp)
cmpb $0x1, 0x31(%rbx)
jne 0x10c13
movq %r14, %rdi
callq 0xacba
movq %r15, %rdi
movq %rax, %rsi
callq 0xe86a
movl %r13d, 0x20(%rsp)
movq %rbx, %r12
movq %rbp, %rbx
movq %r14, %r13
movb $0x1, 0x3(%rsp)
movq %r15, %r14
leaq 0x1a8(%rsp), %r15
movq %r15, %rdi
leaq 0x3(%rsp), %rsi
callq 0x121d2
movq %r14, %rdi
leaq 0xae4f(%rip), %rsi      # 0x1b7da
callq 0xd3fa
movq %rax, %rdi
movq %r15, %rsi
callq 0xd4fc
movq %r15, %rdi
callq 0xd290
leaq 0x198(%rsp), %rbp
movq %rbp, %rdi
leaq 0x10(%rsp), %rsi
callq 0x1209e
movq %r14, %rdi
leaq 0xae23(%rip), %rsi      # 0x1b7e5
callq 0xd3fa
movq %r14, %r15
movq %rax, %rdi
movq %rbp, %rsi
callq 0xd4fc
movq %rbp, %rdi
callq 0xd290
movq 0x18(%rsp), %rdi
leaq 0xadc9(%rip), %rsi      # 0x1b7b2
callq 0xd3fa
movq %r13, %r14
movq %rax, %rdi
callq 0x121ec
movq %rax, %rdi
leaq 0xb537(%rip), %rsi      # 0x1bf3a
callq 0xd3fa
movq %rax, %rdi
movq %r15, %rsi
callq 0x12106
movq %r15, %rdi
callq 0xd290
movq %rbx, %rbp
movq %r12, %rbx
movl 0x20(%rsp), %r13d
jmp 0x10c13
xorpd 0xad0d(%rip), %xmm0     # 0x1b740
divsd 0x68(%rsp), %xmm0
callq 0x7680
movsd %xmm0, 0x20(%rsp)
callq 0x7120
cvtsi2sd %eax, %xmm0
divsd 0xaccb(%rip), %xmm0     # 0x1b720
movsd 0x20(%rsp), %xmm1
ucomisd %xmm0, %xmm1
jbe 0x10b48
movq %r14, %rdi
movq %rbp, %rsi
callq 0x11fee
incl 0x4(%rsp)
movsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x50(%rsp)
cmpb $0x1, 0x31(%rbx)
jne 0x10c13
movq %r14, %rdi
callq 0xacba
movq %r15, %rdi
movq %rax, %rsi
callq 0xe86a
movb $0x1, 0x3(%rsp)
leaq 0x188(%rsp), %r12
movq %r12, %rdi
leaq 0x3(%rsp), %rsi
callq 0x121d2
movq %r15, %rdi
leaq 0xad19(%rip), %rsi      # 0x1b7da
callq 0xd3fa
movq %rax, %rdi
movq %r12, %rsi
callq 0xd4fc
movq %r12, %rdi
callq 0xd290
leaq 0x178(%rsp), %r12
movq %r12, %rdi
leaq 0x10(%rsp), %rsi
callq 0x1209e
movq %r15, %rdi
leaq 0xaced(%rip), %rsi      # 0x1b7e5
callq 0xd3fa
movq %rax, %rdi
movq %r12, %rsi
callq 0xd4fc
movq %r12, %rdi
callq 0xd290
movq 0x18(%rsp), %rdi
leaq 0xac96(%rip), %rsi      # 0x1b7b2
callq 0xd3fa
movq %rax, %rdi
callq 0x121ec
movq %rax, %rdi
leaq 0xb407(%rip), %rsi      # 0x1bf3a
callq 0xd3fa
movq %rax, %rdi
movq %r15, %rsi
callq 0x12106
jmp 0x10c0b
cmpb $0x1, 0x31(%rbx)
jne 0x10c13
movq %rbp, %rdi
callq 0xacba
movq %r15, %rdi
movq %rax, %rsi
callq 0xe86a
movb $0x0, 0x3(%rsp)
leaq 0x168(%rsp), %r12
movq %r12, %rdi
leaq 0x3(%rsp), %rsi
callq 0x121d2
movq %r15, %rdi
leaq 0xac51(%rip), %rsi      # 0x1b7da
callq 0xd3fa
movq %rax, %rdi
movq %r12, %rsi
callq 0xd4fc
movq %r12, %rdi
callq 0xd290
leaq 0x158(%rsp), %r12
movq %r12, %rdi
leaq 0x10(%rsp), %rsi
callq 0x1209e
movq %r15, %rdi
leaq 0xac25(%rip), %rsi      # 0x1b7e5
callq 0xd3fa
movq %rax, %rdi
movq %r12, %rsi
callq 0xd4fc
movq %r12, %rdi
callq 0xd290
movq 0x18(%rsp), %rdi
leaq 0xabce(%rip), %rsi      # 0x1b7b2
callq 0xd3fa
movq %rax, %rdi
callq 0x121ec
movq %rax, %rdi
leaq 0xb33f(%rip), %rsi      # 0x1bf3a
callq 0xd3fa
movq %rax, %rdi
movq %r15, %rsi
callq 0x12106
movq %r15, %rdi
callq 0xd290
movq %rbp, %rdi
callq 0x11fb2
incl %r13d
jmp 0x10847
cmpb $0x0, 0x30(%rbx)
je 0x10d94
movq 0x1936c(%rip), %rdi     # 0x29fa0
leaq 0xabaf(%rip), %rsi      # 0x1b7ea
callq 0x7380
movq %rax, %rdi
movq 0x30(%rsp), %rsi
callq 0x7640
movq %rax, %rdi
callq 0x71c0
movq 0x19344(%rip), %rdi     # 0x29fa0
leaq 0xab99(%rip), %rsi      # 0x1b7fc
callq 0x7380
movsd 0x68(%rsp), %xmm0
movq %rax, %rdi
callq 0x75a0
movq %rax, %rdi
callq 0x71c0
movq 0x1931b(%rip), %rdi     # 0x29fa0
leaq 0xab82(%rip), %rsi      # 0x1b80e
callq 0x7380
movq %rax, %rdi
movl 0x4(%rsp), %esi
callq 0x7640
movq %rax, %rdi
callq 0x71c0
movq 0x192f4(%rip), %rdi     # 0x29fa0
leaq 0xab79(%rip), %rsi      # 0x1b82c
callq 0x7380
movl 0x8(%rsp), %esi
movq %rax, %rdi
callq 0x7640
movq %rax, %rdi
callq 0x71c0
movq 0x192cd(%rip), %rdi     # 0x29fa0
leaq 0xab70(%rip), %rsi      # 0x1b84a
callq 0x7380
movl 0xc(%rsp), %esi
movq %rax, %rdi
callq 0x7640
movq %rax, %rdi
callq 0x71c0
movq 0x192a6(%rip), %rdi     # 0x29fa0
leaq 0xab61(%rip), %rsi      # 0x1b862
callq 0x7380
movq %rax, %rdi
movapd 0x90(%rsp), %xmm0
callq 0x75a0
movq %rax, %rdi
leaq 0xab56(%rip), %rsi      # 0x1b877
callq 0x7380
movq %rax, %rdi
movapd 0x40(%rsp), %xmm0
callq 0x75a0
movq %rax, %rdi
callq 0x71c0
movq 0x1925d(%rip), %rdi     # 0x29fa0
leaq 0xab3e(%rip), %rsi      # 0x1b888
callq 0x7380
movq %rax, %r12
movq 0x38(%rsp), %rdi
callq 0xacd8
movq %r12, %rdi
callq 0x75a0
movq %rax, %rdi
leaq 0xab2a(%rip), %rsi      # 0x1b898
callq 0x7380
movq %rax, %r12
movq 0x38(%rsp), %rdi
callq 0xace4
movq %r12, %rdi
callq 0x75a0
movq %rax, %rdi
callq 0x71c0
movl 0xc(%rsp), %eax
cvtsi2sdl 0x4(%rsp), %xmm0
cvtsi2sd %eax, %xmm1
movsd %xmm1, 0x90(%rsp)
divsd %xmm1, %xmm0
movsd 0xa95d(%rip), %xmm1     # 0x1b710
ucomisd %xmm0, %xmm1
ja 0x10e7c
cvtsi2sdl 0x8(%rsp), %xmm0
movapd %xmm0, 0x40(%rsp)
movsd 0x68(%rsp), %xmm0
mulsd 0xa941(%rip), %xmm0     # 0x1b718
movsd %xmm0, 0x68(%rsp)
cmpb $0x1, 0x31(%rbx)
leaq 0xd8(%rsp), %r13
jne 0x10e4c
movq 0x18(%rsp), %rdi
leaq 0xa9bb(%rip), %rsi      # 0x1b7b2
callq 0xd3fa
movq %rax, %rdi
callq 0x121ec
movq %rax, %r12
leaq 0x148(%rsp), %r13
movq %r13, %rdi
leaq 0x8(%rsp), %rsi
callq 0x12216
movq %r12, %rdi
leaq 0xaa85(%rip), %rsi      # 0x1b8ab
callq 0xd3fa
movq %rax, %rdi
movq %r13, %rsi
callq 0xd4fc
movq %r13, %rdi
callq 0xd290
movsd 0x68(%rsp), %xmm0
leaq 0xd8(%rsp), %r13
movapd 0x40(%rsp), %xmm1
divsd 0x90(%rsp), %xmm1
unpcklpd %xmm1, %xmm1            # xmm1 = xmm1[0,0]
mulpd 0xc0(%rsp), %xmm1
addpd 0xf0(%rsp), %xmm1
movapd %xmm1, 0x40(%rsp)
jmp 0x10768
leaq 0x1b8(%rsp), %rdi
callq 0x11fb2
addq $0x318, %rsp            # imm = 0x318
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x128(%rsp), %rdi
callq 0xd290
jmp 0x11090
movq %rax, %rbx
leaq 0x118(%rsp), %rdi
jmp 0x10fe9
movq %rax, %rbx
leaq 0x138(%rsp), %rdi
callq 0xd290
jmp 0x10ed5
movq %rax, %rbx
pushq $0x20
popq %r15
leaq (%rsp,%r15), %rdi
addq $0x1b8, %rdi            # imm = 0x1B8
callq 0xd290
addq $-0x10, %r15
cmpq $-0x10, %r15
jne 0x10ed9
xorl %ebp, %ebp
jmp 0x10efd
movq %rax, %rbx
movb $0x1, %bpl
pushq $0x10
popq %r15
leaq (%rsp,%r15), %rdi
addq $0x68, %rdi
callq 0xd290
addq $-0x10, %r15
cmpq $-0x10, %r15
jne 0x10f01
jmp 0x10f22
jmp 0x10f1c
movq %rax, %rbx
movb $0x1, %bpl
pushq $0x10
popq %r15
leaq (%rsp,%r15), %rdi
addq $0xa0, %rdi
callq 0xd290
addq $-0x10, %r15
cmpq $-0x10, %r15
jne 0x10f26
jmp 0x10f4a
jmp 0x10f44
movq %rax, %rbx
movb $0x1, %bpl
pushq $0x10
popq %r15
leaq (%rsp,%r15), %rdi
addq $0x270, %rdi            # imm = 0x270
callq 0xd290
addq $-0x10, %r15
cmpq $-0x10, %r15
jne 0x10f4e
leaq 0x1b8(%rsp), %r15
cmpq %r14, %r15
setne %al
andb %al, %bpl
cmpb $0x1, %bpl
jne 0x11090
addq $-0x10, %r14
movq %r14, %rdi
callq 0xd290
cmpq %r15, %r14
jne 0x10f83
jmp 0x11090
movq %rax, %rbx
jmp 0x11090
jmp 0x11058
jmp 0x11058
movq %rax, %rbx
leaq 0x148(%rsp), %rdi
jmp 0x10fe9
movq %rax, %rbx
leaq 0xd8(%rsp), %rdi
jmp 0x10fd5
jmp 0x11058
movq %rax, %rbx
leaq 0x108(%rsp), %rdi
callq 0xd290
jmp 0x10fe1
jmp 0x11058
movq %rax, %rbx
leaq 0x270(%rsp), %rdi
callq 0xd290
jmp 0x11083
movq %rax, %rbx
leaq 0x168(%rsp), %rdi
jmp 0x11045
movq %rax, %rbx
leaq 0x188(%rsp), %rdi
jmp 0x11045
movq %rax, %rbx
leaq 0x178(%rsp), %rdi
jmp 0x11045
movq %rax, %rbx
leaq 0x158(%rsp), %rdi
jmp 0x11045
jmp 0x11073
jmp 0x11073
jmp 0x11073
movq %rax, %rbx
leaq 0x1a8(%rsp), %rdi
jmp 0x11045
movq %rax, %rbx
leaq 0x198(%rsp), %rdi
callq 0xd290
jmp 0x11062
jmp 0x11058
jmp 0x11073
jmp 0x11073
jmp 0x1105f
jmp 0x11073
jmp 0x1105f
movq %rax, %rbx
jmp 0x11083
jmp 0x11073
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0xd290
jmp 0x11076
jmp 0x11073
movq %rax, %rbx
leaq 0x270(%rsp), %rdi
callq 0x11fb2
leaq 0x1b8(%rsp), %rdi
callq 0x11fb2
movq %rbx, %rdi
callq 0x7660