user: What is the c source code of the assembly code below?

```asm
<Crossover_Kpoint>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xd0,%rsp
  mov    %rdi,-0x88(%rbp)
  mov    %rsi,-0x90(%rbp)
  mov    %edx,-0x94(%rbp)
  mov    %ecx,-0x98(%rbp)
  mov    %r8,-0xa0(%rbp)
  mov    %r9,-0xa8(%rbp)
  movsd  %xmm0,-0xb0(%rbp)
  mov    0x18(%rbp),%rax
  mov    %rax,-0xb8(%rbp)
  mov    0x20(%rbp),%rax
  mov    %rax,-0xc0(%rbp)
  mov    0x28(%rbp),%rax
  mov    %rax,-0xc8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D7(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  mov    -0x40(%rbp),%rdi
  mov    -0x98(%rbp),%r8d
  mov    -0x90(%rbp),%rcx
  lea    -0x74(%rbp),%rdx
  lea    -0x78(%rbp),%rsi
  lea    -0x50(%rbp),%rax
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <CO_select_forward_3@plt>
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0xa8(%rbp),%rsi
  mov    -0x38(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    0x10(%rbp),%edx
  movq   %rcx,%xmm0
  mov    %rax,%rdi
  call   <self_adj_index_search@plt>
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0xa8(%rbp),%rsi
  mov    -0x30(%rbp),%rcx
  lea    -0x6c(%rbp),%rax
  mov    0x10(%rbp),%edx
  movq   %rcx,%xmm0
  mov    %rax,%rdi
  call   <self_adj_index_search@plt>
  mov    $0x2,%esi
  mov    $0x1,%edi
  call   <integerrng@plt>
  mov    %eax,-0x54(%rbp)
  cmpl   $0x1,-0x54(%rbp)
  jne    L36
  mov    -0x94(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,%esi
  mov    $0x1,%edi
  call   <integerrng@plt>
  mov    %eax,-0x5c(%rbp)
  movl   $0x1,-0x60(%rbp)
  jmp    L84
L202:
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xc0(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xc8(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x60(%rbp)
L84:
  mov    -0x60(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jle    L202
  mov    -0x5c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x60(%rbp)
  jmp    L51
L16:
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xc0(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xc8(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x60(%rbp)
L51:
  mov    -0x60(%rbp),%eax
  cmp    -0x94(%rbp),%eax
  jle    L16
  jmp    L138
L36:
  cmpl   $0x2,-0x54(%rbp)
  jne    L138
  mov    -0x94(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,%esi
  mov    $0x1,%edi
  call   <integerrng@plt>
  mov    %eax,-0x5c(%rbp)
  mov    -0x94(%rbp),%eax
  sub    $0x2,%eax
  mov    %eax,%esi
  mov    $0x1,%edi
  call   <integerrng@plt>
  mov    %eax,-0x58(%rbp)
  mov    -0x58(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L49
  addl   $0x1,-0x58(%rbp)
L49:
  mov    -0x5c(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jle    L201
  mov    -0x5c(%rbp),%eax
  mov    %eax,-0x60(%rbp)
  mov    -0x58(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x58(%rbp)
L201:
  movl   $0x1,-0x60(%rbp)
  jmp    L35
L203:
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xc0(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xc8(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x60(%rbp)
L35:
  mov    -0x60(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jle    L203
  mov    -0x5c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x60(%rbp)
  jmp    L95
L162:
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xc0(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xc8(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x60(%rbp)
L95:
  mov    -0x60(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jle    L162
  mov    -0x58(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x60(%rbp)
  jmp    L12
L41:
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xc0(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xc8(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x60(%rbp)
L12:
  mov    -0x60(%rbp),%eax
  cmp    -0x94(%rbp),%eax
  jle    L41
L138:
  mov    -0x94(%rbp),%edx
  mov    -0xc0(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <cost@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0xa8(%rbp),%rsi
  mov    -0x28(%rbp),%rcx
  lea    -0x68(%rbp),%rax
  mov    0x10(%rbp),%edx
  movq   %rcx,%xmm0
  mov    %rax,%rdi
  call   <self_adj_index_search@plt>
  mov    -0x94(%rbp),%edx
  mov    -0xc8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <cost@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0xa8(%rbp),%rsi
  mov    -0x20(%rbp),%rcx
  lea    -0x64(%rbp),%rax
  mov    0x10(%rbp),%edx
  movq   %rcx,%xmm0
  mov    %rax,%rdi
  call   <self_adj_index_search@plt>
  mov    -0x74(%rbp),%edx
  mov    -0x78(%rbp),%esi
  mov    -0x40(%rbp),%rdi
  mov    -0x98(%rbp),%r8d
  mov    -0x90(%rbp),%rcx
  lea    -0x48(%rbp),%rax
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <CO_select_backward_3@plt>
  mov    -0x68(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movq   D8(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm1
  divsd  -0xb0(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x64(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm1
  movapd %xmm1,%xmm2
  divsd  -0xb0(%rbp),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0x48(%rbp),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x70(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x38(%rbp),%xmm0
  divsd  -0xb0(%rbp),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x6c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x30(%rbp),%xmm0
  divsd  -0xb0(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x50(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L196
  mov    D27(%rip),%rax
  jmp    L160
L196:
  mov    -0x18(%rbp),%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
L160:
  mov    -0xb8(%rbp),%rdx
  mov    %rax,(%rdx)
  mov    $0x0,%eax
  call   <uniformrng@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0xb8(%rbp),%rax
  movsd  (%rax),%xmm0
  comisd -0x10(%rbp),%xmm0
  ja     L171
  jmp    L214
L171:
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movl   $0x1,-0x60(%rbp)
  jmp    L13
L56:
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xc0(%rbp),%rax
  add    %rax,%rdx
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x88(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x60(%rbp)
L13:
  mov    -0x60(%rbp),%eax
  cmp    -0x94(%rbp),%eax
  jle    L56
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movl   $0x1,-0x60(%rbp)
  jmp    L14
L123:
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x88(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x60(%rbp)
L14:
  mov    -0x60(%rbp),%eax
  cmp    -0x94(%rbp),%eax
  jle    L123
L214:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L114
  call   <__stack_chk_fail@plt>
L114:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D7
datatype: f64
name: disassemble_data
arguments: data_label: D8
datatype: f32[2]
name: disassemble_data
arguments: data_label: D27
datatype: f64

tool: D7: 10.1

tool: {"D8": [0.0,-0.0]}

tool: D27: 1

assistant: ```c
void Crossover_Kpoint(double **x, double *fx, int N_dimension, int N_population, double *theta, double *grid_points, int grid_size, double temp, double *accpr_pop, double *z_new_1, double *z_new_2) {
  double temp_co;
  int n1;
  int n2;
  int i;
  int K_CO;
  int lab_1;
  int lab_2;
  int k_old_1;
  int k_old_2;
  int k_new_1;
  int k_new_2;
  double pr_fw;
  double pr_bw;
  double fz_old_1;
  double fz_old_2;
  double fz_new_1;
  double fz_new_2;
  double sumv;
  double un;
  double rat;
  temp_co = 10.1;
  CO_select_forward_3(&pr_fw, &n1, &n2, fx, N_population, temp_co);
  fz_old_1 = fx[n1];
  self_adj_index_search(&k_old_1, fz_old_1, grid_points, grid_size);
  fz_old_2 = fx[n2];
  self_adj_index_search(&k_old_2, fz_old_2, grid_points, grid_size);
  K_CO = integerrng(1, 2);
  if (K_CO == 1) {
    lab_1 = integerrng(1, N_dimension - 1);
    for (i = 1; i <= lab_1; i++) {
      z_new_1[i] = x[n1][i];
      z_new_2[i] = x[n2][i];
    }
    for (i = lab_1 + 1; i <= N_dimension; i++) {
      z_new_1[i] = x[n2][i];
      z_new_2[i] = x[n1][i];
    }
  } else if (K_CO == 2) {
    lab_1 = integerrng(1, N_dimension - 1);
    lab_2 = integerrng(1, N_dimension - 2);
    if (lab_2 >= lab_1)
      lab_2++;
    if (lab_1 > lab_2) {
      i = lab_1;
      lab_1 = lab_2;
      lab_2 = i;
    }
    for (i = 1; i <= lab_1; i++) {
      z_new_1[i] = x[n1][i];
      z_new_2[i] = x[n2][i];
    }
    for (i = lab_1 + 1; i <= lab_2; i++) {
      z_new_1[i] = x[n2][i];
      z_new_2[i] = x[n1][i];
    }
    for (i = lab_2 + 1; i <= N_dimension; i++) {
      z_new_1[i] = x[n1][i];
      z_new_2[i] = x[n2][i];
    }
  }
  fz_new_1 = cost(z_new_1, N_dimension);
  self_adj_index_search(&k_new_1, fz_new_1, grid_points, grid_size);
  fz_new_2 = cost(z_new_2, N_dimension);
  self_adj_index_search(&k_new_2, fz_new_2, grid_points, grid_size);
  CO_select_backward_3(&pr_bw, n1, n2, fx, N_population, temp_co);
  rat = -theta[k_new_1] - fz_new_1 / temp - theta[k_new_2] - fz_new_2 / temp + pr_bw + theta[k_old_1] + fz_old_1 / temp + theta[k_old_2] + fz_old_2 / temp - pr_fw;
  *accpr_pop = ((rat > 0.0) ? 1.0 : exp(rat));
  un = uniformrng();
  if (*accpr_pop > un) {
    fx[n1] = fz_new_1;
    for (i = 1; i <= N_dimension; i++)
      x[n1][i] = z_new_1[i];
    fx[n2] = fz_new_2;
    for (i = 1; i <= N_dimension; i++)
      x[n2][i] = z_new_2[i];
  }
}
```