user: Please show me the C implementation that matches the assembly code listed below:

```asm
<t_special>:
  endbr64
  sub    $0x8,%rsp
  cmp    %esi,%edi
  sete   %r8b
  cmp    %edx,%edi
  sete   %al
  or     %r8b,%al
  jne    L73
  cmp    %edx,%esi
  jne    L338
L73:
  movzbl 0x7(%rcx),%eax
  cmp    $0x34,%al
  je     L41
  lea    -0x62(%rax),%r9d
  cmp    $0xa,%r9b
  ja     L64
  ja     L64
  movzbl %r9b,%eax
  lea    D9(%rip),%r9
  movslq (%r9,%rax,4),%rax
  add    %r9,%rax
  notrack jmp *%rax
L338:
  mov    %edi,%eax
  add    %esi,%eax
  jne    L54
  movzbl 0x7(%rcx),%eax
  cmp    $0x65,%al
  je     L318
  jle    L64
  cmp    $0x69,%al
  je     L328
L64:
  call   <t1@plt>
L357:
  add    $0x8,%rsp
  ret
  test   $0x1,%dl
  je     L64
  test   %r8b,%r8b
  je     L64
  mov    $0x0,%eax
  jmp    L357
L41:
  lea    (%rdx,%rdi,2),%eax
  and    $0x3,%eax
  mov    %edx,%r8d
  and    $0x1,%r8d
  or     %r8d,%eax
  je     L64
  mov    $0x0,%eax
  cmp    %esi,%edi
  je     L357
  jmp    L64
  test   $0x1,%dl
  je     L64
  mov    %edi,%eax
  add    %esi,%eax
  jne    L64
  mov    $0x0,%eax
  jmp    L357
  test   $0x1,%dl
  je     L64
  mov    $0x0,%eax
  cmp    %esi,%edi
  je     L357
L14:
  mov    $0x0,%eax
  mov    %edi,%r10d
  add    %esi,%r10d
  jne    L64
  jmp    L357
  cmp    %esi,%edi
  je     L254
L415:
  cmp    %edx,%edi
  je     L51
L102:
  cmp    %edx,%esi
  jne    L64
  mov    $0x0,%eax
  test   $0x1,%dil
  jne    L357
  jmp    L64
L254:
  mov    $0x0,%eax
  test   $0x1,%dl
  je     L415
  jmp    L357
L51:
  mov    $0x0,%eax
  test   $0x1,%sil
  je     L102
  jmp    L357
  cmp    %esi,%edi
  je     L152
L33:
  cmp    %edx,%edi
  je     L372
L306:
  cmp    %edx,%esi
  jne    L64
  lea    (%rdi,%rsi,2),%r8d
  and    $0x3,%r8d
  mov    %edi,%r9d
  and    $0x1,%r9d
  mov    $0x0,%eax
  or     %r9d,%r8d
  jne    L357
  jmp    L64
L152:
  lea    (%rdx,%rdi,2),%r8d
  and    $0x3,%r8d
  mov    %edx,%r9d
  and    $0x1,%r9d
  mov    $0x0,%eax
  or     %r9d,%r8d
  je     L33
  jmp    L357
L372:
  lea    (%rsi,%rdi,2),%r8d
  and    $0x3,%r8d
  mov    %esi,%r9d
  and    $0x1,%r9d
  mov    $0x0,%eax
  or     %r9d,%r8d
  je     L306
  jmp    L357
L54:
  call   <t1@plt>
  jmp    L357
L318:
  test   $0x1,%dl
  jne    L14
  jmp    L64
L328:
  mov    $0x0,%eax
  test   $0x1,%dl
  je     L64
  jmp    L357
```

assistant: ```c
int t_special(int h, int k, int l, char string[]) {
  if (h == k || h == l || k == l || h == -k) {
    switch (string[7]) {
    case 'l':
      if (l % 2 != 0 && h == k)
        return 0;
      break;
    case '4':
      if (((2 * h + l) % 4 != 0 || l % 2 != 0) && h == k)
        return 0;
      break;
    case 'i':
      if (l % 2 != 0 && h == -k)
        return 0;
      break;
    case 'e':
      if (l % 2 != 0 && (h == k || h == -k))
        return 0;
      break;
    case 'c':
      if (h == k || h == l || k == l) {
        if (h == k)
          if (l % 2 != 0)
            return 0;
        if (h == l)
          if (k % 2 != 0)
            return 0;
        if (k == l)
          if (h % 2 != 0)
            return 0;
      }
      break;
    case 'b':
      if (h == k || h == l || k == l) {
        if (h == k)
          if ((2 * h + l) % 4 != 0 || l % 2 != 0)
            return 0;
        if (h == l)
          if ((2 * h + k) % 4 != 0 || k % 2 != 0)
            return 0;
        if (k == l)
          if ((2 * k + h) % 4 != 0 || h % 2 != 0)
            return 0;
      }
      break;
    default:
      break;
    }
    return t1(h, k, l, string);
  } else
    return t1(h, k, l, string);
}
```