user: 请将以下的汇编代码转换成C语言代码:

```asm
<state_machine>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%r13
  mov    %rdi,%rbp
  mov    $0x0,%ebx
  lea    D5(%rip),%r12
L154:
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L978
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L978:
  add    $0x1,%rbp
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x43,%rax
  ja     L154
L1773:
  sub    $0x22,%rax
  cmp    $0x21,%rax
  ja     L154
  movslq (%r12,%rax,4),%rax
  add    %r12,%rax
  notrack jmp *%rax
L1428:
  mov    %rax,%rbp
  jmp    L82
L1215:
  mov    %rax,%rbp
  jmp    L82
L47:
  mov    %rax,%rbp
  jmp    L82
L1272:
  mov    %rax,%rbp
  jmp    L82
L363:
  mov    %rax,%rbp
  jmp    L82
L1560:
  mov    %rax,%rbp
  jmp    L82
L1879:
  mov    %rdx,%rbp
  jmp    L82
L625:
  mov    %rax,%rbp
  jmp    L82
L588:
  mov    %rax,%rbp
  jmp    L82
L811:
  mov    %rax,%rbp
  jmp    L82
L1492:
  mov    %rax,%rbp
  jmp    L82
L228:
  mov    %rax,%rbp
  jmp    L82
L170:
  mov    %rax,%rbp
  jmp    L82
L606:
  mov    %rax,%rbp
  jmp    L82
L206:
  mov    %rax,%rbp
  jmp    L82
L682:
  mov    %rax,%rbp
  jmp    L82
L419:
  mov    %rax,%rbp
  jmp    L82
L1622:
  mov    %rdx,%rbp
  jmp    L82
L1207:
  mov    %rdx,%rbp
  jmp    L82
L1043:
  mov    %rdx,%rbp
  jmp    L82
L197:
  mov    %rdx,%rbp
  jmp    L82
L758:
  mov    %rdx,%rbp
  jmp    L82
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L1769
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L1769:
  add    $0x1,%rbp
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x2a,%rax
  je     L742
L82:
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x43,%rax
  jbe    L1773
  jmp    L154
  lea    0x2(%r13),%rax
  cmp    %rax,%rbp
  jae    L1913
L1333:
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L1249
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L1249:
  lea    0x1(%rbp),%rdx
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x4f,%rax
  jne    L1622
  shl    $0x8,%rbx
  test   $0x7,%dl
  jne    L1055
  mov    0x1(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L1055:
  lea    0x2(%rbp),%rdx
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x4e,%rax
  jne    L1207
  shl    $0x8,%rbx
  test   $0x7,%dl
  jne    L583
  mov    0x2(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L583:
  lea    0x3(%rbp),%rdx
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x46,%rax
  jne    L1043
  shl    $0x8,%rbx
  test   $0x7,%dl
  jne    L183
  mov    0x3(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L183:
  lea    0x4(%rbp),%rdx
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x49,%rax
  jne    L197
  shl    $0x8,%rbx
  test   $0x7,%dl
  jne    L623
  mov    0x4(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L623:
  lea    0x5(%rbp),%rdx
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x47,%rax
  jne    L758
  shl    $0x8,%rbx
  test   $0x7,%dl
  jne    L579
  mov    0x5(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L579:
  add    $0x6,%rbp
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x5f,%rax
  jne    L82
  mov    %rbp,%r14
L796:
  shl    $0x8,%rbx
  test   $0x7,%r14b
  jne    L74
  mov    (%r14),%rbx
  test   %rbx,%rbx
  je     L1733
L74:
  add    $0x1,%r14
  mov    %rbx,%r15
  shr    $0x38,%r15
  mov    %r15,%rdi
  call   <isalnum@plt>
  cmp    $0x5f,%r15
  je     L796
  test   %eax,%eax
  jne    L796
  mov    %r14,%rsi
  sub    %rbp,%rsi
  sub    $0x1,%rsi
  mov    %rbp,%rdi
  call   <use_config@plt>
  mov    %r14,%rbp
  jmp    L82
L742:
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L434
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L434:
  add    $0x1,%rbp
  jmp    L1743
L510:
  add    $0x1,%rbp
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x2f,%rax
  je     L154
L1743:
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x2a,%rax
  jne    L742
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L510
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  jne    L510
L1733:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  mov    %rbp,%rax
  jmp    L344
L648:
  mov    %rbp,%rax
L344:
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L189
  mov    (%rax),%rbx
  test   %rbx,%rbx
  je     L1733
L189:
  lea    0x1(%rax),%rbp
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x27,%rdx
  je     L154
  cmp    $0x5c,%rdx
  jne    L648
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L695
  mov    0x1(%rax),%rbx
  test   %rbx,%rbx
  je     L1733
L695:
  add    $0x2,%rax
  jmp    L344
  mov    %rbp,%rax
  jmp    L1499
L1837:
  mov    %rbp,%rax
L1499:
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L1824
  mov    (%rax),%rbx
  test   %rbx,%rbx
  je     L1733
L1824:
  lea    0x1(%rax),%rbp
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x22,%rdx
  je     L154
  cmp    $0x5c,%rdx
  jne    L1837
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L388
  mov    0x1(%rax),%rbx
  test   %rbx,%rbx
  je     L1733
L388:
  add    $0x2,%rax
  jmp    L1499
  mov    %rbp,%rax
  jmp    L598
L1027:
  mov    %rbp,%rax
L598:
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L1847
  mov    (%rax),%rbx
  test   %rbx,%rbx
  je     L1733
L1847:
  lea    0x1(%rax),%rbp
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x9,%rdx
  je     L1027
  cmp    $0x20,%rdx
  je     L1027
  cmp    $0x69,%rdx
  je     L576
  cmp    $0x64,%rdx
  je     L308
  cmp    $0x75,%rdx
  jne    L82
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L1222
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L1222:
  add    $0x2,%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x6e,%rdx
  jne    L811
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L453
  mov    0x1(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L453:
  lea    0x2(%rbp),%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x64,%rdx
  jne    L1492
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L61
  mov    0x2(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L61:
  lea    0x3(%rbp),%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x65,%rdx
  jne    L228
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L1468
  mov    0x3(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L1468:
  add    $0x4,%rbp
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x66,%rax
  jne    L82
L1089:
  mov    %rbp,%rax
  jmp    L537
L576:
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L297
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L297:
  add    $0x2,%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x6e,%rdx
  jne    L1428
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L205
  mov    0x1(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L205:
  lea    0x2(%rbp),%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x63,%rdx
  jne    L1215
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L56
  mov    0x2(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L56:
  lea    0x3(%rbp),%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x6c,%rdx
  jne    L47
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L108
  mov    0x3(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L108:
  lea    0x4(%rbp),%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x75,%rdx
  jne    L1272
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L1528
  mov    0x4(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L1528:
  lea    0x5(%rbp),%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x64,%rdx
  jne    L363
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L155
  mov    0x5(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L155:
  add    $0x6,%rbp
  mov    %rbx,%rax
  shr    $0x38,%rax
  mov    %rbp,%rdx
  cmp    $0x65,%rax
  jne    L82
  jmp    L1350
L308:
  shl    $0x8,%rbx
  test   $0x7,%bpl
  jne    L1083
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L1083:
  add    $0x2,%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x65,%rdx
  jne    L1560
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L818
  mov    0x1(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L818:
  lea    0x2(%rbp),%rdx
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x66,%rax
  jne    L1879
  shl    $0x8,%rbx
  test   $0x7,%dl
  jne    L575
  mov    0x2(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L575:
  lea    0x3(%rbp),%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x69,%rdx
  jne    L625
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L1781
  mov    0x3(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L1781:
  lea    0x4(%rbp),%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x6e,%rdx
  jne    L588
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L1227
  mov    0x4(%rbp),%rbx
  test   %rbx,%rbx
  je     L1733
L1227:
  add    $0x5,%rbp
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x65,%rax
  jne    L82
  jmp    L1089
L524:
  mov    %rsi,%rdx
L1350:
  shl    $0x8,%rbx
  test   $0x7,%dl
  jne    L126
  mov    (%rdx),%rbx
  test   %rbx,%rbx
  je     L1733
L126:
  lea    0x1(%rdx),%rsi
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x20,%rax
  je     L524
  cmp    $0x9,%rax
  je     L524
  cmp    $0x22,%rax
  je     L1852
  cmp    $0x3c,%rax
  je     L181
  mov    %rsi,%rbp
  jmp    L82
L1852:
  mov    %rsi,%rax
  jmp    L1086
L809:
  mov    (%rax),%rbx
  test   %rbx,%rbx
  je     L1733
L574:
  lea    0x1(%rax),%rbp
  mov    %rbx,%rcx
  shr    $0x38,%rcx
  cmp    $0xa,%rcx
  je     L154
  cmp    $0x22,%rcx
  je     L1058
  mov    %rbp,%rax
L1086:
  test   $0x7,%al
  je     L809
  shl    $0x8,%rbx
  jmp    L574
L1058:
  sub    %rdx,%rax
  lea    -0x1(%rax),%rdx
  mov    $0x1,%edi
  mov    $0x0,%eax
  call   <handle_include@plt>
  jmp    L154
L181:
  mov    %rsi,%rax
  jmp    L1320
L1479:
  mov    (%rax),%rbx
  test   %rbx,%rbx
  je     L1733
L532:
  lea    0x1(%rax),%rbp
  mov    %rbx,%rcx
  shr    $0x38,%rcx
  cmp    $0xa,%rcx
  je     L154
  cmp    $0x3e,%rcx
  je     L1509
  mov    %rbp,%rax
L1320:
  test   $0x7,%al
  je     L1479
  shl    $0x8,%rbx
  jmp    L532
L1509:
  sub    %rdx,%rax
  lea    -0x1(%rax),%rdx
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <handle_include@plt>
  jmp    L154
L134:
  mov    %rbp,%rax
L537:
  shl    $0x8,%rbx
  test   $0x7,%al
  jne    L290
  mov    (%rax),%rbx
  test   %rbx,%rbx
  je     L1733
L290:
  lea    0x1(%rax),%rbp
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x9,%rdx
  je     L134
  cmp    $0x20,%rdx
  je     L134
  cmp    $0x43,%rdx
  jne    L82
  test   $0x7,%bpl
  je     L1535
  shl    $0x8,%rbx
L1757:
  add    $0x2,%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x4f,%rdx
  jne    L170
  test   $0x7,%al
  je     L346
  shl    $0x8,%rbx
L1410:
  lea    0x2(%rbp),%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x4e,%rdx
  jne    L606
  test   $0x7,%al
  je     L1275
  shl    $0x8,%rbx
L1288:
  lea    0x3(%rbp),%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x46,%rdx
  jne    L206
  test   $0x7,%al
  je     L345
  shl    $0x8,%rbx
L177:
  lea    0x4(%rbp),%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x49,%rdx
  jne    L682
  test   $0x7,%al
  je     L719
  shl    $0x8,%rbx
L1081:
  lea    0x5(%rbp),%rax
  mov    %rbx,%rdx
  shr    $0x38,%rdx
  cmp    $0x47,%rdx
  jne    L419
  test   $0x7,%al
  je     L115
  shl    $0x8,%rbx
L1899:
  add    $0x6,%rbp
  mov    %rbx,%rax
  shr    $0x38,%rax
  cmp    $0x5f,%rax
  jne    L82
  mov    %rbp,%r14
L1414:
  test   $0x7,%r14b
  je     L1082
  shl    $0x8,%rbx
L1501:
  add    $0x1,%r14
  mov    %rbx,%r15
  shr    $0x38,%r15
  mov    %r15,%rdi
  call   <isalnum@plt>
  cmp    $0x5f,%r15
  je     L1414
  test   %eax,%eax
  jne    L1414
  mov    %r14,%rdx
  sub    %rbp,%rdx
  sub    $0x1,%rdx
  mov    %rbp,%rsi
  mov    $0x1,%edi
  call   <define_config@plt>
  mov    %r14,%rbp
  jmp    L82
L1535:
  mov    0x0(%rbp),%rbx
  test   %rbx,%rbx
  jne    L1757
  jmp    L1733
L346:
  mov    0x1(%rbp),%rbx
  test   %rbx,%rbx
  jne    L1410
  jmp    L1733
L1275:
  mov    0x2(%rbp),%rbx
  test   %rbx,%rbx
  jne    L1288
  jmp    L1733
L345:
  mov    0x3(%rbp),%rbx
  test   %rbx,%rbx
  jne    L177
  jmp    L1733
L719:
  mov    0x4(%rbp),%rbx
  test   %rbx,%rbx
  jne    L1081
  jmp    L1733
L115:
  mov    0x5(%rbp),%rbx
  test   %rbx,%rbx
  jne    L1899
  jmp    L1733
L1082:
  mov    (%r14),%rbx
  test   %rbx,%rbx
  jne    L1501
  jmp    L1733
L1913:
  movzbl -0x2(%rbp),%r14d
  movsbl %r14b,%edi
  call   <isalnum@plt>
  cmp    $0x5f,%r14b
  je     L154
  test   %eax,%eax
  je     L1333
  jmp    L154
```

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