user: What would the C source look like for the assembly code provided here?

```asm
<print_help>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  movl   $0x0,-0x4(%rbp)
  lea    D17(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L55
L11:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D42(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L34
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rcx
  mov    %rcx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  shl    $0x3,%rax
  mov    %rax,%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    0x8(%rax),%eax
  mov    %eax,%esi
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L48
L34:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    0x10(%rax),%rax
  test   %rax,%rax
  je     L33
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdi
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rcx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rsi
  mov    %rsi,%rax
  add    %rax,%rax
  add    %rsi,%rax
  shl    $0x3,%rax
  mov    %rax,%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  mov    0x8(%rax),%eax
  mov    %rdi,%r8
  mov    %eax,%esi
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L48
L33:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x4(%rbp),%eax
  movslq %eax,%rcx
  mov    %rcx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  shl    $0x3,%rax
  mov    %rax,%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    0x8(%rax),%eax
  mov    %eax,%esi
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L48:
  addl   $0x1,-0x4(%rbp)
L55:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  test   %rax,%rax
  jne    L11
  nop
  nop
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D17
type_guessed: string
name: read_data
arguments: label: D42
type_guessed: string
name: read_data
arguments: label: D49
type_guessed: string
name: read_data
arguments: label: D45
type_guessed: string
name: read_data
arguments: label: D18
type_guessed: string

tool: D17: glsltool

tool: D42: string

tool: D49: 	-%c "<stringid=string>" --%s="<stringid=string>"


tool: D45: 	-%c <%s> --%s=<%s>


tool: D18: 	-%c --%s


assistant: ```c
void print_help(const struct option *opts) {
  int i = 0;
  printf("glsltool\n");
  while (opts[i].name != 0) {
    if (strcmp(opts[i].name, "string") == 0) {
      printf("\t-%c \"<stringid=string>\" --%s=\"<stringid=string>\"\n", opts[i].val, opts[i].name);
    } else {
      if (opts[i].has_arg) {
        printf("\t-%c <%s> --%s=<%s>\n", opts[i].val, opts[i].name, opts[i].name, opts[i].name);
      } else {
        printf("\t-%c --%s\n", opts[i].val, opts[i].name);
      }
    }
    i++;
  }
}
```