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

```asm
<Decode_Trame_Brute>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdx,(%rsp)
  mov    %rcx,0x10(%rsp)
  mov    %r8,0x8(%rsp)
  mov    %r9,0x18(%rsp)
  mov    0x98(%rsp),%r12
  mov    0xa0(%rsp),%r13
  movzbl (%rdi),%eax
  test   %al,%al
  je     L253
  mov    %rdi,%rbx
  mov    %rsi,%r14
  mov    $0x0,%ebp
  mov    $0x0,%edx
  jmp    L200
L234:
  cmpb   $0x4f,0x1(%rbx,%rdx,1)
  je     L60
L115:
  add    $0x1,%ebp
L224:
  movslq %ebp,%rdx
  movzbl (%rbx,%rdx,1),%eax
  test   %al,%al
  je     L253
L200:
  cmp    $0x4d,%al
  je     L234
  cmp    $0x41,%al
  je     L137
  cmp    $0x4f,%al
  je     L175
  cmp    $0x42,%al
  je     L182
  cmp    $0x49,%al
  je     L0
  cmp    $0x48,%al
  jne    L83
  movzbl 0x3(%rbx,%rdx,1),%eax
  cmp    $0x48,%al
  je     L265
  cmp    $0x50,%al
  je     L226
  cmp    $0x43,%al
  je     L257
  add    $0x1,%ebp
  jmp    L224
L60:
  mov    %r14,%rcx
  mov    $0x9,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Extraire@plt>
  mov    %eax,%r15d
  cltq
  movzbl (%rbx,%rax,1),%eax
  mov    %al,(%r12)
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Statu_Checksum@plt>
  mov    %ax,0x0(%r13)
  mov    %r15d,%ebp
  jmp    L224
L137:
  cmpb   $0x44,0x1(%rbx,%rdx,1)
  jne    L115
  mov    (%rsp),%rcx
  mov    $0x5,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Extraire@plt>
  mov    %eax,%r15d
  cltq
  movzbl (%rbx,%rax,1),%eax
  mov    %al,0x1(%r12)
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Statu_Checksum@plt>
  mov    %ax,0x2(%r13)
  mov    %r15d,%ebp
  jmp    L224
L175:
  cmpb   $0x50,0x1(%rbx,%rdx,1)
  jne    L115
  mov    0x10(%rsp),%rcx
  mov    $0x8,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Extraire@plt>
  mov    %eax,%r15d
  cltq
  movzbl (%rbx,%rax,1),%eax
  mov    %al,0x2(%r12)
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Statu_Checksum@plt>
  mov    %ax,0x4(%r13)
  mov    %r15d,%ebp
  jmp    L224
L182:
  cmpb   $0x41,0x1(%rbx,%rdx,1)
  jne    L115
  mov    0x18(%rsp),%rcx
  mov    $0x5,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Extraire@plt>
  mov    %eax,%r15d
  cltq
  movzbl (%rbx,%rax,1),%eax
  mov    %al,0x4(%r12)
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Statu_Checksum@plt>
  mov    %ax,0x8(%r13)
  mov    %r15d,%ebp
  jmp    L224
L0:
  movzbl 0x1(%rbx,%rdx,1),%eax
  cmp    $0x4d,%al
  je     L127
  cmp    $0x53,%al
  je     L59
  cmp    $0x49,%al
  je     L46
  add    $0x1,%ebp
  jmp    L224
L59:
  mov    0x8(%rsp),%rcx
  mov    $0x7,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Extraire@plt>
  mov    %eax,%r15d
  cltq
  movzbl (%rbx,%rax,1),%eax
  mov    %al,0x3(%r12)
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Statu_Checksum@plt>
  mov    %ax,0x6(%r13)
  mov    %r15d,%ebp
  jmp    L224
L46:
  mov    0x78(%rsp),%rcx
  mov    $0x6,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Extraire@plt>
  mov    %eax,%r15d
  cltq
  movzbl (%rbx,%rax,1),%eax
  mov    %al,0x8(%r12)
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Statu_Checksum@plt>
  mov    %ax,0x10(%r13)
  mov    %r15d,%ebp
  jmp    L224
L127:
  mov    0x80(%rsp),%rcx
  mov    $0x5,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Extraire@plt>
  mov    %eax,%r15d
  cltq
  movzbl (%rbx,%rax,1),%eax
  mov    %al,0x9(%r12)
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Statu_Checksum@plt>
  mov    %ax,0x12(%r13)
  mov    %r15d,%ebp
  jmp    L224
L257:
  mov    0x60(%rsp),%rcx
  mov    $0x5,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Extraire@plt>
  mov    %eax,%r15d
  cltq
  movzbl (%rbx,%rax,1),%eax
  mov    %al,0x5(%r12)
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Statu_Checksum@plt>
  mov    %ax,0xa(%r13)
  mov    %r15d,%ebp
  jmp    L224
L226:
  mov    0x68(%rsp),%rcx
  mov    $0x5,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Extraire@plt>
  mov    %eax,%r15d
  cltq
  movzbl (%rbx,%rax,1),%eax
  mov    %al,0x6(%r12)
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Statu_Checksum@plt>
  mov    %ax,0xc(%r13)
  mov    %r15d,%ebp
  jmp    L224
L265:
  mov    0x90(%rsp),%rcx
  mov    $0x6,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Extraire@plt>
  mov    %eax,%r15d
  cltq
  movzbl (%rbx,%rax,1),%eax
  mov    %al,0xb(%r12)
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Statu_Checksum@plt>
  mov    %ax,0x16(%r13)
  mov    %r15d,%ebp
  jmp    L224
L83:
  cmp    $0x50,%al
  jne    L115
  movzbl 0x1(%rbx,%rdx,1),%eax
  cmp    $0x41,%al
  je     L197
  cmp    $0x54,%al
  jne    L124
  mov    0x70(%rsp),%rcx
  mov    $0x5,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Extraire@plt>
  mov    %eax,%r15d
  cltq
  movzbl (%rbx,%rax,1),%eax
  mov    %al,0x7(%r12)
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Statu_Checksum@plt>
  mov    %ax,0xe(%r13)
  mov    %r15d,%ebp
  jmp    L224
L197:
  mov    0x88(%rsp),%rcx
  mov    $0x5,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Extraire@plt>
  mov    %eax,%r15d
  cltq
  movzbl (%rbx,%rax,1),%eax
  mov    %al,0xa(%r12)
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %rbx,%rdi
  call   <Statu_Checksum@plt>
  mov    %ax,0x14(%r13)
  mov    %r15d,%ebp
  jmp    L224
L124:
  add    $0x1,%ebp
  jmp    L224
L253:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void Decode_Trame_Brute(char *tab_recu_brut, char *Motdetat, char *Adeco, char *Optarif, char *Isousc, char *Base, char *Hchc, char *Hchp, char *Ptec, char *Iinst, char *Imax, char *Papp, char *Hhphc, char *Checksum, short *Statu_chcksm) {
  int indice = 0;
  int indice_deb = 0;
  while (tab_recu_brut[indice] != '\0') {
    indice_deb = indice;
    if (tab_recu_brut[indice] == 'M' && tab_recu_brut[indice + 1] == 'O') {
      indice = Extraire(tab_recu_brut, indice, 9, Motdetat);
      Checksum[0] = tab_recu_brut[indice];
      Statu_chcksm[0] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
    } else if (tab_recu_brut[indice] == 'A' && tab_recu_brut[indice + 1] == 'D') {
      indice = Extraire(tab_recu_brut, indice, 5, Adeco);
      Checksum[1] = tab_recu_brut[indice];
      Statu_chcksm[1] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
    } else if (tab_recu_brut[indice] == 'O' && tab_recu_brut[indice + 1] == 'P') {
      indice = Extraire(tab_recu_brut, indice, 8, Optarif);
      Checksum[2] = tab_recu_brut[indice];
      Statu_chcksm[2] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
    } else if (tab_recu_brut[indice] == 'B' && tab_recu_brut[indice + 1] == 'A') {
      indice = Extraire(tab_recu_brut, indice, 5, Base);
      Checksum[4] = tab_recu_brut[indice];
      Statu_chcksm[4] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
    } else if (tab_recu_brut[indice] == 'I') {
      switch (tab_recu_brut[indice + 1]) {
      case 'S':
        indice = Extraire(tab_recu_brut, indice, 7, Isousc);
        Checksum[3] = tab_recu_brut[indice];
        Statu_chcksm[3] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      case 'I':
        indice = Extraire(tab_recu_brut, indice, 6, Iinst);
        Checksum[8] = tab_recu_brut[indice];
        Statu_chcksm[8] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      case 'M':
        indice = Extraire(tab_recu_brut, indice, 5, Imax);
        Checksum[9] = tab_recu_brut[indice];
        Statu_chcksm[9] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      default:
        indice++;
      }
    } else if (tab_recu_brut[indice] == 'H') {
      switch (tab_recu_brut[indice + 3]) {
      case 'C':
        indice = Extraire(tab_recu_brut, indice, 5, Hchc);
        Checksum[5] = tab_recu_brut[indice];
        Statu_chcksm[5] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      case 'P':
        indice = Extraire(tab_recu_brut, indice, 5, Hchp);
        Checksum[6] = tab_recu_brut[indice];
        Statu_chcksm[6] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      case 'H':
        indice = Extraire(tab_recu_brut, indice, 6, Hhphc);
        Checksum[11] = tab_recu_brut[indice];
        Statu_chcksm[11] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      default:
        indice++;
      }
    } else if (tab_recu_brut[indice] == 'P') {
      switch (tab_recu_brut[indice + 1]) {
      case 'T':
        indice = Extraire(tab_recu_brut, indice, 5, Ptec);
        Checksum[7] = tab_recu_brut[indice];
        Statu_chcksm[7] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      case 'A':
        indice = Extraire(tab_recu_brut, indice, 5, Papp);
        Checksum[10] = tab_recu_brut[indice];
        Statu_chcksm[10] = Statu_Checksum(tab_recu_brut, indice_deb, indice);
        break;
      default:
        indice++;
      }
    } else {
      indice++;
    }
  }
}
```