user: Translate the below assembly code into C programming language:

```asm
<state_machine>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  movq   $0x0,-0x10(%rbp)
L778:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L831
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L886
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L831:
  addq   $0x1,-0x18(%rbp)
L944:
  mov    -0x10(%rbp),%rax
  cmp    $0x43,%al
  jbe    L1385
  jmp    L778
L1385:
  mov    -0x10(%rbp),%rax
  cmp    $0x21,%al
  ja     L1965
  jmp    L778
L1965:
  mov    -0x10(%rbp),%rax
  cmp    $0x2f,%al
  je     L2150
  mov    -0x10(%rbp),%rax
  cmp    $0x27,%al
  jne    L2429
  jmp    L679
L2429:
  mov    -0x10(%rbp),%rax
  cmp    $0x22,%al
  jne    L1619
  jmp    L231
L1619:
  mov    -0x10(%rbp),%rax
  cmp    $0x23,%al
  jne    L388
  jmp    L1163
L388:
  mov    -0x10(%rbp),%rax
  cmp    $0x43,%al
  je     L1984
  jmp    L778
L228:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L1114
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L804
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L1114:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0xa,%al
  jne    L2594
  jmp    L778
L2594:
  mov    -0x10(%rbp),%rax
  cmp    $0x5c,%al
  je     L801
  jmp    L228
L801:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L2206
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1851
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L2206:
  addq   $0x1,-0x18(%rbp)
  jmp    L228
L2150:
  nop
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L233
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L906
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L233:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x2f,%al
  jne    L485
  jmp    L228
L485:
  mov    -0x10(%rbp),%rax
  cmp    $0x2a,%al
  je     L839
  jmp    L944
L839:
  nop
L1599:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L2584
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1538
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L2584:
  addq   $0x1,-0x18(%rbp)
L2649:
  mov    -0x10(%rbp),%rax
  cmp    $0x2a,%al
  je     L2352
  jmp    L1599
L2352:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L1562
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1795
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L1562:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x2f,%al
  je     L778
  jmp    L2649
L679:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L454
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1961
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L454:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x27,%al
  jne    L680
  jmp    L778
L680:
  mov    -0x10(%rbp),%rax
  cmp    $0x5c,%al
  je     L1572
  jmp    L679
L1572:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L180
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1553
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L180:
  addq   $0x1,-0x18(%rbp)
  jmp    L679
L231:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L242
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L139
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L242:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x22,%al
  jne    L1550
  jmp    L778
L1550:
  mov    -0x10(%rbp),%rax
  cmp    $0x5c,%al
  je     L895
  jmp    L231
L895:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L416
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1057
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L416:
  addq   $0x1,-0x18(%rbp)
  jmp    L231
L1163:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L762
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1659
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L762:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x20,%al
  jne    L1007
  jmp    L1163
L1007:
  mov    -0x10(%rbp),%rax
  cmp    $0x9,%al
  jne    L827
  jmp    L1163
L827:
  mov    -0x10(%rbp),%rax
  cmp    $0x69,%al
  je     L2641
  mov    -0x10(%rbp),%rax
  cmp    $0x64,%al
  je     L457
  mov    -0x10(%rbp),%rax
  cmp    $0x75,%al
  je     L546
  jmp    L944
L2641:
  nop
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L35
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1044
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L35:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x6e,%al
  je     L1865
  jmp    L944
L1865:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L1615
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2273
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L1615:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x63,%al
  je     L1806
  jmp    L944
L1806:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L1894
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L249
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L1894:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x6c,%al
  je     L64
  jmp    L944
L64:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L1272
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1782
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L1272:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x75,%al
  je     L1407
  jmp    L944
L1407:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L965
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2605
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L965:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x64,%al
  je     L1749
  jmp    L944
L1749:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L1855
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1237
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L1855:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x65,%al
  je     L2491
  jmp    L944
L2491:
  nop
L674:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L2014
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2096
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L2014:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x20,%al
  jne    L571
  jmp    L674
L571:
  mov    -0x10(%rbp),%rax
  cmp    $0x9,%al
  jne    L1187
  jmp    L674
L1187:
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x22,%al
  jne    L1287
  jmp    L2522
L1287:
  mov    -0x10(%rbp),%rax
  cmp    $0x3c,%al
  jne    L944
  jmp    L1442
L2522:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L2292
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2172
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L2292:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0xa,%al
  jne    L1264
  jmp    L778
L1264:
  mov    -0x10(%rbp),%rax
  cmp    $0x22,%al
  je     L51
  jmp    L2522
L51:
  mov    -0x18(%rbp),%rax
  sub    -0x8(%rbp),%rax
  sub    $0x1,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x0,%edi
  call   <handle_include@plt>
  jmp    L778
L1442:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L1959
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1625
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L1959:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0xa,%al
  jne    L179
  jmp    L778
L179:
  mov    -0x10(%rbp),%rax
  cmp    $0x3e,%al
  je     L1164
  jmp    L1442
L1164:
  mov    -0x18(%rbp),%rax
  sub    -0x8(%rbp),%rax
  sub    $0x1,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x1,%edi
  call   <handle_include@plt>
  jmp    L778
L457:
  nop
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L125
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2371
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L125:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x65,%al
  je     L302
  jmp    L944
L302:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L17
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1229
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L17:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x66,%al
  je     L2591
  jmp    L944
L2591:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L584
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2426
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L584:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x69,%al
  je     L1474
  jmp    L944
L1474:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L253
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2611
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L253:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x6e,%al
  je     L2238
  jmp    L944
L2238:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L1567
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L971
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L1567:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x65,%al
  je     L1067
  jmp    L944
L546:
  nop
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L2166
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L985
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L2166:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x6e,%al
  je     L2517
  jmp    L944
L2517:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L1533
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1020
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L1533:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x64,%al
  je     L1014
  jmp    L944
L1014:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L1448
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2070
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L1448:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x65,%al
  je     L507
  jmp    L944
L507:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L301
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2274
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L301:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x66,%al
  je     L1910
  jmp    L944
L1067:
  nop
  jmp    L712
L1910:
  nop
L712:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L246
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2568
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L246:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x20,%al
  jne    L1778
  jmp    L712
L1778:
  mov    -0x10(%rbp),%rax
  cmp    $0x9,%al
  jne    L2495
  jmp    L712
L2495:
  mov    -0x10(%rbp),%rax
  cmp    $0x43,%al
  je     L2024
  jmp    L944
L2024:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L843
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2246
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L843:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x4f,%al
  je     L483
  jmp    L944
L483:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L2015
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2223
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L2015:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x4e,%al
  je     L743
  jmp    L944
L743:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L889
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1244
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L889:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x46,%al
  je     L417
  jmp    L944
L417:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L528
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2048
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L528:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x49,%al
  je     L1322
  jmp    L944
L1322:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L599
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L543
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L599:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x47,%al
  je     L521
  jmp    L944
L521:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L269
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1697
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L269:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x5f,%al
  je     L2152
  jmp    L944
L2152:
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x8(%rbp)
L1685:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L2098
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1646
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L2098:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  movzbl %al,%eax
  mov    %eax,%edi
  call   <isalnum@plt>
  test   %rax,%rax
  jne    L1685
  mov    -0x10(%rbp),%rax
  cmp    $0x5f,%al
  jne    L944
  jmp    L1685
L1984:
  nop
  mov    -0x28(%rbp),%rax
  add    $0x2,%rax
  cmp    %rax,-0x18(%rbp)
  jb     L2470
  mov    -0x18(%rbp),%rax
  sub    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,%edi
  call   <isalnum@plt>
  test   %rax,%rax
  jne    L778
  mov    -0x18(%rbp),%rax
  sub    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  jne    L2470
  jmp    L778
L2470:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L2317
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2309
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L2317:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x4f,%al
  je     L240
  jmp    L944
L240:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L2376
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L432
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L2376:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x4e,%al
  je     L578
  jmp    L944
L578:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L393
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L120
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L393:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x46,%al
  je     L994
  jmp    L944
L994:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L2436
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1934
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L2436:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x49,%al
  je     L2554
  jmp    L944
L2554:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L354
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L2489
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L354:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x47,%al
  je     L1121
  jmp    L944
L1121:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L1319
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L989
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L1319:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x5f,%al
  je     L191
  jmp    L944
L191:
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x8(%rbp)
L1048:
  shrq   $0x8,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  jne    L1372
  mov    -0x18(%rbp),%rax
  cmp    -0x30(%rbp),%rax
  jae    L1877
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
L1372:
  addq   $0x1,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  movzbl %al,%eax
  mov    %eax,%edi
  call   <isalnum@plt>
  test   %rax,%rax
  jne    L1048
  mov    -0x10(%rbp),%rax
  cmp    $0x5f,%al
  jne    L1285
  jmp    L1048
L1285:
  mov    -0x18(%rbp),%rax
  sub    -0x8(%rbp),%rax
  sub    $0x1,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <use_config@plt>
  jmp    L944
L886:
  nop
  jmp    L515
L804:
  nop
  jmp    L515
L1851:
  nop
  jmp    L515
L906:
  nop
  jmp    L515
L1538:
  nop
  jmp    L515
L1795:
  nop
  jmp    L515
L1961:
  nop
  jmp    L515
L1553:
  nop
  jmp    L515
L139:
  nop
  jmp    L515
L1057:
  nop
  jmp    L515
L1659:
  nop
  jmp    L515
L1044:
  nop
  jmp    L515
L2273:
  nop
  jmp    L515
L249:
  nop
  jmp    L515
L1782:
  nop
  jmp    L515
L2605:
  nop
  jmp    L515
L1237:
  nop
  jmp    L515
L2096:
  nop
  jmp    L515
L2172:
  nop
  jmp    L515
L1625:
  nop
  jmp    L515
L2371:
  nop
  jmp    L515
L1229:
  nop
  jmp    L515
L2426:
  nop
  jmp    L515
L2611:
  nop
  jmp    L515
L971:
  nop
  jmp    L515
L985:
  nop
  jmp    L515
L1020:
  nop
  jmp    L515
L2070:
  nop
  jmp    L515
L2274:
  nop
  jmp    L515
L2568:
  nop
  jmp    L515
L2246:
  nop
  jmp    L515
L2223:
  nop
  jmp    L515
L1244:
  nop
  jmp    L515
L2048:
  nop
  jmp    L515
L543:
  nop
  jmp    L515
L1697:
  nop
  jmp    L515
L1646:
  nop
  jmp    L515
L2309:
  nop
  jmp    L515
L432:
  nop
  jmp    L515
L120:
  nop
  jmp    L515
L1934:
  nop
  jmp    L515
L2489:
  nop
  jmp    L515
L989:
  nop
  jmp    L515
L1877:
  nop
L515:
  nop
  leave
  ret
```

