user: What would the C source look like for the assembly code provided here:

```asm
<determinantOfMatrix>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xcd0,%rsp
  mov    %rdi,-0xcb8(%rbp)
  mov    %esi,-0xcbc(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0xca4(%rbp)
  movl   $0x0,-0xca0(%rbp)
  movl   $0x0,-0xc9c(%rbp)
  movl   $0x0,-0xc98(%rbp)
  movl   $0x0,-0xc94(%rbp)
  cmpl   $0x1,-0xcbc(%rbp)
  jne    L43
  mov    -0xcb8(%rbp),%rax
  movsd  (%rax),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0xc94(%rbp)
  jmp    L86
L43:
  cmpl   $0x2,-0xcbc(%rbp)
  jne    L9
  mov    -0xcb8(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0xcb8(%rbp),%rax
  add    $0xa0,%rax
  movsd  0x8(%rax),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0xcb8(%rbp),%rax
  add    $0xa0,%rax
  movsd  (%rax),%xmm2
  mov    -0xcb8(%rbp),%rax
  movsd  0x8(%rax),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0xc94(%rbp)
  jmp    L86
L9:
  movl   $0x0,-0xc94(%rbp)
  movl   $0x0,-0xc9c(%rbp)
  jmp    L38
L21:
  movl   $0x1,-0xca4(%rbp)
  jmp    L88
L121:
  movl   $0x0,-0xc98(%rbp)
  movl   $0x0,-0xca0(%rbp)
  jmp    L12
L3:
  mov    -0xca0(%rbp),%eax
  cmp    -0xc9c(%rbp),%eax
  je     L84
  mov    -0xca4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0xcb8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xca4(%rbp),%eax
  lea    -0x1(%rax),%ecx
  mov    -0xca0(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm0
  mov    -0xc98(%rbp),%eax
  movslq %eax,%rsi
  movslq %ecx,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rsi,%rax
  movsd  %xmm0,-0xc90(%rbp,%rax,8)
  addl   $0x1,-0xc98(%rbp)
  jmp    L107
L84:
  nop
L107:
  addl   $0x1,-0xca0(%rbp)
L12:
  mov    -0xca0(%rbp),%eax
  cmp    -0xcbc(%rbp),%eax
  jl     L3
  addl   $0x1,-0xca4(%rbp)
L88:
  mov    -0xca4(%rbp),%eax
  cmp    -0xcbc(%rbp),%eax
  jl     L121
  mov    -0xc9c(%rbp),%eax
  add    $0x2,%eax
  mov    %eax,%esi
  mov    $0xffffffff,%edi
  call   <pow@plt>
  mov    -0xcb8(%rbp),%rax
  mov    -0xc9c(%rbp),%edx
  movslq %edx,%rdx
  movsd  (%rax,%rdx,8),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0xcc8(%rbp)
  mov    -0xcbc(%rbp),%eax
  lea    -0x1(%rax),%edx
  lea    -0xc90(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <determinantOfMatrix>
  movsd  -0xcc8(%rbp),%xmm1
  mulsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0xc94(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0xc94(%rbp)
  addl   $0x1,-0xc9c(%rbp)
L38:
  mov    -0xc9c(%rbp),%eax
  cmp    -0xcbc(%rbp),%eax
  jl     L21
L86:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0xc94(%rbp),%xmm0
  movq   %xmm0,%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L77
  call   <__stack_chk_fail@plt>
L77:
  movq   %rax,%xmm0
  leave
  ret
```

assistant: ```c
double determinantOfMatrix(double arr[][20], int size) {
  int i = 0;
  int j = 0;
  int j1 = 0;
  int j2 = 0;
  int determinant = 0;
  double m[20][20];
  if (size == 1)
    determinant = arr[0][0];
  else if (size == 2)
    determinant = arr[0][0] * arr[1][1] - arr[1][0] * arr[0][1];
  else {
    determinant = 0;
    for (j1 = 0; j1 < size; j1++) {
      for (i = 1; i < size; i++) {
        j2 = 0;
        for (j = 0; j < size; j++) {
          if (j == j1)
            continue;
          m[i - 1][j2] = arr[i][j];
          j2++;
        }
      }
      determinant += pow(-1, 2 + j1) * arr[0][j1] * determinantOfMatrix(m, size - 1);
    }
  }
  return determinant;
}
```