user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %r15
  lea    D245(%rip),%rdi
  lea    D173(%rip),%r15
  push   %r14
  lea    D37(%rip),%r14
  push   %r13
  push   %r12
  lea    D128(%rip),%r12
  push   %rbp
  mov    $0x14,%ebp
  push   %rbx
  lea    D156(%rip),%rbx
  sub    $0x28,%rsp
  call   <puts@plt>
  lea    D143(%rip),%rdi
  call   <puts@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  lea    D61(%rip),%rdi
  call   <puts@plt>
  lea    D163(%rip),%rdi
  call   <puts@plt>
  lea    D12(%rip),%rdi
  call   <puts@plt>
  lea    D44(%rip),%rdi
  call   <puts@plt>
  lea    D100(%rip),%rdi
  call   <puts@plt>
L35:
  mov    %r12,%rdi
  xor    %r13d,%r13d
  call   <puts@plt>
  mov    %r15,%rdi
  call   <puts@plt>
  pxor   %xmm7,%xmm7
  cvtsi2sd %ebp,%xmm7
  movsd  %xmm7,0x18(%rsp)
L34:
  pxor   %xmm0,%xmm0
  cvtsi2sd %r13d,%xmm0
  mulsd  D129(%rip),%xmm0
  divsd  0x18(%rsp),%xmm0
  mulsd  D238(%rip),%xmm0
  movsd  %xmm0,(%rsp)
  call   <cos@plt>
  movsd  (%rsp),%xmm3
  movsd  %xmm0,0x8(%rsp)
  movapd %xmm3,%xmm2
  addsd  %xmm3,%xmm2
  cvttsd2si %xmm2,%edi
  call   <sin@plt>
  movsd  D23(%rip),%xmm5
  mulsd  (%rsp),%xmm5
  movsd  %xmm0,0x10(%rsp)
  movapd %xmm5,%xmm0
  call   <cos@plt>
  movsd  D93(%rip),%xmm7
  mulsd  (%rsp),%xmm7
  movsd  0x8(%rsp),%xmm6
  addsd  0x10(%rsp),%xmm6
  movapd %xmm0,%xmm1
  movapd %xmm6,%xmm0
  cvttsd2si %xmm7,%edi
  addsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rsp)
  call   <sin@plt>
  movsd  D132(%rip),%xmm5
  mulsd  (%rsp),%xmm5
  movsd  %xmm0,0x10(%rsp)
  movapd %xmm5,%xmm0
  call   <cos@plt>
  mov    %r13d,%esi
  mov    %rbx,%rdi
  mov    $0x1,%eax
  movsd  0x8(%rsp),%xmm4
  addsd  0x10(%rsp),%xmm4
  movapd %xmm0,%xmm1
  add    $0x1,%r13d
  movapd %xmm4,%xmm0
  addsd  %xmm1,%xmm0
  call   <printf@plt>
  cmp    $0x65,%r13d
  jne    L34
  mov    %r14,%rdi
  call   <puts@plt>
  mov    %ebp,%esi
  lea    D53(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  sub    $0x1,%ebp
  cmp    $0x13,%ebp
  je     L10
  lea    D272(%rip),%rdi
  call   <puts@plt>
  lea    D71(%rip),%rdi
  call   <puts@plt>
  lea    D242(%rip),%rdi
  call   <puts@plt>
  lea    D15(%rip),%rdi
  call   <puts@plt>
  test   %ebp,%ebp
  jne    L35
  xor    %edi,%edi
  call   <exit@plt>
  add    $0x28,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L10:
  lea    D106(%rip),%rdi
  call   <puts@plt>
  lea    D272(%rip),%rdi
  call   <puts@plt>
  lea    D71(%rip),%rdi
  call   <puts@plt>
  lea    D12(%rip),%rdi
  call   <puts@plt>
  lea    D106(%rip),%rdi
  call   <puts@plt>
  lea    D242(%rip),%rdi
  call   <puts@plt>
  lea    D15(%rip),%rdi
  call   <puts@plt>
  jmp    L35
```

tool_calls: name: disassemble_data
arguments: data_tag: D245
type_infered: string
name: disassemble_data
arguments: data_tag: D173
type_infered: string
name: disassemble_data
arguments: data_tag: D37
type_infered: string
name: disassemble_data
arguments: data_tag: D128
type_infered: string
name: disassemble_data
arguments: data_tag: D156
type_infered: string
name: disassemble_data
arguments: data_tag: D143
type_infered: string
name: disassemble_data
arguments: data_tag: D61
type_infered: string
name: disassemble_data
arguments: data_tag: D163
type_infered: string
name: disassemble_data
arguments: data_tag: D12
type_infered: string
name: disassemble_data
arguments: data_tag: D44
type_infered: string
name: disassemble_data
arguments: data_tag: D100
type_infered: string
name: disassemble_data
arguments: data_tag: D129
type_infered: f64
name: disassemble_data
arguments: data_tag: D238
type_infered: f64
name: disassemble_data
arguments: data_tag: D23
type_infered: byte[8]
name: disassemble_data
arguments: data_tag: D93
type_infered: f64
name: disassemble_data
arguments: data_tag: D132
type_infered: byte[8]
name: disassemble_data
arguments: data_tag: D53
type_infered: string
name: disassemble_data
arguments: data_tag: D272
type_infered: string
name: disassemble_data
arguments: data_tag: D71
type_infered: string
name: disassemble_data
arguments: data_tag: D242
type_infered: string
name: disassemble_data
arguments: data_tag: D15
type_infered: string
name: disassemble_data
arguments: data_tag: D106
type_infered: string

tool: D245: @focus off

tool: D173: @kill s0

tool: D37: &

tool: D128: @with g0

tool: D156: %d %f


tool: D143: @g0 on

tool: D61: @view 0.1, 0.1, 0.9, 0.4

tool: D163: @g1 on

tool: D12: @with g1

tool: D44: @view 0.1, 0.5, 0.9, 0.9

tool: D100: @subtitle "Spectrum"

tool: D129: 8

tool: D238: 3.14

tool: {"D23": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

tool: D93: 4

tool: {"D132": [0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x3f]}

tool: D53: @subtitle "Data %d"


tool: D272: @dft(s0, 2)

tool: D71: @move g0.s1 to g1.s0

tool: D242: @redraw

tool: D15: @sleep 1

tool: D106: @autoscale

assistant: ```c
int main(int argc, char **argv) {
  int i, j;
  double t;
  printf("@focus off\n");
  printf("@g0 on\n");
  printf("@with g0\n");
  printf("@view 0.1, 0.1, 0.9, 0.4\n");
  printf("@g1 on\n");
  printf("@with g1\n");
  printf("@view 0.1, 0.5, 0.9, 0.9\n");
  printf("@subtitle \"Spectrum\"\n");
  for (j = 20; j > 0; j--) {
    printf("@with g0\n");
    printf("@kill s0\n");
    for (i = 0; i < 101; i++) {
      t = 8.0 * i / (1.0 * j) * 3.14;
      printf("%d %f\n", i, cos(t) + sin(2.0 * t) + cos(t / 2.0) + sin(4 * t) + cos(t / 4.0));
    }
    printf("&\n");
    printf("@subtitle \"Data %d\"\n", j);
    if (j == 20) {
      printf("@autoscale\n");
    }
    printf("@dft(s0, 2)\n");
    printf("@move g0.s1 to g1.s0\n");
    if (j == 20) {
      printf("@with g1\n");
      printf("@autoscale\n");
    }
    printf("@redraw\n");
    printf("@sleep 1\n");
  }
  exit(0);
}
```