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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x168,%rsp
  mov    %edi,-0x164(%rbp)
  mov    %rsi,-0x170(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x38(%rbp)
  xor    %eax,%eax
  mov    %rsp,%rax
  mov    %rax,%rbx
  movl   $0x20,-0x148(%rbp)
  mov    -0x148(%rbp),%edx
  movslq %edx,%rax
  sub    $0x1,%rax
  mov    %rax,-0xc0(%rbp)
  movslq %edx,%rax
  mov    %rax,-0x180(%rbp)
  movq   $0x0,-0x178(%rbp)
  movslq %edx,%rax
  mov    %rax,-0x190(%rbp)
  movq   $0x0,-0x188(%rbp)
  movslq %edx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    $0x10,%eax
  sub    $0x1,%rax
  add    %rdx,%rax
  mov    $0x10,%esi
  mov    $0x0,%edx
  div    %rsi
  imul   $0x10,%rax,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rcx
  mov    %rsp,%rdx
  sub    %rcx,%rdx
L779:
  cmp    %rdx,%rsp
  je     L490
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L779
L490:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  mov    %rax,%rdx
  and    $0xfff,%edx
  test   %rdx,%rdx
  je     L554
  and    $0xfff,%eax
  sub    $0x8,%rax
  add    %rsp,%rax
  orq    $0x0,(%rax)
L554:
  mov    %rsp,%rax
  add    $0x3,%rax
  shr    $0x2,%rax
  shl    $0x2,%rax
  mov    %rax,-0xb8(%rbp)
  mov    -0x148(%rbp),%eax
  movslq %eax,%rdx
  sub    $0x1,%rdx
  mov    %rdx,-0xb0(%rbp)
  movslq %eax,%rdx
  mov    %rdx,%r14
  mov    $0x0,%r15d
  movslq %eax,%rdx
  mov    %rdx,%r12
  mov    $0x0,%r13d
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    $0x10,%eax
  sub    $0x1,%rax
  add    %rdx,%rax
  mov    $0x10,%edi
  mov    $0x0,%edx
  div    %rdi
  imul   $0x10,%rax,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rcx
  mov    %rsp,%rdx
  sub    %rcx,%rdx
L675:
  cmp    %rdx,%rsp
  je     L1537
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L675
L1537:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  mov    %rax,%rdx
  and    $0xfff,%edx
  test   %rdx,%rdx
  je     L1414
  and    $0xfff,%eax
  sub    $0x8,%rax
  add    %rsp,%rax
  orq    $0x0,(%rax)
L1414:
  mov    %rsp,%rax
  add    $0x7,%rax
  shr    $0x3,%rax
  shl    $0x3,%rax
  mov    %rax,-0xa8(%rbp)
  mov    -0x148(%rbp),%eax
  movslq %eax,%rdx
  sub    $0x1,%rdx
  mov    %rdx,-0xa0(%rbp)
  movslq %eax,%rdx
  mov    %rdx,%r10
  mov    $0x0,%r11d
  movslq %eax,%rdx
  mov    %rdx,%r8
  mov    $0x0,%r9d
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    $0x10,%eax
  sub    $0x1,%rax
  add    %rdx,%rax
  mov    $0x10,%esi
  mov    $0x0,%edx
  div    %rsi
  imul   $0x10,%rax,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rcx
  mov    %rsp,%rdx
  sub    %rcx,%rdx
L907:
  cmp    %rdx,%rsp
  je     L897
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L907
L897:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  mov    %rax,%rdx
  and    $0xfff,%edx
  test   %rdx,%rdx
  je     L634
  and    $0xfff,%eax
  sub    $0x8,%rax
  add    %rsp,%rax
  orq    $0x0,(%rax)
L634:
  mov    %rsp,%rax
  add    $0x3,%rax
  shr    $0x2,%rax
  shl    $0x2,%rax
  mov    %rax,-0x98(%rbp)
  movl   $0x0,-0x154(%rbp)
  movl   $0x20,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L183
L802:
  mov    -0x154(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x154(%rbp)
  mov    -0xb8(%rbp),%rdx
  mov    -0x14c(%rbp),%ecx
  movslq %ecx,%rcx
  mov    %eax,(%rdx,%rcx,4)
  addl   $0x1,-0x14c(%rbp)
L183:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L802
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L557
  mov    $0x0,%eax
  call   <abort@plt>
L557:
  movl   $0x20,-0x154(%rbp)
  movl   $0x0,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L40
L1337:
  mov    -0x154(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x154(%rbp)
  mov    -0xb8(%rbp),%rdx
  mov    -0x14c(%rbp),%ecx
  movslq %ecx,%rcx
  mov    %eax,(%rdx,%rcx,4)
  addl   $0x1,-0x14c(%rbp)
L40:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1337
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L855
  mov    $0x0,%eax
  call   <abort@plt>
L855:
  movl   $0x0,-0x154(%rbp)
  movl   $0x20,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1268
L315:
  addl   $0x1,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1268:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L315
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L1201
  mov    $0x0,%eax
  call   <abort@plt>
L1201:
  movl   $0x20,-0x154(%rbp)
  movl   $0x0,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L818
L1192:
  subl   $0x1,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L818:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1192
  movl   $0x0,-0x154(%rbp)
  movl   $0x20,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L814
L1034:
  movl   $0x1,-0xcc(%rbp)
  mov    -0xcc(%rbp),%eax
  add    %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L814:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1034
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L441
  mov    $0x0,%eax
  call   <abort@plt>
L441:
  movl   $0x0,-0x154(%rbp)
  movl   $0x20,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1154
L1251:
  movl   $0x1,-0xd0(%rbp)
  mov    -0xd0(%rbp),%eax
  add    %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1154:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1251
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L81
  mov    $0x0,%eax
  call   <abort@plt>
L81:
  movl   $0x0,-0x154(%rbp)
  movl   $0x20,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L890
L33:
  movl   $0x1,-0xd4(%rbp)
  mov    -0xd4(%rbp),%eax
  add    %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L890:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L33
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L144
  mov    $0x0,%eax
  call   <abort@plt>
L144:
  movq   $0x1,-0xc8(%rbp)
  mov    -0x148(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0x90(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L746
L1599:
  movq   $0x2,-0x40(%rbp)
  mov    -0xc8(%rbp),%rax
  imul   -0x40(%rbp),%rax
  mov    %rax,-0xc8(%rbp)
  mov    -0xa8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0xc8(%rbp),%rcx
  mov    %rcx,(%rax,%rdx,8)
  addl   $0x1,-0x14c(%rbp)
L746:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1599
  mov    -0x90(%rbp),%rax
  cmp    -0xc8(%rbp),%rax
  je     L381
  mov    $0x0,%eax
  call   <abort@plt>
L381:
  movq   $0x1,-0xc8(%rbp)
  mov    -0x148(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0x90(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L848
L619:
  movq   $0x2,-0x48(%rbp)
  mov    -0xc8(%rbp),%rax
  imul   -0x48(%rbp),%rax
  mov    %rax,-0xc8(%rbp)
  mov    -0xa8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0xc8(%rbp),%rcx
  mov    %rcx,(%rax,%rdx,8)
  addl   $0x1,-0x14c(%rbp)
L848:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L619
  mov    -0x90(%rbp),%rax
  cmp    -0xc8(%rbp),%rax
  je     L822
  mov    $0x0,%eax
  call   <abort@plt>
L822:
  movq   $0x1,-0xc8(%rbp)
  mov    -0x148(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0x90(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L863
L1407:
  movq   $0x2,-0x50(%rbp)
  mov    -0xc8(%rbp),%rax
  imul   -0x50(%rbp),%rax
  mov    %rax,-0xc8(%rbp)
  mov    -0xa8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0xc8(%rbp),%rcx
  mov    %rcx,(%rax,%rdx,8)
  addl   $0x1,-0x14c(%rbp)
L863:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1407
  mov    -0x90(%rbp),%rax
  cmp    -0xc8(%rbp),%rax
  je     L1359
  mov    $0x0,%eax
  call   <abort@plt>
L1359:
  movl   $0x20,-0x154(%rbp)
  movl   $0x0,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1519
L337:
  movl   $0x1,-0xd8(%rbp)
  mov    -0xd8(%rbp),%eax
  sub    %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1519:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L337
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L565
  mov    $0x0,%eax
  call   <abort@plt>
L565:
  movl   $0x20,-0x154(%rbp)
  movl   $0x0,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L904
L595:
  movl   $0x1,-0xdc(%rbp)
  mov    -0xdc(%rbp),%eax
  sub    %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L904:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L595
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L1365
  mov    $0x0,%eax
  call   <abort@plt>
L1365:
  movl   $0x20,-0x154(%rbp)
  movl   $0x20,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1383
L303:
  movl   $0x1,-0xe0(%rbp)
  mov    -0xe0(%rbp),%eax
  sub    -0x154(%rbp),%eax
  mov    %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1383:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L303
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L1374
  mov    $0x0,%eax
  call   <abort@plt>
L1374:
  movabs $0x100000000,%rax
  mov    %rax,-0xc8(%rbp)
  movq   $0x1,-0x90(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1409
L1072:
  movq   $0x2,-0x58(%rbp)
  mov    -0xc8(%rbp),%rax
  cqto
  idivq  -0x58(%rbp)
  mov    %rax,-0xc8(%rbp)
  mov    -0xa8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0xc8(%rbp),%rcx
  mov    %rcx,(%rax,%rdx,8)
  addl   $0x1,-0x14c(%rbp)
L1409:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1072
  mov    -0x90(%rbp),%rax
  cmp    -0xc8(%rbp),%rax
  je     L665
  mov    $0x0,%eax
  call   <abort@plt>
L665:
  movabs $0x100000000,%rax
  mov    %rax,-0xc8(%rbp)
  movq   $0x1,-0x90(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L465
L1622:
  movq   $0x2,-0x60(%rbp)
  mov    -0xc8(%rbp),%rax
  cqto
  idivq  -0x60(%rbp)
  mov    %rax,-0xc8(%rbp)
  mov    -0xa8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0xc8(%rbp),%rcx
  mov    %rcx,(%rax,%rdx,8)
  addl   $0x1,-0x14c(%rbp)
L465:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1622
  mov    -0x90(%rbp),%rax
  cmp    -0xc8(%rbp),%rax
  je     L378
  mov    $0x0,%eax
  call   <abort@plt>
L378:
  movq   $0x2,-0xc8(%rbp)
  movq   $0x2,-0x90(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L712
L69:
  mov    -0x148(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0x68(%rbp)
  mov    -0x68(%rbp),%rax
  cqto
  idivq  -0xc8(%rbp)
  mov    %rax,-0xc8(%rbp)
  mov    -0xa8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0xc8(%rbp),%rcx
  mov    %rcx,(%rax,%rdx,8)
  addl   $0x1,-0x14c(%rbp)
L712:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L69
  mov    -0x90(%rbp),%rax
  cmp    -0xc8(%rbp),%rax
  je     L361
  mov    $0x0,%eax
  call   <abort@plt>
L361:
  movl   $0xffffffff,-0x154(%rbp)
  movl   $0x0,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1655
L659:
  mov    -0x14c(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0xe4(%rbp)
  mov    -0xe4(%rbp),%eax
  and    %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1655:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L659
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L1648
  mov    $0x0,%eax
  call   <abort@plt>
L1648:
  movl   $0xffffffff,-0x154(%rbp)
  movl   $0x0,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1401
L1566:
  mov    -0x14c(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0xe8(%rbp)
  mov    -0xe8(%rbp),%eax
  and    %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1401:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1566
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L1060
  mov    $0x0,%eax
  call   <abort@plt>
L1060:
  movl   $0xffffffff,-0x154(%rbp)
  movl   $0x0,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1356
L394:
  mov    -0x14c(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0xec(%rbp)
  mov    -0xec(%rbp),%eax
  and    %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1356:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L394
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L1567
  mov    $0x0,%eax
  call   <abort@plt>
L1567:
  movl   $0xffffffff,-0x154(%rbp)
  movl   $0x0,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1077
L1388:
  mov    -0x14c(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0xf0(%rbp)
  mov    -0xf0(%rbp),%eax
  xor    %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1077:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1388
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L1625
  mov    $0x0,%eax
  call   <abort@plt>
L1625:
  movl   $0xffffffff,-0x154(%rbp)
  movl   $0x0,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L56
L1313:
  mov    -0x14c(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0xf4(%rbp)
  mov    -0xf4(%rbp),%eax
  xor    %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L56:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1313
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L1525
  mov    $0x0,%eax
  call   <abort@plt>
L1525:
  movl   $0xffffffff,-0x154(%rbp)
  movl   $0x0,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L74
L1467:
  mov    -0x14c(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0xf8(%rbp)
  mov    -0xf8(%rbp),%eax
  xor    %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L74:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1467
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L447
  mov    $0x0,%eax
  call   <abort@plt>
L447:
  movl   $0x0,-0x154(%rbp)
  movl   $0xffffffff,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1557
L1369:
  mov    -0x14c(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0xfc(%rbp)
  mov    -0xfc(%rbp),%eax
  or     %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1557:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1369
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L975
  mov    $0x0,%eax
  call   <abort@plt>
L975:
  movl   $0x0,-0x154(%rbp)
  movl   $0xffffffff,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1526
L1186:
  mov    -0x14c(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0x100(%rbp)
  mov    -0x100(%rbp),%eax
  or     %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1526:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1186
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L1457
  mov    $0x0,%eax
  call   <abort@plt>
L1457:
  movl   $0x0,-0x154(%rbp)
  movl   $0xffffffff,-0x144(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L621
L1257:
  mov    -0x14c(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0x104(%rbp)
  mov    -0x104(%rbp),%eax
  or     %eax,-0x154(%rbp)
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0x154(%rbp),%ecx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L621:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1257
  mov    -0x144(%rbp),%eax
  cmp    -0x154(%rbp),%eax
  je     L703
  mov    $0x0,%eax
  call   <abort@plt>
L703:
  movq   $0x1,-0xc8(%rbp)
  mov    -0x148(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0x90(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L342
L1553:
  movl   $0x1,-0x108(%rbp)
  mov    -0x108(%rbp),%eax
  mov    %eax,%ecx
  shlq   %cl,-0xc8(%rbp)
  mov    -0xa8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0xc8(%rbp),%rcx
  mov    %rcx,(%rax,%rdx,8)
  addl   $0x1,-0x14c(%rbp)
L342:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1553
  mov    -0x90(%rbp),%rax
  cmp    -0xc8(%rbp),%rax
  je     L1483
  mov    $0x0,%eax
  call   <abort@plt>
L1483:
  movq   $0x1,-0xc8(%rbp)
  mov    -0x148(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0x90(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1215
L118:
  movl   $0x1,-0x10c(%rbp)
  mov    -0x10c(%rbp),%eax
  mov    %eax,%ecx
  shlq   %cl,-0xc8(%rbp)
  mov    -0xc8(%rbp),%rax
  mov    %eax,%ecx
  mov    -0xb8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    %ecx,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1215:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L118
  mov    -0x90(%rbp),%rax
  cmp    -0xc8(%rbp),%rax
  je     L418
  mov    $0x0,%eax
  call   <abort@plt>
L418:
  movq   $0x1,-0xc8(%rbp)
  movq   $0x2,-0x90(%rbp)
  movq   $0x1,-0x88(%rbp)
  mov    -0xc8(%rbp),%rax
  mov    %eax,%edx
  mov    -0x88(%rbp),%rax
  mov    %edx,%ecx
  shl    %cl,%rax
  mov    %rax,-0xc8(%rbp)
  mov    -0xa8(%rbp),%rax
  mov    -0xc8(%rbp),%rdx
  mov    %rdx,(%rax)
  mov    -0x90(%rbp),%rax
  cmp    -0xc8(%rbp),%rax
  je     L279
  mov    $0x0,%eax
  call   <abort@plt>
L279:
  mov    -0x148(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0xc8(%rbp)
  movq   $0x1,-0x90(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L661
L956:
  movq   $0x1,-0x70(%rbp)
  mov    -0x70(%rbp),%rax
  mov    %eax,%ecx
  sarq   %cl,-0xc8(%rbp)
  mov    -0xa8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0xc8(%rbp),%rcx
  mov    %rcx,(%rax,%rdx,8)
  addl   $0x1,-0x14c(%rbp)
L661:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L956
  mov    -0x90(%rbp),%rax
  cmp    -0xc8(%rbp),%rax
  je     L1025
  mov    $0x0,%eax
  call   <abort@plt>
L1025:
  mov    -0x148(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0xc8(%rbp)
  movq   $0x1,-0x90(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L329
L238:
  movl   $0x1,-0x110(%rbp)
  mov    -0x110(%rbp),%eax
  mov    %eax,%ecx
  sarq   %cl,-0xc8(%rbp)
  mov    -0xa8(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0xc8(%rbp),%rcx
  mov    %rcx,(%rax,%rdx,8)
  addl   $0x1,-0x14c(%rbp)
L329:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L238
  mov    -0x90(%rbp),%rax
  cmp    -0xc8(%rbp),%rax
  je     L1559
  mov    $0x0,%eax
  call   <abort@plt>
L1559:
  movabs $0x8000000000000000,%rax
  mov    %rax,-0xc8(%rbp)
  movabs $0x100000000,%rax
  mov    %rax,-0x90(%rbp)
  mov    %rax,-0x80(%rbp)
  mov    -0xc8(%rbp),%rax
  mov    %eax,%edx
  mov    -0x80(%rbp),%rax
  mov    %edx,%ecx
  sar    %cl,%rax
  mov    %rax,-0xc8(%rbp)
  mov    -0xa8(%rbp),%rax
  mov    -0xc8(%rbp),%rdx
  mov    %rdx,(%rax)
  mov    -0x90(%rbp),%rax
  cmp    -0xc8(%rbp),%rax
  je     L1080
  mov    $0x0,%eax
  call   <abort@plt>
L1080:
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x150(%rbp)
  movss  D361(%rip),%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1180
L1301:
  movss  -0x150(%rbp),%xmm0
  movss  D135(%rip),%xmm1
  addss  %xmm0,%xmm1
  movss  %xmm1,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1180:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1301
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L572
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L1429
L572:
  mov    $0x0,%eax
  call   <abort@plt>
L1429:
  movss  D361(%rip),%xmm0
  movss  %xmm0,-0x150(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L333
L178:
  movss  -0x150(%rbp),%xmm0
  movss  D135(%rip),%xmm2
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  movss  %xmm1,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L333:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L178
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L325
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L917
L325:
  mov    $0x0,%eax
  call   <abort@plt>
L917:
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x150(%rbp)
  movss  D361(%rip),%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L21
L1399:
  movss  -0x150(%rbp),%xmm1
  movss  D135(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L21:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1399
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L581
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L1381
L581:
  mov    $0x0,%eax
  call   <abort@plt>
L1381:
  movss  D361(%rip),%xmm0
  movss  %xmm0,-0x150(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1183
L1464:
  movss  -0x150(%rbp),%xmm0
  movss  D135(%rip),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1183:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1464
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L1494
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L589
L1494:
  mov    $0x0,%eax
  call   <abort@plt>
L589:
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x150(%rbp)
  movss  D361(%rip),%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1106
L928:
  movss  D135(%rip),%xmm0
  movss  %xmm0,-0x114(%rbp)
  movss  -0x150(%rbp),%xmm0
  addss  -0x114(%rbp),%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1106:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L928
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L114
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L96
L114:
  mov    $0x0,%eax
  call   <abort@plt>
L96:
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x150(%rbp)
  movss  D361(%rip),%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1173
L1076:
  movss  D135(%rip),%xmm0
  movss  %xmm0,-0x118(%rbp)
  movss  -0x150(%rbp),%xmm0
  addss  -0x118(%rbp),%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1173:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1076
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L159
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L1657
L159:
  mov    $0x0,%eax
  call   <abort@plt>
L1657:
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x150(%rbp)
  movss  D361(%rip),%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L288
L316:
  movss  D135(%rip),%xmm0
  movss  %xmm0,-0x11c(%rbp)
  movss  -0x150(%rbp),%xmm0
  addss  -0x11c(%rbp),%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L288:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L316
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L292
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L1104
L292:
  mov    $0x0,%eax
  call   <abort@plt>
L1104:
  movss  D135(%rip),%xmm0
  movss  %xmm0,-0x150(%rbp)
  movss  D285(%rip),%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L367
L1478:
  movss  D385(%rip),%xmm0
  movss  %xmm0,-0x120(%rbp)
  movss  -0x150(%rbp),%xmm0
  mulss  -0x120(%rbp),%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L367:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1478
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L781
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L674
L781:
  mov    $0x0,%eax
  call   <abort@plt>
L674:
  movss  D135(%rip),%xmm0
  movss  %xmm0,-0x150(%rbp)
  movss  D285(%rip),%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L382
L1189:
  movq   $0x2,-0x78(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssq -0x78(%rbp),%xmm0
  movss  -0x150(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L382:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1189
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L1260
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L305
L1260:
  mov    $0x0,%eax
  call   <abort@plt>
L305:
  movss  D135(%rip),%xmm0
  movss  %xmm0,-0x150(%rbp)
  movss  D285(%rip),%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L528
L84:
  movss  D385(%rip),%xmm0
  movss  %xmm0,-0x124(%rbp)
  movss  -0x150(%rbp),%xmm0
  mulss  -0x124(%rbp),%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L528:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L84
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L341
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L1379
L341:
  mov    $0x0,%eax
  call   <abort@plt>
L1379:
  movss  D361(%rip),%xmm0
  movss  %xmm0,-0x150(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1292
L1419:
  movss  D135(%rip),%xmm0
  movss  %xmm0,-0x128(%rbp)
  movss  -0x150(%rbp),%xmm0
  subss  -0x128(%rbp),%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1292:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1419
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L1234
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L845
L1234:
  mov    $0x0,%eax
  call   <abort@plt>
L845:
  movss  D361(%rip),%xmm0
  movss  %xmm0,-0x150(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L542
L912:
  movss  D135(%rip),%xmm0
  movss  %xmm0,-0x12c(%rbp)
  movss  -0x150(%rbp),%xmm0
  subss  -0x12c(%rbp),%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L542:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L912
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L212
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L415
L212:
  mov    $0x0,%eax
  call   <abort@plt>
L415:
  movss  D135(%rip),%xmm0
  movss  %xmm0,-0x150(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x140(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L598
L1458:
  movss  D361(%rip),%xmm0
  movss  %xmm0,-0x130(%rbp)
  movss  -0x130(%rbp),%xmm0
  subss  -0x150(%rbp),%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L598:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L1458
  movl   $0x0,-0x14c(%rbp)
  jmp    L1579
L796:
  mov    -0x14c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L1501
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  (%rax,%rdx,4),%xmm0
  ucomiss D217(%rip),%xmm0
  jp     L688
  ucomiss D217(%rip),%xmm0
  je     L798
L688:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L798
L1501:
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  (%rax,%rdx,4),%xmm0
  movss  D135(%rip),%xmm1
  ucomiss %xmm1,%xmm0
  jp     L444
  movss  D135(%rip),%xmm1
  ucomiss %xmm1,%xmm0
  je     L798
L444:
  mov    $0x0,%eax
  call   <abort@plt>
L798:
  addl   $0x1,-0x14c(%rbp)
L1579:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L796
  movss  D135(%rip),%xmm0
  movss  %xmm0,-0x140(%rbp)
  movss  D285(%rip),%xmm0
  movss  %xmm0,-0x150(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L1033
L705:
  movss  D385(%rip),%xmm0
  movss  %xmm0,-0x134(%rbp)
  movss  -0x150(%rbp),%xmm0
  divss  -0x134(%rbp),%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L1033:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L705
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L1628
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L1081
L1628:
  mov    $0x0,%eax
  call   <abort@plt>
L1081:
  movss  D135(%rip),%xmm0
  movss  %xmm0,-0x140(%rbp)
  movss  D285(%rip),%xmm0
  movss  %xmm0,-0x150(%rbp)
  movl   $0x0,-0x14c(%rbp)
  jmp    L463
L946:
  movss  D385(%rip),%xmm0
  movss  %xmm0,-0x138(%rbp)
  movss  -0x150(%rbp),%xmm0
  divss  -0x138(%rbp),%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  mov    -0x14c(%rbp),%edx
  movslq %edx,%rdx
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  addl   $0x1,-0x14c(%rbp)
L463:
  mov    -0x14c(%rbp),%eax
  cmp    -0x148(%rbp),%eax
  jl     L946
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L992
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L170
L992:
  mov    $0x0,%eax
  call   <abort@plt>
L170:
  movss  D135(%rip),%xmm0
  movss  %xmm0,-0x140(%rbp)
  movss  D285(%rip),%xmm0
  movss  %xmm0,-0x150(%rbp)
  movss  D285(%rip),%xmm0
  movss  %xmm0,-0x13c(%rbp)
  movss  -0x13c(%rbp),%xmm0
  divss  -0x150(%rbp),%xmm0
  movss  %xmm0,-0x150(%rbp)
  mov    -0x98(%rbp),%rax
  movss  -0x150(%rbp),%xmm0
  movss  %xmm0,(%rax)
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  jp     L1426
  movss  -0x140(%rbp),%xmm0
  ucomiss -0x150(%rbp),%xmm0
  je     L1515
L1426:
  mov    $0x0,%eax
  call   <abort@plt>
L1515:
  mov    $0x0,%eax
  mov    %rbx,%rsp
  mov    -0x38(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L1140
  call   <__stack_chk_fail@plt>
L1140:
  lea    -0x28(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
```

tool_calls: name: read_data
arguments: label: D361
type_guessed: f32
name: read_data
arguments: label: D135
type_guessed: f32
name: read_data
arguments: label: D285
type_guessed: byte[4]
name: read_data
arguments: label: D385
type_guessed: f32
name: read_data
arguments: label: D217
type_guessed: f32

tool: D361: 32

tool: D135: 1

tool: {"D285": [0x00,0x00,0x80,0x4f]}

tool: D385: 2

tool: D217: 31

assistant: ```c
int main(int argc, char **argv) {
  int iexp, igot;
  long long lexp, lgot;
  int N = 32;
  int idata[N];
  long long ldata[N];
  float fexp, fgot;
  float fdata[N];
  int i;
  igot = 0;
  iexp = 32;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      idata[i] = igot++;
    }
  }
  if (iexp != igot)
    abort();
  igot = 32;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      idata[i] = igot--;
    }
  }
  if (iexp != igot)
    abort();
  igot = 0;
  iexp = 32;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      idata[i] = ++igot;
    }
  }
  if (iexp != igot)
    abort();
  igot = 32;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      idata[i] = --igot;
    }
  }
  igot = 0;
  iexp = 32;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = igot += expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = 0;
  iexp = 32;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = igot = igot + expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = 0;
  iexp = 32;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = igot = expr + igot;
    }
  }
  if (iexp != igot)
    abort();
  lgot = 1LL;
  lexp = 1LL << N;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 2LL;
#pragma acc atomic capture
      ldata[i] = lgot *= expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL;
  lexp = 1LL << N;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 2LL;
#pragma acc atomic capture
      ldata[i] = lgot = lgot * expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL;
  lexp = 1LL << N;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 2LL;
#pragma acc atomic capture
      ldata[i] = lgot = expr * lgot;
    }
  }
  if (lexp != lgot)
    abort();
  igot = 32;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = igot -= expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = 32;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = igot = igot - expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = 32;
  iexp = 32;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = igot = expr - igot;
    }
  }
  if (iexp != igot)
    abort();
  lgot = 1LL << 32;
  lexp = 1LL;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 2LL;
#pragma acc atomic capture
      ldata[i] = lgot /= expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL << 32;
  lexp = 1LL;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 2LL;
#pragma acc atomic capture
      ldata[i] = lgot = lgot / expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 2LL;
  lexp = 2LL;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 1LL << N;
#pragma acc atomic capture
      ldata[i] = lgot = expr / lgot;
    }
  }
  if (lexp != lgot)
    abort();
  igot = ~0;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot &= expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = ~0;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot = igot & expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = ~0;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot = expr & igot;
    }
  }
  if (iexp != igot)
    abort();
  igot = ~0;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot ^= expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = ~0;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot = igot ^ expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = ~0;
  iexp = 0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot = expr ^ igot;
    }
  }
  if (iexp != igot)
    abort();
  igot = 0;
  iexp = ~0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot |= expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = 0;
  iexp = ~0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot = igot | expr;
    }
  }
  if (iexp != igot)
    abort();
  igot = 0;
  iexp = ~0;
#pragma acc data copy(igot, idata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1 << i;
#pragma acc atomic capture
      idata[i] = igot = expr | igot;
    }
  }
  if (iexp != igot)
    abort();
  lgot = 1LL;
  lexp = 1LL << N;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      ldata[i] = lgot <<= expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL;
  lexp = 1LL << N;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      idata[i] = lgot = lgot << expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL;
  lexp = 2LL;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel
    {
      long long expr = 1LL;
#pragma acc atomic capture
      ldata[0] = lgot = expr << lgot;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL << N;
  lexp = 1LL;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 1LL;
#pragma acc atomic capture
      ldata[i] = lgot >>= expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL << N;
  lexp = 1LL;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      int expr = 1;
#pragma acc atomic capture
      ldata[i] = lgot = lgot >> expr;
    }
  }
  if (lexp != lgot)
    abort();
  lgot = 1LL << 63;
  lexp = 1LL << 32;
#pragma acc data copy(lgot, ldata [0:N])
  {
#pragma acc parallel
    {
      long long expr = 1LL << 32;
#pragma acc atomic capture
      ldata[0] = lgot = expr >> lgot;
    }
  }
  if (lexp != lgot)
    abort();
  fgot = 0.0;
  fexp = 32.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      fdata[i] = fgot++;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 32.0;
  fexp = 0.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      fdata[i] = fgot--;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 0.0;
  fexp = 32.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      fdata[i] = ++fgot;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 32.0;
  fexp = 0.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
#pragma acc atomic capture
      fdata[i] = --fgot;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 0.0;
  fexp = 32.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 1.0;
#pragma acc atomic capture
      fdata[i] = fgot += expr;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 0.0;
  fexp = 32.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 1.0;
#pragma acc atomic capture
      fdata[i] = fgot = fgot + expr;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 0.0;
  fexp = 32.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 1.0;
#pragma acc atomic capture
      fdata[i] = fgot = expr + fgot;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 1.0;
  fexp = 8192.0 * 8192.0 * 64.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 2.0;
#pragma acc atomic capture
      fdata[i] = fgot *= expr;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 1.0;
  fexp = 8192.0 * 8192.0 * 64.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      long long expr = 2LL;
#pragma acc atomic capture
      fdata[i] = fgot = fgot * expr;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 1.0;
  fexp = 8192.0 * 8192.0 * 64.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 2.0;
#pragma acc atomic capture
      fdata[i] = fgot = expr * fgot;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 32.0;
  fexp = 0.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 1.0;
#pragma acc atomic capture
      fdata[i] = fgot -= expr;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 32.0;
  fexp = 0.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 1.0;
#pragma acc atomic capture
      fdata[i] = fgot = fgot - expr;
    }
  }
  if (fexp != fgot)
    abort();
  fgot = 1.0;
  fexp = 0.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 32.0;
#pragma acc atomic capture
      fdata[i] = fgot = expr - fgot;
    }
  }
  for (i = 0; i < N; i++)
    if (i % 2 == 0) {
      if (fdata[i] != 31.0)
        abort();
    } else {
      if (fdata[i] != 1.0)
        abort();
    }
  fexp = 1.0;
  fgot = 8192.0 * 8192.0 * 64.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 2.0;
#pragma acc atomic capture
      fdata[i] = fgot /= expr;
    }
  }
  if (fexp != fgot)
    abort();
  fexp = 1.0;
  fgot = 8192.0 * 8192.0 * 64.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel loop
    for (i = 0; i < N; i++) {
      float expr = 2.0;
#pragma acc atomic capture
      fdata[i] = fgot = fgot / expr;
    }
  }
  if (fexp != fgot)
    abort();
  fexp = 1.0;
  fgot = 8192.0 * 8192.0 * 64.0;
#pragma acc data copy(fgot, fdata [0:N])
  {
#pragma acc parallel
    {
      float expr = 8192.0 * 8192.0 * 64.0;
#pragma acc atomic capture
      fdata[0] = fgot = expr / fgot;
    }
  }
  if (fexp != fgot)
    abort();
  return 0;
}
```