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

```asm
<main>:
  endbr64
  push   %rbx
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  lea    0x1c(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D105(%rip),%rdi
  call   <scanf@plt>
  mov    %rbx,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    %rbx,%rax
  lea    0x26(%rsp),%rcx
  cmp    $0xa,%dx
  jne    L207
L231:
  movzbl (%rax),%esi
  lea    -0x30(%rsi),%edx
  cmp    $0x9,%dl
  ja     L212
  add    $0x1,%rax
  cmp    %rcx,%rax
  jne    L231
  movzbl 0x1e(%rsp),%ecx
  cmp    $0x35,%cl
  jg     L311
  ja     L194
  movabs $0x2a000000000000,%rax
  shr    %cl,%rax
  test   $0x1,%al
  je     L194
  cmpb   $0x32,0x1f(%rsp)
  jg     L298
L194:
  movzbl 0x20(%rsp),%edx
  cmp    $0x33,%dl
  jg     L176
  cmp    $0x34,%cl
  ja     L86
  movabs $0x15000000000000,%rax
  shr    %cl,%rax
  test   $0x1,%al
  je     L86
  cmpb   $0x32,0x1f(%rsp)
  je     L111
L86:
  cmpb   $0x33,0x20(%rsp)
  je     L97
L301:
  mov    $0x0,%eax
  lea    0x1c(%rsp),%rcx
L128:
  movsbw (%rax,%rcx,1),%dx
  sub    $0x30,%edx
  mov    %dx,(%rsp,%rax,2)
  add    $0x1,%rax
  cmp    $0xa,%rax
  jne    L128
  movzwl 0x12(%rsp),%ecx
  movzwl 0x2(%rsp),%edx
  movzwl (%rsp),%eax
  lea    (%rax,%rdx,2),%eax
  movzwl 0x4(%rsp),%edx
  lea    (%rax,%rdx,4),%edx
  movzwl 0x6(%rsp),%eax
  imul   $0x5,%eax,%eax
  lea    (%rax,%rdx,2),%eax
  movzwl 0x8(%rsp),%edx
  imul   $0xa,%edx,%edx
  add    %edx,%eax
  movzwl 0xa(%rsp),%edx
  imul   $0x9,%edx,%edx
  add    %edx,%eax
  movzwl 0xc(%rsp),%edx
  imul   $0x7,%edx,%edx
  add    %edx,%eax
  movzwl 0xe(%rsp),%edx
  imul   $0x3,%edx,%edx
  add    %edx,%eax
  movzwl 0x10(%rsp),%edx
  imul   $0x6,%edx,%edx
  add    %edx,%eax
  mov    $0xb,%esi
  cltd
  idiv   %esi
  mov    $0xa,%esi
  mov    %edx,%eax
  cltd
  idiv   %esi
  cmp    %edx,%ecx
  je     L38
  lea    D74(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L106
L207:
  lea    D74(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
L106:
  mov    0x28(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L345
  add    $0x30,%rsp
  pop    %rbx
  ret
L212:
  lea    D74(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L106
L311:
  lea    D74(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L106
L298:
  lea    D74(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L106
L176:
  lea    D74(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L106
L111:
  cmp    $0x33,%dl
  je     L133
  cmp    $0x32,%dl
  jne    L301
  cmpb   $0x39,0x21(%rsp)
  jne    L301
  sub    $0x34,%ecx
  cmp    $0x1,%cl
  jbe    L301
  lea    0x1c(%rsp),%rdi
  call   <dividable_4@plt>
  test   %rax,%rax
  je     L387
  cmpb   $0x30,0x1c(%rsp)
  jne    L86
  cmpb   $0x30,0x1d(%rsp)
  jne    L86
L387:
  lea    D74(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L106
L133:
  lea    D74(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L106
L97:
  movzbl 0x1f(%rsp),%eax
  mov    %eax,%edx
  and    $0xfffffffd,%edx
  cmp    $0x34,%dl
  je     L322
  cmp    $0x39,%al
  jne    L112
L322:
  cmpb   $0x30,0x21(%rsp)
  jle    L301
  lea    D74(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L106
L112:
  cmp    $0x31,%al
  je     L341
L389:
  cmpb   $0x31,0x21(%rsp)
  jle    L301
  lea    D74(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L106
L341:
  movsbl 0x1e(%rsp),%eax
  sub    $0x30,%eax
  mov    $0x2,%ecx
  cltd
  idiv   %ecx
  cmp    $0x1,%edx
  jne    L389
  jmp    L322
L38:
  lea    D93(%rip),%rdi
  call   <printf@plt>
  mov    $0x1,%eax
  jmp    L106
L345:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D105
type_guessed: string
name: unpack_data
arguments: data_tag: D74
type_guessed: string
name: unpack_data
arguments: data_tag: D93
type_guessed: string

tool: D105: %s

tool: D74: 0

tool: D93: 1

assistant: ```c
int main() {
  char input[12];
  short unsigned int i, l, n[10];
  scanf("%s", input);
  l = strlen(input);
  if (l != 10) {
    printf("0");
    return 0;
  }
  for (i = 0; i < 10; i++)
    if (input[i] < '0' || input[i] > '9') {
      printf("0");
      return 0;
    }
  if (input[2] > '5') {
    printf("0");
    return 0;
  }
  if ((input[2] == '5' || input[2] == '3' || input[2] == '1') && input[3] > '2') {
    printf("0");
    return 0;
  }
  if (input[4] > '3') {
    printf("0");
    return 0;
  }
  if ((input[2] == '0' || input[2] == '2' || input[2] == '4') && input[3] == '2') {
    if (input[4] > '2') {
      printf("0");
      return 0;
    }
    if (input[4] == '2' && input[5] == '9' && !((input[2] == '4' || input[2] == '5') || (dividable_4(input) && !(input[0] == '0' && input[1] == '0')))) {
      printf("0");
      return 0;
    }
  }
  if (input[4] == '3') {
    if (input[3] == '4' || input[3] == '6' || input[3] == '9' || (input[3] == '1' && ((int)input[2] - 48) % 2 == 1)) {
      if (input[5] > '0') {
        printf("0");
        return 0;
      }
    } else if (input[5] > '1') {
      printf("0");
      return 0;
    }
  }
  for (i = 0; i < 10; i++)
    n[i] = (short unsigned int)input[i] - 48;
  if (n[9] != ((n[0] * 2 + n[1] * 4 + n[2] * 8 + n[3] * 5 + n[4] * 10 + n[5] * 9 + n[6] * 7 + n[7] * 3 + n[8] * 6) % 11) % 10) {
    printf("0");
    return 0;
  }
  printf("1");
  return 1;
}
```