user: 请从给定的汇编指令推导出C源代码：

```asm
<fin42f>:
  endbr64
  push   %r15
  mov    %ecx,%r15d
  push   %r14
  mov    %r8d,%r14d
  push   %r13
  mov    %esi,%r13d
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x158,%rsp
  movdqu (%rdi),%xmm0
  movdqu 0x10(%rdi),%xmm1
  movdqu 0x20(%rdi),%xmm2
  movdqu 0x30(%rdi),%xmm3
  mov    %edx,0x38(%rsp)
  movdqu 0x40(%rdi),%xmm4
  movdqu 0x50(%rdi),%xmm5
  mov    %r9d,0x44(%rsp)
  mov    0x190(%rsp),%rbx
  movdqu 0x60(%rdi),%xmm6
  movdqu 0x70(%rdi),%xmm7
  mov    %rbx,0x98(%rsp)
  mov    %fs:0x28,%rdx
  mov    %rdx,0x148(%rsp)
  xor    %edx,%edx
  movaps %xmm0,0xa0(%rsp)
  movdqu 0x80(%rdi),%xmm0
  movaps %xmm1,0xb0(%rsp)
  movdqu 0x90(%rdi),%xmm1
  movaps %xmm2,0xc0(%rsp)
  movaps %xmm3,0xd0(%rsp)
  movaps %xmm4,0xe0(%rsp)
  movaps %xmm5,0xf0(%rsp)
  movaps %xmm6,0x100(%rsp)
  movaps %xmm7,0x110(%rsp)
  movaps %xmm0,0x120(%rsp)
  movaps %xmm1,0x130(%rsp)
  mov    0xa0(%rdi),%rax
  mov    %rax,0x140(%rsp)
  cmp    $0xffffffff,%r8d
  je     L2066
  movslq %ecx,%rdx
  movslq %r8d,%rax
  lea    (%rax,%rdx,8),%rax
  sub    %rdx,%rax
  mov    %esi,0xa0(%rsp,%rax,4)
L2066:
  lea    0x84(%rsp),%rax
  movl   $0xfffffffe,0x60(%rsp)
  mov    %r14d,%ebx
  mov    %rax,0x70(%rsp)
  mov    %r13d,%eax
  neg    %eax
  movq   $0x1,0x50(%rsp)
  movl   $0xffffffff,0x40(%rsp)
  movq   $0x0,0x68(%rsp)
  movl   $0x0,0xc(%rsp)
  mov    %eax,0x7c(%rsp)
  nopl   (%rax)
L202:
  mov    0x70(%rsp),%r10
  mov    0x68(%rsp),%rcx
  xor    %r12d,%r12d
  mov    $0xffffffff,%ebp
  mov    0x50(%rsp),%rsi
  movl   $0x1,(%rsp)
  mov    %ebp,%r14d
  lea    0x20(%r10),%rax
  mov    %rax,0x18(%rsp)
  lea    0x18(%r10),%rax
  mov    %rax,0x20(%rsp)
  lea    0x14(%r10),%rax
  mov    %rax,0x30(%rsp)
  lea    0x24(%r10),%rax
  mov    %rax,0x28(%rsp)
  mov    0x40(%rsp),%eax
  not    %eax
  shr    $0x1f,%eax
  mov    %eax,0x48(%rsp)
  lea    0x3(%rcx),%rax
  sub    %rsi,%rax
  mov    %rax,0x88(%rsp)
  lea    -0x3(%rcx),%rax
  sub    %rsi,%rax
  mov    %rax,0x90(%rsp)
  jmp    L2474
  nopl   (%rax)
L158:
  cmp    $0x3,%eax
  jne    L1269
  test   %edx,%edx
  je     L967
L1188:
  mov    0x38(%rsp),%esi
  test   %esi,%esi
  jne    L470
  nopl   (%rax)
L992:
  mov    0x7c(%rsp),%eax
  movl   $0x2,0x38(%rsp)
  mov    %eax,0x1c(%r10)
  mov    0xc(%rsp),%eax
  mov    %eax,0x84(%rsp)
  mov    0x10(%rsp),%eax
  mov    %eax,0x80(%rsp)
L2480:
  mov    0x44(%rsp),%ecx
  test   %ecx,%ecx
  je     L2224
L2116:
  cmpl   $0x6,(%rsp)
  je     L2224
L1215:
  lea    0x1c(%r10),%r8
L2513:
  addl   $0x1,(%rsp)
  add    $0x1,%r12
  mov    %r8,%r10
  add    $0x1,%r14d
  addq   $0x1c,0x18(%rsp)
  addq   $0x1c,0x20(%rsp)
  addq   $0x1c,0x30(%rsp)
  addq   $0x1c,0x28(%rsp)
L2474:
  mov    0x1c(%r10),%r9d
  mov    %r12d,0x10(%rsp)
  mov    %r12d,%eax
  test   %r9d,%r9d
  jne    L2116
  mov    %r12d,%edx
  cmp    $0x2,%r12d
  jle    L1719
  cmp    0xc(%rsp),%ebx
  jne    L1719
  mov    %r14d,0x4c(%rsp)
  cmp    %r13d,(%r10)
  je     L187
L1719:
  cmp    %edx,%r15d
  je     L1424
L1361:
  mov    %r14d,0x4c(%rsp)
L2274:
  mov    %r14d,%eax
  mov    0x40(%rsp),%edi
  not    %eax
  shr    $0x1f,%eax
  cmpb   $0x0,0x48(%rsp)
  mov    %edi,%ecx
  mov    %eax,0x78(%rsp)
  je     L2385
  test   %al,%al
  je     L2385
  mov    %r10,%r8
  xor    %edx,%edx
  mov    %r14d,%esi
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L1518:
  cmp    %r13d,-0x4(%r8)
  jne    L158
  cmp    %esi,%r15d
  sete   %r11b
  cmp    %edi,%ebx
  sete   %bpl
  and    %bpl,%r11b
  jne    L733
  mov    %edx,%r11d
  and    $0x1,%r11d
L997:
  add    $0x1,%eax
  cmp    $0x3,%eax
  jne    L372
  test   %r11b,%r11b
  jne    L1188
L372:
  sub    $0x1,%edi
  sub    $0x20,%r8
  sub    $0x1,%esi
  js     L967
  test   %edi,%edi
  jns    L1518
  nopl   0x0(%rax,%rax,1)
L967:
  cmp    $0x3,%eax
  jne    L1269
L1067:
  cmpl   $0x2,0x38(%rsp)
  je     L2480
  mov    (%rsp),%esi
  mov    %esi,%eax
  cmp    $0x5,%esi
  jg     L606
  cmpb   $0x0,0x48(%rsp)
  je     L606
  lea    0x1c(%r10),%r8
  xor    %esi,%esi
  mov    %r8,%rdx
  cs nopw 0x0(%rax,%rax,1)
L2096:
  cmp    %r13d,0x18(%rdx)
  je     L190
  cmp    $0x3,%esi
  jne    L2151
  test   $0x1,%r9b
  je     L747
L1327:
  mov    0x38(%rsp),%edi
  test   %edi,%edi
  jne    L470
  mov    0x7c(%rsp),%eax
  movl   $0x2,0x38(%rsp)
  mov    %eax,0x1c(%r10)
  mov    0xc(%rsp),%eax
  mov    %eax,0x84(%rsp)
  mov    0x10(%rsp),%eax
  mov    %eax,0x80(%rsp)
L1043:
  mov    0x44(%rsp),%eax
  test   %eax,%eax
  jne    L2513
  nopl   0x0(%rax,%rax,1)
L2224:
  mov    0xc(%rsp),%eax
  add    $0x1,%eax
  mov    %eax,0x58(%rsp)
L820:
  mov    0x58(%rsp),%eax
  addq   $0x1,0x68(%rsp)
  addl   $0x1,0x40(%rsp)
  addq   $0x4,0x70(%rsp)
  addl   $0x1,0x60(%rsp)
  addq   $0x1,0x50(%rsp)
  mov    %eax,0xc(%rsp)
  cmp    $0x7,%eax
  jne    L202
  cmpl   $0x2,0x38(%rsp)
  jne    L1689
  lea    0xa0(%rsp),%rax
  xor    %r14d,%r14d
  movl   $0xfffffffe,0x40(%rsp)
  mov    0x80(%rsp),%r10d
  mov    %rax,0x58(%rsp)
  mov    0x84(%rsp),%r11d
  mov    %rax,0x60(%rsp)
  mov    %rax,0x38(%rsp)
  movq   $0x3,0x28(%rsp)
  movl   $0x2,0x4c(%rsp)
  movl   $0xffffffff,0x30(%rsp)
  movl   $0x1,0x48(%rsp)
  mov    %r14,(%rsp)
  nopw   0x0(%rax,%rax,1)
L862:
  mov    0x30(%rsp),%ebx
  mov    0x38(%rsp),%rbp
  xor    %r12d,%r12d
  mov    %ebx,%eax
  mov    %rbp,%r9
  add    $0x4,%rbp
  mov    %ebx,0x18(%rsp)
  not    %eax
  lea    -0x8(%r9),%rcx
  mov    %rbp,0x38(%rsp)
  add    $0x1,%ebx
  shr    $0x1f,%eax
  mov    %rcx,0x10(%rsp)
  mov    (%rsp),%rcx
  lea    0x8(%r9),%r14
  mov    %eax,0x20(%rsp)
  mov    0x28(%rsp),%rax
  mov    %ebx,0x30(%rsp)
  sub    %rcx,%rax
  mov    %ebx,0xc(%rsp)
  lea    -0x4(%r9),%rbx
  mov    %rax,0x50(%rsp)
  mov    %ecx,%eax
  sub    $0x3,%eax
  mov    %eax,0x78(%rsp)
  nopl   (%rax)
L1696:
  mov    (%r9),%edi
  test   %edi,%edi
  jne    L420
  cmp    $0x2,%r12d
  jle    L1772
  cmp    (%rsp),%r11d
  jne    L1772
  cmp    %r13d,-0x1c(%r9)
  je     L2531
L1772:
  cmp    %r12d,%r10d
  je     L1823
L169:
  cmpb   $0x0,0x20(%rsp)
  mov    0x18(%rsp),%edx
  lea    -0x1(%r12),%eax
  je     L2397
L900:
  test   %eax,%eax
  js     L2397
  mov    %r9,%rcx
  xor    %esi,%esi
  nopl   0x0(%rax,%rax,1)
L444:
  cmp    %r13d,-0x20(%rcx)
  je     L2546
  cmp    $0x3,%esi
  jne    L573
  test   $0x1,%dil
  je     L388
L1079:
  mov    0x98(%rsp),%rax
  mov    %r12d,(%rax)
L1140:
  mov    0x148(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L991
  mov    0xc(%rsp),%eax
  add    $0x158,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L733:
  mov    $0x1,%edx
  jmp    L997
  nopw   0x0(%rax,%rax,1)
L1424:
  cmpl   $0x2,0xc(%rsp)
  jle    L1308
  mov    0x20(%rsp),%rax
  cmp    %r13d,(%rax)
  je     L1938
  cmpl   $0x3,0x60(%rsp)
  jbe    L479
L2058:
  cmpl   $0x3,0x40(%rsp)
  jbe    L24
L479:
  cmpl   $0x3,0xc(%rsp)
  jg     L1361
  mov    0x18(%rsp),%rcx
  mov    0x50(%rsp),%eax
  cmp    %r13d,(%rcx)
  jne    L1361
  mov    0x28(%rsp),%rcx
  cmp    %r13d,(%rcx)
  jne    L1361
L745:
  mov    0x18(%rsp),%rcx
  mov    0x88(%rsp),%rsi
  cmp    %r13d,(%rcx,%rsi,4)
  jne    L1361
  mov    0xc(%rsp),%esi
  lea    0x2(%rsi),%edx
  cmp    %ebx,%edx
  lea    0x3(%rsi),%edx
  sete   %cl
  cmp    %ebx,%edx
  sete   %dl
  or     %cl,%dl
  jne    L1453
  cmp    %ebx,%eax
  jne    L1361
L1453:
  mov    0x38(%rsp),%r11d
  test   %r11d,%r11d
  jne    L470
  mov    0x7c(%rsp),%eax
  mov    %r14d,0x4c(%rsp)
  mov    %r12d,0x80(%rsp)
  mov    %eax,0x1c(%r10)
  mov    0xc(%rsp),%eax
  movl   $0x2,0x38(%rsp)
  mov    %eax,0x84(%rsp)
  jmp    L2274
L2385:
  xor    %eax,%eax
  xor    %edx,%edx
  nopl   0x0(%rax)
L1269:
  mov    0xc(%rsp),%edi
  mov    (%rsp),%r8d
  add    $0x1,%edi
  mov    %r8d,%esi
  mov    %edi,0x58(%rsp)
  cmp    $0x6,%edi
  jg     L1067
  cmp    $0x5,%r8d
  jg     L1067
  lea    0x3c(%r10),%r8
  nopl   0x0(%rax)
L614:
  cmp    %r13d,(%r8)
  je     L2360
  cmp    $0x3,%eax
  jne    L1067
  test   %edx,%edx
  je     L1067
L230:
  mov    0x38(%rsp),%r9d
  test   %r9d,%r9d
  jne    L470
  mov    0x7c(%rsp),%eax
  mov    0x44(%rsp),%r8d
  movl   $0x2,0x38(%rsp)
  mov    %eax,0x1c(%r10)
  mov    0xc(%rsp),%eax
  test   %r8d,%r8d
  mov    %eax,0x84(%rsp)
  mov    0x10(%rsp),%eax
  mov    %eax,0x80(%rsp)
  jne    L1215
  jmp    L820
  nopl   0x0(%rax)
L2546:
  cmp    %r10d,%eax
  sete   %r8b
  cmp    %edx,%r11d
  sete   %r15b
  and    %r15b,%r8b
  jne    L778
  mov    %edi,%r8d
  and    $0x1,%r8d
L1038:
  add    $0x1,%esi
  cmp    $0x3,%esi
  jne    L418
  test   %r8b,%r8b
  jne    L1079
L418:
  sub    $0x1,%edx
  sub    $0x20,%rcx
  sub    $0x1,%eax
  js     L388
  test   %edx,%edx
  jns    L444
  nopl   0x0(%rax,%rax,1)
L388:
  cmp    $0x3,%esi
  jne    L573
L314:
  mov    0x44(%rsp),%edx
  test   %edx,%edx
  je     L1384
L420:
  add    $0x1,%r12d
  add    $0x1c,%r9
  add    $0x1c,%rbp
  add    $0x1c,%r14
  addq   $0x1c,0x10(%rsp)
  add    $0x1c,%rbx
  cmp    $0x6,%r12d
  jne    L1696
L1384:
  addq   $0x1,(%rsp)
  mov    (%rsp),%rax
  addl   $0x1,0x48(%rsp)
  addl   $0x1,0x4c(%rsp)
  addq   $0x1,0x28(%rsp)
  addl   $0x1,0x40(%rsp)
  cmp    $0x7,%rax
  jne    L862
  mov    0x60(%rsp),%r11
  mov    $0xfffffffe,%ebx
  mov    $0xffffffff,%ebp
  mov    $0x2,%r12d
  mov    $0x1,%r15d
  xor    %r14d,%r14d
L2371:
  mov    %r14d,0xc(%rsp)
  mov    %r14d,%r9d
  mov    %r11,%rcx
  xor    %eax,%eax
L2460:
  mov    (%rcx),%edx
  test   %edx,%edx
  je     L2396
  add    $0x1,%eax
  add    $0x1c,%rcx
  cmp    $0x6,%eax
  jne    L2460
L1262:
  cmp    $0x7,%r15d
  je     L1689
L533:
  add    $0x1,%r14
  add    $0x1,%r15d
  add    $0x1,%ebp
  add    $0x1,%r12d
  add    $0x1,%ebx
  add    $0x4,%r11
  jmp    L2371
  nopl   0x0(%rax,%rax,1)
L2360:
  cmp    %r15d,%esi
  sete   %r11b
  cmp    %ebx,%edi
  sete   %bpl
  and    %bpl,%r11b
  jne    L1276
  mov    %edx,%r11d
  and    $0x1,%r11d
L1990:
  add    $0x1,%eax
  cmp    $0x3,%eax
  jne    L1997
  test   %r11b,%r11b
  jne    L230
L1997:
  add    $0x1,%esi
  add    $0x1,%edi
  add    $0x20,%r8
  cmp    $0x5,%esi
  jg     L1067
  cmp    $0x6,%edi
  jle    L614
  jmp    L1067
  nopl   0x0(%rax,%rax,1)
L778:
  mov    $0x1,%edi
  jmp    L1038
  nopw   0x0(%rax,%rax,1)
L1276:
  mov    $0x1,%edx
  jmp    L1990
  nopw   0x0(%rax,%rax,1)
L190:
  cmp    %r15d,%eax
  sete   %dil
  cmp    %ebx,%ecx
  sete   %r11b
  and    %r11b,%dil
  jne    L2317
  mov    %r9d,%edi
  and    $0x1,%edi
L990:
  add    $0x1,%esi
  cmp    $0x3,%esi
  jne    L1483
  test   %dil,%dil
  jne    L1327
L1483:
  add    $0x1,%eax
  sub    $0x1,%ecx
  add    $0x18,%rdx
  cmp    $0x5,%eax
  jg     L747
  test   %ecx,%ecx
  jns    L2096
  nopl   0x0(%rax)
L747:
  cmp    $0x3,%esi
  je     L1043
L2151:
  mov    0x50(%rsp),%rcx
  mov    %ecx,%eax
  cmp    $0x6,%ecx
  jg     L2480
  cmpb   $0x0,0x78(%rsp)
  je     L2480
  mov    0x4c(%rsp),%ecx
  mov    %r10,%rdx
  nopl   0x0(%rax,%rax,1)
L1338:
  cmp    %r13d,0x4(%rdx)
  je     L1922
  cmp    $0x3,%esi
  jne    L2480
  and    $0x1,%r9d
  je     L2480
  mov    0x38(%rsp),%esi
  test   %esi,%esi
  je     L992
L470:
  mov    0x98(%rsp),%rax
  mov    0x10(%rsp),%ebx
  mov    %ebx,(%rax)
  jmp    L1140
  nopl   0x0(%rax)
L2317:
  mov    $0x1,%r9d
  jmp    L990
  nopl   0x0(%rax,%rax,1)
L1823:
  cmpq   $0x2,(%rsp)
  jbe    L832
  cmp    %r13d,(%rbx)
  je     L592
  cmpl   $0x3,0x40(%rsp)
  jbe    L2506
L2377:
  cmpl   $0x3,0x18(%rsp)
  jbe    L1369
L2506:
  cmpq   $0x3,(%rsp)
  ja     L169
L913:
  cmp    %r13d,0x0(%rbp)
  jne    L169
  cmp    %r13d,(%r14)
  jne    L169
L2545:
  mov    0x50(%rsp),%rax
  cmp    %r13d,(%r9,%rax,4)
  jne    L169
  cmp    %r11d,0x4c(%rsp)
  sete   %dl
  cmp    0x28(%rsp),%r11d
  sete   %al
  or     %dl,%al
  jne    L1079
  cmp    0x48(%rsp),%r11d
  je     L1079
  cmpb   $0x0,0x20(%rsp)
  mov    0x18(%rsp),%edx
  lea    -0x1(%r12),%eax
  jne    L900
L2397:
  xor    %esi,%esi
  nopl   0x0(%rax)
L573:
  mov    0x18(%rsp),%ecx
  lea    0x1(%r12),%eax
  lea    0x2(%rcx),%edx
  cmp    $0x5,%eax
  jg     L314
  cmp    $0x6,%edx
  jg     L314
  lea    0x20(%r9),%rcx
  nopw   0x0(%rax,%rax,1)
L2292:
  cmp    %r13d,(%rcx)
  je     L255
  cmp    $0x3,%esi
  jne    L314
  and    $0x1,%edi
  jne    L1079
  jmp    L314
  nopl   0x0(%rax)
L255:
  cmp    %eax,%r10d
  sete   %r8b
  cmp    %edx,%r11d
  sete   %r15b
  and    %r15b,%r8b
  jne    L45
  mov    %edi,%r8d
  and    $0x1,%r8d
L2070:
  add    $0x1,%esi
  cmp    $0x3,%esi
  jne    L1055
  test   %r8b,%r8b
  jne    L1079
L1055:
  add    $0x1,%eax
  add    $0x1,%edx
  add    $0x20,%rcx
  cmp    $0x5,%eax
  jg     L314
  cmp    $0x6,%edx
  jle    L2292
  jmp    L314
  nopl   0x0(%rax,%rax,1)
L45:
  mov    $0x1,%edi
  jmp    L2070
  nopw   0x0(%rax,%rax,1)
L1922:
  cmp    %ecx,%r15d
  sete   %dil
  cmp    %ebx,%eax
  sete   %r8b
  and    %r8b,%dil
  jne    L2077
  mov    %r9d,%edi
  and    $0x1,%edi
L2215:
  add    $0x1,%esi
  cmp    $0x3,%esi
  jne    L843
  test   %dil,%dil
  jne    L1188
L843:
  add    $0x1,%eax
  sub    $0x18,%rdx
  sub    $0x1,%ecx
  js     L2480
  cmp    $0x6,%eax
  jle    L1338
  jmp    L2480
  nopw   0x0(%rax,%rax,1)
L2077:
  mov    $0x1,%r9d
  jmp    L2215
  nopl   0x0(%rax,%rax,1)
L187:
  cmp    %r13d,-0x1c(%r10)
  jne    L1719
  cmp    %r13d,-0x38(%r10)
  sete   %sil
  cmp    %r12d,%r15d
  setl   %cl
  test   %cl,%sil
  je     L1719
  sub    $0x3,%eax
  cmp    %eax,%r15d
  jl     L1719
  mov    0x38(%rsp),%eax
  test   %eax,%eax
  jne    L1079
  mov    0x7c(%rsp),%eax
  mov    %r12d,0x80(%rsp)
  movl   $0x2,0x38(%rsp)
  mov    %eax,0x1c(%r10)
  mov    0xc(%rsp),%eax
  mov    %eax,0x84(%rsp)
  jmp    L2274
L124:
  mov    0x18(%rsp),%rax
  mov    0x90(%rsp),%rcx
  cmp    %r13d,(%rax,%rcx,4)
  jne    L1777
  cmp    %ebx,0x40(%rsp)
  sete   %dl
  cmp    %ebx,0x60(%rsp)
  sete   %al
  or     %dl,%al
  jne    L1315
  mov    0xc(%rsp),%eax
  sub    $0x3,%eax
  cmp    %ebx,%eax
  jne    L1777
L1315:
  mov    0x38(%rsp),%ebp
  test   %ebp,%ebp
  jne    L470
  mov    0x7c(%rsp),%eax
  mov    %r12d,0x80(%rsp)
  movl   $0x2,0x38(%rsp)
  mov    %eax,0x1c(%r10)
  mov    0xc(%rsp),%eax
  mov    %eax,0x84(%rsp)
  nopl   0x0(%rax,%rax,1)
L1308:
  cmpl   $0x3,0x60(%rsp)
  ja     L2058
  mov    0x20(%rsp),%rax
  cmp    %r13d,(%rax)
  jne    L479
  mov    0x30(%rsp),%rax
  cmp    %r13d,(%rax)
  jne    L1844
L604:
  mov    0x18(%rsp),%rax
  cmp    %r13d,(%rax)
  je     L449
  cmpl   $0x3,0x40(%rsp)
  ja     L479
  jmp    L1361
  nopl   0x0(%rax)
L2531:
  cmp    %r13d,-0x38(%r9)
  jne    L1772
  cmp    %r13d,-0x54(%r9)
  sete   %dl
  cmp    %r12d,%r10d
  setl   %al
  test   %al,%dl
  je     L1772
  lea    -0x3(%r12),%eax
  cmp    %eax,%r10d
  jl     L1772
  jmp    L1079
  nopw   0x0(%rax,%rax,1)
L1938:
  mov    0x30(%rsp),%rax
  cmp    %r13d,(%rax)
  je     L124
L1844:
  cmpl   $0x3,0x40(%rsp)
  ja     L479
L113:
  mov    0x18(%rsp),%rcx
  mov    0x50(%rsp),%eax
  cmp    %r13d,(%rcx)
  jne    L1361
L1791:
  mov    0x28(%rsp),%rcx
  cmp    %r13d,(%rcx)
  jne    L1361
  mov    0xc(%rsp),%ecx
  lea    0x2(%rcx),%edx
  cmp    %ebx,%edx
  sete   %cl
  cmp    0x50(%rsp),%ebx
  sete   %dl
  or     %cl,%dl
  jne    L1519
  cmp    0x40(%rsp),%ebx
  je     L1519
  cmpl   $0x3,0xc(%rsp)
  jle    L745
  jmp    L1361
  xchg   %ax,%ax
L832:
  cmpl   $0x3,0x40(%rsp)
  ja     L2377
  cmp    %r13d,(%rbx)
  jne    L913
  mov    0x10(%rsp),%rax
  cmp    %r13d,(%rax)
  jne    L2508
L936:
  cmp    %r13d,0x0(%rbp)
  je     L70
  cmpl   $0x3,0x18(%rsp)
  ja     L2506
  jmp    L169
  nopl   0x0(%rax,%rax,1)
L592:
  mov    0x10(%rsp),%rax
  cmp    %r13d,(%rax)
  je     L1187
L2508:
  cmpl   $0x3,0x18(%rsp)
  ja     L2506
L2275:
  cmp    %r13d,0x0(%rbp)
  jne    L169
L2082:
  cmp    %r13d,(%r14)
  jne    L169
  cmp    %r11d,0x4c(%rsp)
  sete   %dl
  cmp    0x48(%rsp),%r11d
  sete   %al
  or     %dl,%al
  jne    L1079
  cmp    0x18(%rsp),%r11d
  je     L1079
  cmpq   $0x3,(%rsp)
  jbe    L2545
  jmp    L169
  nop
L1777:
  cmpl   $0x3,0x60(%rsp)
  ja     L1844
  jmp    L604
L606:
  xor    %esi,%esi
  jmp    L2151
L2396:
  cmp    $0x2,%eax
  jle    L390
  movslq 0xc(%rsp),%rsi
  lea    -0x1(%rax),%ecx
  movslq %ecx,%rcx
  lea    (%rsi,%rcx,8),%rdi
  sub    %rcx,%rdi
  cmp    %r13d,0xa0(%rsp,%rdi,4)
  je     L316
L390:
  cmp    $0x2,%r14
  jbe    L292
  movslq %eax,%rcx
  movslq %ebp,%rdi
  lea    0x0(,%rcx,8),%rsi
  sub    %rcx,%rsi
  add    %rsi,%rdi
  cmp    %r13d,0xa0(%rsp,%rdi,4)
  je     L2187
  cmp    $0x3,%ebx
  jbe    L2152
L2139:
  cmp    $0x3,%ebp
  jbe    L1273
L2152:
  cmp    $0x3,%r14
  ja     L37
  movslq %eax,%rcx
L2310:
  lea    0x0(,%rcx,8),%rsi
  movslq %r15d,%rdi
  sub    %rcx,%rsi
  mov    %rdi,%rcx
  add    %rsi,%rcx
  cmp    %r13d,0xa0(%rsp,%rcx,4)
  jne    L37
  movslq %r12d,%rcx
  add    %rsi,%rcx
  cmp    %r13d,0xa0(%rsp,%rcx,4)
  jne    L37
  lea    0x3(%r9),%ecx
  movslq %ecx,%rcx
  add    %rcx,%rsi
  cmp    %r13d,0xa0(%rsp,%rsi,4)
  je     L1564
L37:
  lea    -0x1(%rax),%edi
  mov    %edi,%ecx
  mov    %edi,%r10d
  not    %ecx
  mov    %ecx,%esi
  shr    $0x1f,%esi
  mov    %esi,0x18(%rsp)
  mov    %ebp,%esi
  not    %esi
  shr    $0x1f,%esi
  mov    %esi,0x20(%rsp)
  test   %ecx,%ecx
  jns    L529
  test   %sil,%sil
  je     L529
  movslq %eax,%rsi
  lea    -0x1(%r9),%r8d
  lea    (%r14,%rsi,8),%rcx
  sub    %rsi,%rcx
  mov    0x58(%rsp),%rsi
  lea    (%rsi,%rcx,4),%rsi
  xor    %ecx,%ecx
  nopl   (%rax)
L741:
  cmp    %r13d,-0x20(%rsi)
  je     L809
L959:
  lea    0x1(%rax),%esi
  cmp    $0x5,%esi
  mov    %esi,0x40(%rsp)
  setle  (%rsp)
  movzbl (%rsp),%edi
  cmp    $0x6,%r15d
  setle  0x10(%rsp)
  movzbl 0x10(%rsp),%r8d
  test   %dil,%dil
  je     L1887
  test   %r8b,%r8b
  je     L1887
  movslq %eax,%r8
  lea    (%r14,%r8,8),%rdi
  sub    %r8,%rdi
  mov    0x58(%rsp),%r8
  lea    (%r8,%rdi,4),%r8
  nopl   0x0(%rax)
L1704:
  cmp    %r13d,0x20(%r8)
  je     L1977
  cmp    $0x3,%ecx
  jne    L1887
L1564:
  mov    0x98(%rsp),%rbx
  mov    %eax,(%rbx)
  jmp    L1140
L809:
  add    $0x1,%ecx
  cmp    $0x3,%ecx
  je     L1564
  sub    $0x20,%rsi
  cmp    %ecx,%edi
  js     L959
  cmp    %ecx,%r8d
  jns    L741
  jmp    L959
  nopl   0x0(%rax)
L1977:
  add    $0x1,%ecx
  cmp    $0x3,%ecx
  je     L1564
  add    $0x1,%esi
  add    $0x20,%r8
  lea    (%rsi,%r9,1),%edi
  sub    %eax,%edi
  cmp    $0x6,%edi
  jg     L1887
  cmp    $0x5,%esi
  jle    L1704
L1887:
  cmpb   $0x0,0x20(%rsp)
  je     L2495
  cmpb   $0x0,(%rsp)
  je     L2495
  movslq %eax,%rsi
  mov    0x40(%rsp),%r8d
  lea    -0x1(%r9),%edi
  lea    (%r14,%rsi,8),%rcx
  sub    %rsi,%rcx
  mov    0x58(%rsp),%rsi
  lea    (%rsi,%rcx,4),%rcx
  nopl   0x0(%rax,%rax,1)
L721:
  cmp    %r13d,0x18(%rcx)
  je     L2539
L2495:
  cmpb   $0x0,0x18(%rsp)
  je     L1262
  cmpb   $0x0,0x10(%rsp)
  je     L1262
  movslq %eax,%rsi
  lea    (%r14,%rsi,8),%rcx
  sub    %rsi,%rcx
  mov    0x58(%rsp),%rsi
  lea    (%rsi,%rcx,4),%rsi
  jmp    L1992
L1978:
  add    $0x1,%edx
  cmp    $0x3,%edx
  je     L1564
  sub    $0x1,%r10d
  mov    %r9d,%ecx
  sub    $0x18,%rsi
  sub    %r10d,%ecx
  add    %eax,%ecx
  cmp    $0x6,%ecx
  jg     L533
  test   %r10d,%r10d
  js     L533
L1992:
  cmp    %r13d,-0x18(%rsi)
  jne    L533
  jmp    L1978
L1187:
  cmp    %r13d,-0xc(%r9)
  je     L754
L562:
  cmpl   $0x3,0x40(%rsp)
  ja     L2508
  jmp    L936
  nopl   0x0(%rax)
L1689:
  movl   $0xffffffff,0xc(%rsp)
  jmp    L1140
L316:
  lea    -0x2(%rax),%ecx
  movslq %ecx,%rcx
  lea    (%rsi,%rcx,8),%rdi
  sub    %rcx,%rdi
  cmp    %r13d,0xa0(%rsp,%rdi,4)
  jne    L390
  lea    -0x3(%rax),%ecx
  movslq %ecx,%rcx
  lea    (%rsi,%rcx,8),%rsi
  sub    %rcx,%rsi
  cmp    %r13d,0xa0(%rsp,%rsi,4)
  jne    L390
  jmp    L1564
  nopl   0x0(%rax,%rax,1)
L2539:
  add    $0x1,%edx
  cmp    $0x3,%edx
  je     L1564
  lea    (%r8,%rdx,1),%esi
  add    $0x18,%rcx
  cmp    $0x5,%esi
  jg     L2495
  cmp    %edx,%edi
  jns    L721
  jmp    L2495
  nopw   0x0(%rax,%rax,1)
L754:
  cmp    %r11d,0x18(%rsp)
  sete   %dl
  cmp    %r11d,0x40(%rsp)
  sete   %al
  or     %dl,%al
  jne    L1079
  cmp    %r11d,0x78(%rsp)
  jne    L562
  jmp    L1079
L292:
  cmp    $0x3,%ebx
  ja     L2139
  movslq %eax,%rcx
  movslq %ebp,%rsi
  imul   $0x7,%rcx,%rdi
  add    %rdi,%rsi
  cmp    %r13d,0xa0(%rsp,%rsi,4)
  jne    L2310
  movslq %ebx,%rsi
  add    %rsi,%rdi
  cmp    %r13d,0xa0(%rsp,%rdi,4)
  jne    L108
L2:
  imul   $0x7,%rcx,%rcx
  movslq %r15d,%rsi
  add    %rsi,%rcx
  cmp    %r13d,0xa0(%rsp,%rcx,4)
  je     L1564
  cmp    $0x3,%ebp
  ja     L2152
  jmp    L37
  nopw   0x0(%rax,%rax,1)
L2187:
  movslq %ebx,%rdi
  add    %rsi,%rdi
  cmp    %r13d,0xa0(%rsp,%rdi,4)
  je     L2092
L108:
  cmp    $0x3,%ebp
  ja     L2152
  jmp    L715
  cs nopw 0x0(%rax,%rax,1)
L2092:
  lea    -0x3(%r9),%edi
  movslq %edi,%rdi
  add    %rdi,%rsi
  cmp    %r13d,0xa0(%rsp,%rsi,4)
  je     L1564
  cmp    $0x3,%ebx
  ja     L108
  jmp    L2
  nop
L529:
  xor    %ecx,%ecx
  jmp    L959
L1519:
  cmpl   $0x0,0x38(%rsp)
  jne    L470
  mov    0x7c(%rsp),%eax
  mov    %r12d,0x80(%rsp)
  movl   $0x2,0x38(%rsp)
  mov    %eax,0x1c(%r10)
  mov    0xc(%rsp),%eax
  mov    %eax,0x84(%rsp)
  jmp    L479
L991:
  call   <__stack_chk_fail@plt>
L449:
  cmp    %ebx,0x60(%rsp)
  sete   %dl
  cmp    0x50(%rsp),%ebx
  sete   %al
  or     %dl,%al
  jne    L1222
  cmp    0x40(%rsp),%ebx
  je     L1222
  cmpl   $0x3,0x40(%rsp)
  ja     L479
  mov    0x50(%rsp),%eax
  jmp    L1791
L1273:
  movslq %eax,%rcx
  movslq %ebp,%rdi
  imul   $0x7,%rcx,%rsi
  add    %rdi,%rsi
  cmp    %r13d,0xa0(%rsp,%rsi,4)
  jne    L2152
L715:
  imul   $0x7,%rcx,%rcx
  movslq %r15d,%rsi
  add    %rcx,%rsi
  cmp    %r13d,0xa0(%rsp,%rsi,4)
  jne    L37
  movslq %r12d,%rsi
  add    %rsi,%rcx
  cmp    %r13d,0xa0(%rsp,%rcx,4)
  jne    L37
  jmp    L1564
L70:
  cmp    %r11d,0x40(%rsp)
  sete   %dl
  cmp    %r11d,0x48(%rsp)
  sete   %al
  or     %dl,%al
  jne    L1079
  cmp    0x18(%rsp),%r11d
  je     L1079
  cmpl   $0x3,0x18(%rsp)
  ja     L2506
  jmp    L2082
L24:
  mov    0x20(%rsp),%rax
  cmp    %r13d,(%rax)
  jne    L479
  jmp    L113
L1369:
  cmp    %r13d,(%rbx)
  jne    L2506
  jmp    L2275
L1222:
  cmpl   $0x0,0x38(%rsp)
  jne    L470
  mov    0x7c(%rsp),%eax
  mov    %r12d,0x80(%rsp)
  movl   $0x2,0x38(%rsp)
  mov    %eax,0x1c(%r10)
  mov    0xc(%rsp),%eax
  mov    %eax,0x84(%rsp)
  jmp    L2058
```

