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

```asm
<get_first_winning_move>:
  endbr64
  mov    %edi,%eax
  test   %r8w,%r8w
  push   %r15
  mov    %edx,%r11d
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  sete   %bpl
  push   %rbx
  mov    0x38(%rsp),%edi
  mov    0x40(%rsp),%ebx
  test   %ax,%ax
  je     L2176
  test   %bpl,%bpl
  je     L2176
  mov    %ebx,%edx
  or     %r9w,%dx
  jne    L2402
  test   %di,%di
  jne    L905
L2402:
  mov    %edi,%edx
  or     %r9w,%dx
  jne    L1731
  test   %bx,%bx
  jne    L2101
L1731:
  test   %si,%si
  setne  %dl
L1789:
  and    %bpl,%dl
  je     L24
  mov    %edi,%r10d
  or     %r9w,%r10w
  jne    L24
  test   %bx,%bx
  je     L227
  movswl %si,%ebp
  movswl %bx,%r12d
  lea    0x4(%rbp),%r13d
  cmp    %r12d,%r13d
  je     L1216
  lea    0x5(%rbp),%r13d
  cmp    %r13d,%r12d
  je     L949
  lea    0x1(%rbp),%r13d
  cmp    %r13d,%r12d
  je     L183
L1389:
  cmp    $0x8,%si
  lea    -0x3(%rbp),%r15d
  setg   %r13b
  mov    %r13d,%r14d
  cmp    %r15d,%r12d
  je     L1771
L859:
  lea    -0x4(%rbp),%r13d
  cmp    %r12d,%r13d
  jne    L738
  test   %r14b,%r14b
  je     L738
L1083:
  mov    $0xc,%r10d
L530:
  pop    %rbx
  mov    %r10d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L2176:
  test   %si,%si
  setne  %r10b
  mov    %r10d,%edx
  test   %r8w,%r8w
  je     L1789
  test   %r10b,%r10b
  je     L1789
  mov    %ebx,%edx
  or     %edi,%edx
  or     %r9w,%dx
  jne    L2150
  movswl %si,%edx
  movswl %r8w,%ebp
  lea    0x4(%rdx),%r10d
  cmp    %ebp,%r10d
  je     L1216
  lea    0x5(%rdx),%r10d
  cmp    %r10d,%ebp
  je     L2537
  lea    0x1(%rdx),%r10d
  cmp    %r10d,%ebp
  je     L1021
L1390:
  cmp    $0x8,%si
  lea    -0x3(%rdx),%r10d
  setg   %r12b
  cmp    %r10d,%ebp
  je     L15
L545:
  lea    -0x4(%rdx),%r10d
  cmp    %ebp,%r10d
  jne    L225
  test   %r12b,%r12b
  jne    L1083
L225:
  lea    -0x5(%rdx),%r10d
  cmp    %r10d,%ebp
  je     L492
L587:
  lea    -0x1(%rdx),%r10d
  cmp    %r10d,%ebp
  je     L2291
L1775:
  add    $0x3,%edx
  cmp    %edx,%ebp
  je     L597
  nopl   (%rax)
L59:
  cmp    $0x11,%ax
  sete   %bpl
  cmp    $0x15,%r8w
  setne  %dl
  mov    %ebp,%r12d
  and    %dl,%r12b
  je     L896
  xor    %r10d,%r10d
  cmp    $0x15,%r9w
  jne    L530
  cmp    $0x16,%r8w
  setne  %r15b
  cmp    $0x17,%r8w
  setne  %r14b
  mov    %r15d,%r13d
  cmp    $0x18,%r8w
  mov    $0x1,%r8d
  setne  %al
  and    $0x1,%r13d
  je     L2618
  mov    $0x1,%r10d
  pop    %rbx
  pop    %rbp
  mov    %r10d,%eax
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L24:
  test   %r11w,%r11w
  je     L2150
  test   %bpl,%bpl
  je     L2150
  test   %r9w,%r9w
  je     L2150
  test   %di,%di
  jne    L2150
  test   %bx,%bx
  jne    L59
  movswl %r11w,%edx
  movswl %r9w,%ebp
  lea    0x4(%rdx),%r10d
  cmp    %ebp,%r10d
  je     L2874
  lea    0x5(%rdx),%r10d
  cmp    %r10d,%ebp
  je     L1149
  lea    0x1(%rdx),%r10d
  cmp    %r10d,%ebp
  je     L2424
L2715:
  cmp    $0x8,%r11w
  lea    -0x3(%rdx),%r10d
  setg   %r12b
  cmp    %r10d,%ebp
  je     L1553
L279:
  lea    -0x4(%rdx),%r10d
  cmp    %ebp,%r10d
  jne    L2177
  test   %r12b,%r12b
  jne    L2030
L2177:
  lea    -0x5(%rdx),%r10d
  cmp    %r10d,%ebp
  je     L1346
L2838:
  lea    -0x1(%rdx),%r10d
  cmp    %r10d,%ebp
  je     L2872
  add    $0x3,%edx
  cmp    %edx,%ebp
  jne    L59
  mov    %r11d,%edx
  mov    $0x17,%r10d
  and    $0x8003,%dx
  cmp    $0x1,%dx
  je     L59
  jmp    L530
L2150:
  test   %cx,%cx
  je     L59
  test   %bpl,%bpl
  je     L59
  mov    %ebx,%edx
  or     %r9w,%dx
  sete   %r10b
  test   %di,%di
  setne  %dl
  mov    %r10d,%r15d
  and    %dl,%r15b
  je     L59
  movswl %cx,%edx
  movswl %di,%r12d
  lea    0x4(%rdx),%r10d
  cmp    %r12d,%r10d
  je     L1582
  lea    0x5(%rdx),%r10d
  cmp    %r10d,%r12d
  je     L2699
  lea    0x1(%rdx),%r10d
  cmp    %r10d,%r12d
  je     L65
L110:
  cmp    $0x8,%cx
  lea    -0x3(%rdx),%r10d
  setg   %r13b
  cmp    %r10d,%r12d
  je     L1097
L673:
  lea    -0x4(%rdx),%r10d
  cmp    %r12d,%r10d
  sete   %bpl
  and    %r13b,%bpl
  jne    L389
  lea    -0x5(%rdx),%r10d
  cmp    %r10d,%r12d
  je     L1782
L2626:
  lea    -0x1(%rdx),%r10d
  cmp    %r10d,%r12d
  je     L2713
  add    $0x3,%edx
  cmp    %edx,%r12d
  je     L1979
L1312:
  xor    %r10d,%r10d
  cmp    $0x11,%ax
  je     L530
  cmp    $0x12,%ax
  mov    %r15d,%edx
  sete   %r12b
  je     L530
  nopl   0x0(%rax)
L2233:
  cmp    $0x13,%ax
  sete   -0x6(%rsp)
  cmp    $0x17,%r8w
  movzbl -0x6(%rsp),%r13d
  setne  %r14b
  and    %r14b,%r13b
  je     L986
  xor    %r10d,%r10d
  cmp    $0x17,%r9w
  jne    L530
  movb   $0x0,-0x4(%rsp)
  cmp    $0x18,%r8w
  mov    %r13d,%r14d
  mov    %r13d,%r8d
  movb   $0x0,-0x5(%rsp)
  setne  %al
  xor    %ebp,%ebp
L403:
  cmp    $0x18,%r9w
  setne  %r12b
  test   %r13b,%al
  je     L438
  mov    $0x1,%r10d
  test   %r12b,%r12b
  jne    L530
L438:
  cmp    $0x15,%r9w
  setne  %r9b
  test   %dl,-0x5(%rsp)
  je     L1922
  mov    $0x7,%r10d
  test   %r9b,%r9b
  jne    L530
L1922:
  test   %r13b,%r15b
  je     L1831
  mov    $0x7,%r10d
  test   %r8b,%r8b
  jne    L530
L1831:
  test   %r14b,-0x4(%rsp)
  je     L891
  mov    $0x7,%r10d
  test   %bpl,%bpl
  jne    L530
L891:
  cmp    $0x11,%si
  sete   -0x6(%rsp)
  jne    L2152
  test   %r9b,%r9b
  je     L2152
  mov    $0x8,%r10d
  cmp    $0x15,%di
  jne    L530
  movzbl -0x6(%rsp),%esi
  movb   $0x1,-0x2(%rsp)
  and    %r8b,%sil
  mov    %sil,-0x4(%rsp)
  je     L2771
L2050:
  mov    $0x9,%r10d
  jmp    L530
  nopl   0x0(%rax)
L227:
  cmp    $0x11,%ax
  sete   %bpl
  je     L530
L896:
  cmp    $0x12,%ax
  sete   %r12b
  cmp    $0x16,%r8w
  setne  %r15b
  mov    %r12d,%r14d
  and    %r15b,%r14b
  mov    %r14b,-0x5(%rsp)
  je     L2233
  xor    %r10d,%r10d
  cmp    $0x16,%r9w
  jne    L530
  cmp    $0x17,%r8w
  mov    $0x1,%ebp
  mov    $0x1,%r10d
  setne  %r14b
  cmp    $0x18,%r8w
  mov    %r14d,%r15d
  setne  %al
  and    $0x1,%r15d
  mov    %r15b,-0x4(%rsp)
  jne    L530
  movzbl -0x5(%rsp),%r15d
  mov    $0x1,%r12d
  xor    %r13d,%r13d
  xor    %r8d,%r8d
  jmp    L438
  nopl   0x0(%rax,%rax,1)
L905:
  movswl %ax,%edx
  movswl %di,%r12d
  xor    %r10d,%r10d
  lea    0x4(%rdx),%r13d
  cmp    %r12d,%r13d
  je     L530
L418:
  lea    0x5(%rdx),%r10d
  cmp    %r10d,%r12d
  je     L1536
  lea    0x1(%rdx),%r10d
  cmp    %r10d,%r12d
  je     L2441
L953:
  cmp    $0x8,%ax
  lea    -0x3(%rdx),%r10d
  setg   %r13b
  cmp    %r10d,%r12d
  je     L1629
L496:
  lea    -0x4(%rdx),%r10d
  cmp    %r12d,%r10d
  jne    L646
  test   %r13b,%r13b
  jne    L1849
L646:
  lea    -0x5(%rdx),%r10d
  cmp    %r10d,%r12d
  je     L237
L1861:
  lea    -0x1(%rdx),%r10d
  cmp    %r10d,%r12d
  je     L806
  add    $0x3,%edx
  cmp    %edx,%r12d
  jne    L1731
  mov    %eax,%edx
  mov    $0x7,%r10d
  and    $0x8003,%dx
  cmp    $0x1,%dx
  je     L1731
  jmp    L530
  nopw   0x0(%rax,%rax,1)
L2101:
  movswl %ax,%edx
  movswl %bx,%r12d
  xor    %r10d,%r10d
  lea    0x4(%rdx),%r13d
  cmp    %r12d,%r13d
  jne    L418
  jmp    L530
  nopl   0x0(%rax)
L738:
  lea    -0x5(%rbp),%r13d
  cmp    %r13d,%r12d
  je     L2418
L1918:
  lea    -0x1(%rbp),%r13d
  cmp    %r13d,%r12d
  je     L1196
  add    $0x3,%ebp
  cmp    %ebp,%r12d
  jne    L227
  mov    %esi,%ebp
  and    $0x8003,%bp
  cmp    $0x1,%bp
  je     L227
  mov    $0xf,%r10d
  jmp    L530
  nopw   0x0(%rax,%rax,1)
L986:
  cmp    $0x14,%ax
  sete   %r10b
  cmp    $0x18,%r8w
  setne  %al
  cmp    $0x18,%r9w
  mov    %r10b,-0x4(%rsp)
  setne  %r8b
  test   %al,%r8b
  je     L356
  test   %r10b,%r10b
  je     L356
  xor    %r10d,%r10d
  jmp    L530
  nopl   0x0(%rax,%rax,1)
L1536:
  mov    $0x1,%r10d
  test   $0x3,%al
  jne    L530
  lea    0x1(%rdx),%r10d
  cmp    %r10d,%r12d
  jne    L953
L2292:
  cmp    $0x8,%ax
  setg   %r13b
  jmp    L496
  nopl   0x0(%rax,%rax,1)
L2537:
  mov    $0x9,%r10d
  test   $0x3,%sil
  jne    L530
  lea    0x1(%rdx),%r10d
  cmp    %r10d,%ebp
  jne    L1390
L2625:
  cmp    $0x8,%si
  setg   %r12b
  jmp    L545
  nopw   0x0(%rax,%rax,1)
L597:
  mov    %esi,%edx
  mov    $0xf,%r10d
  and    $0x8003,%dx
  cmp    $0x1,%dx
  je     L59
  jmp    L530
  nopl   0x0(%rax)
L1216:
  mov    $0x8,%r10d
  jmp    L530
  nopl   0x0(%rax,%rax,1)
L2699:
  mov    $0x19,%r10d
  test   $0x3,%cl
  jne    L530
  lea    0x1(%rdx),%r10d
  cmp    %r10d,%r12d
  jne    L110
L1832:
  cmp    $0x8,%cx
  setg   %r13b
  jmp    L673
  nopl   0x0(%rax)
L2418:
  mov    %esi,%r13d
  and    $0x8003,%r13w
  cmp    $0x1,%r13w
  je     L1918
  test   %r14b,%r14b
  je     L1918
  mov    $0xd,%r10d
  jmp    L530
  nopl   0x0(%rax,%rax,1)
L1196:
  mov    %esi,%ebp
  and    $0x8003,%bp
  cmp    $0x1,%bp
  je     L227
  mov    $0xe,%r10d
  jmp    L530
  nopl   0x0(%rax)
L183:
  test   $0x3,%sil
  jne    L2858
L1256:
  cmp    $0x8,%si
  setg   %r14b
  jmp    L859
  nopw   0x0(%rax,%rax,1)
L2424:
  mov    $0x12,%r10d
  test   $0x3,%r11b
  jne    L530
L1508:
  cmp    $0x8,%r11w
  setg   %r12b
  jmp    L279
  xchg   %ax,%ax
L1771:
  test   $0x3,%sil
  je     L859
  test   %r13b,%r13b
  je     L859
  mov    $0xb,%r10d
  jmp    L530
  xchg   %ax,%ax
L492:
  mov    %esi,%r10d
  and    $0x8003,%r10w
  cmp    $0x1,%r10w
  je     L587
  mov    $0xd,%r10d
  test   %r12b,%r12b
  je     L587
  jmp    L530
  nopl   0x0(%rax,%rax,1)
L237:
  mov    %eax,%r10d
  and    $0x8003,%r10w
  cmp    $0x1,%r10w
  je     L1861
  mov    $0x5,%r10d
  test   %r13b,%r13b
  je     L1861
  jmp    L530
  nopl   0x0(%rax,%rax,1)
L2291:
  mov    %esi,%r12d
  mov    $0xe,%r10d
  and    $0x8003,%r12w
  cmp    $0x1,%r12w
  je     L1775
  jmp    L530
  nop
L806:
  mov    %eax,%edx
  mov    $0x6,%r10d
  and    $0x8003,%dx
  cmp    $0x1,%dx
  je     L1731
  jmp    L530
  nopl   0x0(%rax)
L2441:
  mov    $0x2,%r10d
  test   $0x3,%al
  je     L2292
  jmp    L530
  nopl   0x0(%rax,%rax,1)
L1021:
  mov    $0xa,%r10d
  test   $0x3,%sil
  je     L2625
  jmp    L530
  nopl   (%rax)
L15:
  test   $0x3,%sil
  je     L545
  mov    $0xb,%r10d
  test   %r12b,%r12b
  je     L545
  jmp    L530
  xchg   %ax,%ax
L1629:
  test   $0x3,%al
  je     L496
  mov    $0x3,%r10d
  test   %r13b,%r13b
  je     L496
  jmp    L530
  nopl   0x0(%rax)
L949:
  test   $0x3,%sil
  jne    L2050
  lea    0x1(%rbp),%r13d
  cmp    %r13d,%r12d
  jne    L1389
  jmp    L1256
  nopl   0x0(%rax)
L1149:
  mov    $0x11,%r10d
  test   $0x3,%r11b
  jne    L530
  lea    0x1(%rdx),%r10d
  cmp    %r10d,%ebp
  jne    L2715
  jmp    L1508
  nopw   0x0(%rax,%rax,1)
L2152:
  cmp    $0x12,%si
  sete   %r13b
  mov    %r13d,%r10d
  and    %r8b,%r10b
  mov    %r10b,-0x5(%rsp)
  je     L2813
  mov    $0x8,%r10d
  cmp    $0x16,%di
  jne    L530
  mov    %ebp,%r8d
  mov    $0x1,%esi
  mov    $0x9,%r10d
  and    $0x1,%r8d
  mov    %r8b,-0x4(%rsp)
  jne    L530
  movb   $0x1,-0x1(%rsp)
  movzbl -0x5(%rsp),%r13d
  movb   $0x0,-0x3(%rsp)
  movb   $0x0,-0x2(%rsp)
L2210:
  cmp    $0x15,%di
  setne  -0x6(%rsp)
  movzbl -0x6(%rsp),%edi
  test   %r9b,%dil
  je     L1426
  mov    $0xf,%r10d
  test   %r13b,%r13b
  jne    L530
L1426:
  movzbl -0x5(%rsp),%r8d
L61:
  test   %r8b,-0x3(%rsp)
  je     L1905
  cmpb   $0x0,-0x2(%rsp)
  mov    $0xf,%r10d
  jne    L530
L1905:
  test   %bpl,-0x4(%rsp)
  je     L1253
  mov    $0xf,%r10d
  test   %sil,%sil
  jne    L530
L1253:
  cmp    $0x11,%r11w
  sete   -0x5(%rsp)
  jne    L430
  test   %dl,%dl
  je     L430
  cmp    $0x15,%bx
  mov    $0x10,%r10d
  setne  %dil
  and    -0x6(%rsp),%dil
  mov    %edi,%r13d
  jne    L530
  movzbl -0x5(%rsp),%r11d
  and    %r15b,%r11b
  je     L1107
  xor    %r11d,%r11d
  xor    %edi,%edi
L2381:
  cmp    $0x16,%bx
  je     L2248
  cmpb   $0x0,-0x2(%rsp)
  mov    $0x11,%r10d
  jne    L530
L2248:
  test   %r13b,%r13b
  je     L184
  test   %r14b,%r14b
  je     L184
L2550:
  cmp    $0x17,%bx
  je     L549
  mov    $0x11,%r10d
  test   %sil,%sil
  jne    L530
L549:
  mov    $0x1,%r13d
L184:
  test   %dil,%dil
  je     L2487
  test   %al,%al
  je     L2487
  mov    %dil,-0x4(%rsp)
L100:
  cmp    $0x18,%bx
  je     L880
  cmpb   $0x0,-0x1(%rsp)
  mov    $0x11,%r10d
  jne    L530
L880:
  test   %r13b,%r13b
  je     L2477
  test   %dl,%dl
  je     L2477
  cmp    $0x15,%bx
  je     L2477
  cmpb   $0x0,-0x6(%rsp)
  jne    L2074
L2477:
  cmpb   $0x0,-0x4(%rsp)
  je     L1972
  test   %r15b,%r15b
  je     L1972
  cmp    $0x16,%bx
  je     L1972
  cmpb   $0x0,-0x2(%rsp)
  jne    L2074
L1972:
  test   %r14b,%r14b
  je     L2581
  test   %r11b,%r11b
  je     L2581
  cmp    $0x17,%bx
  je     L2581
  test   %sil,%sil
  jne    L2074
L2581:
  cmp    $0x11,%cx
  sete   %dil
  jne    L381
  test   %dl,%dl
  je     L381
  cmp    $0x15,%bx
  mov    $0x18,%r10d
  setne  %sil
  and    %r9b,%sil
  jne    L530
  xor    %ecx,%ecx
  and    %r15b,%dil
  mov    %edi,%r10d
  je     L1893
  xor    %r10d,%r10d
L613:
  cmp    $0x16,%bx
  je     L582
  test   %r8b,%r8b
  jne    L101
L582:
  test   %sil,%sil
  je     L2475
  test   %r14b,%r14b
  je     L2475
L213:
  cmp    $0x17,%bx
  je     L1438
  test   %bpl,%bpl
  jne    L101
L1438:
  mov    $0x1,%esi
L2475:
  test   %r10b,%r10b
  je     L902
  test   %al,%al
  je     L902
L1524:
  cmp    $0x18,%bx
  je     L902
  test   %r12b,%r12b
  jne    L101
L902:
  test   %sil,%sil
  je     L1893
  test   %dl,%dl
  je     L1893
  cmp    $0x15,%bx
  je     L1893
  test   %r9b,%r9b
  jne    L2394
L1893:
  test   %r15b,%r15b
  je     L2529
  test   %r10b,%r10b
  je     L2529
  cmp    $0x16,%bx
  je     L2529
  test   %r8b,%r8b
  jne    L2394
L2529:
  test   %cl,%cl
  je     L575
  test   %r14b,%r14b
  je     L575
  cmp    $0x17,%bx
  je     L575
  test   %bpl,%bpl
  je     L575
L2394:
  mov    $0x1f,%r10d
  jmp    L530
  nopl   0x0(%rax)
L1346:
  mov    %r11d,%r10d
  and    $0x8003,%r10w
  cmp    $0x1,%r10w
  je     L2838
  mov    $0x15,%r10d
  test   %r12b,%r12b
  je     L2838
  jmp    L530
L2872:
  mov    %r11d,%edx
  mov    $0x16,%r10d
  and    $0x8003,%dx
  cmp    $0x1,%dx
  je     L59
  jmp    L530
  nopl   (%rax)
L1782:
  mov    %ecx,%r10d
  and    $0x8003,%r10w
  cmp    $0x1,%r10w
  je     L2626
  mov    $0x1d,%r10d
  test   %r13b,%r13b
  je     L2626
  jmp    L530
  nopl   0x0(%rax,%rax,1)
L2713:
  mov    %ecx,%edx
  mov    $0x1e,%r10d
  and    $0x8003,%dx
  cmp    $0x1,%dx
  je     L1312
  jmp    L530
  nopl   0x0(%rax)
L65:
  mov    $0x1a,%r10d
  test   $0x3,%cl
  je     L1832
  jmp    L530
  nopl   0x0(%rax)
L1553:
  test   $0x3,%r11b
  je     L279
  mov    $0x13,%r10d
  test   %r12b,%r12b
  je     L279
  jmp    L530
L2813:
  cmp    $0x13,%si
  sete   -0x5(%rsp)
  movzbl -0x5(%rsp),%r10d
  and    %bpl,%r10b
  mov    %r10b,-0x3(%rsp)
  je     L2249
  mov    $0x8,%r10d
  cmp    $0x17,%di
  jne    L530
  mov    %r12d,%esi
  movb   $0x1,-0x1(%rsp)
  and    $0x1,%esi
  mov    %sil,-0x4(%rsp)
  jne    L2050
  movzbl -0x3(%rsp),%ebp
  movb   $0x1,-0x6(%rsp)
  xor    %esi,%esi
  mov    %bpl,-0x2(%rsp)
  jmp    L61
  nop
L1097:
  test   $0x3,%cl
  je     L673
  mov    $0x1b,%r10d
  test   %r13b,%r13b
  je     L673
  jmp    L530
  nopl   (%rax)
L1979:
  mov    %ecx,%edx
  mov    $0x1f,%r10d
  and    $0x8003,%dx
  cmp    $0x1,%dx
  je     L1312
  jmp    L530
  nopl   0x0(%rax)
L1849:
  mov    $0x4,%r10d
  jmp    L530
  nopl   0x0(%rax,%rax,1)
L2874:
  mov    $0x10,%r10d
  jmp    L530
  nopl   0x0(%rax,%rax,1)
L1582:
  mov    $0x18,%r10d
  jmp    L530
L2858:
  mov    $0xa,%r10d
  jmp    L530
L2030:
  mov    $0x14,%r10d
  jmp    L530
L2249:
  cmp    $0x14,%si
  sete   -0x4(%rsp)
  cmp    $0x18,%di
  movzbl -0x4(%rsp),%r10d
  setne  %sil
  test   %sil,%r10b
  je     L1580
  test   %r12b,%r12b
  jne    L1216
L1580:
  cmp    $0x16,%di
  setne  -0x2(%rsp)
  movzbl -0x2(%rsp),%esi
  test   %sil,-0x6(%rsp)
  je     L1497
  mov    $0x9,%r10d
  test   %r8b,%r8b
  jne    L530
L1497:
  cmp    $0x17,%di
  setne  %sil
  test   %bpl,%r13b
  je     L2117
  mov    $0x9,%r10d
  test   %sil,%sil
  jne    L530
L2117:
  cmp    $0x18,%di
  setne  -0x1(%rsp)
  movzbl -0x1(%rsp),%r10d
  test   %r12b,%r10b
  je     L2232
  cmpb   $0x0,-0x5(%rsp)
  mov    $0x9,%r10d
  jne    L530
L2232:
  movzbl -0x5(%rsp),%r10d
  mov    %r8b,-0x5(%rsp)
  mov    %r10b,-0x3(%rsp)
  jmp    L2210
L389:
  mov    $0x1c,%r10d
  jmp    L530
L430:
  cmp    $0x12,%r11w
  sete   %r13b
  mov    %r13d,%edi
  and    %r15b,%dil
  je     L2909
  cmp    $0x16,%bx
  mov    $0x10,%r10d
  setne  %r11b
  and    -0x2(%rsp),%r11b
  jne    L530
  test   %r14b,%r14b
  je     L1538
  xor    %edi,%edi
  jmp    L2550
L2909:
  cmp    $0x13,%r11w
  sete   %dil
  mov    %edi,%r10d
  and    %r14b,%r10b
  mov    %r10b,-0x4(%rsp)
  je     L245
  cmp    $0x17,%bx
  mov    $0x10,%r10d
  setne  %dil
  and    %sil,%dil
  mov    %edi,%r13d
  jne    L530
  xor    %r11d,%r11d
  test   %al,%al
  je     L2477
  mov    %al,-0x4(%rsp)
  jmp    L100
L245:
  cmp    $0x14,%r11w
  sete   %r10b
  mov    %r10d,%r11d
  and    %al,%r11b
  je     L1625
  cmp    $0x18,%bx
  je     L2248
  cmpb   $0x0,-0x1(%rsp)
  mov    $0x10,%r10d
  je     L2248
  jmp    L530
L381:
  cmp    $0x12,%cx
  sete   %sil
  mov    %esi,%r11d
  and    %r15b,%r11b
  je     L2514
  cmp    $0x16,%bx
  setne  %cl
  and    %r8b,%cl
  mov    %ecx,%r10d
  jne    L1582
  xor    %ecx,%ecx
  mov    %r11d,%esi
  test   %r14b,%r14b
  jne    L213
  jmp    L902
L2074:
  mov    $0x17,%r10d
  jmp    L530
L2514:
  cmp    $0x13,%cx
  sete   %r10b
  mov    %r10d,%r11d
  and    %r14b,%r11b
  je     L1212
  cmp    $0x17,%bx
  setne  %cl
  and    %bpl,%cl
  jne    L1582
  mov    %r11d,%r10d
  test   %al,%al
  je     L1893
  mov    %eax,%r10d
  xor    %esi,%esi
  jmp    L1524
L1212:
  cmp    $0x14,%cx
  sete   %cl
  mov    %ecx,%r11d
  and    %al,%r11b
  je     L136
  cmp    $0x18,%bx
  je     L1784
  test   %r12b,%r12b
  jne    L1582
L1784:
  mov    %r11d,%ecx
  jmp    L582
L1107:
  xor    %edi,%edi
L2487:
  mov    %dil,-0x4(%rsp)
  jmp    L880
L101:
  mov    $0x19,%r10d
  jmp    L530
L575:
  or     $0xffffffff,%r10d
  jmp    L530
L2771:
  movb   $0x0,-0x5(%rsp)
  mov    $0x1,%esi
  xor    %r13d,%r13d
  jmp    L2117
L356:
  cmp    $0x16,%r9w
  setne  %r8b
  test   %bpl,%r15b
  je     L1647
  mov    $0x1,%r10d
  test   %r8b,%r8b
  jne    L530
L1647:
  cmp    $0x17,%r9w
  setne  %bpl
  test   %r12b,%r14b
  je     L202
  mov    $0x1,%r10d
  test   %bpl,%bpl
  jne    L530
L202:
  mov    %r12b,-0x5(%rsp)
  movzbl -0x6(%rsp),%r13d
  jmp    L403
L2618:
  movb   $0x0,-0x4(%rsp)
  mov    $0x1,%ebp
  mov    %r12d,%edx
  movb   $0x0,-0x5(%rsp)
  jmp    L403
L136:
  test   %dil,%dil
  je     L582
  test   %r15b,%r15b
  jne    L613
  jmp    L582
L1625:
  cmpb   $0x0,-0x5(%rsp)
  mov    %r10d,%r11d
  je     L2248
  test   %r15b,%r15b
  jne    L2381
  jmp    L2248
L1538:
  movb   $0x0,-0x4(%rsp)
  mov    %edi,%r13d
  jmp    L880
```

