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

```asm
<main>:
  endbr64
  push   %r15
  mov    $0x7e,%ecx
  pxor   %xmm0,%xmm0
  push   %r14
  push   %r13
  lea    D27(%rip),%r13
  push   %r12
  lea    D86(%rip),%r12
  push   %rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x968,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x958(%rsp)
  xor    %eax,%eax
  lea    0x160(%rsp),%rdi
  movaps %xmm0,0x150(%rsp)
  rep stos %rax,%es:(%rdi)
  mov    %r13,%rdi
  call   <strlen@plt>
  sub    $0x8,%rsp
  xor    %r9d,%r9d
  xor    %r8d,%r8d
  mov    %eax,%edx
  mov    $0x1,%ecx
  lea    D63(%rip),%rax
  mov    %r13,%rsi
  push   %rax
  lea    D46(%rip),%rdi
  push   $0x1
  push   $0x0
  push   $0x0
  push   $0xa7
  lea    0x180(%rsp),%rbp
  push   %rbp
  push   %r12
  push   %rax
  push   $0x0
  call   <make_pdu@plt>
  add    $0x50,%rsp
  mov    %rbp,%rsi
  xor    %eax,%eax
  lea    D78(%rip),%rdi
  lea    0xd0(%rsp),%r13
  call   <printf@plt>
  mov    %rbx,%rax
  mov    $0x7e,%ecx
  xor    %edx,%edx
  lea    0x560(%rsp),%rdi
  pxor   %xmm0,%xmm0
  lea    0xf0(%rsp),%r8
  mov    %dx,0xaa(%rsp)
  rep stos %rax,%es:(%rdi)
  xor    %eax,%eax
  xor    %ecx,%ecx
  movaps %xmm0,0xd0(%rsp)
  movaps %xmm0,0xf0(%rsp)
  lea    0x110(%rsp),%rbx
  lea    0x8c(%rsp),%r15
  movaps %xmm0,0x110(%rsp)
  movaps %xmm0,0x550(%rsp)
  movaps %xmm0,0x130(%rsp)
  movaps %xmm0,0xb0(%rsp)
  mov    %ax,0xa7(%rsp)
  mov    %cx,0xad(%rsp)
  movq   $0x0,0x74(%rsp)
  movq   $0x0,0x8c(%rsp)
  movl   $0x0,0x94(%rsp)
  movq   $0x0,0xe0(%rsp)
  movb   $0x0,0xe8(%rsp)
  movq   $0x0,0x100(%rsp)
  movb   $0x0,0x108(%rsp)
  movq   $0x0,0x120(%rsp)
  movb   $0x0,0x128(%rsp)
  movq   $0x0,0x140(%rsp)
  movb   $0x0,0x148(%rsp)
  movq   $0x0,0x98(%rsp)
  movl   $0x0,0xa0(%rsp)
  movb   $0x0,0xa9(%rsp)
  movb   $0x0,0xac(%rsp)
  movb   $0x0,0xaf(%rsp)
  movq   $0x0,0x7c(%rsp)
  movl   $0x0,0xc0(%rsp)
  movq   $0x0,0x84(%rsp)
  sub    $0x8,%rsp
  push   $0x0
  lea    0x94(%rsp),%r11
  push   %r11
  lea    0xc8(%rsp),%rax
  mov    %r11,0x70(%rsp)
  mov    %rax,0x18(%rsp)
  push   %rax
  lea    0x9c(%rsp),%rsi
  mov    %rsi,0x28(%rsp)
  push   %rsi
  mov    %r12,%rsi
  lea    0x9c(%rsp),%rdx
  mov    %rdx,0x38(%rsp)
  push   %rdx
  mov    %r15,%rdx
  lea    0xdd(%rsp),%rcx
  mov    %rcx,0x48(%rsp)
  push   %rcx
  mov    %r13,%rcx
  lea    0xa8(%rsp),%rdi
  mov    %rdi,0x58(%rsp)
  push   %rdi
  lea    D48(%rip),%rdi
  lea    0xac(%rsp),%r9
  mov    %r9,0x68(%rsp)
  push   %r9
  mov    %rbx,%r9
  lea    0xf2(%rsp),%r14
  mov    %r14,0x78(%rsp)
  push   %r14
  lea    0xf7(%rsp),%r10
  mov    %r10,0x88(%rsp)
  push   %r10
  lea    0xf0(%rsp),%r11
  mov    %r11,0x98(%rsp)
  push   %r11
  lea    0x190(%rsp),%r10
  push   %r10
  lea    0x5b8(%rsp),%r14
  mov    %r10,0xb8(%rsp)
  push   %r14
  mov    %r8,0xb8(%rsp)
  call   <splitpdu@plt>
  add    $0x70,%rsp
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    %r14,%rsi
  lea    D64(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  sub    $0x8,%rsp
  mov    %r12,%rsi
  mov    %rbx,%r9
  push   $0x0
  mov    0x68(%rsp),%r11
  mov    %r13,%rcx
  mov    %r15,%rdx
  mov    %rbp,%rdi
  push   %r11
  push   0x18(%rsp)
  push   0x28(%rsp)
  push   0x38(%rsp)
  push   0x48(%rsp)
  push   0x58(%rsp)
  push   0x68(%rsp)
  push   0x78(%rsp)
  push   0x88(%rsp)
  push   0x98(%rsp)
  mov    0xb0(%rsp),%r10
  push   %r10
  push   %r14
  mov    0xb8(%rsp),%r8
  call   <splitpdu@plt>
  mov    0xe0(%rsp),%esi
  add    $0x70,%rsp
  test   %esi,%esi
  jne    L4
  lea    D6(%rip),%rdi
  call   <puts@plt>
L21:
  mov    0x958(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L1
  add    $0x968,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L4:
  lea    D50(%rip),%rdi
  call   <puts@plt>
  jmp    L21
L1:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D27
type_guessed: string
name: parse_data
arguments: data_label: D86
type_guessed: string
name: parse_data
arguments: data_label: D63
type_guessed: string
name: parse_data
arguments: data_label: D46
type_guessed: string
name: parse_data
arguments: data_label: D78
type_guessed: string
name: parse_data
arguments: data_label: D48
type_guessed: string
name: parse_data
arguments: data_label: D64
type_guessed: string
name: parse_data
arguments: data_label: D6
type_guessed: string
name: parse_data
arguments: data_label: D50
type_guessed: string

tool: D27: viltsik

tool: D86: new

tool: 

tool: D46: 3725215471

tool: D78: 
PDU: %s



tool: D48: 07916998051030F2040B916998775706F80000410192518220611254791E447F83E4E530194447A7E72E10

tool: D64: received message = %s from sender = %s at time = %s


tool: D6: there is a msg

tool: D50: there's a problem with that pdu. It isn't supported!

assistant: ```c
int main(void) {
  char *message = "viltsik";
  char *to = "3725215471";
  int alphabet = 1;
  int flash = 0;
  int with_udh = 0;
  char *udh_data = "";
  char *mode = "new";
  int report = 0;
  char pdu[1024] = {0};
  int validity = 167;
  int system_msg = 0;
  int replace_msg = 0;
  int to_type = 1;
  char *smsc = "";
  make_pdu(to, message, strlen(message), alphabet, flash, report, with_udh, udh_data, mode, pdu, validity, replace_msg, system_msg, to_type, smsc);
  printf("\nPDU: %s\n\n", pdu);
  char *mode1 = "new";
  int alphabet1[3] = {0};
  char sendr[25] = {0};
  char date[25] = {0};
  char recvd_time[25] = {0};
  char message1[1024] = {0};
  char smsc1[25] = {0};
  int with_udh1[3] = {0};
  char a_udh_data[3] = {0};
  char a_udh_type[3] = {0};
  int is_statusreport;
  int is_unsupported_pdu;
  char from_toa[3] = {0};
  int report1[2] = {0};
  int replace[2] = {0};
  char warning_headers[20] = {0};
  int flash1[2] = {0};
  int bin_udh = 0;
  char *received_msg = "07916998051030F2040B916998775706F80000410192518220611254791E447F83E4E530194447A7E72E10";
  splitpdu(received_msg, mode1, alphabet1, sendr, date, recvd_time, message1, smsc1, with_udh1, a_udh_data, a_udh_type, &is_statusreport, &is_unsupported_pdu, from_toa, report1, replace, warning_headers, flash1, bin_udh);
  printf("received message = %s from sender = %s at time = %s\n", message1, sendr, recvd_time);
  splitpdu(pdu, mode1, alphabet1, sendr, date, recvd_time, message1, smsc1, with_udh1, a_udh_data, a_udh_type, &is_statusreport, &is_unsupported_pdu, from_toa, report1, replace, warning_headers, flash1, bin_udh);
  if (!is_unsupported_pdu) {
    printf("there is a msg\n");
  } else {
    printf("there's a problem with that pdu. It isn't supported!\n");
  }
  return 0;
}
```