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

```asm
<fin42f>:
  endbr64
  push   %r15
  mov    %esi,%r15d
  mov    %rdi,%rax
  push   %r14
  push   %r13
  mov    %ecx,%r13d
  push   %r12
  push   %rbp
  push   %rbx
  mov    %r8d,%ebx
  sub    $0x1a8,%rsp
  movdqu (%rdi),%xmm0
  movdqu 0x10(%rdi),%xmm1
  mov    0x1e0(%rsp),%rsi
  movdqu 0x20(%rdi),%xmm2
  mov    %r8d,0xc(%rsp)
  movdqu 0x30(%rdi),%xmm3
  movdqu 0x40(%rdi),%xmm4
  mov    %r9d,0x50(%rsp)
  movdqu 0x50(%rdi),%xmm5
  movdqu 0x60(%rdi),%xmm6
  mov    %edx,0x4c(%rsp)
  mov    %rsi,0xd8(%rsp)
  mov    0x78(%rdi),%r9
  mov    0x80(%rdi),%r8
  mov    0x90(%rax),%rsi
  mov    0x88(%rdi),%rdi
  mov    %fs:0x28,%rdx
  mov    %rdx,0x198(%rsp)
  xor    %edx,%edx
  movaps %xmm0,0xf0(%rsp)
  movaps %xmm1,0x100(%rsp)
  movaps %xmm2,0x110(%rsp)
  movaps %xmm3,0x120(%rsp)
  movaps %xmm4,0x130(%rsp)
  movaps %xmm5,0x140(%rsp)
  movaps %xmm6,0x150(%rsp)
  mov    0x98(%rax),%rcx
  mov    0xa0(%rax),%rdx
  mov    0x70(%rax),%rax
  mov    %r9,0x168(%rsp)
  mov    %r8,0x170(%rsp)
  mov    %rax,0x160(%rsp)
  mov    %rdi,0x178(%rsp)
  mov    %rsi,0x180(%rsp)
  mov    %rcx,0x188(%rsp)
  mov    %rdx,0x190(%rsp)
  cmp    $0xffffffff,%ebx
  je     L1435
  movslq %r13d,%rdx
  movslq %ebx,%rax
  lea    (%rax,%rdx,8),%rax
  sub    %rdx,%rax
  mov    %r15d,0xf0(%rsp,%rax,4)
L1435:
  lea    0xf0(%rsp),%rax
  movq   $0xffffffffffffffff,0x88(%rsp)
  mov    %rax,0xe8(%rsp)
  mov    %rax,0xb0(%rsp)
  mov    %r15d,%eax
  neg    %eax
  mov    %r13d,0x8(%rsp)
  movq   $0xfffffffffffffffe,0x98(%rsp)
  movq   $0xfffffffffffffffd,0xa8(%rsp)
  movl   $0x4,0xa4(%rsp)
  movl   $0x3,0x94(%rsp)
  movl   $0x2,0x84(%rsp)
  movl   $0xfffffffb,0x68(%rsp)
  movl   $0xfffffffc,0x54(%rsp)
  movq   $0x1,0x70(%rsp)
  movq   $0x0,0x28(%rsp)
  mov    %eax,0xc0(%rsp)
  nopl   0x0(%rax)
L3134:
  mov    0xc(%rsp),%eax
  mov    0x98(%rsp),%rdi
  mov    $0x1,%r8d
  mov    0x88(%rsp),%r10
  mov    0xa8(%rsp),%r9
  cmp    %edi,%eax
  mov    0x28(%rsp),%r14
  mov    %edi,0xb8(%rsp)
  sete   0x6c(%rsp)
  cmp    %r10d,%eax
  movzbl 0x6c(%rsp),%esi
  mov    %r10d,%edx
  sete   0x40(%rsp)
  cmp    %r9d,%eax
  movzbl 0x40(%rsp),%ebx
  sete   0xe5(%rsp)
  mov    %esi,%eax
  movzbl 0xe5(%rsp),%ecx
  or     %ebx,%eax
  mov    %r14d,0x5c(%rsp)
  or     %ecx,%eax
  mov    %r10d,0x78(%rsp)
  mov    %al,0xe6(%rsp)
  mov    0xb0(%rsp),%rax
  mov    %r14d,0x90(%rsp)
  xor    %r14d,%r14d
  lea    -0x4(%rax),%rsi
  lea    0x8(%rax),%rcx
  mov    %r10d,0xa0(%rsp)
  mov    $0xfffffffd,%r10d
  mov    %rsi,0x30(%rsp)
  lea    0x10(%rax),%rsi
  lea    -0x10(%rax),%r13
  mov    %rsi,0x38(%rsp)
  lea    -0xc(%rax),%rbx
  lea    0xc(%rax),%rsi
  mov    %rcx,0x18(%rsp)
  lea    -0x8(%rax),%r11
  mov    %rax,%rcx
  add    $0x4,%rax
  mov    %rax,0xb0(%rsp)
  lea    -0x14(%rcx),%r12
  mov    %rax,0x10(%rsp)
  mov    %edx,%eax
  not    %eax
  mov    %rsi,0x20(%rsp)
  mov    $0xffffffff,%esi
  shr    $0x1f,%eax
  mov    %eax,0xbc(%rsp)
  movslq 0x70(%rsp),%rax
  mov    %eax,0xcc(%rsp)
  mov    %rax,0xd0(%rsp)
  mov    %edi,%eax
  not    %eax
  shr    $0x1f,%eax
  mov    %eax,0x58(%rsp)
  mov    %r9d,%eax
  not    %eax
  shr    $0x1f,%eax
  mov    %eax,0x60(%rsp)
  mov    0x54(%rsp),%eax
  not    %eax
  shr    $0x1f,%eax
  mov    %eax,0x7c(%rsp)
  mov    %r12,(%rsp)
  jmp    L2280
  nopl   0x0(%rax)
L2359:
  mov    %esi,%eax
  mov    0x78(%rsp),%edi
  not    %eax
  shr    $0x1f,%eax
  mov    %eax,0x80(%rsp)
  mov    %edi,%eax
  or     %esi,%eax
  js     L1695
  movslq %esi,%rax
  movslq %edi,%rdi
  lea    (%rdi,%rax,8),%rbp
  xor    %edi,%edi
  sub    %rax,%rbp
  xor    %eax,%eax
  cmp    0xf0(%rsp,%rbp,4),%r15d
  je     L2912
L612:
  cmpl   $0x6,0x70(%rsp)
  jg     L1008
  cmp    $0x5,%r8d
  jg     L1008
  mov    0x10(%rsp),%rbp
  cmp    0x1c(%rbp),%r15d
  je     L2237
L1272:
  cmp    $0x3,%edi
  jne    L1008
  test   %eax,%eax
  je     L1008
L3077:
  mov    0x4c(%rsp),%eax
  test   %eax,%eax
  jne    L915
  mov    0xc0(%rsp),%eax
  mov    %r14d,0xc4(%rsp)
  movl   $0x2,0x4c(%rsp)
  mov    %eax,(%rcx)
  mov    0x5c(%rsp),%eax
  mov    %eax,0xc8(%rsp)
L1531:
  mov    0x50(%rsp),%edi
  test   %edi,%edi
  je     L850
L907:
  cmp    $0x6,%r8d
  je     L850
L886:
  addq   $0x1c,0x30(%rsp)
  add    $0x1,%r14
  add    $0x1c,%rcx
  add    $0x1,%r8d
  addq   $0x1c,0x38(%rsp)
  add    $0x1c,%r13
  add    $0x1c,%rbx
  add    $0x1,%esi
  addq   $0x1c,0x20(%rsp)
  add    $0x1c,%r11
  add    $0x1,%r10d
  addq   $0x1c,0x18(%rsp)
  addq   $0x1c,0x10(%rsp)
  addq   $0x1c,(%rsp)
L2280:
  mov    (%rcx),%r9d
  mov    %r14d,0x48(%rsp)
  mov    %r14d,%edx
  test   %r9d,%r9d
  jne    L907
  mov    %r14d,%eax
  cmp    $0x2,%r14d
  jle    L3325
  mov    0x90(%rsp),%ebp
  cmp    %ebp,0xc(%rsp)
  jne    L3325
  cmp    %r15d,-0x1c(%rcx)
  je     L1594
L3325:
  cmp    %eax,0x8(%rsp)
  jne    L2359
  mov    0x28(%rsp),%rdi
  cmp    $0x2,%rdi
  jbe    L2209
  mov    0x88(%rsp),%rax
  sub    %rdi,%rax
  cmp    %r15d,(%rcx,%rax,4)
  je     L1411
L2209:
  cmpl   $0x3,0xb8(%rsp)
  jbe    L2667
L63:
  cmpl   $0x3,0xa0(%rsp)
  jbe    L1180
L1393:
  cmpq   $0x3,0x28(%rsp)
  ja     L2359
  mov    0x10(%rsp),%rax
  cmp    %r15d,(%rax)
  jne    L2359
  mov    0x18(%rsp),%rax
  cmp    %r15d,(%rax)
  jne    L2359
L1626:
  mov    0x20(%rsp),%rax
  cmp    %r15d,(%rax)
  jne    L2359
  mov    0xc(%rsp),%ebp
  cmp    %ebp,0x94(%rsp)
  sete   %dil
  cmp    %ebp,0x84(%rsp)
  sete   %al
  or     %dil,%al
  jne    L1017
  mov    0xcc(%rsp),%eax
  cmp    %eax,%ebp
  jne    L2359
L1017:
  mov    0x4c(%rsp),%r12d
  test   %r12d,%r12d
  jne    L915
  mov    0xc0(%rsp),%eax
  mov    %r14d,0xc4(%rsp)
  movl   $0x2,0x4c(%rsp)
  mov    %eax,(%rcx)
  mov    0x5c(%rsp),%eax
  mov    %eax,0xc8(%rsp)
  jmp    L2359
L2912:
  xor    %eax,%eax
  mov    %edx,%ebp
  cmp    0x8(%rsp),%esi
  mov    $0x1,%edi
  sete   %al
  and    0x40(%rsp),%eax
  sub    $0x2,%ebp
  js     L612
  cmpb   $0x0,0x58(%rsp)
  je     L612
  cmp    -0x38(%r11),%r15d
  jne    L612
  cmp    %ebp,0x8(%rsp)
  jne    L2705
  cmpb   $0x0,0x6c(%rsp)
  cmovne %edi,%eax
L2705:
  mov    $0x2,%edi
  test   %r10d,%r10d
  js     L612
  cmpb   $0x0,0x60(%rsp)
  je     L612
  cmp    -0x54(%rbx),%r15d
  jne    L612
  cmp    %r10d,0x8(%rsp)
  jne    L1334
  cmpb   $0x0,0xe5(%rsp)
  jne    L3077
L1334:
  test   %eax,%eax
  jne    L3077
  mov    %edx,%eax
  sub    $0x4,%eax
  js     L1008
  cmpb   $0x0,0x7c(%rsp)
  je     L1008
  cmp    -0x70(%r13),%r15d
  je     L1456
L1008:
  cmpl   $0x2,0x4c(%rsp)
  je     L1531
  xor    %eax,%eax
  cmp    $0x5,%r8d
  jg     L3337
  cmpb   $0x0,0xbc(%rsp)
  je     L3337
  mov    0x30(%rsp),%rdi
  cmp    0x1c(%rdi),%r15d
  je     L582
L3337:
  cmpl   $0x6,0x70(%rsp)
  jg     L1531
  cmpb   $0x0,0x80(%rsp)
  je     L1531
  movslq %esi,%rbp
  lea    0x0(,%rbp,8),%rdi
  sub    %rbp,%rdi
  add    0xd0(%rsp),%rdi
  cmp    0xf0(%rsp,%rdi,4),%r15d
  je     L3603
  cmp    $0x3,%eax
  jne    L1531
L1985:
  and    $0x1,%r9d
  je     L1531
L2495:
  mov    0x4c(%rsp),%r9d
  test   %r9d,%r9d
  jne    L915
  mov    0xc0(%rsp),%eax
  mov    0x50(%rsp),%edi
  movl   $0x2,0x4c(%rsp)
  mov    %eax,(%rcx)
  mov    0x5c(%rsp),%eax
  mov    %eax,0xc8(%rsp)
  mov    0x48(%rsp),%eax
  mov    %eax,0xc4(%rsp)
  test   %edi,%edi
  jne    L907
  nopl   (%rax)
L850:
  addq   $0x1,0x28(%rsp)
  mov    0x28(%rsp),%rax
  addq   $0x1,0x70(%rsp)
  addl   $0x1,0x54(%rsp)
  addl   $0x1,0x68(%rsp)
  addl   $0x1,0x84(%rsp)
  addl   $0x1,0x94(%rsp)
  addl   $0x1,0xa4(%rsp)
  addq   $0x1,0xa8(%rsp)
  addq   $0x1,0x98(%rsp)
  addq   $0x1,0x88(%rsp)
  cmp    $0x7,%rax
  jne    L3134
  cmpl   $0x2,0x4c(%rsp)
  jne    L1503
  mov    0xe8(%rsp),%r13
  movq   $0xfffffffffffffffd,(%rsp)
  xor    %r14d,%r14d
  movl   $0x2,0x68(%rsp)
  mov    0xc4(%rsp),%r11d
  movq   $0xffffffffffffffff,0x40(%rsp)
  movq   $0xfffffffffffffffe,0x60(%rsp)
  movl   $0x1,0x4c(%rsp)
  mov    %r13,0x70(%rsp)
  mov    0xc8(%rsp),%r13d
  nopl   (%rax)
L2148:
  mov    0x60(%rsp),%rbp
  mov    0x40(%rsp),%rdx
  mov    %r14d,0x78(%rsp)
  mov    (%rsp),%rcx
  mov    0x70(%rsp),%r8
  mov    %r14d,0x5c(%rsp)
  cmp    %r13d,%ebp
  mov    %edx,0xc(%rsp)
  sete   0x18(%rsp)
  cmp    %edx,%r13d
  movzbl 0x18(%rsp),%eax
  lea    0xc(%r8),%r10
  sete   0x8(%rsp)
  cmp    %ecx,%r13d
  movzbl 0x8(%rsp),%esi
  lea    0x8(%r8),%r9
  sete   0x20(%rsp)
  movzbl 0x20(%rsp),%ebx
  or     %esi,%eax
  mov    %ecx,0x38(%rsp)
  mov    %ebp,%ecx
  or     %ebx,%eax
  mov    %edx,%ebx
  not    %edx
  not    %ecx
  shr    $0x1f,%edx
  mov    %al,0xe5(%rsp)
  mov    %r8,%rax
  add    $0x4,%r8
  mov    %edx,0x10(%rsp)
  mov    %ecx,%edx
  lea    -0x3(%rbx),%ecx
  lea    -0x8(%rax),%rdi
  shr    $0x1f,%edx
  mov    %r8,0x70(%rsp)
  lea    -0x4(%rax),%rsi
  mov    %edx,0x28(%rsp)
  mov    %ecx,%edx
  not    %edx
  mov    %r14d,0x30(%rsp)
  shr    $0x1f,%edx
  mov    %ecx,0x54(%rsp)
  mov    %edx,0x48(%rsp)
  lea    -0x4(%rbx),%edx
  not    %edx
  mov    %ebp,0x6c(%rsp)
  xor    %ebp,%ebp
  shr    $0x1f,%edx
  mov    %edx,0x58(%rsp)
  nopl   0x0(%rax)
L3083:
  mov    (%rax),%edx
  test   %edx,%edx
  jne    L2131
  cmp    $0x2,%ebp
  jle    L2012
  cmp    0x30(%rsp),%r13d
  jne    L2012
  cmp    %r15d,-0x1c(%rax)
  je     L497
L2012:
  cmp    %ebp,%r11d
  je     L638
L2384:
  mov    %ebp,%ecx
  lea    -0x1(%rbp),%ebx
  neg    %ecx
  mov    $0x0,%ecx
  jns    L3262
  cmpb   $0x0,0x10(%rsp)
  je     L3262
  cmp    -0x1c(%rsi),%r15d
  je     L3266
L3262:
  cmpl   $0x6,0x4c(%rsp)
  lea    0x1(%rbp),%ebx
  jg     L3328
  cmp    $0x5,%ebx
  jg     L3328
  cmp    0x1c(%r8),%r15d
  je     L115
  cmp    $0x3,%edx
  jne    L3328
L900:
  test   %ecx,%ecx
  je     L3328
L2854:
  mov    0xd8(%rsp),%rax
  mov    %ebp,(%rax)
L694:
  mov    0x198(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L2648
  mov    0x5c(%rsp),%eax
  add    $0x1a8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L1456:
  cmp    %eax,0x8(%rsp)
  mov    0x54(%rsp),%ebp
  sete   %dil
  xor    %eax,%eax
  cmp    %ebp,0xc(%rsp)
  sete   %al
  and    %edi,%eax
  mov    %edx,%edi
  sub    $0x5,%edi
  mov    $0x4,%edi
  js     L612
  mov    0x68(%rsp),%ebp
  test   %ebp,%ebp
  js     L612
  mov    (%rsp),%rbp
  cmp    %r15d,-0x8c(%rbp)
  jne    L612
  mov    0x8(%rsp),%edi
  test   %edi,%edi
  jne    L3133
  mov    0x68(%rsp),%ebp
  mov    $0x1,%edi
  cmp    %ebp,0xc(%rsp)
  cmove  %edi,%eax
L3133:
  mov    $0x5,%edi
  jmp    L612
  xchg   %ax,%ax
L3266:
  xor    %ecx,%ecx
  cmp    %ebx,%r11d
  mov    %ebp,%ebx
  mov    $0x1,%edx
  sete   %cl
  and    0x8(%rsp),%ecx
  sub    $0x2,%ebx
  js     L3262
  cmpb   $0x0,0x28(%rsp)
  je     L3262
  cmp    -0x38(%rdi),%r15d
  jne    L3262
  cmp    %ebx,%r11d
  jne    L2371
  cmpb   $0x0,0x18(%rsp)
  mov    $0x1,%ebx
  cmovne %ebx,%ecx
L2371:
  mov    %ebp,%r12d
  sub    $0x3,%r12d
  js     L3158
  mov    0x38(%rsp),%edx
  test   %edx,%edx
  js     L3158
  mov    (%rsp),%rbx
  mov    $0x2,%edx
  sub    %r14,%rbx
  cmp    -0x54(%rax,%rbx,4),%r15d
  jne    L3262
  cmp    %r12d,%r11d
  jne    L3277
  cmpb   $0x0,0x20(%rsp)
  jne    L2854
L3277:
  test   %ecx,%ecx
  jne    L2854
  mov    %ebp,%edx
  sub    $0x4,%edx
  js     L3328
  cmpb   $0x0,0x48(%rsp)
  je     L3328
  cmp    -0x80(%rax),%r15d
  je     L3429
L3328:
  mov    0x50(%rsp),%ebx
  test   %ebx,%ebx
  je     L179
L2131:
  add    $0x1,%ebp
  add    $0x1c,%rax
  add    $0x1c,%r10
  add    $0x1c,%r9
  add    $0x1c,%r8
  add    $0x1c,%rdi
  add    $0x1c,%rsi
  cmp    $0x6,%ebp
  jne    L3083
L179:
  add    $0x1,%r14
  addl   $0x1,0x4c(%rsp)
  addl   $0x1,0x68(%rsp)
  addq   $0x1,(%rsp)
  addq   $0x1,0x60(%rsp)
  addq   $0x1,0x40(%rsp)
  cmp    $0x7,%r14
  jne    L2148
  mov    0xe8(%rsp),%rax
  xor    %esi,%esi
  mov    $0xffffffff,%r13d
  mov    $0xfffffffe,%r14d
  mov    %esi,0x5c(%rsp)
  mov    $0xfffffffd,%r8d
  mov    $0x3,%ebp
  mov    $0x4,%r11d
  mov    (%rax),%edx
  mov    $0x2,%r12d
  mov    $0x1,%ecx
  test   %edx,%edx
  je     L888
L3080:
  movslq 0x1c(%rax),%rdi
  test   %edi,%edi
  je     L3465
  mov    0x38(%rax),%r9d
  test   %r9d,%r9d
  je     L917
  mov    0x54(%rax),%r10d
  test   %r10d,%r10d
  je     L3512
  mov    0x70(%rax),%edx
  test   %edx,%edx
  je     L16
  mov    0x8c(%rax),%edi
  test   %edi,%edi
  je     L1478
L220:
  cmp    $0x7,%ecx
  je     L1503
L2984:
  mov    0x4(%rax),%edx
  add    $0x1,%rsi
  add    $0x4,%rax
  add    $0x1,%ecx
  mov    %esi,0x5c(%rsp)
  add    $0x1,%r12d
  add    $0x1,%ebp
  add    $0x1,%r11d
  add    $0x1,%r8d
  add    $0x1,%r14d
  add    $0x1,%r13d
  test   %edx,%edx
  jne    L3080
L888:
  mov    $0xffffffffffffffff,%rdi
L2159:
  cmp    $0x2,%rsi
  jbe    L1725
  movslq %edx,%r9
  movslq %r13d,%rbx
  lea    0x0(,%r9,8),%r10
  sub    %r9,%r10
  add    %r10,%rbx
  cmp    %r15d,0xf0(%rsp,%rbx,4)
  je     L2638
  cmp    $0x3,%r14d
  jbe    L1803
L1914:
  cmp    $0x3,%r13d
  jbe    L262
L1803:
  cmp    $0x3,%rsi
  ja     L1156
  movslq %edx,%r9
L1092:
  lea    0x0(,%r9,8),%r10
  movslq %ecx,%rbx
  sub    %r9,%r10
  mov    %rbx,%r9
  add    %r10,%r9
  cmp    %r15d,0xf0(%rsp,%r9,4)
  jne    L1156
  movslq %r12d,%r9
  add    %r10,%r9
  cmp    %r15d,0xf0(%rsp,%r9,4)
  je     L2795
L1156:
  mov    %edi,%r9d
  not    %r9d
  mov    %r9d,%ebx
  mov    %r13d,%r9d
  not    %r9d
  shr    $0x1f,%ebx
  mov    %r9d,%r10d
  mov    %ebx,(%rsp)
  shr    $0x1f,%r10d
  mov    %r10d,0x10(%rsp)
  test   %r9d,%r9d
  jns    L3478
  test   %bl,%bl
  je     L3478
  movslq %edi,%r9
  movslq %r13d,%r10
  lea    (%r10,%r9,8),%r10
  sub    %r9,%r10
  xor    %r9d,%r9d
  cmp    0xf0(%rsp,%r10,4),%r15d
  je     L795
L1087:
  lea    0x1(%rdx),%ebx
  cmp    $0x5,%ebx
  mov    %ebx,0x18(%rsp)
  setle  0x8(%rsp)
  cmp    $0x6,%ecx
  movzbl 0x8(%rsp),%r10d
  setle  0xc(%rsp)
  jg     L1081
  test   %r10b,%r10b
  je     L1081
  movslq %ebx,%rbx
  movslq %ecx,%r10
  lea    (%r10,%rbx,8),%r10
  sub    %rbx,%r10
  cmp    %r15d,0xf0(%rsp,%r10,4)
  je     L2458
L1081:
  cmpb   $0x0,0x10(%rsp)
  je     L3703
  cmpb   $0x0,0x8(%rsp)
  je     L3703
  movslq 0x18(%rsp),%r10
  movslq %r13d,%r9
  xor    %ebx,%ebx
  lea    (%r9,%r10,8),%r9
  sub    %r10,%r9
  cmp    %r15d,0xf0(%rsp,%r9,4)
  je     L3272
L2707:
  cmpb   $0x0,(%rsp)
  je     L220
  cmpb   $0x0,0xc(%rsp)
  je     L220
  movslq %edi,%r10
  movslq %ecx,%r9
  lea    (%r9,%r10,8),%r9
  sub    %r10,%r9
  cmp    %r15d,0xf0(%rsp,%r9,4)
  jne    L2984
  lea    0x1(%rbx),%r10d
  mov    %r10d,0x8(%rsp)
  cmp    $0x2,%ebx
  je     L112
L2114:
  mov    %edi,%r10d
  lea    -0x1(%rdi),%r9d
  neg    %r10d
  jns    L2984
  cmp    $0x6,%r12d
  jg     L2984
  movslq %r9d,%r9
  movslq %r12d,%r10
  lea    (%r10,%r9,8),%r10
  sub    %r9,%r10
  cmp    0xf0(%rsp,%r10,4),%r15d
  jne    L2984
  cmpl   $0x2,0x8(%rsp)
  je     L112
  lea    -0x2(%rdi),%r9d
  cmp    $0x6,%ebp
  jg     L2984
  test   %r9d,%r9d
  js     L2984
  movslq %r9d,%r9
  movslq %ebp,%r10
  lea    (%r10,%r9,8),%r10
  sub    %r9,%r10
  cmp    0xf0(%rsp,%r10,4),%r15d
  jne    L2984
  cmpl   $0x1,0x8(%rsp)
  je     L112
  sub    $0x3,%edi
  js     L2984
  cmp    $0x6,%r11d
  jg     L2984
  movslq %edi,%rdi
  movslq %r11d,%r9
  lea    (%r9,%rdi,8),%r9
  sub    %rdi,%r9
  cmp    %r15d,0xf0(%rsp,%r9,4)
  jne    L2984
L112:
  mov    0xd8(%rsp),%rax
  mov    %edx,(%rax)
  jmp    L694
  xchg   %ax,%ax
L3429:
  cmp    %edx,%r11d
  mov    %ebp,%ebx
  sete   %dl
  xor    %ecx,%ecx
  cmp    0x54(%rsp),%r13d
  sete   %cl
  and    %edx,%ecx
  sub    $0x5,%ebx
  mov    $0x4,%edx
  js     L3262
  cmpb   $0x0,0x58(%rsp)
  je     L3262
  cmp    %r15d,-0xa0(%rax)
  jne    L3262
  mov    0x78(%rsp),%ebx
  lea    -0x5(%rbx),%edx
  cmp    %r13d,%edx
  jne    L1425
  test   %r11d,%r11d
  mov    $0x1,%edx
  cmove  %edx,%ecx
L1425:
  mov    $0x5,%edx
  jmp    L3262
  nopl   0x0(%rax,%rax,1)
L582:
  xor    %r9d,%r9d
  lea    0x2(%rdx),%edi
  cmp    %r8d,0x8(%rsp)
  mov    $0x1,%eax
  sete   %r9b
  and    0x40(%rsp),%r9d
  cmp    $0x5,%edi
  jg     L3337
  cmpb   $0x0,0x58(%rsp)
  je     L3337
  cmp    0x38(%r11),%r15d
  jne    L3337
  cmp    %edi,0x8(%rsp)
  jne    L3186
  cmpb   $0x0,0x6c(%rsp)
  cmovne %eax,%r9d
L3186:
  lea    0x3(%rdx),%edi
  mov    $0x2,%eax
  cmp    $0x5,%edi
  jg     L3337
  cmpb   $0x0,0x60(%rsp)
  je     L3337
  cmp    0x54(%rbx),%r15d
  jne    L3337
  cmp    %edi,0x8(%rsp)
  jne    L1558
  cmpb   $0x0,0xe5(%rsp)
  je     L1558
L1705:
  mov    0x4c(%rsp),%ebp
  test   %ebp,%ebp
  jne    L915
  mov    0xc0(%rsp),%eax
  movl   $0x2,0x4c(%rsp)
  mov    %eax,(%rcx)
  mov    0x5c(%rsp),%eax
  mov    %eax,0xc8(%rsp)
  mov    0x48(%rsp),%eax
  mov    %eax,0xc4(%rsp)
L125:
  mov    0x50(%rsp),%eax
  test   %eax,%eax
  jne    L886
  jmp    L850
  nopl   0x0(%rax,%rax,1)
L638:
  cmp    $0x2,%r14
  jbe    L1805
  mov    0x40(%rsp),%rcx
  sub    %r14,%rcx
  cmp    %r15d,(%rax,%rcx,4)
  je     L3431
L1805:
  cmpl   $0x3,0x6c(%rsp)
  jbe    L2057
L3028:
  cmpl   $0x3,0xc(%rsp)
  jbe    L310
L2862:
  cmp    $0x3,%r14
  ja     L2384
  cmp    %r15d,(%r8)
  jne    L2384
  cmp    %r15d,(%r9)
  jne    L2384
L2937:
  cmp    %r15d,(%r10)
  jne    L2384
  mov    0xc(%rsp),%ecx
  add    $0x4,%ecx
  cmp    %r13d,%ecx
  sete   %bl
  cmp    %r13d,0x68(%rsp)
  sete   %cl
  or     %bl,%cl
  jne    L2854
  cmp    0x4c(%rsp),%r13d
  jne    L2384
  jmp    L2854
L1594:
  cmp    %r15d,-0x38(%rcx)
  jne    L3325
  mov    0x8(%rsp),%edi
  cmp    %r10d,%edi
  setge  %bpl
  cmp    %r14d,%edi
  setl   %dil
  test   %dil,%bpl
  je     L3325
  cmp    %r15d,-0x54(%rcx)
  jne    L3325
  mov    0x4c(%rsp),%eax
  test   %eax,%eax
  jne    L1875
  mov    0xc0(%rsp),%eax
  mov    %r14d,0xc4(%rsp)
  movl   $0x2,0x4c(%rsp)
  mov    %eax,(%rcx)
  mov    0x5c(%rsp),%eax
  mov    %eax,0xc8(%rsp)
  jmp    L2359
  nopl   0x0(%rax)
L2237:
  cmp    %r8d,0x8(%rsp)
  mov    0xcc(%rsp),%r12d
  sete   0xe0(%rsp)
  cmp    %r12d,0xc(%rsp)
  sete   %bpl
  and    0xe0(%rsp),%bpl
  jne    L2700
  mov    %eax,%ebp
  and    $0x1,%ebp
L1290:
  lea    0x1(%rdi),%r12d
  mov    %r12d,0xe0(%rsp)
  cmp    $0x2,%edi
  jne    L2320
  test   %bpl,%bpl
  jne    L3077
L2320:
  lea    0x2(%rdx),%ebp
  cmp    $0x5,%ebp
  jg     L1008
  cmpl   $0x6,0x84(%rsp)
  jg     L1008
  mov    0x18(%rsp),%r12
  cmp    0x38(%r12),%r15d
  je     L908
L2126:
  mov    0xe0(%rsp),%edi
  jmp    L1272
  nopl   (%rax)
L497:
  cmp    %r15d,-0x38(%rax)
  jne    L2012
  cmp    %r15d,-0x54(%rax)
  sete   %bl
  cmp    %ebp,%r11d
  setl   %cl
  test   %cl,%bl
  je     L2012
  lea    -0x3(%rbp),%ecx
  cmp    %r11d,%ecx
  jg     L2012
  jmp    L2854
  nopl   0x0(%rax,%rax,1)
L908:
  cmp    %ebp,0x8(%rsp)
  mov    0x84(%rsp),%r12d
  sete   0xe0(%rsp)
  cmp    %r12d,0xc(%rsp)
  sete   %bpl
  and    0xe0(%rsp),%bpl
  jne    L1958
  mov    %eax,%ebp
  and    $0x1,%ebp
L2493:
  lea    0x2(%rdi),%r12d
  mov    %r12d,0xe0(%rsp)
  cmp    $0x1,%edi
  jne    L2319
  test   %bpl,%bpl
  jne    L3077
L2319:
  lea    0x3(%rdx),%ebp
  cmp    $0x5,%ebp
  jg     L1008
  cmpl   $0x6,0x94(%rsp)
  jg     L1008
  mov    0x20(%rsp),%r12
  cmp    0x54(%r12),%r15d
  jne    L2126
  cmp    %ebp,0x8(%rsp)
  mov    0x94(%rsp),%ebp
  sete   0xe0(%rsp)
  cmp    %ebp,0xc(%rsp)
  sete   0xe7(%rsp)
  movzbl 0xe7(%rsp),%ebp
  and    0xe0(%rsp),%bpl
  jne    L173
  mov    %eax,%ebp
  and    $0x1,%ebp
L2991:
  add    $0x3,%edi
  cmp    $0x3,%edi
  jne    L2846
  test   %bpl,%bpl
  jne    L3077
L2846:
  lea    0x4(%rdx),%ebp
  cmp    $0x5,%ebp
  jg     L1008
  cmpl   $0x6,0xa4(%rsp)
  jg     L1008
  mov    0x38(%rsp),%rbp
  cmp    0x70(%rbp),%r15d
  jne    L1272
  jmp    L1008
  nopl   (%rax)
L1411:
  mov    0x98(%rsp),%rax
  sub    %rdi,%rax
  cmp    %r15d,(%rcx,%rax,4)
  je     L1299
L2531:
  cmpl   $0x3,0xb8(%rsp)
  ja     L63
L3614:
  cmp    %r15d,(%r11)
  je     L2074
  cmpl   $0x3,0xa0(%rsp)
  ja     L1393
L1957:
  mov    0x10(%rsp),%rax
  cmp    %r15d,(%rax)
  jne    L2359
L2634:
  mov    0x18(%rsp),%rax
  cmp    %r15d,(%rax)
  jne    L2359
  mov    0xc(%rsp),%eax
  mov    0x70(%rsp),%edi
  cmp    %edi,%eax
  sete   %dil
  cmp    %eax,0x84(%rsp)
  sete   %al
  or     %dil,%al
  jne    L3267
  cmpb   $0x0,0x40(%rsp)
  jne    L3267
  cmpq   $0x3,0x28(%rsp)
  jbe    L1626
  jmp    L2359
  nopl   0x0(%rax,%rax,1)
L115:
  cmp    %ebx,%r11d
  sete   %r12b
  cmp    0x4c(%rsp),%r13d
  sete   %bl
  and    %r12b,%bl
  je     L577
  mov    $0x1,%ecx
L1501:
  lea    0x1(%rdx),%r12d
  cmp    $0x2,%edx
  jne    L885
  test   %bl,%bl
  jne    L2854
L885:
  lea    0x2(%rbp),%ebx
  cmp    $0x5,%ebx
  jg     L3328
  cmpl   $0x6,0x68(%rsp)
  jg     L3328
  cmp    0x38(%r9),%r15d
  je     L1512
L937:
  cmp    $0x3,%r12d
  je     L900
  mov    0x50(%rsp),%ebx
  test   %ebx,%ebx
  jne    L2131
  jmp    L179
  xchg   %ax,%ax
L1512:
  cmp    %ebx,%r11d
  sete   %r12b
  cmp    0x68(%rsp),%r13d
  sete   %bl
  and    %r12b,%bl
  je     L1524
  mov    $0x1,%ecx
L2675:
  lea    0x2(%rdx),%r12d
  mov    %r12d,0x7c(%rsp)
  cmp    $0x1,%edx
  jne    L675
  test   %bl,%bl
  jne    L2854
L675:
  mov    0xc(%rsp),%ebx
  lea    0x3(%rbp),%r12d
  add    $0x4,%ebx
  cmp    $0x5,%r12d
  jg     L3328
  cmp    $0x6,%ebx
  jg     L3328
  cmp    0x54(%r10),%r15d
  je     L55
  cmpl   $0x3,0x7c(%rsp)
  je     L900
  mov    0x50(%rsp),%ebx
  test   %ebx,%ebx
  jne    L2131
  jmp    L179
  nopl   0x0(%rax,%rax,1)
L3431:
  mov    0x60(%rsp),%rcx
  sub    %r14,%rcx
  cmp    %r15d,(%rax,%rcx,4)
  je     L1539
L54:
  cmpl   $0x3,0x6c(%rsp)
  ja     L3028
  jmp    L1405
  nopw   0x0(%rax,%rax,1)
L55:
  cmp    %r12d,%r11d
  sete   %r12b
  cmp    %ebx,%r13d
  sete   %bl
  and    %r12b,%bl
  je     L1138
  mov    $0x1,%ecx
L27:
  lea    0x3(%rdx),%r12d
  test   %edx,%edx
  jne    L916
  test   %bl,%bl
  jne    L2854
L916:
  lea    0x4(%rbp),%edx
  cmp    $0x5,%edx
  jg     L3328
  mov    0xc(%rsp),%ebx
  lea    0x5(%rbx),%edx
  cmp    $0x6,%edx
  jg     L3328
  cmp    0x80(%rax),%r15d
  jne    L937
  mov    0x50(%rsp),%ebx
  test   %ebx,%ebx
  jne    L2131
  jmp    L179
  nopl   (%rax)
L1695:
  xor    %edi,%edi
  xor    %eax,%eax
  jmp    L612
L2700:
  mov    $0x1,%eax
  jmp    L1290
L1958:
  mov    $0x1,%eax
  jmp    L2493
L3603:
  cmp    0x8(%rsp),%esi
  mov    0xcc(%rsp),%r12d
  sete   %bpl
  cmp    %r12d,0xc(%rsp)
  sete   %dil
  and    %bpl,%dil
  jne    L3643
  mov    %r9d,%edi
  and    $0x1,%edi
L797:
  lea    0x1(%rax),%ebp
  cmp    $0x2,%eax
  jne    L2293
  test   %dil,%dil
  jne    L2495
L2293:
  mov    %edx,%edi
  sub    $0x2,%edi
  js     L1531
  cmpl   $0x6,0x84(%rsp)
  jg     L1531
  mov    0x18(%rsp),%r12
  cmp    -0x38(%r12),%r15d
  je     L3093
L56:
  cmp    $0x3,%ebp
  je     L1985
  jmp    L1531
L173:
  mov    $0x1,%eax
  jmp    L2991
L1558:
  test   %r9d,%r9d
  jne    L1705
  lea    0x4(%rdx),%eax
  cmp    $0x5,%eax
  jg     L125
  cmpb   $0x0,0x7c(%rsp)
  je     L125
  cmp    0x70(%r13),%r15d
  jne    L125
  cmp    %eax,0x8(%rsp)
  mov    0x54(%rsp),%r9d
  sete   %al
  cmp    %r9d,0xc(%rsp)
  sete   %r9b
  movzbl %r9b,%r9d
  and    %eax,%r9d
  lea    0x5(%rdx),%eax
  cmp    $0x5,%eax
  mov    $0x4,%eax
  jg     L3337
  mov    0x68(%rsp),%r12d
  test   %r12d,%r12d
  js     L3337
  mov    (%rsp),%rdi
  cmp    %r15d,0x8c(%rdi)
  jne    L3337
  cmpl   $0x5,0x8(%rsp)
  jne    L2283
  mov    0x68(%rsp),%edi
  mov    $0x1,%eax
  cmp    %edi,0xc(%rsp)
  cmove  %eax,%r9d
L2283:
  mov    $0x5,%eax
  jmp    L3337
L577:
  mov    %ecx,%ebx
  and    $0x1,%ebx
  jmp    L1501
L1524:
  mov    %ecx,%ebx
  and    $0x1,%ebx
  jmp    L2675
L1138:
  mov    %ecx,%ebx
  and    $0x1,%ebx
  jmp    L27
L1299:
  mov    0xa8(%rsp),%rax
  sub    %rdi,%rax
  cmp    %r15d,(%rcx,%rax,4)
  jne    L2531
  cmpb   $0x0,0xe6(%rsp)
  je     L2531
  mov    0x4c(%rsp),%eax
  test   %eax,%eax
  jne    L915
  mov    0xc0(%rsp),%eax
  mov    %r14d,0xc4(%rsp)
  movl   $0x2,0x4c(%rsp)
  mov    %eax,(%rcx)
  mov    0x5c(%rsp),%eax
  mov    %eax,0xc8(%rsp)
  jmp    L2209
L3643:
  mov    $0x1,%r9d
  jmp    L797
L3093:
  cmp    %edi,0x8(%rsp)
  mov    0x84(%rsp),%r12d
  sete   %bpl
  cmp    %r12d,0xc(%rsp)
  sete   %dil
  and    %bpl,%dil
  je     L1194
  mov    $0x1,%r9d
L233:
  lea    0x2(%rax),%ebp
  cmp    $0x1,%eax
  jne    L1304
  test   %dil,%dil
  jne    L2495
L1304:
  test   %r10d,%r10d
  js     L1531
  cmpl   $0x6,0x94(%rsp)
  jg     L1531
  mov    0x20(%rsp),%rdi
  cmp    -0x54(%rdi),%r15d
  jne    L56
  cmp    %r10d,0x8(%rsp)
  mov    0x94(%rsp),%r12d
  sete   %bpl
  cmp    %r12d,0xc(%rsp)
  sete   %dil
  and    %bpl,%dil
  je     L1602
  mov    $0x1,%r9d
L3161:
  lea    0x3(%rax),%ebp
  test   %eax,%eax
  jne    L1059
  test   %dil,%dil
  jne    L2495
L1059:
  sub    $0x4,%edx
  js     L1531
  cmpl   $0x6,0xa4(%rsp)
  jg     L1531
  mov    0x38(%rsp),%rax
  cmp    -0x70(%rax),%r15d
  jne    L56
  jmp    L1531
L1539:
  mov    (%rsp),%rcx
  sub    %r14,%rcx
  cmp    %r15d,(%rax,%rcx,4)
  jne    L54
  cmpb   $0x0,0xe5(%rsp)
  je     L54
  mov    0xd8(%rsp),%rax
  mov    0xc4(%rsp),%esi
  mov    %esi,(%rax)
  jmp    L694
L1194:
  mov    %r9d,%edi
  and    $0x1,%edi
  jmp    L233
L1602:
  mov    %r9d,%edi
  and    $0x1,%edi
  jmp    L3161
L1503:
  movl   $0xffffffff,0x5c(%rsp)
  jmp    L694
L915:
  mov    0xd8(%rsp),%rax
  mov    0x48(%rsp),%esi
  mov    %esi,(%rax)
  jmp    L694
L795:
  mov    %edi,%r10d
  lea    -0x1(%rdi),%r9d
  neg    %r10d
  jns    L2376
  test   %r14d,%r14d
  js     L2376
  movslq %r9d,%r9
  movslq %r14d,%r10
  lea    (%r10,%r9,8),%r10
  sub    %r9,%r10
  mov    $0x1,%r9d
  cmp    %r15d,0xf0(%rsp,%r10,4)
  jne    L1087
  mov    %edi,%r9d
  sub    $0x2,%r9d
  js     L870
  test   %r8d,%r8d
  js     L870
  movslq %r9d,%r9
  movslq %r8d,%r10
  lea    (%r10,%r9,8),%r10
  sub    %r9,%r10
  cmp    %r15d,0xf0(%rsp,%r10,4)
  je     L112
L870:
  mov    $0x2,%r9d
  jmp    L1087
L3272:
  lea    0x2(%rdx),%r9d
  test   %r14d,%r14d
  js     L481
  cmp    $0x5,%r9d
  jg     L481
  movslq %r9d,%r9
  movslq %r14d,%r10
  mov    $0x1,%ebx
  lea    (%r10,%r9,8),%r10
  sub    %r9,%r10
  cmp    %r15d,0xf0(%rsp,%r10,4)
  jne    L2707
  lea    0x3(%rdx),%r9d
  test   %r8d,%r8d
  js     L2910
  cmp    $0x5,%r9d
  jg     L2910
  movslq %r9d,%r9
  movslq %r8d,%r10
  lea    (%r10,%r9,8),%r10
  sub    %r9,%r10
  cmp    %r15d,0xf0(%rsp,%r10,4)
  je     L112
  mov    $0x2,%ebx
  jmp    L2707
L1725:
  cmp    $0x3,%r14d
  ja     L1914
  movslq %edx,%r9
  movslq %r13d,%r10
  imul   $0x7,%r9,%rbx
  add    %rbx,%r10
  cmp    %r15d,0xf0(%rsp,%r10,4)
  jne    L1092
  movslq %r14d,%r10
  add    %r10,%rbx
  cmp    %r15d,0xf0(%rsp,%rbx,4)
  jne    L2141
L868:
  imul   $0x7,%r9,%r9
  movslq %ecx,%r10
  add    %r10,%r9
  cmp    %r15d,0xf0(%rsp,%r9,4)
  je     L112
  cmp    $0x3,%r13d
  ja     L1803
  jmp    L1156
  nopl   0x0(%rax,%rax,1)
L2638:
  movslq %r14d,%rbx
  add    %r10,%rbx
  cmp    %r15d,0xf0(%rsp,%rbx,4)
  je     L2106
L2141:
  cmp    $0x3,%r13d
  ja     L1803
  jmp    L1454
  nopl   0x0(%rax,%rax,1)
L3465:
  mov    $0x1,%edx
  jmp    L2159
L2458:
  cmp    $0x2,%r9d
  je     L112
  lea    0x2(%rdx),%r10d
  cmp    $0x6,%r12d
  jg     L1081
  cmp    $0x5,%r10d
  jg     L1081
  movslq %r10d,%r10
  movslq %r12d,%rbx
  lea    (%rbx,%r10,8),%rbx
  sub    %r10,%rbx
  cmp    %r15d,0xf0(%rsp,%rbx,4)
  jne    L1081
  cmp    $0x1,%r9d
  je     L112
  lea    0x3(%rdx),%r9d
  cmp    $0x6,%ebp
  jg     L1081
  cmp    $0x5,%r9d
  jg     L1081
  movslq %r9d,%r9
  movslq %ebp,%r10
  lea    (%r10,%r9,8),%r10
  sub    %r9,%r10
  cmp    0xf0(%rsp,%r10,4),%r15d
  jne    L1081
  jmp    L112
L917:
  mov    $0x2,%edx
  mov    $0x1,%edi
  jmp    L2159
L3512:
  mov    %edx,%ebx
  mov    %r9d,%r10d
  mov    $0x3,%edx
  mov    %edi,%r9d
  mov    $0x2,%edi
L748:
  cmp    %r10d,%r15d
  jne    L2159
  cmp    %r9d,%r15d
  jne    L2159
  cmp    %ebx,%r15d
  jne    L2159
  jmp    L112
  nopl   0x0(%rax)
L16:
  mov    %edi,%ebx
  mov    $0x4,%edx
  mov    $0x3,%edi
  jmp    L748
L1478:
  mov    %r9d,%ebx
  mov    $0x4,%edi
  mov    %r10d,%r9d
  mov    %edx,%r10d
  mov    $0x5,%edx
  jmp    L748
L2795:
  movslq %ebp,%r9
  add    %r9,%r10
  cmp    %r15d,0xf0(%rsp,%r10,4)
  jne    L1156
  jmp    L112
  nopl   0x0(%rax)
L2106:
  movslq %r8d,%rbx
  add    %rbx,%r10
  cmp    %r15d,0xf0(%rsp,%r10,4)
  je     L112
  cmp    $0x3,%r14d
  ja     L2141
  jmp    L868
  nopl   0x0(%rax,%rax,1)
L3478:
  xor    %r9d,%r9d
  jmp    L1087
L3703:
  cmpb   $0x0,(%rsp)
  je     L220
  cmpb   $0x0,0xc(%rsp)
  je     L220
  movslq %edi,%r10
  movslq %ecx,%r9
  lea    (%r9,%r10,8),%r9
  sub    %r10,%r9
  cmp    0xf0(%rsp,%r9,4),%r15d
  jne    L2984
  xor    %r9d,%r9d
L376:
  lea    0x1(%r9),%ebx
  mov    %ebx,0x8(%rsp)
  jmp    L2114
L262:
  movslq %edx,%r9
  movslq %r13d,%rbx
  imul   $0x7,%r9,%r10
  add    %rbx,%r10
  cmp    %r15d,0xf0(%rsp,%r10,4)
  jne    L1803
L1454:
  imul   $0x7,%r9,%r9
  movslq %ecx,%r10
  add    %r9,%r10
  cmp    %r15d,0xf0(%rsp,%r10,4)
  jne    L1156
  movslq %r12d,%r10
  add    %r10,%r9
  cmp    %r15d,0xf0(%rsp,%r9,4)
  jne    L1156
  jmp    L112
L2910:
  cmpb   $0x0,(%rsp)
  je     L220
  cmpb   $0x0,0xc(%rsp)
  je     L220
  imul   $0x7,%rdi,%rdi
  movslq %ecx,%r9
  add    %r9,%rdi
  cmp    0xf0(%rsp,%rdi,4),%r15d
  jne    L2984
  jmp    L112
L481:
  cmpb   $0x0,(%rsp)
  je     L220
  cmpb   $0x0,0xc(%rsp)
  je     L220
  movslq %edi,%r9
  movslq %ecx,%r10
  imul   $0x7,%r9,%r9
  add    %r10,%r9
  cmp    0xf0(%rsp,%r9,4),%r15d
  jne    L2984
  mov    $0x1,%r9d
  jmp    L376
L2376:
  mov    $0x1,%r9d
  jmp    L1087
  nopl   0x0(%rax)
L1875:
  mov    0xd8(%rsp),%rax
  mov    %r14d,(%rax)
  jmp    L694
L3158:
  mov    $0x2,%edx
  jmp    L3262
L310:
  cmp    %r15d,(%rsi)
  jne    L2862
L537:
  cmp    %r15d,(%r8)
  jne    L2384
L555:
  cmp    %r15d,(%r9)
  jne    L2384
  cmp    %r13d,0x68(%rsp)
  sete   %bl
  cmp    0x4c(%rsp),%r13d
  sete   %cl
  or     %bl,%cl
  jne    L2854
  cmpb   $0x0,0x8(%rsp)
  jne    L2854
  cmp    $0x3,%r14
  jbe    L2937
  jmp    L2384
L2057:
  cmp    %r15d,(%rsi)
  jne    L2862
L1405:
  cmp    %r15d,(%rdi)
  je     L3506
  cmpl   $0x3,0xc(%rsp)
  ja     L2862
  jmp    L537
L2648:
  call   <__stack_chk_fail@plt>
L3506:
  cmp    %r15d,(%r8)
  je     L156
  cmpl   $0x3,0xc(%rsp)
  ja     L2862
  jmp    L2384
L2667:
  mov    0x30(%rsp),%rax
  cmp    %r15d,(%rax)
  jne    L1393
  jmp    L3614
L2074:
  mov    0x10(%rsp),%rax
  cmp    %r15d,(%rax)
  je     L438
  cmpl   $0x3,0xa0(%rsp)
  ja     L1393
  jmp    L2359
L3267:
  cmpl   $0x0,0x4c(%rsp)
  jne    L915
  mov    0xc0(%rsp),%eax
  mov    %r14d,0xc4(%rsp)
  movl   $0x2,0x4c(%rsp)
  mov    %eax,(%rcx)
  mov    0x5c(%rsp),%eax
  mov    %eax,0xc8(%rsp)
  jmp    L1393
L438:
  mov    0x70(%rsp),%edi
  cmp    %edi,0xc(%rsp)
  sete   %al
  or     0x6c(%rsp),%al
  jne    L2464
  cmpb   $0x0,0x40(%rsp)
  jne    L2464
  cmpl   $0x3,0xa0(%rsp)
  ja     L1393
  jmp    L2634
L1180:
  mov    0x30(%rsp),%rax
  cmp    %r15d,(%rax)
  jne    L1393
  jmp    L1957
L156:
  cmp    %r13d,0x4c(%rsp)
  sete   %cl
  or     0x18(%rsp),%cl
  jne    L2854
  cmpb   $0x0,0x8(%rsp)
  jne    L2854
  cmpl   $0x3,0xc(%rsp)
  ja     L2862
  jmp    L555
L2464:
  cmpl   $0x0,0x4c(%rsp)
  jne    L915
  mov    0xc0(%rsp),%eax
  mov    %r14d,0xc4(%rsp)
  movl   $0x2,0x4c(%rsp)
  mov    %eax,(%rcx)
  mov    0x5c(%rsp),%eax
  mov    %eax,0xc8(%rsp)
  jmp    L63
```

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;
}
```