user: What is the c source code of the assembly code below?

```asm
<display_help>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x170,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x160(%rbp),%rax
  lea    D22(%rip),%rdx
  mov    $0x2a,%ecx
  mov    %rax,%rdi
  mov    %rdx,%rsi
  rep movsq %ds:(%rsi),%es:(%rdi)
  movl   $0x0,-0x16c(%rbp)
  movq   $0x0,-0x168(%rbp)
  mov    $0x0,%eax
  call   <erase@plt>
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <move@plt>
  jmp    L33
L35:
  mov    -0x16c(%rbp),%eax
  cltq
  mov    -0x160(%rbp,%rax,8),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L8
  mov    -0x16c(%rbp),%eax
  cltq
  mov    -0x160(%rbp,%rax,8),%rdx
  mov    -0x168(%rbp),%rax
  lea    D7(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fp_printf@plt>
  jmp    L27
L8:
  mov    -0x168(%rbp),%rax
  lea    D35(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fp_printf@plt>
L27:
  addl   $0x1,-0x16c(%rbp)
L33:
  mov    -0x16c(%rbp),%eax
  cltq
  mov    -0x160(%rbp,%rax,8),%rax
  lea    D0(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L35
  mov    $0x0,%eax
  call   <menuContinue@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L24
  call   <__stack_chk_fail@plt>
L24:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D7
type_infered: string
name: disassemble_data
arguments: label: D35
type_infered: string
name: disassemble_data
arguments: label: D0
type_infered: string

tool: D7: %s


tool: D35: 


tool: D0: EOHS!

assistant: ```c
void display_help(void) {
  char *help_text[] = {"Help Screen for cfdisk", "", "This is cfdisk, a curses based disk partitioning program, which", "allows you to create, delete and modify partitions on your hard", "disk drive.", "", "Copyright (C) 1994-1999 Kevin E. Martin & aeb", "", "Command      Meaning", "-------      -------", "  b          Toggle bootable flag of the current partition", "  d          Delete the current partition", "  g          Change cylinders, heads, sectors-per-track parameters", "             WARNING: This option should only be used by people who", "             know what they are doing.", "  h          Print this screen", "  m          Maximize disk usage of the current partition", "             Note: This may make the partition incompatible with", "             DOS, OS/2, ...", "  n          Create new partition from free space", "  p          Print partition table to the screen or to a file", "             There are several different formats for the partition", "             that you can choose from:", "                r - Raw data (exactly what would be written to disk)", "                s - Table ordered by sectors", "                t - Table in raw format", "  q          Quit program without writing partition table", "  t          Change the filesystem type", "  u          Change units of the partition size display", "             Rotates through MB, sectors and cylinders", "  W          Write partition table to disk (must enter upper case W)", "             Since this might destroy data on the disk, you must", "             either confirm or deny the write by entering `yes' or", "             `no'", "Up Arrow     Move cursor to the previous partition", "Down Arrow   Move cursor to the next partition", "CTRL-L       Redraws the screen", "  ?          Print this screen", "", "Note: All of the commands can be entered with either upper or lower", "case letters (except for Writes).", "EOHS!"};
  int cur_line = 0;
  FILE *fp = NULL;
  erase();
  move(0, 0);
  while (strcmp(help_text[cur_line], "EOHS!")) {
    if (help_text[cur_line][0])
      fp_printf(fp, "%s\n", help_text[cur_line]);
    else
      fp_printf(fp, "\n");
    cur_line++;
  }
  menuContinue();
}
```