user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x54(%rbp)
  movq   $0x0,-0x14(%rbp)
  movl   $0x0,-0xc(%rbp)
  lea    -0x14(%rbp),%rax
  mov    %rax,%rsi
  lea    D17(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    -0x14(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0xa,%eax
  jne    L80
  movl   $0x0,-0x50(%rbp)
  jmp    L59
L104:
  mov    -0x50(%rbp),%eax
  cltq
  movzbl -0x14(%rbp,%rax,1),%eax
  sub    $0x30,%eax
  mov    %eax,%edx
  mov    -0x50(%rbp),%eax
  cltq
  mov    %dl,-0x14(%rbp,%rax,1)
  addl   $0x1,-0x50(%rbp)
L59:
  cmpl   $0x9,-0x50(%rbp)
  jle    L104
  movzbl -0x11(%rbp),%eax
  movsbl %al,%ecx
  movzbl -0x12(%rbp),%eax
  movsbl %al,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  mov    %eax,-0x44(%rbp)
  cmpl   $0x0,-0x44(%rbp)
  jle    L85
  cmpl   $0xc,-0x44(%rbp)
  jle    L148
L85:
  cmpl   $0x14,-0x44(%rbp)
  jle    L20
  cmpl   $0x21,-0x44(%rbp)
  jle    L148
L20:
  cmpl   $0x28,-0x44(%rbp)
  jle    L14
  cmpl   $0x35,-0x44(%rbp)
  jg     L14
L148:
  movl   $0x1,-0x54(%rbp)
  jmp    L68
L14:
  movl   $0x0,-0x54(%rbp)
L68:
  movl   $0x0,-0x4c(%rbp)
  movl   $0x2,-0x40(%rbp)
  movl   $0x4,-0x3c(%rbp)
  movl   $0x8,-0x38(%rbp)
  movl   $0x5,-0x34(%rbp)
  movl   $0xa,-0x30(%rbp)
  movl   $0x9,-0x2c(%rbp)
  movl   $0x7,-0x28(%rbp)
  movl   $0x3,-0x24(%rbp)
  movl   $0x6,-0x20(%rbp)
  movl   $0x0,-0x48(%rbp)
  jmp    L60
L38:
  mov    -0x48(%rbp),%eax
  cltq
  movzbl -0x14(%rbp,%rax,1),%eax
  movsbl %al,%edx
  mov    -0x48(%rbp),%eax
  cltq
  mov    -0x40(%rbp,%rax,4),%eax
  imul   %edx,%eax
  add    %eax,-0x4c(%rbp)
  addl   $0x1,-0x48(%rbp)
L60:
  cmpl   $0x9,-0x48(%rbp)
  jle    L38
  mov    -0x4c(%rbp),%edx
  movslq %edx,%rax
  imul   $0x2e8ba2e9,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  sub    %eax,%edx
  mov    %edx,-0x4c(%rbp)
  cmpl   $0xa,-0x4c(%rbp)
  jne    L131
  movl   $0x0,-0x4c(%rbp)
L131:
  movzbl -0xb(%rbp),%eax
  movsbl %al,%eax
  cmp    %eax,-0x4c(%rbp)
  je     L62
  movl   $0x0,-0x54(%rbp)
  jmp    L62
L80:
  mov    $0x30,%edi
  call   <putchar@plt>
  mov    $0x0,%eax
  jmp    L151
L62:
  mov    -0x54(%rbp),%eax
  mov    %eax,%esi
  lea    D15(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
L151:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L102
  call   <__stack_chk_fail@plt>
L102:
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D17
type: string
name: read_data
arguments: label: D15
type: string

tool: D17: %s

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;
}
```