user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D110(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  D19(%rip),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  D94(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  D151(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  D116(%rip),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movq   $0x0,-0x48(%rbp)
  jmp    L2
L5:
  mov    -0x48(%rbp),%rax
  movsd  -0x30(%rbp,%rax,8),%xmm0
  cvttsd2si %xmm0,%rdx
  pxor   %xmm1,%xmm1
  cvtsi2sdq -0x48(%rbp),%xmm1
  movq   %xmm1,%rax
  mov    %rdx,%rsi
  movq   %rax,%xmm0
  lea    D123(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  addq   $0x1,-0x48(%rbp)
L2:
  cmpq   $0x4,-0x48(%rbp)
  jle    L5
  movsd  D114(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  lea    -0x30(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  mov    $0x5,%esi
  mov    %rdx,%rdi
  movq   %rax,%xmm0
  call   <CSPL_Array_bisect@plt>
  mov    %rax,-0x38(%rbp)
  mov    -0x38(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  mov    %rdx,%rsi
  movq   %rax,%xmm0
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  movsd  D118(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  lea    -0x30(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  mov    $0x5,%esi
  mov    %rdx,%rdi
  movq   %rax,%xmm0
  call   <CSPL_Array_bisect@plt>
  mov    %rax,-0x38(%rbp)
  mov    -0x38(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  mov    %rdx,%rsi
  movq   %rax,%xmm0
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  movsd  D94(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  lea    -0x30(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  mov    $0x5,%esi
  mov    %rdx,%rdi
  movq   %rax,%xmm0
  call   <CSPL_Array_bisect@plt>
  mov    %rax,-0x38(%rbp)
  mov    -0x38(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  mov    %rdx,%rsi
  movq   %rax,%xmm0
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  movsd  D46(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  lea    -0x30(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  mov    $0x5,%esi
  mov    %rdx,%rdi
  movq   %rax,%xmm0
  call   <CSPL_Array_bisect@plt>
  mov    %rax,-0x38(%rbp)
  mov    -0x38(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  mov    %rdx,%rsi
  movq   %rax,%xmm0
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  movsd  D136(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  lea    -0x30(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  mov    $0x5,%esi
  mov    %rdx,%rdi
  movq   %rax,%xmm0
  call   <CSPL_Array_bisect@plt>
  mov    %rax,-0x38(%rbp)
  mov    -0x38(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  mov    %rdx,%rsi
  movq   %rax,%xmm0
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L21
  call   <__stack_chk_fail@plt>
L21:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D110
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D19
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D94
type_guessed: f64
name: extract_symbolic_data
arguments: label: D151
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D116
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D123
type_guessed: string
name: extract_symbolic_data
arguments: label: D114
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D25
type_guessed: string
name: extract_symbolic_data
arguments: label: D118
type_guessed: f64
name: extract_symbolic_data
arguments: label: D46
type_guessed: f64
name: extract_symbolic_data
arguments: label: D136
type_guessed: f64

tool: {"D110": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: {"D19": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40]}

tool: D94: 5

tool: {"D151": [0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x40]}

tool: {"D116": [0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x40]}

tool: D123: dat1[%ld]=%lf


tool: {"D114": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf]}

tool: D25: CSPL_Array_bisect(%lf, dat1, 5)=%ld


tool: D118: 1.5

tool: D46: 5.5

tool: D136: 8.5

assistant: ```c
int main(void) {
  double dat1[5] = {1, 2, 5, 7, 8};
  long ans, i;
  double val;
  for (i = 0; i < 5; i++)
    printf("dat1[%ld]=%lf\n", i, dat1[i]);
  val = -1;
  ans = CSPL_Array_bisect(val, dat1, 5);
  printf("CSPL_Array_bisect(%lf, dat1, 5)=%ld\n", val, ans);
  val = 1.5;
  ans = CSPL_Array_bisect(val, dat1, 5);
  printf("CSPL_Array_bisect(%lf, dat1, 5)=%ld\n", val, ans);
  val = 5.0;
  ans = CSPL_Array_bisect(val, dat1, 5);
  printf("CSPL_Array_bisect(%lf, dat1, 5)=%ld\n", val, ans);
  val = 5.5;
  ans = CSPL_Array_bisect(val, dat1, 5);
  printf("CSPL_Array_bisect(%lf, dat1, 5)=%ld\n", val, ans);
  val = 8.5;
  ans = CSPL_Array_bisect(val, dat1, 5);
  printf("CSPL_Array_bisect(%lf, dat1, 5)=%ld\n", val, ans);
  return (0);
}
```