user: 请将以下的汇编代码转换成C语言代码:

```asm
<handleParams>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdx,%r12
  mov    %rcx,%r14
  mov    %r8,0x8(%rsp)
  test   %edi,%edi
  jle    L95
  mov    %r9,%r15
  lea    0x8(%rsi),%rbx
  lea    -0x1(%rdi),%eax
  lea    0x10(%rsi,%rax,8),%rbp
  lea    D34(%rip),%r13
  jmp    L185
  mov    (%rbx),%rdi
  call   <strdup@plt>
  mov    %rax,%rsi
  mov    %rax,(%r15)
  lea    D63(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D48(%rip),%rcx
  mov    %r14,%rdx
  mov    %r12,%rsi
  mov    (%r15),%rdi
  call   <DataCounter@plt>
  test   %eax,%eax
  jne    L49
  mov    (%r12),%edi
  imul   (%r14),%edi
  mov    $0x8,%esi
  call   <calloc@plt>
  mov    %rax,%rcx
  mov    0x8(%rsp),%rax
  mov    %rcx,(%rax)
  lea    D48(%rip),%r8
  mov    (%r14),%edx
  mov    (%r12),%esi
  mov    (%r15),%rdi
  call   <extractData@plt>
  jmp    L109
  mov    (%rbx),%rdi
  call   <atoi@plt>
  mov    0x58(%rsp),%rcx
  mov    %eax,(%rcx)
L109:
  add    $0x8,%rbx
  cmp    %rbp,%rbx
  je     L95
L185:
  mov    -0x8(%rbx),%rax
  cmpb   $0x2d,(%rax)
  jne    L109
  movzbl 0x1(%rax),%eax
  sub    $0x42,%eax
  cmp    $0x32,%al
  ja     L109
  movzbl %al,%eax
  movslq 0x0(%r13,%rax,4),%rax
  add    %r13,%rax
  notrack jmp *%rax
  mov    (%rbx),%rdi
  call   <atoi@plt>
  mov    0x60(%rsp),%rcx
  mov    %eax,(%rcx)
  jmp    L109
  mov    (%rbx),%rdi
  call   <atoi@plt>
  mov    0x68(%rsp),%rcx
  mov    %eax,(%rcx)
  jmp    L109
  mov    (%rbx),%rdi
  call   <strdup@plt>
  mov    0x50(%rsp),%rcx
  mov    %rax,(%rcx)
  jmp    L109
  mov    0x70(%rsp),%rax
  movl   $0x1,(%rax)
  mov    (%rbx),%rdi
  call   <strdup@plt>
  mov    0x78(%rsp),%rsi
  mov    %rax,(%rsi)
  jmp    L109
  mov    (%rbx),%rdi
  call   <atoi@plt>
  mov    0x80(%rsp),%rcx
  mov    %eax,(%rcx)
  jmp    L109
  mov    (%rbx),%rdi
  call   <atof@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  mov    0xa0(%rsp),%rax
  movsd  %xmm0,(%rax)
  jmp    L109
  mov    (%rbx),%rdi
  call   <atof@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  mov    0x90(%rsp),%rax
  movsd  %xmm0,(%rax)
  jmp    L109
  mov    (%rbx),%rdi
  call   <atoi@plt>
  mov    0x98(%rsp),%rsi
  mov    %eax,(%rsi)
  jmp    L109
L95:
  mov    0x80(%rsp),%rax
  cmpl   $0x1,(%rax)
  je     L133
  mov    (%r14),%edx
  mov    (%r12),%esi
  lea    D14(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L66:
  mov    0x58(%rsp),%rax
  mov    (%rax),%eax
  cmp    (%r12),%eax
  jge    L0
  mov    $0x0,%edx
  cmp    (%r14),%eax
  jl     L39
L0:
  lea    D17(%rip),%rdi
  call   <puts@plt>
  mov    (%r12),%ecx
  mov    (%r14),%edx
  lea    -0x1(%rcx),%esi
  lea    -0x1(%rdx),%eax
  cmp    %edx,%ecx
  cmovl  %esi,%eax
  mov    0x58(%rsp),%rcx
  mov    %eax,(%rcx)
  mov    $0x0,%edx
L39:
  mov    %edx,%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L133:
  mov    (%r14),%edx
  mov    (%r12),%esi
  mov    0x8(%rsp),%rax
  mov    (%rax),%rdi
  call   <tr@plt>
  mov    (%r12),%edx
  mov    (%r14),%eax
  mov    %eax,(%r12)
  mov    %edx,(%r14)
  mov    (%r12),%esi
  lea    D14(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L66
L49:
  mov    $0x1,%edx
  jmp    L39
```

tool_calls: name: disassemble_data
arguments: data_tag: D63
data_type: string
name: disassemble_data
arguments: data_tag: D48
data_type: string
name: disassemble_data
arguments: data_tag: D14
data_type: string
name: disassemble_data
arguments: data_tag: D17
data_type: string

tool: D63: Genotypes in file %s


tool: D48: genotypes

tool: D14: %i snps typed on %i individuals


tool: D17: ***WARNING*** K must be lower than the rank of the design matrix

assistant: ```c
int handleParams(int argc, char *argv[], int *nSNP, int *nIND, double **Genotypes, char **GenoFileName, char **OutputFileName, int *K, int *nsteps, int *burnin, int *runSVD, char **subSampleName, int *transpose, int *prior, double *b, int *sc, double *prop) {
  int i, tmp;
  for (i = 0; i < argc; i++) {
    if (argv[i][0] == '-') {
      switch (argv[i][1]) {
      case 'i':
        *GenoFileName = strdup(argv[i + 1]);
        printf("Genotypes in file %s\n", *GenoFileName);
        if (!DataCounter(*GenoFileName, nSNP, nIND, "genotypes")) {
          *Genotypes = calloc((*nSNP) * (*nIND), sizeof(double));
          int res;
          res = extractData(*GenoFileName, *nSNP, *nIND, *Genotypes, "genotypes");
        } else {
          return 1;
        }
        break;
      case 'K':
        *K = atoi(argv[i + 1]);
        break;
      case 's':
        *nsteps = atoi(argv[i + 1]);
        break;
      case 'b':
        *burnin = atoi(argv[i + 1]);
        break;
      case 'o':
        *OutputFileName = strdup(argv[i + 1]);
        break;
      case 'I':
        *runSVD = 1;
        *subSampleName = strdup(argv[i + 1]);
        break;
      case 't':
        *transpose = atoi(argv[i + 1]);
        break;
      case 'p':
        *prop = (double)atof(argv[i + 1]);
        break;
      case 'B':
        *b = (double)atof(argv[i + 1]);
        break;
      case 'S':
        *sc = atoi(argv[i + 1]);
        break;
      }
    }
  }
  if (*transpose == 1) {
    tr(*Genotypes, *nSNP, *nIND);
    tmp = *nSNP;
    *nSNP = *nIND;
    *nIND = tmp;
    printf("%i snps typed on %i individuals\n", *nSNP, *nIND);
  } else {
    printf("%i snps typed on %i individuals\n", *nSNP, *nIND);
  }
  if (*K >= *nSNP || *K >= *nIND) {
    printf("***WARNING*** K must be lower than the rank of the design matrix\n");
    *K = *nSNP < *nIND ? *nSNP - 1 : *nIND - 1;
  }
  return 0;
}
```