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

```asm
<main>:
  endbr64
  push   %rbp
  lea    D13(%rip),%rdi
  add    $0xffffffffffffff80,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x78(%rsp)
  xor    %eax,%eax
  lea    0x68(%rsp),%rbp
  movl   $0x0,0x70(%rsp)
  movq   $0x0,0x68(%rsp)
  mov    %rbp,%rsi
  call   <scanf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  cmp    $0xa,%eax
  jne    L18
  movq   0x68(%rsp),%xmm1
  movzbl 0x70(%rsp),%esi
  movq   D7(%rip),%xmm0
  lea    -0x30(%rsi),%r9d
  movzbl 0x71(%rsp),%esi
  paddb  %xmm0,%xmm1
  mov    %r9b,0x70(%rsp)
  lea    -0x30(%rsi),%r8d
  mov    $0x1,%esi
  mov    %r8b,0x71(%rsp)
  movq   %xmm1,%rdi
  movq   %xmm1,%rdx
  movq   %xmm1,%rax
  movq   %xmm1,0x68(%rsp)
  shl    $0x8,%rdi
  shr    $0x18,%rdx
  movq   %xmm1,0x38(%rsp)
  sar    $0x18,%edi
  movsbl %dl,%edx
  movq   %xmm1,0x30(%rsp)
  lea    (%rdi,%rdi,4),%ecx
  lea    (%rdx,%rcx,2),%ecx
  cmp    $0x35,%ecx
  ja     L17
  movabs $0xffc001fc001fe001,%rsi
  sar    %cl,%rsi
  and    $0x1,%esi
L17:
  movzbl %ah,%ecx
  movsbl %al,%r10d
  mov    %rax,0x28(%rsp)
  movsbl %r9b,%r9d
  movsbl %cl,%ecx
  mov    %rax,0x20(%rsp)
  movsbl %r8b,%r8d
  shl    $0x2,%ecx
  mov    %rax,0x18(%rsp)
  lea    (%rcx,%r10,2),%ecx
  mov    %rax,0x10(%rsp)
  lea    (%rcx,%rdi,8),%edi
  lea    (%rdx,%rdx,4),%ecx
  mov    %rax,%rdx
  mov    %rax,0x8(%rsp)
  shr    $0x20,%rdx
  add    %edi,%ecx
  mov    %rax,(%rsp)
  movsbl %dl,%edx
  lea    (%rdx,%rdx,4),%edx
  lea    (%rcx,%rdx,2),%edi
  mov    %rax,%rdx
  shr    $0x28,%rdx
  movsbl %dl,%edx
  lea    (%rdx,%rdx,8),%ecx
  mov    %rax,%rdx
  add    %edi,%ecx
  shr    $0x30,%rdx
  mov    %rax,%rdi
  movsbl %dl,%edx
  shr    $0x38,%rdi
  lea    (%rcx,%rdx,8),%ecx
  movsbl %dil,%eax
  lea    D15(%rip),%rdi
  sub    %edx,%ecx
  lea    (%rax,%rax,2),%eax
  lea    (%r9,%r9,2),%edx
  add    %ecx,%eax
  lea    (%rax,%rdx,2),%eax
  mov    0x64(%rsp),%edx
  imul   %r8d,%edx
  add    %eax,%edx
  movslq %edx,%rax
  mov    %edx,%ecx
  imul   $0x2e8ba2e9,%rax,%rax
  sar    $0x1f,%ecx
  sar    $0x21,%rax
  sub    %ecx,%eax
  lea    (%rax,%rax,4),%ecx
  lea    (%rax,%rcx,2),%ecx
  mov    %edx,%eax
  xor    %edx,%edx
  sub    %ecx,%eax
  cmp    $0xa,%eax
  cmove  %edx,%eax
  xor    $0x1,%esi
  movzbl %sil,%esi
  cmp    %eax,%r8d
  cmovne %edx,%esi
  xor    %eax,%eax
  call   <printf@plt>
L15:
  mov    0x78(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L27
  sub    $0xffffffffffffff80,%rsp
  xor    %eax,%eax
  pop    %rbp
  ret
L18:
  mov    $0x30,%edi
  call   <putchar@plt>
  jmp    L15
L27:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: label: D13
type: string
name: parse_data
arguments: label: D7
type: byte[8]
name: parse_data
arguments: label: D15
type: string

tool: D13: %s

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

tool: D15: %d

assistant: ```c
int main() {
  int result = 0;
  char egn[12] = {0};
  scanf("%s", egn);
  if (strlen(egn) == 10) {
    for (int i = 0; i < 10; i++)
      egn[i] -= '0';
    int month = egn[3] + egn[2] * 10;
    if ((month >= 1 && month <= 12) || (month >= 21 && month <= 33) || (month >= 41 && month <= 53)) {
      result = 1;
    } else {
      result = 0;
    }
    int tmp = 0;
    int tmps[9] = {2, 4, 8, 5, 10, 9, 7, 3, 6};
    for (int i = 0; i < 10; i++) {
      tmp += egn[i] * tmps[i];
    }
    tmp %= 11;
    if (tmp == 10)
      tmp = 0;
    if (tmp == egn[9]) {
    } else {
      result = 0;
    }
  } else {
    printf("0");
    return 0;
  }
  printf("%d", result);
  return 0;
}
```