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

```asm
<find_path_aux>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  mov    %rcx,-0x50(%rbp)
  mov    %r8,-0x58(%rbp)
  mov    %r9,-0x60(%rbp)
  mov    -0x50(%rbp),%rbx
  mov    %rbx,%rax
  sub    $0x1,%rax
  mov    %rax,-0x18(%rbp)
  mov    %rbx,%r10
  mov    $0x0,%r11d
  mov    -0x48(%rbp),%rax
  sub    $0x1,%rax
  cmp    %rax,-0x38(%rbp)
  jne    L3
  mov    -0x50(%rbp),%rax
  sub    $0x1,%rax
  cmp    %rax,-0x40(%rbp)
  jne    L3
  mov    -0x60(%rbp),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    $0x1,%eax
  jmp    L64
L3:
  movl   $0x0,-0x24(%rbp)
  mov    -0x48(%rbp),%rax
  sub    $0x1,%rax
  cmp    %rax,-0x38(%rbp)
  jae    L39
  mov    -0x38(%rbp),%rax
  add    $0x1,%rax
  imul   %rbx,%rax
  mov    %rax,%rdx
  mov    -0x58(%rbp),%rax
  add    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L39
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x60(%rbp),%rcx
  mov    0x10(%rbp),%rax
  lea    (%rcx,%rax,1),%rdi
  mov    -0x40(%rbp),%rax
  mov    %rax,%rcx
  lea    D7(%rip),%rax
  mov    %rax,%rsi
  call   <sprintf@plt>
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%eax
  movslq %eax,%rdx
  mov    0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdi
  mov    -0x60(%rbp),%r9
  mov    -0x58(%rbp),%r8
  mov    -0x50(%rbp),%rcx
  mov    -0x48(%rbp),%rdx
  mov    -0x40(%rbp),%rax
  sub    $0x8,%rsp
  push   %rsi
  mov    %rax,%rsi
  call   <find_path_aux>
  add    $0x10,%rsp
  mov    %eax,-0x24(%rbp)
L39:
  cmpl   $0x0,-0x24(%rbp)
  jne    L53
  mov    -0x50(%rbp),%rax
  sub    $0x1,%rax
  cmp    %rax,-0x40(%rbp)
  jae    L53
  imul   -0x38(%rbp),%rbx
  mov    %rbx,%rdx
  mov    -0x58(%rbp),%rax
  add    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rdx,%rax,1),%eax
  test   %al,%al
  jne    L53
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x60(%rbp),%rcx
  mov    0x10(%rbp),%rax
  lea    (%rcx,%rax,1),%rdi
  mov    -0x38(%rbp),%rax
  mov    %rdx,%rcx
  mov    %rax,%rdx
  lea    D7(%rip),%rax
  mov    %rax,%rsi
  call   <sprintf@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rdi
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rsi
  mov    -0x60(%rbp),%r9
  mov    -0x58(%rbp),%r8
  mov    -0x50(%rbp),%rcx
  mov    -0x48(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  sub    $0x8,%rsp
  push   %rdi
  mov    %rax,%rdi
  call   <find_path_aux>
  add    $0x10,%rsp
  mov    %eax,-0x24(%rbp)
L53:
  mov    -0x24(%rbp),%eax
L64:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D7
type_infered: string

tool: D7:  -> (%zu, %zu)

assistant: ```c
int find_path_aux(size_t curr_x, size_t curr_y, size_t x, size_t y, unsigned char bad_pos[x][y], char *path, size_t path_i) {
  if (curr_x == x - 1 && curr_y == y - 1) {
    path[path_i] = '\0';
    return 1;
  }
  int found_path = 0;
  if (curr_x < x - 1 && !bad_pos[curr_x + 1][curr_y]) {
    int written = sprintf(path + path_i, " -> (%zu, %zu)", curr_x + 1, curr_y);
    found_path = find_path_aux(curr_x + 1, curr_y, x, y, bad_pos, path, path_i + written);
  }
  if (!found_path && curr_y < y - 1 && !bad_pos[curr_x][curr_y + 1]) {
    int written = sprintf(path + path_i, " -> (%zu, %zu)", curr_x, curr_y + 1);
    found_path = find_path_aux(curr_x, curr_y + 1, x, y, bad_pos, path, path_i + written);
  }
  return found_path;
}
```