user: Demonstrate the C code that generates the assembly output below:

```asm
<wcscsys>:
  endbr64
  movzbl (%rdi),%eax
  and    $0xffffffdf,%eax
  cmp    $0x4a,%al
  je     L122
  push   %rbx
  lea    D67(%rip),%rsi
  mov    %rdi,%rbx
  call   <strcmp@plt>
  test   %eax,%eax
  je     L66
  lea    D37(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L66
  lea    D36(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L66
  lea    D77(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L66
  mov    $0x3,%edx
  lea    D35(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L2
  nopl   0x0(%rax,%rax,1)
L66:
  mov    $0x1,%eax
L46:
  pop    %rbx
  ret
  nop
L122:
  mov    $0x1,%eax
  ret
  cs nopw 0x0(%rax,%rax,1)
L2:
  mov    $0x3,%edx
  lea    D10(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L66
  movzbl (%rbx),%eax
  and    $0xffffffdf,%eax
  cmp    $0x42,%al
  je     L35
  lea    D72(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L35
  lea    D7(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L35
  mov    $0x3,%edx
  lea    D64(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L35
  mov    $0x3,%edx
  lea    D50(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L35
  movzbl (%rbx),%edx
  mov    $0x3,%eax
  mov    %edx,%ecx
  and    $0xffffffdf,%ecx
  cmp    $0x47,%cl
  je     L46
  sub    $0x41,%edx
  mov    $0xffffffff,%eax
  cmp    $0x2d,%dl
  ja     L46
  movzbl %dl,%edx
  lea    D39(%rip),%rax
  pop    %rbx
  movsbl (%rax,%rdx,1),%eax
  ret
  nopl   0x0(%rax,%rax,1)
L35:
  mov    $0x2,%eax
  pop    %rbx
  ret
```

tool_calls: name: unpack_data
arguments: label: D67
type_infered: string
name: unpack_data
arguments: label: D37
type_infered: string
name: unpack_data
arguments: label: D36
type_infered: string
name: unpack_data
arguments: label: D77
type_infered: string
name: unpack_data
arguments: label: D35
type_infered: string
name: unpack_data
arguments: label: D10
type_infered: string
name: unpack_data
arguments: label: D72
type_infered: string
name: unpack_data
arguments: label: D7
type_infered: string
name: unpack_data
arguments: label: D64
type_infered: string
name: unpack_data
arguments: label: D50
type_infered: string

tool: D67: 2000

tool: D37: 2000.0

tool: D36: ICRS

tool: D77: icrs

tool: D35: FK5

tool: D10: fk5

tool: D72: 1950

tool: D7: 1950.0

tool: D64: FK4

tool: D50: fk4

assistant: ```c
int wcscsys(char *wcstring) {
  if (wcstring[0] == 'J' || wcstring[0] == 'j' || !strcmp(wcstring, "2000") || !strcmp(wcstring, "2000.0") || !strcmp(wcstring, "ICRS") || !strcmp(wcstring, "icrs") || !strncmp(wcstring, "FK5", 3) || !strncmp(wcstring, "fk5", 3))
    return 1;
  if (wcstring[0] == 'B' || wcstring[0] == 'b' || !strcmp(wcstring, "1950") || !strcmp(wcstring, "1950.0") || !strncmp(wcstring, "FK4", 3) || !strncmp(wcstring, "fk4", 3))
    return 2;
  else if (wcstring[0] == 'G' || wcstring[0] == 'g')
    return 3;
  else if (wcstring[0] == 'E' || wcstring[0] == 'e')
    return 4;
  else if (wcstring[0] == 'A' || wcstring[0] == 'a')
    return 5;
  else if (wcstring[0] == 'N' || wcstring[0] == 'n')
    return 7;
  else if (wcstring[0] == 'L' || wcstring[0] == 'l')
    return 6;
  else
    return -1;
}
```