user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<choice_menu>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D60(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D154(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D58(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D89(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D76(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D74(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D83(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D68(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D82(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D34(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D138(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0xc(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L2
  call   <__stack_chk_fail@plt>
L2:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D49
type: string
name: disassemble_data
arguments: data_label: D60
type: string
name: disassemble_data
arguments: data_label: D154
type: string
name: disassemble_data
arguments: data_label: D58
type: string
name: disassemble_data
arguments: data_label: D3
type: string
name: disassemble_data
arguments: data_label: D89
type: string
name: disassemble_data
arguments: data_label: D80
type: string
name: disassemble_data
arguments: data_label: D76
type: string
name: disassemble_data
arguments: data_label: D74
type: string
name: disassemble_data
arguments: data_label: D83
type: string
name: disassemble_data
arguments: data_label: D26
type: string
name: disassemble_data
arguments: data_label: D23
type: string
name: disassemble_data
arguments: data_label: D68
type: string
name: disassemble_data
arguments: data_label: D82
type: string
name: disassemble_data
arguments: data_label: D34
type: string
name: disassemble_data
arguments: data_label: D138
type: string

tool: D49: 
***************************


tool: D60: 1 : Print Linklist.


tool: D154: 2 : Print Linklist reverse.


tool: D58: 3 : Add node at start.


tool: D3: 4 : Add node at end.


tool: D89: 5 : Delete node from start.


tool: D80: 6 : Delete node from end.


tool: D76: 7 : Selected delete.


tool: D74: 8 : Match password.


tool: D83: 9 : Add node at n number.


tool: D26: 10 : Check linklist length.


tool: D23: 11 : Save linklist in file.


tool: D68: 12 : Retrive linklist form file.


tool: D82: ***************************

tool: D34: 
Enter your choice : 

tool: D138: %d

assistant: ```c
int choice_menu() {
  int choice;
  printf("\n***************************\n");
  printf("1 : Print Linklist.\n");
  printf("2 : Print Linklist reverse.\n");
  printf("3 : Add node at start.\n");
  printf("4 : Add node at end.\n");
  printf("5 : Delete node from start.\n");
  printf("6 : Delete node from end.\n");
  printf("7 : Selected delete.\n");
  printf("8 : Match password.\n");
  printf("9 : Add node at n number.\n");
  printf("10 : Check linklist length.\n");
  printf("11 : Save linklist in file.\n");
  printf("12 : Retrive linklist form file.\n");
  printf("***************************");
  printf("\nEnter your choice : ");
  scanf("%d", &choice);
  return choice;
}
```