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

```asm
<_>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  mov    %edx,-0x1c(%rbp)
  movl   $0x0,-0x10(%rbp)
  movl   $0x0,-0xc(%rbp)
  mov    $0x90218,%eax
  mov    (%rax),%eax
  mov    %eax,-0x8(%rbp)
  subl   $0x1,-0x18(%rbp)
  cmpl   $0x0,-0x18(%rbp)
  jne    L98
  mov    $0x901f0,%eax
  mov    (%rax),%ecx
  mov    $0x901f0,%edx
  mov    -0x14(%rbp),%eax
  add    %ecx,%eax
  mov    %eax,(%rdx)
  mov    $0x901f0,%eax
  mov    (%rax),%eax
  sub    -0x14(%rbp),%eax
  mov    %eax,-0x8(%rbp)
L98:
  subl   $0x1,-0x18(%rbp)
  cmpl   $0x0,-0x18(%rbp)
  jne    L94
  movl   $0x7c,-0x10(%rbp)
  jmp    L21
L14:
  mov    -0x8(%rbp),%eax
  lea    0x0(,%rax,8),%ecx
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  cltq
  mov    (%rax),%eax
  and    $0x7,%eax
  or     %ecx,%eax
  mov    %eax,-0x8(%rbp)
  addl   $0x1,-0x10(%rbp)
L21:
  cmpl   $0x86,-0x10(%rbp)
  jle    L14
L94:
  cmpl   $0x0,-0x18(%rbp)
  jle    L106
  jmp    L44
L122:
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  cltq
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    %eax,-0x4(%rbp)
  je     L42
  mov    -0x8(%rbp),%eax
  mov    $0x0,%edx
  mov    $0x2,%esi
  mov    %eax,%edi
  call   <_>
  add    $0x3ff,%eax
  and    $0xfffffe00,%eax
  add    %eax,-0x8(%rbp)
  movl   $0xffffffff,-0x10(%rbp)
L42:
  addl   $0x1,-0x10(%rbp)
L44:
  mov    -0x8(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  cltq
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x4(%rbp)
  jne    L122
  subl   $0x1,-0x18(%rbp)
  cmpl   $0x0,-0x18(%rbp)
  jne    L106
  mov    -0x8(%rbp),%eax
  cltq
  mov    (%rax),%eax
  test   %eax,%eax
  je     L106
  mov    $0x0,%edx
  mov    $0x1,%esi
  mov    $0xa4,%edi
  call   <_>
  mov    %eax,-0x4(%rbp)
  mov    $0x901f4,%ecx
  mov    -0x4(%rbp),%eax
  add    $0x8,%eax
  cltq
  mov    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  mov    $0x901f4,%edx
  mov    -0x4(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x4(%rbp),%eax
  add    $0x40,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x4(%rbp),%eax
  add    $0x4,%eax
  cltq
  mov    %rax,%rdx
  mov    -0x10(%rbp),%eax
  mov    %eax,(%rdx)
  jmp    L52
L61:
  mov    -0x14(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  cltq
  mov    %rax,%rcx
  mov    -0x10(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  cltq
  mov    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0xc(%rbp)
L52:
  cmpl   $0x5f,-0xc(%rbp)
  jle    L61
  mov    -0x8(%rbp),%eax
  add    $0x200,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%eax
  add    $0x20,%eax
  cltq
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xc(%rbp)
  jmp    L125
L137:
  nop
  addl   $0x28,-0xc(%rbp)
L125:
  mov    -0xc(%rbp),%eax
  add    $0xc,%eax
  cltq
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  add    $0x18,%eax
  cltq
  mov    (%rax),%eax
  cmp    %eax,%edx
  jne    L137
  mov    -0xc(%rbp),%eax
  add    $0x10,%eax
  cltq
  mov    (%rax),%ecx
  mov    -0x4(%rbp),%eax
  cltq
  mov    -0x10(%rbp),%edx
  add    %ecx,%edx
  mov    %edx,(%rax)
  mov    (%rax),%eax
  cltq
  mov    %rax,%rcx
  mov    -0x4(%rbp),%eax
  mov    $0x0,%edx
  mov    $0x1,%esi
  mov    %eax,%edi
  call   *%rcx
L106:
  mov    -0x8(%rbp),%eax
  leave
  ret
```

assistant: ```c
int _(int t, int q, int d) {
  int i = 0, j = 0, n, D = *((int *)(0x90200 + 24));
  if (!--q) {
    *((int *)(0x90200 - 16)) += t;
    D = *((int *)(0x90200 - 16)) - t;
  }
  if (!--q) {
    for (i = 124; i < 135; i++)
      D = D << 3 | *((int *)(t + i)) & 7;
  }
  if (q > 0) {
    for (; n = *((signed char *)(D + i)); i++)
      if (n - *((signed char *)(t + i))) {
        D += _(D, 2, 0) + 1023 & ~511;
        i = ~0;
      }
    if (!--q) {
      if (*((int *)(D))) {
        n = _(164, 1, 0);
        *((int *)(n + 8)) = *((int *)(0x90200 - 12));
        *((int *)(0x90200 - 12)) = n;
        *((int *)(n + 4)) = i = n + 64;
        for (; j < 96; j++)
          *((int *)(i + j)) = *((int *)(t + j));
        i = D + 512;
        j = i + *((int *)(i + 32));
        for (; *((int *)(j + 12)) != *((int *)(i + 24)); j += 40)
          continue;
        ((int (*)(int t, int q, int d))(*((int *)(n)) = *((int *)(j + 16)) + i))(n, 1, 0);
      }
    }
  }
  return D;
}
```