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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x190,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x184(%rbp)
  lea    D50(%rip),%rax
  mov    %rax,-0x170(%rbp)
  lea    D145(%rip),%rax
  mov    %rax,-0x168(%rbp)
  lea    D71(%rip),%rax
  mov    %rax,-0x160(%rbp)
  lea    D169(%rip),%rax
  mov    %rax,-0x158(%rbp)
  lea    D166(%rip),%rax
  mov    %rax,-0x150(%rbp)
  lea    D99(%rip),%rax
  mov    %rax,-0x148(%rbp)
  lea    D155(%rip),%rax
  mov    %rax,-0x140(%rbp)
  lea    D160(%rip),%rax
  mov    %rax,-0x138(%rbp)
  lea    D93(%rip),%rax
  mov    %rax,-0x130(%rbp)
  lea    D156(%rip),%rax
  mov    %rax,-0x128(%rbp)
  lea    D17(%rip),%rax
  mov    %rax,-0x120(%rbp)
  lea    D90(%rip),%rax
  mov    %rax,-0x118(%rbp)
  lea    D123(%rip),%rax
  mov    %rax,-0x110(%rbp)
  lea    D134(%rip),%rax
  mov    %rax,-0x108(%rbp)
  lea    D91(%rip),%rax
  mov    %rax,-0x100(%rbp)
  lea    D131(%rip),%rax
  mov    %rax,-0xf8(%rbp)
  lea    D140(%rip),%rax
  mov    %rax,-0xf0(%rbp)
  lea    -0xe0(%rbp),%rdx
  mov    $0x0,%eax
  mov    $0x1a,%ecx
  mov    %rdx,%rdi
  rep stos %rax,%es:(%rdi)
  movq   $0x0,-0x180(%rbp)
L23:
  movq   $0x0,-0x178(%rbp)
L4:
  mov    -0x180(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    -0x178(%rbp),%rdx
  add    %rax,%rdx
  mov    -0x184(%rbp),%eax
  mov    %eax,-0xe0(%rbp,%rdx,4)
  addl   $0x1,-0x184(%rbp)
  addq   $0x1,-0x178(%rbp)
  cmpq   $0xc,-0x178(%rbp)
  jbe    L4
  addq   $0x1,-0x180(%rbp)
  cmpq   $0x3,-0x180(%rbp)
  jbe    L23
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rdi
  call   <shuffle@plt>
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rdi
  call   <shuffle@plt>
  lea    -0x170(%rbp),%rdx
  lea    -0x150(%rbp),%rcx
  lea    -0xe0(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <deal@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L22
  call   <__stack_chk_fail@plt>
L22:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D50
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D145
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D71
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D169
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D166
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D99
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D155
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D160
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D93
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D156
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D17
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D90
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D123
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D134
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D91
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D131
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D140
type_guessed: string

tool: D50: Cuori

tool: D145: Quadri

tool: D71: Fiori

tool: D169: Picche

tool: D166: Asso

tool: D99: Due

tool: D155: Tre

tool: D160: Quattro

tool: D93: Cinque

tool: D156: Sei

tool: D17: Sette

tool: D90: Otto

tool: D123: Nove

tool: D134: Dieci

tool: D91: Jack

tool: D131: Regina

tool: D140: Re

assistant: ```c
int main() {
  void deal(unsigned int wDeck[][13], const char *wFace[], const char *wSuit[]);
  void shuffle(unsigned int wDeck[][13]);
  size_t row;
  size_t column;
  unsigned int i = 1;
  const char *suit[4] = {"Cuori", "Quadri", "Fiori", "Picche"};
  const char *face[13] = {"Asso", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Otto", "Nove", "Dieci", "Jack", "Regina", "Re"};
  unsigned int deck[4][13] = {{0}, {0}};
  row = 0;
  do {
    column = 0;
    do {
      deck[row][column] = i;
      i++;
      column++;
    } while (column < 13);
    row++;
  } while (row < 4);
  srand(time(NULL));
  shuffle(deck);
  shuffle(deck);
  deal(deck, face, suit);
  return 0;
}
```