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

```asm
<main>:
  endbr64
  push   %r14
  pxor   %xmm0,%xmm0
  push   %r13
  lea    D133(%rip),%r13
  push   %r12
  push   %rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0xa0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x98(%rsp)
  xor    %eax,%eax
  mov    %rsp,%r12
  movaps %xmm0,0x40(%rsp)
  movq   $0x74736574,0x30(%rsp)
  mov    %r12,%rbp
  mov    %r12,%r14
  movq   $0x0,0x38(%rsp)
  movl   $0x0,0x90(%rsp)
  movaps %xmm0,0x50(%rsp)
  movaps %xmm0,0x60(%rsp)
  movaps %xmm0,0x70(%rsp)
  movaps %xmm0,0x80(%rsp)
  nopl   (%rax)
L3:
  lea    0x0(,%rbx,8),%ecx
  mov    %r14,%r8
  mov    %ebx,%edx
  mov    %ebx,%esi
  sub    %ebx,%ecx
  mov    %r13,%rdi
  xor    %eax,%eax
  add    $0x1,%ebx
  mov    %ecx,(%r14)
  add    $0x4,%r14
  call   <printf@plt>
  cmp    $0xa,%ebx
  jne    L3
  mov    (%rsp),%edx
  mov    %r12,%rsi
  lea    D124(%rip),%rdi
  xor    %eax,%eax
  lea    0x8(%rsp),%r13
  lea    D0(%rip),%rbx
  call   <printf@plt>
  mov    0x4(%rsp),%edx
  lea    0x4(%rsp),%rsi
  xor    %eax,%eax
  lea    D7(%rip),%rdi
  call   <printf@plt>
  mov    0x14(%rsp),%edx
  lea    0x14(%rsp),%rsi
  xor    %eax,%eax
  lea    D71(%rip),%rdi
  call   <printf@plt>
  mov    %r12,%rsi
  lea    D36(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x4(%rsp),%esi
  xor    %eax,%eax
  add    $0x28,%r12
  lea    D150(%rip),%rdi
  mov    %esi,%edx
  call   <printf@plt>
  mov    %r13,%rdx
  mov    %r13,%rsi
  xor    %eax,%eax
  lea    D86(%rip),%rdi
  call   <printf@plt>
  mov    0x8(%rsp),%esi
  lea    D6(%rip),%rdi
  xor    %eax,%eax
  mov    %esi,%edx
  call   <printf@plt>
  mov    %r13,%rdx
  mov    %r13,%rsi
  xor    %eax,%eax
  lea    D140(%rip),%rdi
  call   <printf@plt>
  mov    0x8(%rsp),%esi
  lea    D166(%rip),%rdi
  xor    %eax,%eax
  mov    %esi,%edx
  call   <printf@plt>
  lea    0x30(%rsp),%rdi
  xor    %eax,%eax
  call   <strlen_other@plt>
  lea    D115(%rip),%rdi
  mov    %eax,%esi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0xc(%rsp),%rdi
  xor    %eax,%eax
  call   <print_part@plt>
L27:
  mov    0x0(%rbp),%esi
  mov    %rbp,%rdx
  mov    %rbx,%rdi
  xor    %eax,%eax
  add    $0x4,%rbp
  call   <printf@plt>
  cmp    %rbp,%r12
  jne    L27
  movslq (%rsp),%rdx
  movslq 0x4(%rsp),%rax
  cmp    %rax,%rdx
  jbe    L16
  lea    D21(%rip),%rdi
  call   <puts@plt>
L30:
  mov    0x8(%rsp),%esi
  lea    D35(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x8(%rsp),%esi
  lea    D107(%rip),%rdi
  xor    %eax,%eax
  mov    %esi,%edx
  call   <printf@plt>
  mov    0x8(%rsp),%esi
  xor    %eax,%eax
  lea    D34(%rip),%rdi
  mov    %esi,%edx
  call   <printf@plt>
  mov    0x98(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L34
  add    $0xa0,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L16:
  lea    D143(%rip),%rdi
  call   <puts@plt>
  jmp    L30
L34:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D133
type: string
name: unpack_data
arguments: tag: D124
type: string
name: unpack_data
arguments: tag: D0
type: string
name: unpack_data
arguments: tag: D7
type: string
name: unpack_data
arguments: tag: D71
type: string
name: unpack_data
arguments: tag: D36
type: string
name: unpack_data
arguments: tag: D150
type: string
name: unpack_data
arguments: tag: D86
type: string
name: unpack_data
arguments: tag: D6
type: string
name: unpack_data
arguments: tag: D140
type: string
name: unpack_data
arguments: tag: D166
type: string
name: unpack_data
arguments: tag: D115
type: string
name: unpack_data
arguments: tag: D21
type: string
name: unpack_data
arguments: tag: D35
type: string
name: unpack_data
arguments: tag: D107
type: string
name: unpack_data
arguments: tag: D34
type: string
name: unpack_data
arguments: tag: D143
type: string

tool: D133: at step %d arr1 [ %d ] = %2d; & arr1 [ i ] = %p;


tool: D124: 
p1 = %p; and *p1 = %d;



tool: D0: p1 + i = %2d point at address %p;


tool: D7: p1 + 1 = %p; and * ( p1 + 1 ) = %d;



tool: D71: p1 + 5 = %p; and * ( p1 + 5 ) = %d;



tool: D36: p1 = a = %p;



tool: D150: arr1 [ i = 1 ] = %d; * ( arr1 + i = arr1 + 1 ) = %d;



tool: D86: & arr1 [ i = 2 ] = %p; arr1 + ( i = 2 ) = %p;



tool: D6: p1 [ i = 2 ] = %d; * ( p1 + i ) = %d;



tool: D140: & p1 [ i = 2 ] = %p; & ( * ( p1 + i ) ) = %p;



tool: D166: * ( & p1 [ i = 2 ] ) = %d; * ( & ( * ( p1 + i ) ) ) = %d;



tool: D115: lenght of string1 = %d;



tool: D21: p2 is earlier than p1;

tool: D35: arr1 [ 2 ] = %d in digital;


tool: D107:  * p1 = arr1 [ 2 ] = %d in digital; and * p1 = %p as pointer;


tool: D34: arr1 [ 2 ] = %d; * ( arr1 + 2 ) = %d;


tool: D143: p1 is earlier than p2;

assistant: ```c
void main() {
  int arr1[10];
  int n = 0;
  int i = 0;
  int *p1;
  int *p2;
  char string1[100] = "test";
  int len = 0;
  for (i = 0; i < 10; i++) {
    arr1[i] = i * 7;
    printf("at step %d arr1 [ %d ] = %2d; & arr1 [ i ] = %p;\n", i, i, arr1[i], &arr1[i]);
  }
  p1 = &arr1[0];
  printf("\np1 = %p; and *p1 = %d;\n\n", p1, *p1);
  printf("p1 + 1 = %p; and * ( p1 + 1 ) = %d;\n\n", p1 + 1, *(p1 + 1));
  printf("p1 + 5 = %p; and * ( p1 + 5 ) = %d;\n\n", p1 + 5, *(p1 + 5));
  p1 = arr1;
  printf("p1 = a = %p;\n\n", p1);
  i = 1;
  printf("arr1 [ i = 1 ] = %d; * ( arr1 + i = arr1 + 1 ) = %d;\n\n", arr1[i], *(arr1 + i));
  i = 2;
  printf("& arr1 [ i = 2 ] = %p; arr1 + ( i = 2 ) = %p;\n\n", &arr1[i], arr1 + i);
  p1 = arr1;
  i = 2;
  printf("p1 [ i = 2 ] = %d; * ( p1 + i ) = %d;\n\n", p1[i], *(p1 + i));
  printf("& p1 [ i = 2 ] = %p; & ( * ( p1 + i ) ) = %p;\n\n", &p1[i], &(*(p1 + i)));
  printf("* ( & p1 [ i = 2 ] ) = %d; * ( & ( * ( p1 + i ) ) ) = %d;\n\n", *(&p1[i]), *(&(*(p1 + i))));
  p1 = *string1;
  len = strlen_other(&string1);
  printf("lenght of string1 = %d;\n\n", len);
  print_part(&arr1[3]);
  p1 = arr1;
  for (i = 0; i < 10; i++) {
    printf("p1 + i = %2d point at address %p;\n", *(p1 + i), (p1 + i));
  };
  p1 = arr1[0];
  p2 = arr1[1];
  if (p1 > p2) {
    printf("p2 is earlier than p1;\n");
  } else {
    printf("p1 is earlier than p2;\n");
  }
  printf("arr1 [ 2 ] = %d in digital;\n", arr1[2]);
  p1 = &arr1[2];
  printf(" * p1 = arr1 [ 2 ] = %d in digital; and * p1 = %p as pointer;\n", *p1, *p1);
  printf("arr1 [ 2 ] = %d; * ( arr1 + 2 ) = %d;\n", arr1[2], *(arr1 + 2));
}
```