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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x6e0,%rsp
  mov    %edi,-0x6d4(%rbp)
  mov    %rsi,-0x6e0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x6d0(%rbp)
  movl   $0x1,-0x6cc(%rbp)
  movl   $0x2,-0x6c8(%rbp)
  movl   $0x3,-0x6c4(%rbp)
  movl   $0x4,-0x6c0(%rbp)
  movl   $0x5,-0x6bc(%rbp)
  movl   $0x6,-0x6b8(%rbp)
  movl   $0x7,-0x6b4(%rbp)
  movl   $0x8,-0x6b0(%rbp)
  movl   $0x9,-0x6ac(%rbp)
  movl   $0xa,-0x6a8(%rbp)
  movl   $0xb,-0x6a4(%rbp)
  movl   $0xc,-0x6a0(%rbp)
  movl   $0xd,-0x69c(%rbp)
  movl   $0xe,-0x698(%rbp)
  movl   $0xf,-0x694(%rbp)
  movl   $0x0,-0x690(%rbp)
  movl   $0x11,-0x68c(%rbp)
  movl   $0x22,-0x688(%rbp)
  movl   $0x33,-0x684(%rbp)
  movl   $0x44,-0x680(%rbp)
  movl   $0x55,-0x67c(%rbp)
  movl   $0x66,-0x678(%rbp)
  movl   $0x77,-0x674(%rbp)
  movl   $0x88,-0x670(%rbp)
  movl   $0x99,-0x66c(%rbp)
  movl   $0xaa,-0x668(%rbp)
  movl   $0xbb,-0x664(%rbp)
  movl   $0xcc,-0x660(%rbp)
  movl   $0xdd,-0x65c(%rbp)
  movl   $0xee,-0x658(%rbp)
  movl   $0xff,-0x654(%rbp)
  movl   $0x69,-0x650(%rbp)
  movl   $0xc4,-0x64c(%rbp)
  movl   $0xe0,-0x648(%rbp)
  movl   $0xd8,-0x644(%rbp)
  movl   $0x6a,-0x640(%rbp)
  movl   $0x7b,-0x63c(%rbp)
  movl   $0x4,-0x638(%rbp)
  movl   $0x30,-0x634(%rbp)
  movl   $0xd8,-0x630(%rbp)
  movl   $0xcd,-0x62c(%rbp)
  movl   $0xb7,-0x628(%rbp)
  movl   $0x80,-0x624(%rbp)
  movl   $0x70,-0x620(%rbp)
  movl   $0xb4,-0x61c(%rbp)
  movl   $0xc5,-0x618(%rbp)
  movl   $0x5a,-0x614(%rbp)
  movq   $0x0,-0x610(%rbp)
  movq   $0x0,-0x608(%rbp)
  movq   $0x0,-0x600(%rbp)
  movq   $0x0,-0x5f8(%rbp)
  movq   $0x0,-0x5f0(%rbp)
  movq   $0x0,-0x5e8(%rbp)
  movq   $0x0,-0x5e0(%rbp)
  movq   $0x0,-0x5d8(%rbp)
  movq   $0x0,-0x5d0(%rbp)
  movq   $0x0,-0x5c8(%rbp)
  movq   $0x0,-0x5c0(%rbp)
  movq   $0x0,-0x5b8(%rbp)
  movq   $0x0,-0x5b0(%rbp)
  movq   $0x0,-0x5a8(%rbp)
  movq   $0x0,-0x5a0(%rbp)
  movq   $0x0,-0x598(%rbp)
  lea    -0x590(%rbp),%rdx
  mov    $0x0,%eax
  mov    $0x58,%ecx
  mov    %rdx,%rdi
  rep stos %rax,%es:(%rdi)
  lea    -0x2d0(%rbp),%rdx
  mov    $0x0,%eax
  mov    $0x58,%ecx
  mov    %rdx,%rdi
  rep stos %rax,%es:(%rdi)
  mov    $0x0,%eax
  call   <AES_128_generate_tables@plt>
  lea    -0x590(%rbp),%rdx
  lea    -0x6d0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <AES_128_key_exp_enc_asm@plt>
  lea    -0x590(%rbp),%rdx
  lea    -0x610(%rbp),%rcx
  lea    -0x690(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <AES_128_encrypt_asm@plt>
  lea    -0x650(%rbp),%rcx
  lea    -0x610(%rbp),%rax
  mov    $0x40,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcmp@plt>
  test   %rax,%rax
  jne    L11
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L19
L11:
  lea    D56(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L19:
  lea    -0x610(%rbp),%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <printx@plt>
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x650(%rbp),%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <printx@plt>
  lea    D14(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x2d0(%rbp),%rdx
  lea    -0x6d0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <AES_128_key_exp_dec_asm@plt>
  lea    -0x2d0(%rbp),%rdx
  lea    -0x5d0(%rbp),%rcx
  lea    -0x650(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <AES_128_decrypt_asm@plt>
  lea    -0x690(%rbp),%rcx
  lea    -0x5d0(%rbp),%rax
  mov    $0x40,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcmp@plt>
  test   %rax,%rax
  jne    L9
  lea    D15(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L1
L9:
  lea    D4(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L1:
  lea    -0x5d0(%rbp),%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <printx@plt>
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x690(%rbp),%rax
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <printx@plt>
  lea    D14(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L15
  call   <__stack_chk_fail@plt>
L15:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D30
type_guessed: string
name: retrieve_data
arguments: data_tag: D56
type_guessed: string
name: retrieve_data
arguments: data_tag: D48
type_guessed: string
name: retrieve_data
arguments: data_tag: D14
type_guessed: string
name: retrieve_data
arguments: data_tag: D15
type_guessed: string
name: retrieve_data
arguments: data_tag: D4
type_guessed: string

tool: D30: ENCRYPT TEST PASSED: 

tool: D56: ENCRYPT TEST FAILED: 

tool: D48:  vs. 

tool: D14: 


tool: D15: DECRYPT TEST PASSED: 

tool: D4: DECRYPT TEST FAILED: 

assistant: ```c
int main(int argc, char *argv[]) {
  (void)argc;
  (void)argv;
  uint8_t key[(128 / 8)] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};
  uint8_t pt[(128 / 8)] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF};
  uint8_t ct[(128 / 8)] = {0x69, 0xC4, 0xE0, 0xD8, 0x6A, 0x7B, 0x04, 0x30, 0xD8, 0xCD, 0xB7, 0x80, 0x70, 0xB4, 0xC5, 0x5A};
  uint8_t oute[(128 / 8)] = {0x00};
  uint8_t outd[(128 / 8)] = {0x00};
  uint8_t kxe[(11 * 16)] = {0x00};
  uint8_t kxd[(11 * 16)] = {0x00};
  AES_128_generate_tables();
  AES_128_key_exp_enc_asm(key, kxe);
  AES_128_encrypt_asm(pt, oute, kxe);
  if (memcmp(oute, ct, sizeof(ct)) == 0) {
    printf("ENCRYPT TEST PASSED: ");
  } else {
    printf("ENCRYPT TEST FAILED: ");
  }
  printx(oute, (128 / 8));
  printf(" vs. ");
  printx(ct, (128 / 8));
  printf("\r\n");
  AES_128_key_exp_dec_asm(key, kxd);
  AES_128_decrypt_asm(ct, outd, kxd);
  if (memcmp(outd, pt, sizeof(pt)) == 0) {
    printf("DECRYPT TEST PASSED: ");
  } else {
    printf("DECRYPT TEST FAILED: ");
  }
  printx(outd, (128 / 8));
  printf(" vs. ");
  printx(pt, (128 / 8));
  printf("\r\n");
  return 0;
}
```