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

```asm
<ConvertState>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    D144(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L350
  mov    $0x2b,%eax
  jmp    L302
L350:
  mov    -0x8(%rbp),%rax
  lea    D167(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L157
  mov    $0x3a,%eax
  jmp    L302
L157:
  mov    -0x8(%rbp),%rax
  lea    D139(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L307
  mov    $0x41,%eax
  jmp    L302
L307:
  mov    -0x8(%rbp),%rax
  lea    D57(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L353
  mov    $0x41,%eax
  jmp    L302
L353:
  mov    -0x8(%rbp),%rax
  lea    D4(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L219
  mov    $0x41,%eax
  jmp    L302
L219:
  mov    -0x8(%rbp),%rax
  lea    D67(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L313
  mov    $0x42,%eax
  jmp    L302
L313:
  mov    -0x8(%rbp),%rax
  lea    D20(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L174
  mov    $0x42,%eax
  jmp    L302
L174:
  mov    -0x8(%rbp),%rax
  lea    D186(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L69
  mov    $0x43,%eax
  jmp    L302
L69:
  mov    -0x8(%rbp),%rax
  lea    D66(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L110
  mov    $0x43,%eax
  jmp    L302
L110:
  mov    -0x8(%rbp),%rax
  lea    D28(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L278
  mov    $0x45,%eax
  jmp    L302
L278:
  mov    -0x8(%rbp),%rax
  lea    D17(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L170
  mov    $0x46,%eax
  jmp    L302
L170:
  mov    -0x8(%rbp),%rax
  lea    D44(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L106
  mov    $0x46,%eax
  jmp    L302
L106:
  mov    -0x8(%rbp),%rax
  lea    D148(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L349
  mov    $0x47,%eax
  jmp    L302
L349:
  mov    -0x8(%rbp),%rax
  lea    D21(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L31
  mov    $0x48,%eax
  jmp    L302
L31:
  mov    -0x8(%rbp),%rax
  lea    D77(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L290
  mov    $0x49,%eax
  jmp    L302
L290:
  mov    -0x8(%rbp),%rax
  lea    D128(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L73
  mov    $0x49,%eax
  jmp    L302
L73:
  mov    -0x8(%rbp),%rax
  lea    D138(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L139
  mov    $0x4b,%eax
  jmp    L302
L139:
  mov    -0x8(%rbp),%rax
  lea    D16(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L220
  mov    $0x4c,%eax
  jmp    L302
L220:
  mov    -0x8(%rbp),%rax
  lea    D109(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L57
  mov    $0x4c,%eax
  jmp    L302
L57:
  mov    -0x8(%rbp),%rax
  lea    D118(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L326
  mov    $0x4d,%eax
  jmp    L302
L326:
  mov    $0x4f,%eax
L302:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D144
data_type: string
name: disassemble_data
arguments: data_tag: D167
data_type: string
name: disassemble_data
arguments: data_tag: D139
data_type: string
name: disassemble_data
arguments: data_tag: D57
data_type: string
name: disassemble_data
arguments: data_tag: D4
data_type: string
name: disassemble_data
arguments: data_tag: D67
data_type: string
name: disassemble_data
arguments: data_tag: D20
data_type: string
name: disassemble_data
arguments: data_tag: D186
data_type: string
name: disassemble_data
arguments: data_tag: D66
data_type: string
name: disassemble_data
arguments: data_tag: D28
data_type: string
name: disassemble_data
arguments: data_tag: D17
data_type: string
name: disassemble_data
arguments: data_tag: D44
data_type: string
name: disassemble_data
arguments: data_tag: D148
data_type: string
name: disassemble_data
arguments: data_tag: D21
data_type: string
name: disassemble_data
arguments: data_tag: D77
data_type: string
name: disassemble_data
arguments: data_tag: D128
data_type: string
name: disassemble_data
arguments: data_tag: D138
data_type: string
name: disassemble_data
arguments: data_tag: D16
data_type: string
name: disassemble_data
arguments: data_tag: D109
data_type: string
name: disassemble_data
arguments: data_tag: D118
data_type: string

tool: D144: +/+ cis 

tool: D167: -/- cis 

tool: D139: S/S cis 

tool: D57: S/s cis 

tool: D4: s/S cis 

tool: D67: S/H cis 

tool: D20: H/S cis 

tool: D186: S/W cis 

tool: D66: W/S cis 

tool: D28: W/W cis 

tool: D17: W/H cis 

tool: D44: H/W cis 

tool: D148:  stacked 

tool: D21: S/S tran

tool: D77: S/H tran

tool: D128: H/S tran

tool: D138: H/H tran

tool: D16: H/W tran

tool: D109: W/H tran

tool: D118: W/W tran

assistant: ```c
char ConvertState(char *stringState) {
  if (!strcmp(stringState, "+/+ cis "))
    return '+';
  else if (!strcmp(stringState, "-/- cis "))
    return ':';
  else if (!strcmp(stringState, "S/S cis "))
    return 'A';
  else if (!strcmp(stringState, "S/s cis "))
    return 'A';
  else if (!strcmp(stringState, "s/S cis "))
    return 'A';
  else if (!strcmp(stringState, "S/H cis "))
    return 'B';
  else if (!strcmp(stringState, "H/S cis "))
    return 'B';
  else if (!strcmp(stringState, "S/W cis "))
    return 'C';
  else if (!strcmp(stringState, "W/S cis "))
    return 'C';
  else if (!strcmp(stringState, "W/W cis "))
    return 'E';
  else if (!strcmp(stringState, "W/H cis "))
    return 'F';
  else if (!strcmp(stringState, "H/W cis "))
    return 'F';
  else if (!strcmp(stringState, " stacked "))
    return 'G';
  else if (!strcmp(stringState, "S/S tran"))
    return 'H';
  else if (!strcmp(stringState, "S/H tran"))
    return 'I';
  else if (!strcmp(stringState, "H/S tran"))
    return 'I';
  else if (!strcmp(stringState, "H/H tran"))
    return 'K';
  else if (!strcmp(stringState, "H/W tran"))
    return 'L';
  else if (!strcmp(stringState, "W/H tran"))
    return 'L';
  else if (!strcmp(stringState, "W/W tran"))
    return 'M';
  else
    return 'O';
}
```