user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x330,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movb   $0x73,-0x321(%rbp)
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  lea    D134(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D129(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  jmp    L233
L105:
  movl   $0x0,-0x320(%rbp)
  movl   $0x0,-0x31c(%rbp)
  lea    -0x250(%rbp),%rdx
  lea    -0x310(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ZerarMatriz@plt>
  lea    -0xd0(%rbp),%rdx
  lea    -0x190(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ZerarMatriz@plt>
  lea    -0x310(%rbp),%rax
  mov    %rax,%rdi
  call   <GerarBarco@plt>
  lea    -0x250(%rbp),%rax
  mov    %rax,%rdi
  call   <GerarBarco@plt>
  jmp    L188
L220:
  lea    D129(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  movl   $0x0,-0x318(%rbp)
  jmp    L240
L141:
  movl   $0x0,-0x314(%rbp)
  jmp    L48
L228:
  mov    -0x314(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x318(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    -0x310(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D123(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x314(%rbp)
L48:
  cmpl   $0x7,-0x314(%rbp)
  jle    L228
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x318(%rbp)
L240:
  cmpl   $0x5,-0x318(%rbp)
  jle    L141
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x318(%rbp)
  jmp    L218
L213:
  movl   $0x0,-0x314(%rbp)
  jmp    L97
L176:
  mov    -0x314(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x318(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    -0x250(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D123(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x314(%rbp)
L97:
  cmpl   $0x7,-0x314(%rbp)
  jle    L176
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x318(%rbp)
L218:
  cmpl   $0x5,-0x318(%rbp)
  jle    L213
  mov    -0x31c(%rbp),%ecx
  mov    -0x320(%rbp),%edx
  lea    -0xd0(%rbp),%rsi
  lea    -0x190(%rbp),%rax
  mov    %rax,%rdi
  call   <Tela@plt>
  lea    D55(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x320(%rbp),%rdx
  lea    -0xd0(%rbp),%rcx
  lea    -0x250(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <Tiro@plt>
  lea    D129(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    -0x320(%rbp),%eax
  cmp    $0xa,%eax
  je     L188
  movl   $0x0,-0x318(%rbp)
  jmp    L163
L214:
  movl   $0x0,-0x314(%rbp)
  jmp    L249
L170:
  mov    -0x314(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x318(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    -0x310(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D123(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x314(%rbp)
L249:
  cmpl   $0x7,-0x314(%rbp)
  jle    L170
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x318(%rbp)
L163:
  cmpl   $0x5,-0x318(%rbp)
  jle    L214
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x318(%rbp)
  jmp    L257
L26:
  movl   $0x0,-0x314(%rbp)
  jmp    L30
L56:
  mov    -0x314(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x318(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    -0x250(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D123(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x314(%rbp)
L30:
  cmpl   $0x7,-0x314(%rbp)
  jle    L56
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x318(%rbp)
L257:
  cmpl   $0x5,-0x318(%rbp)
  jle    L26
  mov    -0x31c(%rbp),%ecx
  mov    -0x320(%rbp),%edx
  lea    -0xd0(%rbp),%rsi
  lea    -0x190(%rbp),%rax
  mov    %rax,%rdi
  call   <Tela@plt>
  lea    D104(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x31c(%rbp),%rdx
  lea    -0x190(%rbp),%rcx
  lea    -0x310(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <Tiro@plt>
L188:
  mov    -0x320(%rbp),%eax
  cmp    $0xa,%eax
  je     L51
  mov    -0x31c(%rbp),%eax
  cmp    $0xa,%eax
  jne    L220
L51:
  lea    D81(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    -0x320(%rbp),%eax
  cmp    $0xa,%eax
  jne    L168
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L251
L168:
  lea    D107(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L251:
  lea    D140(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x321(%rbp),%rax
  mov    %rax,%rsi
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
L233:
  movzbl -0x321(%rbp),%eax
  cmp    $0x73,%al
  je     L105
  movzbl -0x321(%rbp),%eax
  cmp    $0x53,%al
  je     L105
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L78
  call   <__stack_chk_fail@plt>
L78:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D134
type: string
name: disassemble_data
arguments: data_label: D40
type: string
name: disassemble_data
arguments: data_label: D129
type: string
name: disassemble_data
arguments: data_label: D123
type: string
name: disassemble_data
arguments: data_label: D55
type: string
name: disassemble_data
arguments: data_label: D104
type: string
name: disassemble_data
arguments: data_label: D81
type: string
name: disassemble_data
arguments: data_label: D46
type: string
name: disassemble_data
arguments: data_label: D107
type: string
name: disassemble_data
arguments: data_label: D140
type: string
name: disassemble_data
arguments: data_label: D80
type: string

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

tool: D40: 		Aperte enter para jogar...

tool: D129: clear||cls

tool: D123: %d 

tool: D55: 		 Jogador 1

tool: D104: 		 Jogador 2

tool: D81: clear || cls

tool: D46: 

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


tool: D107: 

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


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

tool: D80: %c

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;
}
```