assistant: ```c
int fin42f(int grid1[6][7], int move, int fin, int row, int col, int fut, int *r) {
  int f, c, x, y, i, v, j, row1, col1;
  int grid[6][7], i1, j1;
  for (i1 = 0; i1 < 6; i1++)
    for (j1 = 0; j1 < 7; j1++) {
      grid[i1][j1] = grid1[i1][j1];
    }
  if (col != -1)
    grid[row][col] = move;
  for (i = 0; i < 7; i++) {
    for (j = 0; j < 6; j++) {
      if (grid[j][i] == 0) {
        if (j >= 3 && i == col)
          if ((grid[j - 1][i] == move) && (grid[j - 2][i] == move) && (grid[j - 3][i] == move) && ((row >= j - 3) && (row <= j - 1)))
            if (fin) {
              *r = j;
              return i;
            } else {
              fin = 2;
              grid[j][i] = -move;
              row1 = j;
              col1 = i;
            }
        if (j == row) {
          if (i >= 3)
            if ((grid[j][i - 1] == move) && (grid[j][i - 2] == move) && (grid[j][i - 3] == move) && (((i - 1) == col) || ((i - 2) == col) || ((i - 3) == col)))
              if (fin) {
                *r = j;
                return i;
              } else {
                fin = 2;
                grid[j][i] = -move;
                row1 = j;
                col1 = i;
              }
          if (i >= 2 && i <= 5)
            if ((grid[j][i - 1] == move) && (grid[j][i - 2] == move) && (grid[j][i + 1] == move) && (((i - 1) == col) || ((i - 2) == col) || ((i + 1) == col)))
              if (fin) {
                *r = j;
                return i;
              } else {
                fin = 2;
                grid[j][i] = -move;
                row1 = j;
                col1 = i;
              }
          if (i >= 1 && i <= 4)
            if ((grid[j][i - 1] == move) && (grid[j][i + 1] == move) && (grid[j][i + 2] == move) && (((i - 1) == col) || ((i + 1) == col) || ((i + 2) == col)))
              if (fin) {
                *r = j;
                return i;
              } else {
                fin = 2;
                grid[j][i] = -move;
                row1 = j;
                col1 = i;
              }
          if (i <= 3)
            if ((grid[j][i + 1] == move) && (grid[j][i + 2] == move) && (grid[j][i + 3] == move) && (((i + 1) == col) || ((i + 2) == col) || ((i + 3) == col)))
              if (fin) {
                *r = j;
                return i;
              } else {
                fin = 2;
                grid[j][i] = -move;
                row1 = j;
                col1 = i;
              }
        }
        for (x = j - 1, y = i - 1, c = 0, v = 0, f = 1; x >= 0 && y >= 0 && f == 1; x = x - 1, y = y - 1) {
          if (grid[x][y] != move)
            f = 0;
          else {
            if (x == row && y == col)
              v = 1;
            c++;
          }
          if (c == 3 && v == 1)
            if (fin) {
              *r = j;
              return i;
            } else {
              fin = 2;
              grid[j][i] = -move;
              row1 = j;
              col1 = i;
              break;
            }
        }
        if (c != 3)
          for (x = j + 1, y = i + 1, f = 1; x <= 5 && y <= 6 && f == 1; x = x + 1, y = y + 1) {
            if (grid[x][y] != move)
              f = 0;
            else {
              if (x == row && y == col)
                v = 1;
              c++;
            }
            if (c == 3 && v == 1)
              if (fin) {
                *r = j;
                return i;
              } else {
                fin = 2;
                grid[j][i] = -move;
                row1 = j;
                col1 = i;
                break;
              }
          }
        if (fin != 2) {
          for (x = j + 1, y = i - 1, c = 0, v = 0, f = 1; x <= 5 && y >= 0 && f == 1; x = x + 1, y = y - 1) {
            if (grid[x][y] != move)
              f = 0;
            else {
              if (x == row && y == col)
                v = 1;
              c++;
            }
            if (c == 3 && v == 1)
              if (fin) {
                *r = j;
                return i;
              } else {
                fin = 2;
                grid[j][i] = -move;
                row1 = j;
                col1 = i;
                break;
              }
          }
          if (c != 3)
            for (x = j - 1, y = i + 1, f = 1; x >= 0 && y <= 6 && f == 1; x = x - 1, y = y + 1) {
              if (grid[x][y] != move)
                f = 0;
              else {
                if (x == row && y == col)
                  v = 1;
                c++;
              }
              if (c == 3 && v == 1)
                if (fin) {
                  *r = j;
                  return i;
                } else {
                  fin = 2;
                  grid[j][i] = -move;
                  row1 = j;
                  col1 = i;
                  break;
                }
            }
        }
        if (!fut)
          break;
      }
    }
  }
  if (fin == 2) {
    v = 0;
    for (i = 0; i < 7; i++) {
      for (j = 0; j < 6; j++) {
        if (grid[j][i] == 0) {
          if (j >= 3 && i == col1)
            if ((grid[j - 1][i] == move) && (grid[j - 2][i] == move) && (grid[j - 3][i] == move) && ((row1 >= j - 3) && (row1 <= j - 1)))
              if (fin) {
                *r = j;
                return i;
              } else {
                fin = 2;
                grid[j][i] = -move;
              }
          if (j == row1) {
            if (i >= 3)
              if ((grid[j][i - 1] == move) && (grid[j][i - 2] == move) && (grid[j][i - 3] == move) && (((i - 1) == col1) || ((i - 2) == col1) || ((i - 3) == col1)))
                if (fin) {
                  *r = j;
                  return i;
                } else {
                  fin = 2;
                  grid[j][i] = -move;
                }
            if (i >= 2 && i <= 5)
              if ((grid[j][i - 1] == move) && (grid[j][i - 2] == move) && (grid[j][i + 1] == move) && (((i - 1) == col1) || ((i - 2) == col1) || ((i + 1) == col1)))
                if (fin) {
                  *r = j;
                  return i;
                } else {
                  fin = 2;
                  grid[j][i] = -move;
                }
            if (i >= 1 && i <= 4)
              if ((grid[j][i - 1] == move) && (grid[j][i + 1] == move) && (grid[j][i + 2] == move) && (((i - 1) == col1) || ((i + 1) == col1) || ((i + 2) == col1)))
                if (fin) {
                  *r = j;
                  return i;
                } else {
                  fin = 2;
                  grid[j][i] = -move;
                }
            if (i <= 3)
              if ((grid[j][i + 1] == move) && (grid[j][i + 2] == move) && (grid[j][i + 3] == move) && (((i + 1) == col1) || ((i + 2) == col1) || ((i + 3) == col1)))
                if (fin) {
                  *r = j;
                  return i;
                } else {
                  fin = 2;
                  grid[j][i] = -move;
                }
          }
          for (x = j - 1, y = i - 1, c = 0, v = 0, f = 1; x >= 0 && y >= 0 && f == 1; x = x - 1, y = y - 1) {
            if (grid[x][y] != move)
              f = 0;
            else {
              if (x == row1 && y == col1)
                v = 1;
              c++;
            }
            if (c == 3 && v == 1)
              if (fin) {
                *r = j;
                return i;
              } else {
                fin = 2;
                grid[j][i] = -move;
                break;
              }
          }
          if (c != 3)
            for (x = j + 1, y = i + 1, f = 1; x <= 5 && y <= 6 && f == 1; x = x + 1, y = y + 1) {
              if (grid[x][y] != move)
                f = 0;
              else {
                if (x == row1 && y == col1)
                  v = 1;
                c++;
              }
              if (c == 3 && v == 1)
                if (fin) {
                  *r = j;
                  return i;
                } else {
                  fin = 2;
                  grid[j][i] = -move;
                  break;
                }
            }
          if (fin != 2) {
            for (x = j + 1, y = i - 1, c = 0, v = 0, f = 1; x <= 5 && y >= 0 && f == 1; x = x + 1, y = y - 1) {
              if (grid[x][y] != move)
                f = 0;
              else {
                if (x == row1 && y == col1)
                  v = 1;
                c++;
              }
              if (c == 3 && v == 1)
                if (fin) {
                  *r = j;
                  return i;
                } else {
                  fin = 2;
                  grid[j][i] = -move;
                  break;
                }
            }
            if (c != 3)
              for (x = j - 1, y = i + 1, f = 1; x >= 0 && y <= 6 && f == 1; x = x - 1, y = y + 1) {
                if (grid[x][y] != move)
                  f = 0;
                else {
                  if (x == row1 && y == col1)
                    v = 1;
                  c++;
                }
                if (c == 3 && v == 1)
                  if (fin) {
                    *r = j;
                    return i;
                  } else {
                    fin = 2;
                    grid[j][i] = -move;
                    break;
                  }
              }
          }
          if (!fut)
            break;
        }
      }
    }
    for (i = 0; i < 7; i++) {
      for (j = 0; j < 6; j++) {
        if (grid[j][i] == 0) {
          if (j >= 3)
            if ((grid[j - 1][i] == move) && (grid[j - 2][i] == move) && (grid[j - 3][i] == move)) {
              *r = j;
              return i;
            }
          if (i >= 3)
            if ((grid[j][i - 1] == move) && (grid[j][i - 2] == move) && (grid[j][i - 3] == move)) {
              *r = j;
              return i;
            }
          if (i >= 2 && i <= 5)
            if ((grid[j][i - 1] == move) && (grid[j][i - 2] == move) && (grid[j][i + 1] == move)) {
              *r = j;
              return i;
            }
          if (i >= 1 && i <= 4)
            if ((grid[j][i - 1] == move) && (grid[j][i + 1] == move) && (grid[j][i + 2] == move)) {
              *r = j;
              return i;
            }
          if (i <= 3)
            if ((grid[j][i + 1] == move) && (grid[j][i + 2] == move) && (grid[j][i + 3] == move)) {
              *r = j;
              return i;
            }
          for (x = j - 1, y = i - 1, c = 0, f = 1; x >= 0 && y >= 0 && f == 1; x = x - 1, y = y - 1) {
            if (grid[x][y] != move)
              f = 0;
            else
              c++;
            if (c == 3) {
              *r = j;
              return i;
            }
          }
          for (x = j + 1, y = i + 1, f = 1; x <= 5 && y <= 6 && f == 1; x = x + 1, y = y + 1) {
            if (grid[x][y] != move)
              f = 0;
            else
              c++;
            if (c == 3) {
              *r = j;
              return i;
            }
          }
          for (x = j + 1, y = i - 1, c = 0, f = 1; x <= 5 && y >= 0 && f == 1; x = x + 1, y = y - 1) {
            if (grid[x][y] != move)
              f = 0;
            else
              c++;
            if (c == 3) {
              *r = j;
              return i;
            }
          }
          for (x = j - 1, y = i + 1, f = 1; x >= 0 && y <= 6 && f == 1; x = x - 1, y = y + 1) {
            if (grid[x][y] != move)
              f = 0;
            else
              c++;
            if (c == 3) {
              *r = j;
              return i;
            }
          }
          break;
        }
      }
    }
  }
  return -1;
}
```