user: 请从给定的汇编指令推导出C源代码：

```asm
<choice_menu>:
  endbr64
  sub    $0x18,%rsp
  lea    D18(%rip),%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  call   <printf@plt>
  lea    D106(%rip),%rdi
  call   <printf@plt>
  lea    D76(%rip),%rdi
  call   <printf@plt>
  lea    D13(%rip),%rdi
  call   <printf@plt>
  lea    D135(%rip),%rdi
  call   <printf@plt>
  lea    D98(%rip),%rdi
  call   <printf@plt>
  lea    D15(%rip),%rdi
  call   <printf@plt>
  lea    D158(%rip),%rdi
  call   <printf@plt>
  lea    D3(%rip),%rdi
  call   <printf@plt>
  lea    D136(%rip),%rdi
  call   <printf@plt>
  lea    D111(%rip),%rdi
  call   <printf@plt>
  lea    D29(%rip),%rdi
  call   <printf@plt>
  lea    D89(%rip),%rdi
  call   <printf@plt>
  lea    D92(%rip),%rdi
  call   <printf@plt>
  lea    D155(%rip),%rdi
  call   <printf@plt>
  lea    0x4(%rsp),%rsi
  lea    D23(%rip),%rdi
  call   <scanf@plt>
  mov    0x4(%rsp),%eax
  mov    0x8(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L1
  add    $0x18,%rsp
  ret
L1:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_tag: D18
type_guessed: string
name: retrieve_data
arguments: data_tag: D106
type_guessed: string
name: retrieve_data
arguments: data_tag: D76
type_guessed: string
name: retrieve_data
arguments: data_tag: D13
type_guessed: string
name: retrieve_data
arguments: data_tag: D135
type_guessed: string
name: retrieve_data
arguments: data_tag: D98
type_guessed: string
name: retrieve_data
arguments: data_tag: D15
type_guessed: string
name: retrieve_data
arguments: data_tag: D158
type_guessed: string
name: retrieve_data
arguments: data_tag: D3
type_guessed: string
name: retrieve_data
arguments: data_tag: D136
type_guessed: string
name: retrieve_data
arguments: data_tag: D111
type_guessed: string
name: retrieve_data
arguments: data_tag: D29
type_guessed: string
name: retrieve_data
arguments: data_tag: D89
type_guessed: string
name: retrieve_data
arguments: data_tag: D92
type_guessed: string
name: retrieve_data
arguments: data_tag: D155
type_guessed: string
name: retrieve_data
arguments: data_tag: D23
type_guessed: string

tool: D18: 
***************************


tool: D106: 1 : Print Linklist.


tool: D76: 2 : Print Linklist reverse.


tool: D13: 3 : Add node at start.


tool: D135: 4 : Add node at end.


tool: D98: 5 : Delete node from start.


tool: D15: 6 : Delete node from end.


tool: D158: 7 : Selected delete.


tool: D3: 8 : Match password.


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


tool: D111: 10 : Check linklist length.


tool: D29: 11 : Save linklist in file.


tool: D89: 12 : Retrive linklist form file.


tool: D92: ***************************

tool: D155: 
Enter your choice : 

tool: D23: %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;
}
```