user: What is the c source code of the assembly code below?

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  movq   $0x0,-0x18(%rbp)
  movq   $0x0,-0x20(%rbp)
  movl   $0x0,-0x34(%rbp)
  movq   $0x0,-0x30(%rbp)
  jmp    L137
L165:
  movq   $0x1,-0x28(%rbp)
  jmp    L88
L223:
  mov    -0x28(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <Chk@plt>
  mov    %al,-0x35(%rbp)
  cmpb   $0x1,-0x35(%rbp)
  je     L34
  addl   $0x1,-0x34(%rbp)
  cmpq   $0x0,-0x30(%rbp)
  je     L150
  mov    -0x30(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <Chk@plt>
  mov    %al,-0x35(%rbp)
  cmpb   $0x1,-0x35(%rbp)
  je     L163
  addl   $0x1,-0x34(%rbp)
L150:
  mov    -0x18(%rbp),%rax
  imul   $0x58e96,%rax,%rax
  mov    $0xb78dcab0,%edx
  lea    (%rax,%rdx,1),%rcx
  movabs $0xf3b724a1b01c22ef,%rdx
  mov    %rcx,%rax
  mul    %rdx
  mov    %rdx,%rax
  shr    $0x13,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  imul   $0x8673b,%rax,%rdx
  mov    %rcx,%rax
  sub    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  add    %rax,-0x28(%rbp)
L88:
  mov    -0x28(%rbp),%rax
  shr    $0x18,%rax
  cmp    $0xfe,%eax
  jle    L223
  mov    -0x30(%rbp),%rax
  sub    -0x20(%rbp),%rax
  cmp    $0x3d08f,%rax
  jbe    L37
  mov    -0x30(%rbp),%rax
  movabs $0x431bde82d7b634db,%rdx
  mul    %rdx
  mov    %rdx,%rax
  shr    $0x10,%rax
  imul   $0x3d090,%rax,%rax
  mov    %rax,-0x20(%rbp)
  mov    $0x2e,%edi
  call   <putchar@plt>
  mov    -0x20(%rbp),%rcx
  movabs $0xd6bf94d5e57a42bd,%rdx
  mov    %rcx,%rax
  mul    %rdx
  mov    %rdx,%rax
  shr    $0x17,%rax
  imul   $0x989680,%rax,%rdx
  mov    %rcx,%rax
  sub    %rdx,%rax
  test   %rax,%rax
  jne    L37
  mov    -0x30(%rbp),%rcx
  movabs $0x346dc5d63886594b,%rdx
  mov    %rcx,%rax
  mul    %rdx
  mov    %rdx,%rax
  shr    $0xb,%rax
  imul   $0x2710,%rax,%rdx
  mov    %rcx,%rax
  sub    %rdx,%rax
  mov    %eax,%esi
  mov    -0x30(%rbp),%rax
  movabs $0x346dc5d63886594b,%rdx
  mul    %rdx
  mov    %rdx,%rcx
  shr    $0xb,%rcx
  movabs $0x346dc5d63886594b,%rdx
  mov    %rcx,%rax
  mul    %rdx
  mov    %rdx,%rax
  shr    $0xb,%rax
  imul   $0x2710,%rax,%rdx
  mov    %rcx,%rax
  sub    %rdx,%rax
  mov    %eax,%ecx
  mov    -0x30(%rbp),%rax
  movabs $0xabcc77118461cefd,%rdx
  mul    %rdx
  mov    %rdx,%rax
  shr    $0x1a,%rax
  mov    %eax,%edx
  mov    -0x34(%rbp),%eax
  mov    %esi,%r8d
  mov    %eax,%esi
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x34(%rbp)
L37:
  mov    -0x18(%rbp),%rcx
  movabs $0xdfb23b0979b4b02f,%rdx
  mov    %rcx,%rax
  mul    %rdx
  mov    %rdx,%rax
  shr    $0x11,%rax
  imul   $0x249f0,%rax,%rdx
  mov    %rcx,%rax
  sub    %rdx,%rax
  add    %rax,-0x30(%rbp)
L137:
  mov    -0x30(%rbp),%rax
  shr    $0x18,%rax
  cmp    $0xfe,%eax
  jle    L165
  movq   $0xf0,-0x10(%rbp)
  movq   $0x0,-0x30(%rbp)
  jmp    L6
L91:
  mov    -0x30(%rbp),%rax
  add    $0x1f4,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L5
L190:
  movq   $0x1,-0x28(%rbp)
  jmp    L162
L210:
  mov    -0x28(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <Chk@plt>
  mov    %al,-0x35(%rbp)
  cmpb   $0x1,-0x35(%rbp)
  je     L81
  cmpq   $0x0,-0x30(%rbp)
  je     L23
  mov    -0x30(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <Chk@plt>
  mov    %al,-0x35(%rbp)
  cmpb   $0x1,-0x35(%rbp)
  je     L175
L23:
  mov    -0x18(%rbp),%rax
  imul   $0x58e96,%rax,%rax
  mov    $0xb78dcab0,%edx
  lea    (%rax,%rdx,1),%rcx
  movabs $0xf3b724a1b01c22ef,%rdx
  mov    %rcx,%rax
  mul    %rdx
  mov    %rdx,%rax
  shr    $0x13,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  imul   $0x8673b,%rax,%rdx
  mov    %rcx,%rax
  sub    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  add    %rax,-0x28(%rbp)
L162:
  mov    -0x28(%rbp),%rax
  shr    $0x18,%rax
  cmp    $0xfe,%eax
  jle    L210
  mov    -0x30(%rbp),%rcx
  movabs $0xcccccccccccccccd,%rdx
  mov    %rcx,%rax
  mul    %rdx
  shr    $0x3,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  sub    %rax,%rcx
  mov    %rcx,%rdx
  test   %rdx,%rdx
  jne    L104
  mov    $0x2e,%edi
  call   <putchar@plt>
L104:
  addq   $0x1,-0x30(%rbp)
L5:
  mov    -0x30(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  jb     L190
  mov    -0x30(%rbp),%rcx
  movabs $0x346dc5d63886594b,%rdx
  mov    %rcx,%rax
  mul    %rdx
  mov    %rdx,%rax
  shr    $0xb,%rax
  imul   $0x2710,%rax,%rdx
  mov    %rcx,%rax
  sub    %rdx,%rax
  mov    %eax,%edi
  mov    -0x30(%rbp),%rax
  movabs $0x346dc5d63886594b,%rdx
  mul    %rdx
  mov    %rdx,%rcx
  shr    $0xb,%rcx
  movabs $0x346dc5d63886594b,%rdx
  mov    %rcx,%rax
  mul    %rdx
  mov    %rdx,%rax
  shr    $0xb,%rax
  imul   $0x2710,%rax,%rdx
  mov    %rcx,%rax
  sub    %rdx,%rax
  mov    %eax,%esi
  mov    -0x30(%rbp),%rax
  movabs $0xabcc77118461cefd,%rdx
  mul    %rdx
  mov    %rdx,%rax
  shr    $0x1a,%rax
  mov    %edi,%ecx
  mov    %esi,%edx
  mov    %eax,%esi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmpq   $0x1fffffff,-0x10(%rbp)
  ja     L9
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  add    %rax,%rax
  mov    %rax,-0x10(%rbp)
  jmp    L203
L9:
  addq   $0x20000000,-0x10(%rbp)
L203:
  mov    -0x10(%rbp),%rax
  mov    %rax,-0x30(%rbp)
L6:
  mov    $0xdfffffff,%eax
  cmp    %rax,-0x30(%rbp)
  jbe    L91
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L30
L34:
  nop
  jmp    L30
L163:
  nop
  jmp    L30
L81:
  nop
  jmp    L30
L175:
  nop
L30:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D26
type_guessed: string
name: parse_data
arguments: data_tag: D29
type_guessed: string
name: parse_data
arguments: data_tag: D28
type_guessed: string

tool: D26: # %d %2d%04d%04d


tool: D29: #%2d%04d%04d


tool: D28: OK!

assistant: ```c
void main() {
  unsigned char X;
  unsigned long A, B, LA, Rndm, Sh, Sk;
  int Cnt;
  char Chk(unsigned long, unsigned long);
  Rndm = 0;
  LA = 0;
  Cnt = 0;
  for (A = 0; (int)(A / 16777216) < 255; A += Rndm % 150000) {
    for (B = 1; (int)(B / 16777216) < 255; B += Rndm) {
      X = Chk(A, B);
      if (X == (char)1)
        return;
      Cnt++;
      if (A != 0) {
        X = Chk(B, A);
        if (X == (char)1)
          return;
        Cnt++;
      }
      Rndm = ((Rndm + 8456) * 364182) % 550715;
    }
    if ((A - LA) >= 250000) {
      LA = (A / 250000) * 250000;
      printf(".");
      if (LA % 10000000 == 0) {
        printf("# %d %2d%04d%04d\n", Cnt, (int)(A / 100000000), (int)(A / 10000 % 10000), (int)(A % 10000));
        Cnt = 0;
      }
    }
  }
  Sh = 0xf0;
  for (A = 0; A < 0xe0000000; A = Sh) {
    for (Sk = A + 500; A < Sk; A++) {
      for (B = 1; (int)(B / 16777216) < 255; B += Rndm) {
        X = Chk(A, B);
        if (X == (char)1)
          return;
        if (A != 0) {
          X = Chk(B, A);
          if (X == (char)1)
            return;
        }
        Rndm = ((Rndm + 8456) * 364182) % 550715;
      }
      if (A % 10 == 0)
        printf(".");
    }
    printf("#%2d%04d%04d\n", (int)(A / 100000000), (int)(A / 10000 % 10000), (int)(A % 10000));
    if (Sh < 0x20000000)
      Sh = Sh * 2 + 16;
    else
      Sh += 0x20000000;
  }
  printf("OK!\n");
}
```