user: 请从给定的汇编指令推导出C源代码：

```asm
<main>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  lea    D116(%rip),%rdi
  call   <printf@plt>
  mov    $0x14,%ebx
L30:
  mov    $0x0,%eax
  call   <rand@plt>
  cltd
  shr    $0x1c,%edx
  add    %edx,%eax
  and    $0xf,%eax
  sub    %edx,%eax
  add    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  D218(%rip),%xmm0
  movapd %xmm0,%xmm2
  movsd  D149(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D71(%rip),%xmm0
  cvttsd2si %xmm0,%ebp
  mov    %ebp,%edx
  mov    $0x40,%esi
  movsd  %xmm2,0x8(%rsp)
  movapd %xmm2,%xmm1
  mov    D89(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x2710,%edi
  call   <runtest@plt>
  mov    %ebp,%edx
  mov    $0x20,%esi
  movsd  0x8(%rsp),%xmm1
  mov    D89(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x2710,%edi
  call   <runtest@plt>
  mov    %ebp,%edx
  mov    $0x8,%esi
  movsd  0x8(%rsp),%xmm1
  mov    D89(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x2710,%edi
  call   <runtest@plt>
  mov    %ebp,%edx
  mov    $0x2,%esi
  movsd  0x8(%rsp),%xmm1
  mov    D89(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x2710,%edi
  call   <runtest@plt>
  mov    %ebp,%edx
  mov    $0x2710,%esi
  movsd  0x8(%rsp),%xmm1
  mov    D89(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x2710,%edi
  call   <runtest@plt>
  sub    $0x1,%ebx
  jne    L30
  lea    D147(%rip),%rdi
  call   <printf@plt>
  mov    $0x14,%ebx
L44:
  mov    $0x0,%eax
  call   <rand@plt>
  cltd
  shr    $0x1c,%edx
  add    %edx,%eax
  and    $0xf,%eax
  sub    %edx,%eax
  add    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  D218(%rip),%xmm0
  mov    $0x20,%edx
  mov    $0x2710,%esi
  movsd  %xmm0,0x8(%rsp)
  movapd %xmm0,%xmm1
  mov    D89(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x2710,%edi
  call   <runtest@plt>
  movsd  D149(%rip),%xmm3
  movsd  0x8(%rsp),%xmm1
  mulsd  %xmm1,%xmm3
  movapd %xmm3,%xmm0
  addsd  D71(%rip),%xmm0
  cvttsd2si %xmm0,%edx
  mov    $0x2710,%esi
  mov    D89(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x2710,%edi
  call   <runtest@plt>
  sub    $0x1,%ebx
  jne    L44
  lea    D162(%rip),%rdi
  call   <printf@plt>
  mov    $0x64,%ebx
L19:
  mov    $0x0,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  imul   $0x45e7b273,%rdx,%rdx
  sar    $0x2d,%rdx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  imul   $0x7530,%edx,%ecx
  sub    %ecx,%eax
  mov    %eax,%edx
  lea    0xa(%rax),%edi
  add    $0x14,%edx
  mov    %edi,%esi
  mov    D181(%rip),%rax
  movq   %rax,%xmm1
  mov    D151(%rip),%rax
  movq   %rax,%xmm0
  call   <runtest@plt>
  sub    $0x1,%ebx
  jne    L19
  lea    D239(%rip),%rdi
  call   <printf@plt>
  mov    $0x64,%ebx
L43:
  mov    $0x0,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  imul   $0x68db8bad,%rdx,%rdx
  sar    $0x2c,%rdx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  imul   $0x2710,%edx,%edx
  sub    %edx,%eax
  add    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    $0x186a0,%edx
  mov    $0x2710,%esi
  mov    D181(%rip),%rax
  movq   %rax,%xmm1
  mov    $0x2710,%edi
  call   <runtest@plt>
  sub    $0x1,%ebx
  jne    L43
  lea    D17(%rip),%rdi
  call   <printf@plt>
  mov    $0x64,%ebx
L14:
  mov    $0x0,%eax
  call   <rand@plt>
  cltd
  shr    $0x1a,%edx
  add    %edx,%eax
  and    $0x3f,%eax
  sub    %edx,%eax
  add    $0x1,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  mulsd  D218(%rip),%xmm1
  movsd  D149(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  D71(%rip),%xmm0
  cvttsd2si %xmm0,%edx
  mov    $0x2710,%esi
  mov    D89(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x2710,%edi
  call   <runtest@plt>
  sub    $0x1,%ebx
  jne    L14
  mov    $0x0,%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D116
data_type: string
name: extract_symbolic_data
arguments: label: D218
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D149
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D71
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D89
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D147
data_type: string
name: extract_symbolic_data
arguments: label: D162
data_type: string
name: extract_symbolic_data
arguments: label: D181
data_type: f64
name: extract_symbolic_data
arguments: label: D151
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D239
data_type: string
name: extract_symbolic_data
arguments: label: D17
data_type: string

tool: D116: 
*** Vary source block size*** 



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

tool: {"D149": [0x00,0x00,0x00,0x00,0x00,0x88,0xc3,0x40]}

tool: {"D71": [0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x40]}

tool: {"D89": [0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x40]}

tool: D147: 
*** Vary dest block size ***



tool: D162: 
*** Resample factor 1.0, testing different srclen ***



tool: D181: 1

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

tool: D239: 
*** Resample factor 1.0, testing different sin freq ***



tool: D17: 
*** Resample with different factors ***



assistant: ```c
int main(int argc, char **argv) {
  int i, srclen, dstlen, ifreq;
  double factor;
  printf("\n*** Vary source block size*** \n\n");
  srclen = 10000;
  ifreq = 100;
  for (i = 0; i < 20; i++) {
    factor = ((rand() % 16) + 1) / 4.0;
    dstlen = (int)(srclen * factor + 10);
    runtest(srclen, (double)ifreq, factor, 64, dstlen);
    runtest(srclen, (double)ifreq, factor, 32, dstlen);
    runtest(srclen, (double)ifreq, factor, 8, dstlen);
    runtest(srclen, (double)ifreq, factor, 2, dstlen);
    runtest(srclen, (double)ifreq, factor, srclen, dstlen);
  }
  printf("\n*** Vary dest block size ***\n\n");
  srclen = 10000;
  ifreq = 100;
  for (i = 0; i < 20; i++) {
    factor = ((rand() % 16) + 1) / 4.0;
    runtest(srclen, (double)ifreq, factor, srclen, 32);
    dstlen = (int)(srclen * factor + 10);
    runtest(srclen, (double)ifreq, factor, srclen, dstlen);
  }
  printf("\n*** Resample factor 1.0, testing different srclen ***\n\n");
  ifreq = 40;
  for (i = 0; i < 100; i++) {
    srclen = (rand() % 30000) + 10;
    dstlen = (int)(srclen + 10);
    runtest(srclen, (double)ifreq, 1.0, srclen, dstlen);
  }
  printf("\n*** Resample factor 1.0, testing different sin freq ***\n\n");
  srclen = 10000;
  for (i = 0; i < 100; i++) {
    ifreq = ((int)rand() % 10000) + 1;
    dstlen = (int)(srclen * 10);
    runtest(srclen, (double)ifreq, 1.0, srclen, dstlen);
  }
  printf("\n*** Resample with different factors ***\n\n");
  srclen = 10000;
  ifreq = 100;
  for (i = 0; i < 100; i++) {
    factor = ((rand() % 64) + 1) / 4.0;
    dstlen = (int)(srclen * factor + 10);
    runtest(srclen, (double)ifreq, factor, srclen, dstlen);
  }
  return 0;
}
```