user: What would the C source look like for the assembly code provided here?

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x338,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x328(%rsp)
  xor    %eax,%eax
  movb   $0x73,0x17(%rsp)
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  lea    D85(%rip),%rdi
  call   <puts@plt>
  lea    D57(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D74(%rip),%rdi
  call   <system@plt>
  movzbl 0x17(%rsp),%eax
  and    $0xffffffdf,%eax
  cmp    $0x53,%al
  jne    L132
  lea    D23(%rip),%rbp
  jmp    L197
L193:
  lea    0x260(%rsp),%rbx
  lea    0x1a0(%rsp),%rdi
  mov    0x1c(%rsp),%ecx
  mov    0x18(%rsp),%edx
  mov    %rbx,%rsi
  call   <Tela@plt>
  lea    D94(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x18(%rsp),%rdx
  lea    0xe0(%rsp),%rdi
  mov    %rbx,%rsi
  call   <Tiro@plt>
  lea    D74(%rip),%rdi
  call   <system@plt>
  cmpl   $0xa,0x18(%rsp)
  jne    L45
L54:
  cmpl   $0xa,0x18(%rsp)
  je     L128
  cmpl   $0xa,0x1c(%rsp)
  je     L128
  lea    D74(%rip),%rdi
  call   <system@plt>
  lea    0x40(%rsp),%r15
  mov    %r15,%r12
L78:
  lea    -0x20(%r12),%rbx
L121:
  mov    (%rbx),%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x4,%rbx
  cmp    %r12,%rbx
  jne    L121
  mov    $0xa,%edi
  call   <putchar@plt>
  add    $0x20,%r12
  cmp    %r14,%r12
  jne    L78
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    0x100(%rsp),%rax
  mov    %rax,0x8(%rsp)
  lea    0x1c0(%rsp),%r13
  mov    %rax,%r12
L11:
  lea    -0x20(%r12),%rbx
L144:
  mov    (%rbx),%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x4,%rbx
  cmp    %r12,%rbx
  jne    L144
  mov    $0xa,%edi
  call   <putchar@plt>
  add    $0x20,%r12
  cmp    %r13,%r12
  jne    L11
  jmp    L193
L45:
  lea    -0x20(%r15),%rbx
L56:
  mov    (%rbx),%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x4,%rbx
  cmp    %r15,%rbx
  jne    L56
  mov    $0xa,%edi
  call   <putchar@plt>
  add    $0x20,%r15
  cmp    %r14,%r15
  jne    L45
  mov    $0xa,%edi
  call   <putchar@plt>
L68:
  mov    0x8(%rsp),%rax
  lea    -0x20(%rax),%rbx
L179:
  mov    (%rbx),%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x4,%rbx
  cmp    %rbx,0x8(%rsp)
  jne    L179
  mov    $0xa,%edi
  call   <putchar@plt>
  addq   $0x20,0x8(%rsp)
  mov    0x8(%rsp),%rax
  cmp    %r13,%rax
  jne    L68
  lea    0x260(%rsp),%rsi
  lea    0x1a0(%rsp),%rbx
  mov    0x1c(%rsp),%ecx
  mov    0x18(%rsp),%edx
  mov    %rbx,%rdi
  call   <Tela@plt>
  lea    D95(%rip),%rdi
  call   <puts@plt>
  lea    0x1c(%rsp),%rdx
  lea    0x20(%rsp),%rdi
  mov    %rbx,%rsi
  call   <Tiro@plt>
  jmp    L175
L128:
  lea    D17(%rip),%rdi
  call   <system@plt>
  cmpl   $0xa,0x18(%rsp)
  je     L163
  lea    D78(%rip),%rdi
  call   <puts@plt>
L189:
  lea    D96(%rip),%rdi
  call   <puts@plt>
  lea    0x17(%rsp),%rsi
  lea    D99(%rip),%rdi
  call   <scanf@plt>
  movzbl 0x17(%rsp),%eax
  and    $0xffffffdf,%eax
  cmp    $0x53,%al
  jne    L132
L197:
  movl   $0x0,0x18(%rsp)
  movl   $0x0,0x1c(%rsp)
  lea    0xe0(%rsp),%rbx
  lea    0x20(%rsp),%r12
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <ZerarMatriz@plt>
  lea    0x260(%rsp),%rsi
  lea    0x1a0(%rsp),%rdi
  call   <ZerarMatriz@plt>
  mov    %r12,%rdi
  call   <GerarBarco@plt>
  mov    %rbx,%rdi
  call   <GerarBarco@plt>
L175:
  lea    0x100(%rsp),%r14
  jmp    L54
L163:
  lea    D109(%rip),%rdi
  call   <puts@plt>
  jmp    L189
L132:
  mov    0x328(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L171
  mov    $0x0,%eax
  add    $0x338,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L171:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D85
type: string
name: extract_symbolic_data
arguments: label: D57
type: string
name: extract_symbolic_data
arguments: label: D74
type: string
name: extract_symbolic_data
arguments: label: D23
type: string
name: extract_symbolic_data
arguments: label: D94
type: string
name: extract_symbolic_data
arguments: label: D95
type: string
name: extract_symbolic_data
arguments: label: D17
type: string
name: extract_symbolic_data
arguments: label: D78
type: string
name: extract_symbolic_data
arguments: label: D96
type: string
name: extract_symbolic_data
arguments: label: D99
type: string
name: extract_symbolic_data
arguments: label: D109
type: string

tool: D85:  ____        _        _ _             _   _                  _
| __ )  __ _| |_ __ _| | |__   __ _  | \ | | __ ___   ____ _| |
| \_ \ / _` | __/ _` | | '_ \ / _` | |  \| |/ _` \ \ / / _` | |
| |_) | (_| | |_ (_| | | | | | (_| | | |\  | (_| |\ V / (_| | |
|____/ \__,_|\__\__,_|_|_| |_|\__,_| |_| \_|\__,_| \_/ \__,_|_|

tool: D57: 		Aperte enter para jogar...

tool: D74: clear||cls

tool: D23: %d 

tool: D94: 		 Jogador 1

tool: D95: 		 Jogador 2

tool: D17: clear || cls

tool: D78: 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!PLAYER 2 GANHOU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


tool: D96: 
	Quer jogar de novo?(S/N)

tool: D99: %c

tool: D109: 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!PLAYER 1 GANHOU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


assistant: ```c
int main() {
  int P1[6][8], P2[6][8], P1Tela[6][8], P2Tela[6][8];
  int P1Ponto, P2Ponto;
  int i, j;
  char Jogar = 's';
  srand(time(NULL));
  printf(" ____        _        _ _             _   _                  _\n| __ )  __ _| |_ __ _| | |__   __ _  | \\ | | __ ___   ____ _| |\n| \\_ \\ / _` | __/ _` | | '_ \\ / _` | |  \\| |/ _` \\ \\ / / _` | |\n| |_) | (_| | |_ (_| | | | | | (_| | | |\\  | (_| |\\ V / (_| | |\n|____/ \\__,_|\\__\\__,_|_|_| |_|\\__,_| |_| \\_|\\__,_| \\_/ \\__,_|_|\n");
  printf("\t\tAperte enter para jogar...");
  getchar();
  system("clear||cls");
  while ((Jogar == 's') || (Jogar == 'S')) {
    P1Ponto = 0;
    P2Ponto = 0;
    ZerarMatriz(P1, P2);
    ZerarMatriz(P1Tela, P2Tela);
    GerarBarco(P1);
    GerarBarco(P2);
    while ((P1Ponto != 10) && (P2Ponto != 10)) {
      system("clear||cls");
      for (i = 0; i < 6; i++) {
        for (j = 0; j < 8; j++) {
          printf("%d ", P1[i][j]);
        }
        printf("\n");
      }
      printf("\n");
      for (i = 0; i < 6; i++) {
        for (j = 0; j < 8; j++) {
          printf("%d ", P2[i][j]);
        }
        printf("\n");
      }
      Tela(P1Tela, P2Tela, P1Ponto, P2Ponto);
      printf("\t\t Jogador 1");
      Tiro(P2, P2Tela, &P1Ponto);
      system("clear||cls");
      if (P1Ponto != 10) {
        for (i = 0; i < 6; i++) {
          for (j = 0; j < 8; j++) {
            printf("%d ", P1[i][j]);
          }
          printf("\n");
        }
        printf("\n");
        for (i = 0; i < 6; i++) {
          for (j = 0; j < 8; j++) {
            printf("%d ", P2[i][j]);
          }
          printf("\n");
        }
        Tela(P1Tela, P2Tela, P1Ponto, P2Ponto);
        printf("\t\t Jogador 2\n");
        Tiro(P1, P1Tela, &P2Ponto);
      }
    }
    system("clear || cls");
    if (P1Ponto == 10) {
      printf("\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!PLAYER 1 GANHOU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n");
    } else {
      printf("\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!PLAYER 2 GANHOU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n");
    }
    printf("\n\tQuer jogar de novo?(S/N)\n");
    scanf("%c", &Jogar);
  }
  return 0;
}
```