user: What would the C source look like for the assembly code provided here?

```asm
<form_component_prediction>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %edx,-0x54(%rbp)
  mov    %ecx,-0x58(%rbp)
  mov    %r8d,-0x5c(%rbp)
  mov    %r9d,-0x60(%rbp)
  mov    0x20(%rbp),%eax
  sar    %eax
  mov    %eax,-0x24(%rbp)
  mov    0x28(%rbp),%eax
  sar    %eax
  mov    %eax,-0x20(%rbp)
  mov    0x18(%rbp),%edx
  mov    -0x20(%rbp),%eax
  add    %edx,%eax
  imul   -0x54(%rbp),%eax
  movslq %eax,%rdx
  mov    0x10(%rbp),%eax
  cltq
  add    %rax,%rdx
  mov    -0x24(%rbp),%eax
  cltq
  add    %rax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x54(%rbp),%eax
  imul   0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    0x10(%rbp),%eax
  cltq
  add    %rax,%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  mov    0x20(%rbp),%eax
  and    $0x1,%eax
  mov    %eax,-0x1c(%rbp)
  mov    0x28(%rbp),%eax
  and    $0x1,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x10(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  cmp    %rax,%rdx
  jne    L226
  lea    D26(%rip),%rax
  mov    %rax,%rcx
  mov    $0x1da,%edx
  lea    D22(%rip),%rax
  mov    %rax,%rsi
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  call   <__assert_fail@plt>
L226:
  cmpl   $0x0,-0x1c(%rbp)
  jne    L238
  cmpl   $0x0,-0x18(%rbp)
  jne    L569
  cmpl   $0x0,0x30(%rbp)
  je     L341
  movl   $0x0,-0x38(%rbp)
  jmp    L362
L602:
  movl   $0x0,-0x3c(%rbp)
  jmp    L577
L149:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %edx,%eax
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  js     L101
  movl   $0x1,-0x34(%rbp)
  jmp    L281
L101:
  movl   $0x0,-0x34(%rbp)
L281:
  mov    -0x14(%rbp),%edx
  mov    -0x34(%rbp),%eax
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x3c(%rbp)
L577:
  mov    -0x3c(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L149
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x10(%rbp)
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x8(%rbp)
  addl   $0x1,-0x38(%rbp)
L362:
  mov    -0x38(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L602
  jmp    L7
L341:
  movl   $0x0,-0x38(%rbp)
  jmp    L424
L502:
  movl   $0x0,-0x3c(%rbp)
  jmp    L24
L318:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x3c(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  addl   $0x1,-0x3c(%rbp)
L24:
  mov    -0x3c(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L318
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x10(%rbp)
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x8(%rbp)
  addl   $0x1,-0x38(%rbp)
L424:
  mov    -0x38(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L502
  jmp    L7
L238:
  nop
  jmp    L309
L569:
  nop
L309:
  cmpl   $0x0,-0x1c(%rbp)
  jne    L526
  cmpl   $0x0,-0x18(%rbp)
  je     L380
  cmpl   $0x0,0x30(%rbp)
  je     L170
  movl   $0x0,-0x38(%rbp)
  jmp    L436
L268:
  movl   $0x0,-0x3c(%rbp)
  jmp    L252
L557:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%ecx
  mov    -0x3c(%rbp),%esi
  mov    -0x54(%rbp),%eax
  add    %esi,%eax
  movslq %eax,%rsi
  mov    -0x10(%rbp),%rax
  add    %rsi,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %ecx,%eax
  add    $0x1,%eax
  shr    %eax
  add    %edx,%eax
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  js     L98
  movl   $0x1,-0x30(%rbp)
  jmp    L306
L98:
  movl   $0x0,-0x30(%rbp)
L306:
  mov    -0x14(%rbp),%edx
  mov    -0x30(%rbp),%eax
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x3c(%rbp)
L252:
  mov    -0x3c(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L557
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x10(%rbp)
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x8(%rbp)
  addl   $0x1,-0x38(%rbp)
L436:
  mov    -0x38(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L268
  jmp    L7
L170:
  movl   $0x0,-0x38(%rbp)
  jmp    L154
L222:
  movl   $0x0,-0x3c(%rbp)
  jmp    L346
L426:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x3c(%rbp),%ecx
  mov    -0x54(%rbp),%eax
  add    %ecx,%eax
  movslq %eax,%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x3c(%rbp)
L346:
  mov    -0x3c(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L426
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x10(%rbp)
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x8(%rbp)
  addl   $0x1,-0x38(%rbp)
L154:
  mov    -0x38(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L222
  jmp    L7
L526:
  nop
  jmp    L276
L380:
  nop
L276:
  cmpl   $0x0,-0x1c(%rbp)
  je     L377
  cmpl   $0x0,-0x18(%rbp)
  jne    L110
  cmpl   $0x0,0x30(%rbp)
  je     L223
  movl   $0x0,-0x38(%rbp)
  jmp    L454
L541:
  movl   $0x0,-0x3c(%rbp)
  jmp    L603
L534:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%ecx
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x1(%rax),%rsi
  mov    -0x10(%rbp),%rax
  add    %rsi,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %ecx,%eax
  add    $0x1,%eax
  shr    %eax
  add    %edx,%eax
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  js     L224
  movl   $0x1,-0x2c(%rbp)
  jmp    L433
L224:
  movl   $0x0,-0x2c(%rbp)
L433:
  mov    -0x14(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x3c(%rbp)
L603:
  mov    -0x3c(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L534
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x10(%rbp)
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x8(%rbp)
  addl   $0x1,-0x38(%rbp)
L454:
  mov    -0x38(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L541
  jmp    L7
L223:
  movl   $0x0,-0x38(%rbp)
  jmp    L551
L312:
  movl   $0x0,-0x3c(%rbp)
  jmp    L518
L530:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %edx,%eax
  add    $0x1,%eax
  shr    %eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x3c(%rbp)
L518:
  mov    -0x3c(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L530
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x10(%rbp)
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x8(%rbp)
  addl   $0x1,-0x38(%rbp)
L551:
  mov    -0x38(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L312
  jmp    L7
L377:
  nop
  jmp    L552
L110:
  nop
L552:
  cmpl   $0x0,0x30(%rbp)
  je     L311
  movl   $0x0,-0x38(%rbp)
  jmp    L135
L594:
  movl   $0x0,-0x3c(%rbp)
  jmp    L434
L282:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%ecx
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x1(%rax),%rsi
  mov    -0x10(%rbp),%rax
  add    %rsi,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  lea    (%rcx,%rax,1),%esi
  mov    -0x3c(%rbp),%ecx
  mov    -0x54(%rbp),%eax
  add    %ecx,%eax
  movslq %eax,%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %eax,%esi
  mov    -0x3c(%rbp),%ecx
  mov    -0x54(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %esi,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  add    %edx,%eax
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  js     L509
  movl   $0x1,-0x28(%rbp)
  jmp    L395
L509:
  movl   $0x0,-0x28(%rbp)
L395:
  mov    -0x14(%rbp),%edx
  mov    -0x28(%rbp),%eax
  add    %edx,%eax
  sar    %eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x3c(%rbp)
L434:
  mov    -0x3c(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L282
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x10(%rbp)
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x8(%rbp)
  addl   $0x1,-0x38(%rbp)
L135:
  mov    -0x38(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L594
  jmp    L7
L311:
  movl   $0x0,-0x38(%rbp)
  jmp    L550
L351:
  movl   $0x0,-0x3c(%rbp)
  jmp    L161
L218:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x3c(%rbp),%edx
  mov    -0x54(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %eax,%ecx
  mov    -0x3c(%rbp),%edx
  mov    -0x54(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %ecx,%eax
  add    $0x2,%eax
  shr    $0x2,%eax
  mov    %eax,%ecx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x3c(%rbp)
L161:
  mov    -0x3c(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L218
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x10(%rbp)
  mov    -0x58(%rbp),%eax
  cltq
  add    %rax,-0x8(%rbp)
  addl   $0x1,-0x38(%rbp)
L550:
  mov    -0x38(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L351
  nop
L7:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D26
type_guessed: string
name: parse_data
arguments: tag: D22
type_guessed: string
name: parse_data
arguments: tag: D13
type_guessed: string

tool: D26: form_component_prediction

tool: D22: src/recon.c

tool: D13: s!=d

assistant: ```c
void form_component_prediction(unsigned char *src, unsigned char *dst, int lx, int lx2, int w, int h, int x, int y, int dx, int dy, int average_flag) {
  int xint;
  int yint;
  int xh;
  int yh;
  int i;
  int j;
  int v;
  unsigned char *s;
  unsigned char *d;
  int tmp;
  int tmp___0;
  int tmp___1;
  int tmp___2;
  {
    xint = dx >> 1;
    yint = dy >> 1;
    s = ((src + lx * (y + yint)) + x) + xint;
    d = (dst + lx * y) + x;
    xh = dx & 1;
    yh = dy & 1;
    if (!((unsigned long)s != (unsigned long)d)) {
      __assert_fail("s!=d", "src/recon.c", 474U, "form_component_prediction");
    }
    if (!xh) {
      if (!yh) {
        if (average_flag) {
          j = 0;
          while (j < h) {
            i = 0;
            while (i < w) {
              v = (int)*(d + i) + (int)*(s + i);
              if (v >= 0) {
                tmp = 1;
              } else {
                tmp = 0;
              }
              *(d + i) = (unsigned char)((v + tmp) >> 1);
              i++;
            }
            s += lx2;
            d += lx2;
            j++;
          }
        } else {
          j = 0;
          while (j < h) {
            i = 0;
            while (i < w) {
              *(d + i) = *(s + i);
              i++;
            }
            s += lx2;
            d += lx2;
            j++;
          }
        }
      } else {
        goto _L___1;
      }
    } else
    _L___1:
      if (!xh) {
        if (yh) {
          if (average_flag) {
            j = 0;
            while (j < h) {
              i = 0;
              while (i < w) {
                v = (int)((unsigned int)*(d + i) + ((unsigned int)(((int)*(s + i) + (int)*(s + (i + lx))) + 1) >> 1));
                if (v >= 0) {
                  tmp___0 = 1;
                } else {
                  tmp___0 = 0;
                }
                *(d + i) = (unsigned char)((v + tmp___0) >> 1);
                i++;
              }
              s += lx2;
              d += lx2;
              j++;
            }
          } else {
            j = 0;
            while (j < h) {
              i = 0;
              while (i < w) {
                *(d + i) = (unsigned char)((unsigned int)(((int)*(s + i) + (int)*(s + (i + lx))) + 1) >> 1);
                i++;
              }
              s += lx2;
              d += lx2;
              j++;
            }
          }
        } else {
          goto _L___0;
        }
      } else
      _L___0:
        if (xh) {
          if (!yh) {
            if (average_flag) {
              j = 0;
              while (j < h) {
                i = 0;
                while (i < w) {
                  v = (int)((unsigned int)*(d + i) + ((unsigned int)(((int)*(s + i) + (int)*(s + (i + 1))) + 1) >> 1));
                  if (v >= 0) {
                    tmp___1 = 1;
                  } else {
                    tmp___1 = 0;
                  }
                  *(d + i) = (unsigned char)((v + tmp___1) >> 1);
                  i++;
                }
                s += lx2;
                d += lx2;
                j++;
              }
            } else {
              j = 0;
              while (j < h) {
                i = 0;
                while (i < w) {
                  *(d + i) = (unsigned char)((unsigned int)(((int)*(s + i) + (int)*(s + (i + 1))) + 1) >> 1);
                  i++;
                }
                s += lx2;
                d += lx2;
                j++;
              }
            }
          } else {
            goto _L;
          }
        } else
        _L:
          if (average_flag) {
            j = 0;
            while (j < h) {
              i = 0;
              while (i < w) {
                v = (int)((unsigned int)*(d + i) + ((unsigned int)(((((int)*(s + i) + (int)*(s + (i + 1))) + (int)*(s + (i + lx))) + (int)*(s + ((i + lx) + 1))) + 2) >> 2));
                if (v >= 0) {
                  tmp___2 = 1;
                } else {
                  tmp___2 = 0;
                }
                *(d + i) = (unsigned char)((v + tmp___2) >> 1);
                i++;
              }
              s += lx2;
              d += lx2;
              j++;
            }
          } else {
            j = 0;
            while (j < h) {
              i = 0;
              while (i < w) {
                *(d + i) = (unsigned char)((unsigned int)(((((int)*(s + i) + (int)*(s + (i + 1))) + (int)*(s + (i + lx))) + (int)*(s + ((i + lx) + 1))) + 2) >> 2);
                i++;
              }
              s += lx2;
              d += lx2;
              j++;
            }
          }
    return;
  }
}
```