assistant: ```c
void state_machine(const char *map, const char *end) {
  const char *next = map;
  const char *map_dot;
  unsigned long __buf = 0;
  for (;;) {
  start : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
  __start:
    if (((unsigned char)__buf) > ((('/') > ((('\'') > ((('"') > ((('#') > ('C') ? ('#') : ('C'))) ? ('"') : ((('#') > ('C') ? ('#') : ('C'))))) ? ('\'') : ((('"') > ((('#') > ('C') ? ('#') : ('C'))) ? ('"') : ((('#') > ('C') ? ('#') : ('C'))))))) ? ('/') : ((('\'') > ((('"') > ((('#') > ('C') ? ('#') : ('C'))) ? ('"') : ((('#') > ('C') ? ('#') : ('C'))))) ? ('\'') : ((('"') > ((('#') > ('C') ? ('#') : ('C'))) ? ('"') : ((('#') > ('C') ? ('#') : ('C'))))))))))
      goto start;
    if (((unsigned char)__buf) < ((('/') < ((('\'') < ((('"') < ((('#') < ('C') ? ('#') : ('C'))) ? ('"') : ((('#') < ('C') ? ('#') : ('C'))))) ? ('\'') : ((('"') < ((('#') < ('C') ? ('#') : ('C'))) ? ('"') : ((('#') < ('C') ? ('#') : ('C'))))))) ? ('/') : ((('\'') < ((('"') < ((('#') < ('C') ? ('#') : ('C'))) ? ('"') : ((('#') < ('C') ? ('#') : ('C'))))) ? ('\'') : ((('"') < ((('#') < ('C') ? ('#') : ('C'))) ? ('"') : ((('#') < ('C') ? ('#') : ('C'))))))))))
      goto start;
    if (((unsigned char)__buf) == '/')
      goto slash;
    if (((unsigned char)__buf) == '\'')
      goto squote;
    if (((unsigned char)__buf) == '"')
      goto dquote;
    if (((unsigned char)__buf) == '#')
      goto pound;
    if (((unsigned char)__buf) == 'C')
      goto cee;
    goto start;
  slash_slash : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (((unsigned char)__buf) == '\n')
      goto start;
    if (((unsigned char)__buf) != '\\')
      goto slash_slash;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    goto slash_slash;
  slash : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (((unsigned char)__buf) == '/')
      goto slash_slash;
    if (((unsigned char)__buf) != '*')
      goto __start;
  slash_star_dot_star : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
  __slash_star_dot_star:
    if (((unsigned char)__buf) != '*')
      goto slash_star_dot_star;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != '/')
      goto __slash_star_dot_star;
    goto start;
  squote : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (((unsigned char)__buf) == '\'')
      goto start;
    if (((unsigned char)__buf) != '\\')
      goto squote;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    goto squote;
  dquote : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (((unsigned char)__buf) == '"')
      goto start;
    if (((unsigned char)__buf) != '\\')
      goto dquote;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    goto dquote;
  pound : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (((unsigned char)__buf) == ' ')
      goto pound;
    if (((unsigned char)__buf) == '\t')
      goto pound;
    if (((unsigned char)__buf) == 'i')
      goto pound_i;
    if (((unsigned char)__buf) == 'd')
      goto pound_d;
    if (((unsigned char)__buf) == 'u')
      goto pound_u;
    goto __start;
  pound_i : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (((unsigned char)__buf) != 'n')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'c')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'l')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'u')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'd')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'e')
      goto __start;
    goto pound_include;
  pound_include : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (((unsigned char)__buf) == ' ')
      goto pound_include;
    if (((unsigned char)__buf) == '\t')
      goto pound_include;
    map_dot = next;
    if (((unsigned char)__buf) == '"')
      goto pound_include_dquote;
    if (((unsigned char)__buf) == '<')
      goto pound_include_langle;
    goto __start;
  pound_include_dquote : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (((unsigned char)__buf) == '\n')
      goto start;
    if (((unsigned char)__buf) != '"')
      goto pound_include_dquote;
    handle_include(0, map_dot, next - map_dot - 1);
    goto start;
  pound_include_langle : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (((unsigned char)__buf) == '\n')
      goto start;
    if (((unsigned char)__buf) != '>')
      goto pound_include_langle;
    handle_include(1, map_dot, next - map_dot - 1);
    goto start;
  pound_d : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (((unsigned char)__buf) != 'e')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'f')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'i')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'n')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'e')
      goto __start;
    goto pound_define_undef;
  pound_u : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (((unsigned char)__buf) != 'n')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'd')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'e')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'f')
      goto __start;
    goto pound_define_undef;
  pound_define_undef : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (((unsigned char)__buf) == ' ')
      goto pound_define_undef;
    if (((unsigned char)__buf) == '\t')
      goto pound_define_undef;
    if (((unsigned char)__buf) != 'C')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'O')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'N')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'F')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'I')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'G')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != '_')
      goto __start;
    map_dot = next;
  pound_define_undef_CONFIG_word : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (isalnum(((unsigned char)__buf)) || ((unsigned char)__buf) == '_')
      goto pound_define_undef_CONFIG_word;
    goto __start;
  cee:
    if (next >= map + 2 && (isalnum((int)next[-2]) || next[-2] == '_'))
      goto start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'O')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'N')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'F')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'I')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != 'G')
      goto __start;
    {
      (__buf >>= 8);
      if ((unsigned long)next % sizeof(unsigned long) == 0) {
        if (next >= end)
          break;
        __buf = *(unsigned long *)next;
      }
      next++;
    }
    if (((unsigned char)__buf) != '_')
      goto __start;
    map_dot = next;
  cee_CONFIG_word : {
    (__buf >>= 8);
    if ((unsigned long)next % sizeof(unsigned long) == 0) {
      if (next >= end)
        break;
      __buf = *(unsigned long *)next;
    }
    next++;
  }
    if (isalnum(((unsigned char)__buf)) || ((unsigned char)__buf) == '_')
      goto cee_CONFIG_word;
    use_config(map_dot, next - map_dot - 1);
    goto __start;
  }
}
```