user: Converte this assembly snippet into its equivalent C code:

```asm
<acker>:
  endbr64
  test   %edi,%edi
  je     L292
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
L191:
  lea    -0x1(%rdi),%eax
  mov    %eax,0xc(%rsp)
  test   %esi,%esi
  jne    L161
  mov    0xc(%rsp),%edx
  test   %edx,%edx
  je     L323
L343:
  mov    0xc(%rsp),%eax
L253:
  lea    -0x1(%rax),%ecx
  mov    %ecx,0x8(%rsp)
  test   %esi,%esi
  jne    L246
  mov    0x8(%rsp),%eax
  test   %eax,%eax
  je     L310
L433:
  mov    0x8(%rsp),%eax
L143:
  lea    -0x1(%rax),%r14d
  test   %esi,%esi
  jne    L17
  test   %r14d,%r14d
  je     L149
L262:
  mov    %r14d,%eax
L315:
  lea    -0x1(%rax),%r13d
  test   %esi,%esi
  jne    L378
  test   %r13d,%r13d
  je     L414
L231:
  mov    %r13d,%eax
L259:
  lea    -0x1(%rax),%edx
  test   %esi,%esi
  jne    L62
  test   %edx,%edx
  je     L44
L140:
  mov    %edx,%eax
L60:
  lea    -0x1(%rax),%r15d
  test   %esi,%esi
  jne    L240
  test   %r15d,%r15d
  je     L430
L333:
  mov    %r15d,%eax
L258:
  lea    -0x1(%rax),%r12d
  test   %esi,%esi
  jne    L216
  test   %r12d,%r12d
  je     L233
L114:
  mov    %r12d,%eax
L98:
  lea    -0x1(%rax),%ebp
  test   %esi,%esi
  jne    L31
  test   %ebp,%ebp
  je     L288
L90:
  mov    %ebp,%eax
L201:
  lea    -0x1(%rax),%ebx
  test   %esi,%esi
  jne    L437
  test   %ebx,%ebx
  je     L116
L247:
  mov    %ebx,%edi
  mov    %edx,0x4(%rsp)
  call   <acker>
  mov    0x4(%rsp),%edx
  mov    %eax,%esi
  mov    %ebx,%eax
  sub    $0x1,%eax
  jne    L201
  add    $0x1,%esi
L373:
  mov    %ebp,%eax
  sub    $0x1,%eax
  jne    L98
  add    $0x1,%esi
L407:
  mov    %r12d,%eax
  sub    $0x1,%eax
  jne    L258
  add    $0x1,%esi
L314:
  mov    %r15d,%eax
  sub    $0x1,%eax
  jne    L60
  add    $0x1,%esi
L171:
  mov    %edx,%eax
  sub    $0x1,%eax
  jne    L259
  add    $0x1,%esi
L234:
  mov    %r13d,%eax
  sub    $0x1,%eax
  jne    L315
  add    $0x1,%esi
L334:
  mov    %r14d,%eax
  sub    $0x1,%eax
  jne    L143
  add    $0x1,%esi
L245:
  mov    0x8(%rsp),%eax
  sub    $0x1,%eax
  jne    L253
  add    $0x1,%esi
L64:
  mov    0xc(%rsp),%edi
  sub    $0x1,%edi
  jne    L191
  add    $0x18,%rsp
  lea    0x1(%rsi),%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nop
L288:
  mov    $0x2,%esi
  jmp    L407
  nopw   0x0(%rax,%rax,1)
L44:
  mov    $0x2,%esi
  jmp    L234
  nopw   0x0(%rax,%rax,1)
L116:
  mov    $0x2,%esi
  jmp    L373
  nopw   0x0(%rax,%rax,1)
L233:
  mov    $0x2,%esi
  jmp    L314
  nopw   0x0(%rax,%rax,1)
L430:
  mov    $0x2,%esi
  jmp    L171
  nopw   0x0(%rax,%rax,1)
L414:
  mov    $0x2,%esi
  jmp    L334
  nopw   0x0(%rax,%rax,1)
L149:
  mov    $0x2,%esi
  jmp    L245
  nopw   0x0(%rax,%rax,1)
L437:
  sub    $0x1,%esi
  mov    %eax,%ebx
  jmp    L247
  nopw   0x0(%rax,%rax,1)
L310:
  mov    $0x2,%esi
  jmp    L64
  nopw   0x0(%rax,%rax,1)
L31:
  sub    $0x1,%esi
  mov    %eax,%ebp
  jmp    L90
  nopw   0x0(%rax,%rax,1)
L323:
  add    $0x18,%rsp
  mov    $0x2,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L216:
  sub    $0x1,%esi
  mov    %eax,%r12d
  jmp    L114
  nopl   0x0(%rax,%rax,1)
L240:
  sub    $0x1,%esi
  mov    %eax,%r15d
  jmp    L333
  nopl   0x0(%rax,%rax,1)
L62:
  sub    $0x1,%esi
  mov    %eax,%edx
  jmp    L140
  nopw   0x0(%rax,%rax,1)
L378:
  sub    $0x1,%esi
  mov    %eax,%r13d
  jmp    L231
  nopl   0x0(%rax,%rax,1)
L17:
  sub    $0x1,%esi
  mov    %eax,%r14d
  jmp    L262
  nopl   0x0(%rax,%rax,1)
L292:
  lea    0x1(%rsi),%eax
  ret
  nopl   0x0(%rax)
L246:
  mov    %eax,0x8(%rsp)
  sub    $0x1,%esi
  jmp    L433
  nopl   0x0(%rax)
L161:
  mov    %edi,0xc(%rsp)
  sub    $0x1,%esi
  jmp    L343
```

assistant: ```c
int acker(int m, int n) {
  if (m == 0)
    return n + 1;
  else if (n == 0)
    return acker(m - 1, 1);
  else
    return acker(m - 1, acker(m, n - 1));
}
```