user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  D153(%rip),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  D71(%rip),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  D155(%rip),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  D71(%rip),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  D156(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  D61(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  D84(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  D40(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  D84(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  D71(%rip),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  lea    D51(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D139(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D79(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D59(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x20(%rbp),%rcx
  lea    -0x40(%rbp),%rdx
  lea    -0x60(%rbp),%rsi
  lea    -0x80(%rbp),%rax
  mov    $0x3,%r8d
  mov    %rax,%rdi
  call   <thomas@plt>
  movq   $0x0,-0x88(%rbp)
  jmp    L19
L29:
  mov    -0x88(%rbp),%rax
  mov    -0x20(%rbp,%rax,8),%rax
  movq   %rax,%xmm0
  lea    D144(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addq   $0x1,-0x88(%rbp)
L19:
  cmpq   $0x2,-0x88(%rbp)
  jbe    L29
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L13
  call   <__stack_chk_fail@plt>
L13:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D153
data_type: f64
name: extract_symbolic_data
arguments: data_tag: D71
data_type: f64
name: extract_symbolic_data
arguments: data_tag: D155
data_type: f64
name: extract_symbolic_data
arguments: data_tag: D156
data_type: f64
name: extract_symbolic_data
arguments: data_tag: D61
data_type: f64
name: extract_symbolic_data
arguments: data_tag: D84
data_type: f64
name: extract_symbolic_data
arguments: data_tag: D40
data_type: f64
name: extract_symbolic_data
arguments: data_tag: D51
data_type: string
name: extract_symbolic_data
arguments: data_tag: D139
data_type: string
name: extract_symbolic_data
arguments: data_tag: D1
data_type: string
name: extract_symbolic_data
arguments: data_tag: D79
data_type: string
name: extract_symbolic_data
arguments: data_tag: D59
data_type: string
name: extract_symbolic_data
arguments: data_tag: D144
data_type: string

tool: D153: 2

tool: D71: 3

tool: D155: 1

tool: D156: 6

tool: D61: 4

tool: D84: 5

tool: D40: 7

tool: D51: The system,

tool: D139: [1.0  4.0  0.0][x] = [7.0]

tool: D1: [2.0  3.0  5.0][y] = [5.0]

tool: D79: [0.0  3.0  6.0][z] = [3.0]

tool: D59: has the solution:

tool: D144: [%f]


assistant: ```c
int main() {
  double a[] = {0.0, 2.0, 3.0};
  double b[] = {1.0, 3.0, 6.0};
  double c[] = {4.0, 5.0, 0.0};
  double x[] = {7.0, 5.0, 3.0};
  printf("The system,\n");
  printf("[1.0  4.0  0.0][x] = [7.0]\n");
  printf("[2.0  3.0  5.0][y] = [5.0]\n");
  printf("[0.0  3.0  6.0][z] = [3.0]\n");
  printf("has the solution:\n");
  thomas(a, b, c, x, 3);
  for (size_t i = 0; i < 3; ++i) {
    printf("[%f]\n", x[i]);
  }
  return 0;
}
```