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

```asm
<determinant_poorly>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %edi,0x4(%rsp)
  mov    %rsi,0x8(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  movl   $0x0,0x10(%rsp)
  movl   $0x1,0x14(%rsp)
  movl   $0x2,0x18(%rsp)
  movl   $0x3,0x1c(%rsp)
  movl   $0x4,0x20(%rsp)
  movl   $0x5,0x24(%rsp)
  movl   $0x6,0x28(%rsp)
  mov    D7(%rip),%rax
  mov    (%rax),%edx
  mov    $0x0,%esi
  call   <mpfr_set_si@plt>
  mov    $0xc8,%esi
  mov    $0x0,%edi
  call   <mpfr_init2@plt>
  mov    $0x1,%r13d
  jmp    L92
L19:
  mov    0x28(%rsp),%edx
  mov    %eax,%r8d
  cltq
  mov    0x10(%rsp,%rax,4),%edi
  cmp    %edi,%edx
  jg     L0
  mov    $0x5,%eax
L79:
  mov    %eax,%esi
  sub    $0x1,%rax
  mov    0x14(%rsp,%rax,4),%edx
  cmp    %edi,%edx
  jle    L79
L42:
  cmp    %esi,%r8d
  je     L107
  movslq %r8d,%r8
  mov    %edx,0x10(%rsp,%r8,4)
  movslq %esi,%rsi
  mov    %edi,0x10(%rsp,%rsi,4)
  neg    %r13d
L107:
  cmp    $0x5,%ecx
  jg     L92
  movslq %ecx,%rax
  lea    0x28(%rsp),%rdx
  lea    0x6(%rcx),%esi
L14:
  mov    (%rdx),%edi
  lea    0x10(%rsp),%rcx
  mov    (%rcx,%rax,4),%r8d
  mov    %r8d,(%rdx)
  mov    %edi,(%rcx,%rax,4)
  neg    %r13d
  add    $0x1,%rax
  sub    $0x4,%rdx
  mov    %esi,%ecx
  sub    %eax,%ecx
  cmp    %eax,%ecx
  jg     L14
L92:
  mov    D7(%rip),%rax
  mov    (%rax),%edx
  mov    %r13d,%esi
  mov    $0x0,%edi
  call   <mpfr_set_si@plt>
  lea    0x10(%rsp),%r12
  mov    0x8(%rsp),%rbp
  lea    0x2c(%rsp),%r15
  mov    %r12,%rbx
  mov    D7(%rip),%r14
L41:
  movslq (%rbx),%rax
  mov    0x0(%rbp,%rax,4),%edx
  mov    (%r14),%ecx
  mov    $0x0,%edi
  mov    %edi,%esi
  call   <mpfr_mul@plt>
  add    $0x4,%rbx
  add    $0x1c,%rbp
  cmp    %r15,%rbx
  jne    L41
  mov    D7(%rip),%rax
  mov    (%rax),%ecx
  mov    $0x0,%edi
  mov    %edi,%edx
  mov    0x4(%rsp),%esi
  mov    %esi,%edi
  call   <mpfr_add@plt>
  mov    $0x6,%eax
L104:
  mov    %eax,%ecx
  sub    $0x1,%eax
  mov    0x18(%r12),%ebx
  cmp    %ebx,0x14(%r12)
  jl     L19
  sub    $0x4,%r12
  test   %eax,%eax
  jne    L104
  mov    0x38(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L5
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L0:
  mov    $0x6,%esi
  jmp    L42
L5:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void determinant_poorly(mpfr_t det, mpfr_t A[][5 + 2]) {
  int sgn = 1;
  int sigma[5 + 2];
  mpfr_t prod;
  for (int j = 0; j < (5 + 2); ++j) {
    sigma[j] = j;
  }
  mpfr_set_si(det, 0, MPFR_RNDN);
  mpfr_init2(prod, 200);
  while (1) {
    mpfr_set_si(prod, sgn, MPFR_RNDN);
    for (int j = 0; j < (5 + 2); ++j) {
      mpfr_mul(prod, prod, A[j][sigma[j]], MPFR_RNDN);
    }
    mpfr_add(det, det, prod, MPFR_RNDN);
    int k = 5 + 1;
    int j = 5 + 1;
    int t;
    while (k > 0 && sigma[k - 1] >= sigma[k]) {
      k--;
    }
    if (!k) {
      break;
    }
    while (sigma[j] <= sigma[k - 1]) {
      j--;
    }
    if (k - 1 != j) {
      t = sigma[k - 1];
      sigma[k - 1] = sigma[j];
      sigma[j] = t;
      sgn *= -1;
    }
    for (int l = 5 + 1; l > k; --l, ++k) {
      t = sigma[l];
      sigma[l] = sigma[k];
      sigma[k] = t;
      sgn *= -1;
    }
  }
}
```