user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<DoArithmEval>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %esi,-0x3c(%rbp)
  mov    %edx,-0x40(%rbp)
  mov    %rcx,-0x48(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  jmp    L260
L1619:
  addl   $0x1,-0x3c(%rbp)
L260:
  mov    -0x3c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jge    L994
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L1619
  jmp    L994
L1287:
  subl   $0x1,-0x40(%rbp)
L994:
  mov    -0x3c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jge    L468
  mov    -0x40(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L1287
L468:
  mov    -0x3c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jne    L230
  mov    $0x0,%eax
  jmp    L1904
L230:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D22(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L1717
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L26
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L213
L26:
  mov    $0x0,%eax
  jmp    L1904
L213:
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  jne    L1038
  mov    -0x18(%rbp),%eax
  test   %eax,%eax
  je     L1833
L1038:
  mov    $0x1,%edx
  jmp    L1014
L1833:
  mov    $0x0,%edx
L1014:
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L1717:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D158(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L1786
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L565
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L939
L565:
  mov    $0x0,%eax
  jmp    L1904
L939:
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  je     L1199
  mov    -0x18(%rbp),%eax
  test   %eax,%eax
  je     L1199
  mov    $0x1,%edx
  jmp    L980
L1199:
  mov    $0x0,%edx
L980:
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L1786:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D94(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L896
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L798
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L534
L798:
  mov    $0x0,%eax
  jmp    L1904
L534:
  mov    -0x20(%rbp),%edx
  mov    -0x18(%rbp),%eax
  or     %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L896:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D172(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L725
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L1180
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L439
L1180:
  mov    $0x0,%eax
  jmp    L1904
L439:
  mov    -0x20(%rbp),%edx
  mov    -0x18(%rbp),%eax
  xor    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L725:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D72(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L237
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L897
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L318
L897:
  mov    $0x0,%eax
  jmp    L1904
L318:
  mov    -0x20(%rbp),%edx
  mov    -0x18(%rbp),%eax
  and    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L237:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D210(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L416
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L428
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L590
  jmp    L428
L137:
  mov    -0x28(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x28(%rbp)
L428:
  mov    -0x28(%rbp),%eax
  cmp    %eax,-0x3c(%rbp)
  jge    L690
  mov    -0x28(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L137
  jmp    L690
L299:
  mov    -0x24(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x24(%rbp)
L690:
  mov    -0x24(%rbp),%eax
  cmp    %eax,-0x40(%rbp)
  jle    L1696
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L299
L1696:
  mov    -0x28(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    -0x24(%rbp),%ecx
  mov    -0x40(%rbp),%edx
  sub    %ecx,%edx
  cmp    %edx,%eax
  je     L1670
  mov    -0x48(%rbp),%rax
  movl   $0x1,(%rax)
  jmp    L111
L1670:
  mov    -0x28(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    -0x24(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x38(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rsi
  mov    -0x3c(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rcx
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  setne  %al
  movzbl %al,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L111
L590:
  mov    -0x20(%rbp),%edx
  mov    -0x18(%rbp),%eax
  cmp    %eax,%edx
  setne  %al
  movzbl %al,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
L111:
  mov    $0x1,%eax
  jmp    L1904
L416:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D219(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L699
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L901
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L348
  jmp    L901
L1477:
  mov    -0x28(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x28(%rbp)
L901:
  mov    -0x28(%rbp),%eax
  cmp    %eax,-0x3c(%rbp)
  jge    L1679
  mov    -0x28(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L1477
  jmp    L1679
L1934:
  mov    -0x24(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x24(%rbp)
L1679:
  mov    -0x24(%rbp),%eax
  cmp    %eax,-0x40(%rbp)
  jle    L1454
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L1934
L1454:
  mov    -0x28(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    -0x24(%rbp),%ecx
  mov    -0x40(%rbp),%edx
  sub    %ecx,%edx
  cmp    %edx,%eax
  je     L541
  mov    -0x48(%rbp),%rax
  movl   $0x0,(%rax)
  jmp    L1726
L541:
  mov    -0x28(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    -0x24(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x38(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rsi
  mov    -0x3c(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rcx
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L1726
L348:
  mov    -0x20(%rbp),%edx
  mov    -0x18(%rbp),%eax
  cmp    %eax,%edx
  sete   %al
  movzbl %al,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
L1726:
  mov    $0x1,%eax
  jmp    L1904
L699:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D84(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L1744
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L256
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L280
  jmp    L256
L178:
  mov    -0x28(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x28(%rbp)
L256:
  mov    -0x28(%rbp),%eax
  cmp    %eax,-0x3c(%rbp)
  jge    L1246
  mov    -0x28(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L178
  jmp    L1246
L1719:
  mov    -0x24(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x24(%rbp)
L1246:
  mov    -0x24(%rbp),%eax
  cmp    %eax,-0x40(%rbp)
  jle    L1943
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L1719
L1943:
  mov    -0x28(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x40(%rbp),%eax
  sub    %edx,%eax
  cmp    %eax,-0x1c(%rbp)
  jle    L1234
  mov    -0x24(%rbp),%edx
  mov    -0x40(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x1c(%rbp)
L1234:
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <strncmp@plt>
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  jg     L982
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  jne    L1328
  mov    -0x28(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    -0x24(%rbp),%ecx
  mov    -0x40(%rbp),%edx
  sub    %ecx,%edx
  cmp    %edx,%eax
  jl     L1328
L982:
  mov    $0x1,%edx
  jmp    L612
L1328:
  mov    $0x0,%edx
L612:
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L1672
L280:
  mov    -0x20(%rbp),%edx
  mov    -0x18(%rbp),%eax
  cmp    %eax,%edx
  setge  %al
  movzbl %al,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
L1672:
  mov    $0x1,%eax
  jmp    L1904
L1744:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D126(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L412
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L1225
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L360
  jmp    L1225
L704:
  mov    -0x28(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x28(%rbp)
L1225:
  mov    -0x28(%rbp),%eax
  cmp    %eax,-0x3c(%rbp)
  jge    L786
  mov    -0x28(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L704
  jmp    L786
L1125:
  mov    -0x24(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x24(%rbp)
L786:
  mov    -0x24(%rbp),%eax
  cmp    %eax,-0x40(%rbp)
  jle    L573
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L1125
L573:
  mov    -0x28(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x40(%rbp),%eax
  sub    %edx,%eax
  cmp    %eax,-0x1c(%rbp)
  jle    L152
  mov    -0x24(%rbp),%edx
  mov    -0x40(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x1c(%rbp)
L152:
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <strncmp@plt>
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  jg     L865
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  jne    L648
  mov    -0x28(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    -0x24(%rbp),%ecx
  mov    -0x40(%rbp),%edx
  sub    %ecx,%edx
  cmp    %edx,%eax
  jle    L648
L865:
  mov    $0x1,%edx
  jmp    L1588
L648:
  mov    $0x0,%edx
L1588:
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L1493
L360:
  mov    -0x20(%rbp),%edx
  mov    -0x18(%rbp),%eax
  cmp    %eax,%edx
  setg   %al
  movzbl %al,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
L1493:
  mov    $0x1,%eax
  jmp    L1904
L412:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D43(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L943
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L952
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L407
  jmp    L952
L170:
  mov    -0x28(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x28(%rbp)
L952:
  mov    -0x28(%rbp),%eax
  cmp    %eax,-0x3c(%rbp)
  jge    L918
  mov    -0x28(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L170
  jmp    L918
L1946:
  mov    -0x24(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x24(%rbp)
L918:
  mov    -0x24(%rbp),%eax
  cmp    %eax,-0x40(%rbp)
  jle    L1079
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L1946
L1079:
  mov    -0x28(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x40(%rbp),%eax
  sub    %edx,%eax
  cmp    %eax,-0x1c(%rbp)
  jle    L1681
  mov    -0x24(%rbp),%edx
  mov    -0x40(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x1c(%rbp)
L1681:
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <strncmp@plt>
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  js     L466
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  jne    L1618
  mov    -0x28(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    -0x24(%rbp),%ecx
  mov    -0x40(%rbp),%edx
  sub    %ecx,%edx
  cmp    %edx,%eax
  jg     L1618
L466:
  mov    $0x1,%edx
  jmp    L1925
L1618:
  mov    $0x0,%edx
L1925:
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L1049
L407:
  mov    -0x20(%rbp),%edx
  mov    -0x18(%rbp),%eax
  cmp    %eax,%edx
  setle  %al
  movzbl %al,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
L1049:
  mov    $0x1,%eax
  jmp    L1904
L943:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D216(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L197
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L698
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1335
  jmp    L698
L346:
  mov    -0x28(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x28(%rbp)
L698:
  mov    -0x28(%rbp),%eax
  cmp    %eax,-0x3c(%rbp)
  jge    L517
  mov    -0x28(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L346
  jmp    L517
L1844:
  mov    -0x24(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x24(%rbp)
L517:
  mov    -0x24(%rbp),%eax
  cmp    %eax,-0x40(%rbp)
  jle    L164
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L1844
L164:
  mov    -0x28(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x40(%rbp),%eax
  sub    %edx,%eax
  cmp    %eax,-0x1c(%rbp)
  jle    L1190
  mov    -0x24(%rbp),%edx
  mov    -0x40(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x1c(%rbp)
L1190:
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <strncmp@plt>
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  js     L607
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  jne    L686
  mov    -0x28(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  mov    -0x24(%rbp),%ecx
  mov    -0x40(%rbp),%edx
  sub    %ecx,%edx
  cmp    %edx,%eax
  jge    L686
L607:
  mov    $0x1,%edx
  jmp    L1244
L686:
  mov    $0x0,%edx
L1244:
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L1361
L1335:
  mov    -0x20(%rbp),%edx
  mov    -0x18(%rbp),%eax
  cmp    %eax,%edx
  setl   %al
  movzbl %al,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
L1361:
  mov    $0x1,%eax
  jmp    L1904
L197:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D120(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L174
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L305
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L616
L305:
  mov    $0x0,%eax
  jmp    L1904
L616:
  mov    -0x20(%rbp),%edx
  mov    -0x18(%rbp),%eax
  add    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L174:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D123(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L1845
  mov    -0x28(%rbp),%eax
  cmp    %eax,-0x3c(%rbp)
  je     L1845
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L91
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L277
L91:
  mov    $0x0,%eax
  jmp    L1904
L277:
  mov    -0x20(%rbp),%eax
  mov    -0x18(%rbp),%ecx
  sub    %ecx,%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L1845:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D196(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L876
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L218
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L471
L218:
  mov    $0x0,%eax
  jmp    L1904
L471:
  mov    -0x20(%rbp),%edx
  mov    -0x18(%rbp),%eax
  imul   %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L876:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D3(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L1402
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L1270
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1651
L1270:
  mov    $0x0,%eax
  jmp    L1904
L1651:
  mov    -0x18(%rbp),%eax
  test   %eax,%eax
  jne    L1418
  lea    D32(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <bug@plt>
L1418:
  mov    -0x20(%rbp),%eax
  mov    -0x18(%rbp),%edi
  cltd
  idiv   %edi
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L1402:
  lea    -0x24(%rbp),%rdi
  lea    -0x28(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rdi,%r9
  mov    %rcx,%r8
  lea    D169(%rip),%rcx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <SpliceInfix@plt>
  test   %eax,%eax
  je     L1701
  mov    -0x28(%rbp),%edx
  lea    -0x20(%rbp),%rcx
  mov    -0x3c(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L1478
  mov    -0x24(%rbp),%esi
  lea    -0x18(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L467
L1478:
  mov    $0x0,%eax
  jmp    L1904
L467:
  mov    -0x18(%rbp),%eax
  test   %eax,%eax
  jne    L215
  lea    D32(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <bug@plt>
L215:
  mov    -0x20(%rbp),%eax
  mov    -0x18(%rbp),%ecx
  cltd
  idiv   %ecx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L1701:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x7e,%al
  jne    L117
  mov    -0x3c(%rbp),%eax
  lea    0x1(%rax),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1646
  mov    $0x0,%eax
  jmp    L1904
L1646:
  mov    -0x20(%rbp),%eax
  not    %eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L117:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x21,%al
  jne    L1912
  mov    -0x3c(%rbp),%eax
  lea    0x1(%rax),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1441
  mov    $0x0,%eax
  jmp    L1904
L1441:
  mov    -0x20(%rbp),%eax
  test   %eax,%eax
  sete   %al
  movzbl %al,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L1912:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L1248
  mov    -0x3c(%rbp),%eax
  lea    0x1(%rax),%esi
  lea    -0x20(%rbp),%rcx
  mov    -0x40(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L88
  mov    $0x0,%eax
  jmp    L1904
L88:
  mov    -0x20(%rbp),%eax
  neg    %eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L1248:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    $0x7,%edx
  lea    D117(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L1694
  mov    -0x40(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L531
  mov    $0x0,%eax
  jmp    L1904
L531:
  mov    -0x40(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  lea    -0x8(%rax),%edx
  mov    -0x48(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x1,%eax
  jmp    L1904
L1694:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    $0x7,%edx
  lea    D13(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L272
  addl   $0x7,-0x3c(%rbp)
  mov    -0x3c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jg     L1665
  mov    -0x40(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L1665
  subl   $0x1,-0x40(%rbp)
  jmp    L1665
L147:
  addl   $0x1,-0x3c(%rbp)
L1665:
  mov    -0x3c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jg     L1002
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L147
  jmp    L1002
L1638:
  subl   $0x1,-0x40(%rbp)
L1002:
  mov    -0x3c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jg     L1569
  mov    -0x40(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <iswhite@plt>
  test   %eax,%eax
  jne    L1638
L1569:
  mov    -0x40(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L746
  lea    D190(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <bug@plt>
  jmp    L1857
L746:
  subl   $0x1,-0x40(%rbp)
L1857:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  je     L1427
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3c,%al
  jne    L224
L1427:
  addl   $0x1,-0x3c(%rbp)
L224:
  mov    -0x40(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  je     L1309
  mov    -0x40(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3e,%al
  jne    L1863
L1309:
  subl   $0x1,-0x40(%rbp)
L1863:
  mov    -0x3c(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jle    L1052
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <bug@plt>
L1052:
  mov    -0x40(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  add    $0x2,%eax
  cltq
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x40(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  add    $0x1,%eax
  movslq %eax,%rdx
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x38(%rbp),%rax
  add    %rax,%rcx
  mov    -0x10(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x40(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <checkAbsOrCurrentDir@plt>
  test   %eax,%eax
  jne    L354
  mov    -0x48(%rbp),%rax
  movl   $0x0,(%rax)
  jmp    L1706
L354:
  mov    -0x48(%rbp),%rax
  movl   $0x1,(%rax)
L1706:
  mov    $0x1,%eax
  jmp    L1904
L272:
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x28,%al
  jne    L1063
  mov    -0x40(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L1273
  mov    $0x0,%eax
  jmp    L1904
L1273:
  mov    -0x40(%rbp),%eax
  lea    -0x1(%rax),%edi
  mov    -0x3c(%rbp),%eax
  lea    0x1(%rax),%esi
  mov    -0x48(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  mov    %rdx,%rcx
  mov    %edi,%edx
  mov    %rax,%rdi
  call   <DoArithmEval>
  jmp    L1904
L1063:
  mov    -0x40(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x29(%rbp)
  mov    -0x40(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  lea    -0x18(%rbp),%rax
  mov    $0x0,%edx
  mov    %rax,%rsi
  mov    %rcx,%rdi
  mov    $0x0,%eax
  call   <strtol@plt>
  mov    -0x48(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x40(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x29(%rbp),%eax
  mov    %al,(%rdx)
  mov    -0x40(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rax,%rdx
  mov    -0x18(%rbp),%rax
  cmp    %rax,%rdx
  sete   %al
  movzbl %al,%eax
L1904:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L906
  call   <__stack_chk_fail@plt>
L906:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D22
type_infered: string
name: read_data
arguments: tag: D158
type_infered: string
name: read_data
arguments: tag: D94
type_infered: string
name: read_data
arguments: tag: D172
type_infered: string
name: read_data
arguments: tag: D72
type_infered: string
name: read_data
arguments: tag: D210
type_infered: string
name: read_data
arguments: tag: D219
type_infered: string
name: read_data
arguments: tag: D84
type_infered: string
name: read_data
arguments: tag: D126
type_infered: string
name: read_data
arguments: tag: D43
type_infered: string
name: read_data
arguments: tag: D216
type_infered: string
name: read_data
arguments: tag: D120
type_infered: string
name: read_data
arguments: tag: D123
type_infered: string
name: read_data
arguments: tag: D196
type_infered: string
name: read_data
arguments: tag: D3
type_infered: string
name: read_data
arguments: tag: D32
type_infered: string
name: read_data
arguments: tag: D169
type_infered: string
name: read_data
arguments: tag: D117
type_infered: string
name: read_data
arguments: tag: D13
type_infered: string
name: read_data
arguments: tag: D190
type_infered: string
name: read_data
arguments: tag: D6
type_infered: string

tool: D22: ||

tool: D158: &&

tool: D94: |

tool: D172: ^

tool: D72: &

tool: D210: !=

tool: D219: ==

tool: D84: >=

tool: D126: >

tool: D43: <=

tool: D216: <

tool: D120: +

tool: D123: -

tool: D196: *

tool: D3: /

tool: D32: Division by zero in expression

tool: D169: %

tool: D117: length(

tool: D13: exists(

tool: D190: Wrong syntax in exists("file")

tool: D6: Missing file name in exists("file")

assistant: ```c
int DoArithmEval(char *buf, int pos1, int pos2, int *result) {
  int spl1, spl2;
  int l;
  int result1, result2;
  char c, *p;
  while ((pos1 < pos2) && iswhite(buf[pos1]))
    pos1++;
  while ((pos1 < pos2) && iswhite(buf[pos2 - 1]))
    pos2--;
  if (pos1 == pos2)
    return 0;
  if (SpliceInfix(buf, pos1, pos2, "||", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 || result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "&&", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 && result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "|", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 | result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "^", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 ^ result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "&", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 & result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "!=", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && iswhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && iswhite(buf[spl2]))
        spl2++;
      if (spl1 - pos1 != pos2 - spl2)
        *result = 1;
      else
        *result = (strncmp(buf + pos1, buf + spl2, spl1 - pos1) != 0);
    } else
      *result = (result1 != result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "==", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && iswhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && iswhite(buf[spl2]))
        spl2++;
      if (spl1 - pos1 != pos2 - spl2)
        *result = 0;
      else
        *result = (strncmp(buf + pos1, buf + spl2, spl1 - pos1) == 0);
    } else
      *result = (result1 == result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, ">=", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && iswhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && iswhite(buf[spl2]))
        spl2++;
      l = spl1 - pos1;
      if (l > pos2 - spl2)
        l = pos2 - spl2;
      result1 = strncmp(buf + pos1, buf + spl2, l);
      *result = (result1 > 0) || ((result1 == 0) && (spl1 - pos1 >= pos2 - spl2));
    } else
      *result = (result1 >= result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, ">", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && iswhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && iswhite(buf[spl2]))
        spl2++;
      l = spl1 - pos1;
      if (l > pos2 - spl2)
        l = pos2 - spl2;
      result1 = strncmp(buf + pos1, buf + spl2, l);
      *result = (result1 > 0) || ((result1 == 0) && (spl1 - pos1 > pos2 - spl2));
    } else
      *result = (result1 > result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "<=", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && iswhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && iswhite(buf[spl2]))
        spl2++;
      l = spl1 - pos1;
      if (l > pos2 - spl2)
        l = pos2 - spl2;
      result1 = strncmp(buf + pos1, buf + spl2, l);
      *result = (result1 < 0) || ((result1 == 0) && (spl1 - pos1 <= pos2 - spl2));
    } else
      *result = (result1 <= result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "<", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && iswhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && iswhite(buf[spl2]))
        spl2++;
      l = spl1 - pos1;
      if (l > pos2 - spl2)
        l = pos2 - spl2;
      result1 = strncmp(buf + pos1, buf + spl2, l);
      *result = (result1 < 0) || ((result1 == 0) && (spl1 - pos1 < pos2 - spl2));
    } else
      *result = (result1 < result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "+", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 + result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "-", &spl1, &spl2))
    if (spl1 != pos1) {
      if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
        return 0;
      *result = result1 - result2;
      return 1;
    }
  if (SpliceInfix(buf, pos1, pos2, "*", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 * result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "/", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    if (result2 == 0)
      bug("Division by zero in expression");
    *result = result1 / result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "%", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    if (result2 == 0)
      bug("Division by zero in expression");
    *result = result1 % result2;
    return 1;
  }
  if (buf[pos1] == '~') {
    if (!DoArithmEval(buf, pos1 + 1, pos2, &result1))
      return 0;
    *result = ~result1;
    return 1;
  }
  if (buf[pos1] == '!') {
    if (!DoArithmEval(buf, pos1 + 1, pos2, &result1))
      return 0;
    *result = !result1;
    return 1;
  }
  if (buf[pos1] == '-') {
    if (!DoArithmEval(buf, pos1 + 1, pos2, &result1))
      return 0;
    *result = -result1;
    return 1;
  }
  if (strncmp(buf + pos1, "length(", strlen("length(")) == 0) {
    if (buf[pos2 - 1] != ')')
      return 0;
    *result = pos2 - pos1 - (int)strlen("length()");
    return 1;
  }
  if (strncmp(buf + pos1, "exists(", strlen("exists(")) == 0) {
    char *file;
    pos1 += (int)strlen("exists(");
    if (pos1 <= pos2 && buf[pos2] == '\0')
      pos2--;
    while ((pos1 <= pos2) && iswhite(buf[pos1]))
      pos1++;
    while ((pos1 <= pos2) && iswhite(buf[pos2]))
      pos2--;
    if (buf[pos2] != ')')
      bug("Wrong syntax in exists(\"file\")");
    else
      pos2--;
    if (buf[pos1] == '\"' || buf[pos1] == '<')
      pos1++;
    if (buf[pos2] == '\"' || buf[pos2] == '>')
      pos2--;
    if (pos1 > pos2)
      bug("Missing file name in exists(\"file\")");
    file = malloc(pos2 - pos1 + 2);
    memcpy(file, buf + pos1, pos2 - pos1 + 1);
    file[pos2 - pos1 + 1] = '\0';
    if (checkAbsOrCurrentDir(file) == 0)
      *result = 0;
    else
      *result = 1;
    return 1;
  }
  if (buf[pos1] == '(') {
    if (buf[pos2 - 1] != ')')
      return 0;
    return DoArithmEval(buf, pos1 + 1, pos2 - 1, result);
  }
  c = buf[pos2];
  buf[pos2] = 0;
  *result = (int)strtol(buf + pos1, &p, 0);
  buf[pos2] = c;
  return (p == buf + pos2);
}
```