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

```asm
<test_FKinSpace>:
  endbr64
  push   %r14
  lea    D83(%rip),%rsi
  mov    $0x24,%ecx
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  lea    D110(%rip),%rbx
  sub    $0x260,%rsp
  movsd  D98(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0x258(%rsp)
  xor    %eax,%eax
  mov    D148(%rip),%rax
  mov    %rsp,%r14
  lea    0x130(%rsp),%r13
  movsd  %xmm0,0x30(%rsp)
  mov    %r13,%rdi
  mov    %r14,%rbp
  lea    0x30(%rsp),%r12
  rep movsq %ds:(%rsi),%es:(%rdi)
  mov    %rax,0x48(%rsp)
  mov    D64(%rip),%rax
  lea    D120(%rip),%rdi
  movsd  %xmm0,0x58(%rsp)
  mov    %rax,0x68(%rsp)
  mov    D131(%rip),%rax
  movsd  %xmm0,0x80(%rsp)
  mov    %rax,0x88(%rsp)
  mov    D61(%rip),%rax
  movsd  %xmm0,0xa8(%rsp)
  movq   $0x0,0x38(%rsp)
  movq   $0x0,0x40(%rsp)
  movq   $0x0,0x50(%rsp)
  movq   $0x0,0x60(%rsp)
  movq   $0x0,0x70(%rsp)
  movq   $0x0,0x78(%rsp)
  movq   $0x0,0x90(%rsp)
  movq   $0x0,0x98(%rsp)
  movq   $0x0,0xa0(%rsp)
  mov    %rax,(%rsp)
  mov    D126(%rip),%rax
  mov    %rax,0x8(%rsp)
  mov    D62(%rip),%rax
  mov    %rax,0x10(%rsp)
  mov    D27(%rip),%rax
  mov    %rax,0x18(%rsp)
  mov    D95(%rip),%rax
  mov    %rax,0x20(%rsp)
  mov    D48(%rip),%rax
  mov    %rax,0x28(%rsp)
  call   <puts@plt>
  nopl   0x0(%rax)
L8:
  movsd  0x0(%rbp),%xmm0
  mov    %rbx,%rdi
  mov    $0x1,%eax
  add    $0x8,%rbp
  call   <printf@plt>
  cmp    %r12,%rbp
  jne    L8
  mov    $0xa,%edi
  lea    0xb0(%rsp),%rbx
  lea    0x130(%rsp),%r12
  call   <putchar@plt>
  mov    %rbp,%rdi
  mov    %rbx,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  mov    $0x6,%esi
  lea    D85(%rip),%rbp
  call   <FKinSpace@plt>
  lea    D75(%rip),%rdi
  call   <puts@plt>
L24:
  movsd  0x18(%rbx),%xmm3
  movsd  (%rbx),%xmm0
  mov    %rbp,%rdi
  add    $0x20,%rbx
  movsd  -0x10(%rbx),%xmm2
  movsd  -0x18(%rbx),%xmm1
  mov    $0x4,%eax
  call   <printf@plt>
  cmp    %r12,%rbx
  jne    L24
  mov    0x258(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L18
  add    $0x260,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L18:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D83
type: string
name: disassemble_data
arguments: data_label: D110
type: string
name: disassemble_data
arguments: data_label: D98
type: f64
name: disassemble_data
arguments: data_label: D148
type: f64
name: disassemble_data
arguments: data_label: D64
type: f64
name: disassemble_data
arguments: data_label: D120
type: string
name: disassemble_data
arguments: data_label: D131
type: f64
name: disassemble_data
arguments: data_label: D61
type: f64
name: disassemble_data
arguments: data_label: D126
type: f64
name: disassemble_data
arguments: data_label: D62
type: f64
name: disassemble_data
arguments: data_label: D27
type: f64
name: disassemble_data
arguments: data_label: D95
type: f64
name: disassemble_data
arguments: data_label: D48
type: byte[8]
name: disassemble_data
arguments: data_label: D85
type: string
name: disassemble_data
arguments: data_label: D75
type: string

tool: 

tool: D110: %lf 

tool: D98: 1

tool: D148: 213

tool: D64: 267.8

tool: D120: thetalist:

tool: D131: 478.95

tool: D61: 0.1

tool: D126: 0.2

tool: D62: 0.3

tool: D27: 0.4

tool: D95: 0.5

tool: {"D48": [0x18,0x2d,0x44,0x54,0xfb,0x21,0xe9,0x3f]}

tool: D85: %lf %lf %lf %lf


tool: D75: T:

assistant: ```c
void test_FKinSpace() {
  int i;
  double M[4][4] = {1.0000, 0, 0, 213.0000, 0, 1.0000, 0, 267.8000, 0, 0, 1.0000, 478.9500, 0, 0, 0, 1.0000};
  int JoinNum = 6;
  double Slist[6][6] = {0, 0, 0, 0, 0, 0, 0, 1.0000, 1.0000, 1.0000, 0, 1.0000, 1.0000, 0, 0, 0, 1.0000, 0, 0, -151.9000, -395.5500, -395.5500, 110.4000, -478.9500, 0, 0, 0, 0, -213.0000, 0, 0, 0, 0, 213.0000, 0, 213.0000};
  double thetalist[6] = {0.1, 0.2, 0.3, 0.4, 0.5, 3.14159265358979323846 / 4};
  printf("thetalist:\n");
  for (i = 0; i < 6; i++) {
    printf("%lf ", thetalist[i]);
  }
  printf("\n");
  double T[4][4];
  FKinSpace(M, JoinNum, (double *)Slist, thetalist, T);
  printf("T:\n");
  for (i = 0; i < 4; i++) {
    printf("%lf %lf %lf %lf\n", T[i][0], T[i][1], T[i][2], T[i][3]);
  }
  return;
}
```