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

```asm
<getModel_DNA>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  call   <Uppercase@plt>
  mov    %rbx,%rdi
  call   <strlen@plt>
  cmp    $0x1,%eax
  jne    L138
  movzbl (%rbx),%eax
  sub    $0x31,%eax
  cmp    $0x28,%al
  ja     L86
  movzbl %al,%eax
  lea    D34(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0xd,%eax
  jmp    L139
  mov    $0xf,%eax
  jmp    L139
  mov    $0x10,%eax
  jmp    L139
  mov    $0x11,%eax
  jmp    L139
  mov    $0x12,%eax
  jmp    L139
  mov    $0xe,%eax
  jmp    L139
  mov    $0x14,%eax
  jmp    L139
  mov    $0xb,%eax
  jmp    L139
  mov    $0xc,%eax
  jmp    L139
L138:
  mov    %rbx,%rdi
  call   <strlen@plt>
  cmp    $0x2,%eax
  je     L107
L195:
  mov    %rbx,%rdi
  call   <strlen@plt>
  cmp    $0x3,%eax
  je     L29
  mov    %rbx,%rdi
  call   <strlen@plt>
  cmp    $0x4,%eax
  je     L177
  mov    $0x5,%edx
  lea    D107(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  mov    %rax,%rdx
  mov    $0xc,%eax
  test   %rdx,%rdx
  je     L139
  mov    $0x6,%edx
  lea    D79(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  mov    %rax,%rdx
  mov    $0xc,%eax
  test   %rdx,%rdx
  je     L139
  mov    $0xa,%edx
  lea    D116(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  mov    %rax,%rdx
  mov    $0xc,%eax
  test   %rdx,%rdx
  je     L139
  mov    $0xc,%edx
  lea    D7(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  mov    %rax,%rdx
  mov    $0xc,%eax
  test   %rdx,%rdx
  je     L139
  mov    $0x6,%edx
  lea    D144(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  mov    %rax,%rdx
  mov    $0x14,%eax
  test   %rdx,%rdx
  je     L139
  mov    $0x5,%edx
  lea    D80(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  mov    %rax,%rdx
  mov    $0xb,%eax
  test   %rdx,%rdx
  je     L139
  mov    $0x6,%edx
  lea    D134(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  mov    %rax,%rdx
  mov    $0xb,%eax
  test   %rdx,%rdx
  je     L139
  mov    $0x9,%edx
  lea    D45(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  mov    %rax,%rdx
  mov    $0xb,%eax
  test   %rdx,%rdx
  je     L139
  mov    $0xa,%edx
  lea    D75(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  cmp    $0x1,%rax
  sbb    %eax,%eax
  and    $0xb,%eax
  jmp    L139
L107:
  mov    $0x2,%edx
  lea    D8(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  mov    %rax,%rdx
  mov    $0xd,%eax
  test   %rdx,%rdx
  jne    L195
  jmp    L139
L29:
  mov    $0x3,%edx
  lea    D119(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  mov    %rax,%rdx
  mov    $0xf,%eax
  test   %rdx,%rdx
  je     L139
  mov    $0x3,%edx
  lea    D131(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  mov    %rax,%rdx
  mov    $0x10,%eax
  test   %rdx,%rdx
  je     L139
  mov    $0x3,%edx
  lea    D148(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  cmp    $0x1,%rax
  sbb    %eax,%eax
  and    $0x12,%eax
  jmp    L139
L177:
  mov    $0x4,%edx
  lea    D95(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  mov    %rax,%rdx
  mov    $0x11,%eax
  test   %rdx,%rdx
  je     L139
  mov    $0x4,%edx
  lea    D157(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  cmp    $0x1,%rax
  sbb    %eax,%eax
  and    $0xe,%eax
  jmp    L139
L86:
  mov    $0x0,%eax
L139:
  pop    %rbx
  ret
```

tool_calls: name: read_data
arguments: tag: D107
datatype: string
name: read_data
arguments: tag: D79
datatype: string
name: read_data
arguments: tag: D116
datatype: string
name: read_data
arguments: tag: D7
datatype: string
name: read_data
arguments: tag: D144
datatype: string
name: read_data
arguments: tag: D80
datatype: string
name: read_data
arguments: tag: D134
datatype: string
name: read_data
arguments: tag: D45
datatype: string
name: read_data
arguments: tag: D75
datatype: string
name: read_data
arguments: tag: D8
datatype: string
name: read_data
arguments: tag: D119
datatype: string
name: read_data
arguments: tag: D131
datatype: string
name: read_data
arguments: tag: D148
datatype: string
name: read_data
arguments: tag: D95
datatype: string
name: read_data
arguments: tag: D157
datatype: string

tool: D107: RYSYM

tool: D79: RY-SYM

tool: D116: RYSYMMETRIC

tool: D7: RY-SYMMETRIC

tool: D144: LOGDET

tool: D80: PDIST

tool: D134: P-DIST

tool: D45: PDISTANCE

tool: D75: P-DISTANCE

tool: D8: RY

tool: D119: F81

tool: D131: F84

tool: D148: K2P

tool: D95: TN93

tool: D157: JC69

assistant: ```c
int getModel_DNA(char *c) {
  int ret = 0;
  Uppercase(c);
  if (strlen(c) == 1) {
    switch (c[0]) {
    case 'R':
      ret = 13;
      break;
    case '1':
      ret = 15;
      break;
    case '4':
      ret = 16;
      break;
    case 'T':
      ret = 17;
      break;
    case 'K':
      ret = 18;
      break;
    case 'J':
      ret = 14;
      break;
    case 'L':
      ret = 20;
      break;
    case 'P':
      ret = 11;
      break;
    case 'Y':
      ret = 12;
      break;
    default:
      break;
    }
  } else if (strlen(c) == 2 && strncmp(c, "RY", 2) == 0) {
    ret = 13;
  } else if (strlen(c) == 3) {
    if (strncmp(c, "F81", 3) == 0)
      ret = 15;
    else if (strncmp(c, "F84", 3) == 0)
      ret = 16;
    else if (strncmp(c, "K2P", 3) == 0)
      ret = 18;
  } else if (strlen(c) == 4) {
    if (strncmp(c, "TN93", 4) == 0)
      ret = 17;
    else if (strncmp(c, "JC69", 4) == 0)
      ret = 14;
  } else if (strncmp(c, "RYSYM", 5) == 0 || strncmp(c, "RY-SYM", 6) == 0 || strncmp(c, "RYSYMMETRIC", 10) == 0 || strncmp(c, "RY-SYMMETRIC", 12) == 0)
    ret = 12;
  else if (strncmp(c, "LOGDET", 6) == 0)
    ret = 20;
  else if (strncmp(c, "PDIST", 5) == 0 || strncmp(c, "P-DIST", 6) == 0 || strncmp(c, "PDISTANCE", 9) == 0 || strncmp(c, "P-DISTANCE", 10) == 0)
    ret = 11;
  return ret;
}
```