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

```asm
<main>:
  endbr64
  push   %rbp
  lea    D32(%rip),%rdi
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rbp
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <gets@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jle    L58
  lea    -0x1(%rax),%edx
  cmp    $0xe,%edx
  jbe    L73
  movdqa D17(%rip),%xmm1
  paddb  (%rsp),%xmm1
  pxor   %xmm2,%xmm2
  mov    %eax,%edx
  psubusb D45(%rip),%xmm1
  and    $0xfffffff0,%edx
  pcmpeqb %xmm2,%xmm1
  pand   D1(%rip),%xmm1
  pcmpgtb %xmm1,%xmm2
  movdqa %xmm1,%xmm0
  punpcklbw %xmm2,%xmm0
  punpckhbw %xmm2,%xmm1
  pxor   %xmm2,%xmm2
  movdqa %xmm2,%xmm3
  pcmpgtw %xmm1,%xmm2
  movdqa %xmm0,%xmm4
  pcmpgtw %xmm0,%xmm3
  punpcklwd %xmm3,%xmm4
  punpckhwd %xmm3,%xmm0
  movdqa %xmm1,%xmm3
  paddd  %xmm4,%xmm0
  punpcklwd %xmm2,%xmm3
  punpckhwd %xmm2,%xmm1
  paddd  %xmm3,%xmm0
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x8,%xmm1
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%esi
  test   $0xf,%al
  je     L174
L192:
  movslq %edx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0x1(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %eax,%ecx
  jge    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0x2(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %ecx,%eax
  jle    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0x3(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %ecx,%eax
  jle    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0x4(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %ecx,%eax
  jle    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0x5(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %ecx,%eax
  jle    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0x6(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %ecx,%eax
  jle    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0x7(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %ecx,%eax
  jle    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0x8(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %ecx,%eax
  jle    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0x9(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %ecx,%eax
  jle    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0xa(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %ecx,%eax
  jle    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0xb(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %ecx,%eax
  jle    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0xc(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %ecx,%eax
  jle    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  lea    0xd(%rdx),%ecx
  adc    $0x0,%esi
  cmp    %ecx,%eax
  jle    L174
  movslq %ecx,%rcx
  movzbl (%rsp,%rcx,1),%ecx
  sub    $0x30,%ecx
  cmp    $0xa,%cl
  adc    $0x0,%esi
  add    $0xe,%edx
  cmp    %edx,%eax
  jle    L174
  movslq %edx,%rdx
  movzbl (%rsp,%rdx,1),%eax
  sub    $0x30,%eax
  cmp    $0xa,%al
  adc    $0x0,%esi
  nopl   (%rax)
L174:
  xor    %eax,%eax
  lea    D16(%rip),%rdi
  call   <printf@plt>
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L133
  add    $0x30,%rsp
  xor    %eax,%eax
  pop    %rbp
  ret
L58:
  xor    %esi,%esi
  jmp    L174
L73:
  xor    %esi,%esi
  xor    %edx,%edx
  jmp    L192
L133:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D32
data_type: string
name: unpack_data
arguments: tag: D17
data_type: byte[16]
name: unpack_data
arguments: tag: D45
data_type: byte[16]
name: unpack_data
arguments: tag: D1
data_type: byte[16]
name: unpack_data
arguments: tag: D16
data_type: string

tool: D32: entre com uma frase: 

tool: {"D17": [0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0]}

tool: {"D45": [0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09]}

tool: {"D1": [0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01]}

tool: D16: %d numeros foram digitados


assistant: ```c
int main() {
  int i, cont = 0, tam;
  char frase[30];
  printf("entre com uma frase: \n");
  gets(frase);
  tam = strlen(frase);
  for (i = 0; i < tam; i++) {
    if (frase[i] > 47 && frase[i] < 58)
      cont++;
  }
  printf("%d numeros foram digitados\n", cont);
  return 0;
}
```