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

```asm
<print_maze>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%r12
  lea    D37(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%ebp
  mov    $0x0,%ebx
  lea    D3(%rip),%r13
  lea    D119(%rip),%r14
  jmp    L141
L83:
  mov    %ebx,%esi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L16:
  add    $0x1,%ebx
  add    $0x1,%ebp
L141:
  cmp    $0x9,%ebx
  jle    L83
  mov    %ebx,%esi
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmp    $0x1d,%ebp
  jle    L16
  mov    $0xa,%edi
  call   <putchar@plt>
  add    $0x1e,%r12
  mov    $0x0,%r14d
  lea    D55(%rip),%rbp
  jmp    L151
L33:
  mov    %r14d,%esi
  lea    D1(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L51
  lea    D18(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L116:
  add    $0x1,%rbx
  cmp    %r12,%rbx
  je     L92
L120:
  movzbl (%rbx),%eax
  sub    $0x20,%eax
  cmp    $0x18,%al
  ja     L116
  movzbl %al,%eax
  movslq 0x0(%rbp,%rax,4),%rax
  add    %rbp,%rax
  notrack jmp *%rax
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L116
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L116
  lea    D89(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L116
  lea    D105(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L116
  lea    D25(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L116
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L116
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L116
L92:
  mov    $0xa,%edi
  call   <putchar@plt>
  add    $0x1,%r14d
  add    $0x1e,%r12
  cmp    $0x17,%r14d
  je     L36
L151:
  cmp    $0x9,%r14d
  jle    L33
  mov    %r14d,%esi
  lea    D3(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L51:
  lea    -0x1e(%r12),%rbx
  lea    D37(%rip),%r13
  lea    D73(%rip),%r15
  jmp    L120
L36:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D37
type: string
name: unpack_data
arguments: data_label: D3
type: string
name: unpack_data
arguments: data_label: D119
type: string
name: unpack_data
arguments: data_label: D1
type: string
name: unpack_data
arguments: data_label: D18
type: string
name: unpack_data
arguments: data_label: D89
type: string
name: unpack_data
arguments: data_label: D105
type: string
name: unpack_data
arguments: data_label: D25
type: string
name: unpack_data
arguments: data_label: D73
type: string

tool: D37:    

tool: D3: %d 

tool: D119:  %d 

tool: D1: %d  

tool: D18: [X]

tool: D89:  G 

tool: D105:  R 

tool: D25:  P 

tool: D73:  T 

assistant: ```c
void print_maze(char maze[23][30]) {
  int i, j, k;
  printf("   ");
  for (i = 0; i < 30; i++) {
    if (i < 10) {
      printf(" %d ", i);
    } else {
      printf("%d ", i);
    }
  }
  printf("\n");
  k = 0;
  for (i = 0; i < 23; i++) {
    if (k < 10) {
      printf("%d  ", k++);
    } else {
      printf("%d ", k++);
    }
    for (j = 0; j < 30; j++) {
      switch (maze[i][j]) {
      case '0':
        printf("[X]");
        break;
      case '7':
        printf("   ");
        break;
      case '6':
        printf("   ");
        break;
      case '3':
        printf(" G ");
        break;
      case '4':
        printf(" R ");
        break;
      case '5':
        printf(" P ");
        break;
      case '8':
        printf(" T ");
        break;
      case ' ':
        printf("   ");
        break;
      }
    }
    printf("\n");
  }
}
```