assistant: ```c
short get_first_winning_move(short a, short b, short c, short d, short e, short f, short g, short h) {
  if (a != 0 && e == 0 && f == 0 && g != 0 && h == 0) {
    if (a + 4 == g)
      return 0;
    if (a + 5 == g && a % 4 != 0)
      return 1;
    if (a + 1 == g && a % 4 != 0)
      return 2;
    if (a - 3 == g && a % 4 != 0 && 8 < a)
      return 3;
    if (a - 4 == g && 8 < a)
      return 4;
    if (a - 5 == g && a % 4 != 1 && 8 < a)
      return 5;
    if (a - 1 == g && a % 4 != 1)
      return 6;
    if (a + 3 == g && a % 4 != 1)
      return 7;
  }
  if (a != 0 && e == 0 && f == 0 && g == 0 && h != 0) {
    if (a + 4 == h)
      return 0;
    if (a + 5 == h && a % 4 != 0)
      return 1;
    if (a + 1 == h && a % 4 != 0)
      return 2;
    if (a - 3 == h && a % 4 != 0 && 8 < a)
      return 3;
    if (a - 4 == h && 8 < a)
      return 4;
    if (a - 5 == h && a % 4 != 1 && 8 < a)
      return 5;
    if (a - 1 == h && a % 4 != 1)
      return 6;
    if (a + 3 == h && a % 4 != 1)
      return 7;
  }
  if (b != 0 && e != 0 && f == 0 && g == 0 && h == 0) {
    if (b + 4 == e)
      return 8;
    if (b + 5 == e && b % 4 != 0)
      return 9;
    if (b + 1 == e && b % 4 != 0)
      return 10;
    if (b - 3 == e && b % 4 != 0 && 8 < b)
      return 11;
    if (b - 4 == e && 8 < b)
      return 12;
    if (b - 5 == e && b % 4 != 1 && 8 < b)
      return 13;
    if (b - 1 == e && b % 4 != 1)
      return 14;
    if (b + 3 == e && b % 4 != 1)
      return 15;
  }
  if (b != 0 && e == 0 && f == 0 && g == 0 && h != 0) {
    if (b + 4 == h)
      return 8;
    if (b + 5 == h && b % 4 != 0)
      return 9;
    if (b + 1 == h && b % 4 != 0)
      return 10;
    if (b - 3 == h && b % 4 != 0 && 8 < b)
      return 11;
    if (b - 4 == h && 8 < b)
      return 12;
    if (b - 5 == h && b % 4 != 1 && 8 < b)
      return 13;
    if (b - 1 == h && b % 4 != 1)
      return 14;
    if (b + 3 == h && b % 4 != 1)
      return 15;
  }
  if (c != 0 && e == 0 && f != 0 && g == 0 && h == 0) {
    if (c + 4 == f)
      return 16;
    if (c + 5 == f && c % 4 != 0)
      return 17;
    if (c + 1 == f && c % 4 != 0)
      return 18;
    if (c - 3 == f && c % 4 != 0 && 8 < c)
      return 19;
    if (c - 4 == f && 8 < c)
      return 20;
    if (c - 5 == f && c % 4 != 1 && 8 < c)
      return 21;
    if (c - 1 == f && c % 4 != 1)
      return 22;
    if (c + 3 == f && c % 4 != 1)
      return 23;
  }
  if (d != 0 && e == 0 && f == 0 && g != 0 && h == 0) {
    if (d + 4 == g)
      return 24;
    if (d + 5 == g && d % 4 != 0)
      return 25;
    if (d + 1 == g && d % 4 != 0)
      return 26;
    if (d - 3 == g && d % 4 != 0 && 8 < d)
      return 27;
    if (d - 4 == g && 8 < d)
      return 28;
    if (d - 5 == g && d % 4 != 1 && 8 < d)
      return 29;
    if (d - 1 == g && d % 4 != 1)
      return 30;
    if (d + 3 == g && d % 4 != 1)
      return 31;
  }
  if ((a == 17 && e != 21 && f != 21) || (a == 18 && e != 22 && f != 22) || (a == 19 && e != 23 && f != 23) || (a == 20 && e != 24 && f != 24))
    return 0;
  if ((a == 17 && e != 22 && f != 22) || (a == 18 && e != 23 && f != 23) || (a == 19 && e != 24 && f != 24))
    return 1;
  if ((a == 18 && e != 21 && f != 21) || (a == 19 && e != 22 && f != 22) || (a == 20 && e != 23 && f != 23))
    return 7;
  if ((b == 17 && f != 21 && g != 21) || (b == 18 && f != 22 && g != 22) || (b == 19 && f != 23 && g != 23) || (b == 20 && f != 24 && g != 24))
    return 8;
  if ((b == 17 && f != 22 && g != 22) || (b == 18 && f != 23 && g != 23) || (b == 19 && f != 24 && g != 24))
    return 9;
  if ((b == 18 && f != 21 && g != 21) || (b == 19 && f != 22 && g != 22) || (b == 20 && f != 23 && g != 23))
    return 15;
  if ((c == 17 && e != 21 && g != 21 && h != 21) || (c == 18 && e != 22 && g != 22 && h != 22) || (c == 19 && e != 23 && g != 23 && h != 23) || (c == 20 && e != 24 && g != 24 && h != 24))
    return 16;
  if ((c == 17 && e != 22 && g != 22 && h != 22) || (c == 18 && e != 23 && g != 23 && h != 23) || (c == 19 && e != 24 && g != 24 && h != 24))
    return 17;
  if ((c == 18 && e != 21 && g != 21 && h != 21) || (c == 19 && e != 22 && g != 22 && h != 22) || (c == 20 && e != 23 && g != 23 && h != 23))
    return 23;
  if ((d == 17 && e != 21 && f != 21 && h != 21) || (d == 18 && e != 22 && f != 22 && h != 22) || (d == 19 && e != 23 && f != 23 && h != 23) || (d == 20 && e != 24 && f != 24 && h != 24))
    return 24;
  if ((d == 17 && e != 22 && f != 22 && h != 22) || (d == 18 && e != 23 && f != 23 && h != 23) || (d == 19 && e != 24 && f != 24 && h != 24))
    return 25;
  if ((d == 18 && e != 21 && f != 21 && h != 21) || (d == 19 && e != 22 && f != 22 && h != 22) || (d == 20 && e != 23 && f != 23 && h != 23))
    return 31;
  return -1;
}
```