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

```asm
<idevicebackup>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x4d8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x4c8(%rsp)
  xor    %eax,%eax
  lea    D35(%rip),%rdi
  call   <system@plt>
  lea    D19(%rip),%rdi
  call   <printf@plt>
  lea    D108(%rip),%rdi
  call   <printf@plt>
  mov    %rsp,%rbx
  mov    $0x14,%esi
  mov    %rbx,%rdi
  call   <fget@plt>
  lea    D201(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L64
  mov    %rsp,%rdi
  lea    D102(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L93
L64:
  lea    D61(%rip),%rdi
  call   <printf@plt>
  lea    0x20(%rsp),%rbx
  mov    $0x14,%esi
  mov    %rbx,%rdi
  call   <fget@plt>
  lea    D176(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L95
  mov    %rbx,%rdi
  lea    D20(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L42
L95:
  lea    D204(%rip),%rdi
  call   <printf@plt>
  lea    0x40(%rsp),%rbp
  mov    $0x78,%esi
  mov    %rbp,%rdi
  call   <fget@plt>
  lea    0xc0(%rsp),%rbx
  mov    %rbp,%rdx
  lea    D110(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  mov    %rbx,%rdi
  call   <system@plt>
L93:
  mov    %rsp,%rdi
  lea    D118(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L55
  mov    %rsp,%rdi
  lea    D224(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L96
L55:
  lea    D61(%rip),%rdi
  call   <printf@plt>
  lea    0x20(%rsp),%rbx
  mov    $0x14,%esi
  mov    %rbx,%rdi
  call   <fget@plt>
  lea    D176(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L99
  mov    %rbx,%rdi
  lea    D20(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L51
L99:
  lea    D203(%rip),%rdi
  call   <printf@plt>
  lea    0x40(%rsp),%rbp
  mov    $0x78,%esi
  mov    %rbp,%rdi
  call   <fget@plt>
  lea    0xc0(%rsp),%rbx
  mov    %rbp,%rdx
  lea    D211(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  mov    %rbx,%rdi
  call   <system@plt>
L96:
  mov    0x4c8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L124
  mov    $0x0,%eax
  add    $0x4d8,%rsp
  pop    %rbx
  pop    %rbp
  ret
L42:
  mov    %rbx,%rdi
  lea    D102(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L95
  lea    D204(%rip),%rdi
  call   <printf@plt>
  lea    0x40(%rsp),%rbp
  mov    $0x78,%esi
  mov    %rbp,%rdi
  call   <fget@plt>
  lea    0xc0(%rsp),%rbx
  mov    %rbp,%rdx
  lea    D43(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  mov    %rbx,%rdi
  call   <system@plt>
  jmp    L93
L51:
  mov    %rbx,%rdi
  lea    D102(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L99
  lea    D203(%rip),%rdi
  call   <printf@plt>
  lea    0x40(%rsp),%rbp
  mov    $0x78,%esi
  mov    %rbp,%rdi
  call   <fget@plt>
  lea    0xc0(%rsp),%rbx
  mov    %rbp,%rdx
  lea    D25(%rip),%rsi
  mov    %rbx,%rdi
  call   <sprintf@plt>
  mov    %rbx,%rdi
  call   <system@plt>
  jmp    L96
L124:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D35
datatype: string
name: unpack_data
arguments: tag: D19
datatype: string
name: unpack_data
arguments: tag: D108
datatype: string
name: unpack_data
arguments: tag: D201
datatype: string
name: unpack_data
arguments: tag: D102
datatype: string
name: unpack_data
arguments: tag: D61
datatype: string
name: unpack_data
arguments: tag: D176
datatype: string
name: unpack_data
arguments: tag: D20
datatype: string
name: unpack_data
arguments: tag: D204
datatype: string
name: unpack_data
arguments: tag: D110
datatype: string
name: unpack_data
arguments: tag: D118
datatype: string
name: unpack_data
arguments: tag: D224
datatype: string
name: unpack_data
arguments: tag: D203
datatype: string
name: unpack_data
arguments: tag: D211
datatype: string
name: unpack_data
arguments: tag: D43
datatype: string
name: unpack_data
arguments: tag: D25
datatype: string

tool: D35: clear

tool: D19: 1) Backup


tool: D108: 2) Restore backup


tool: D201: backup

tool: D102: 1

tool: D61: Is your iOS version less than iOS 4 ?
1) YES
2) NO


tool: D176: yes

tool: D20: YES

tool: D204: Enter the directory to copy the backup : 

tool: D110: idevicebackup backup %s

tool: D118: restore

tool: D224: 2

tool: D203: Enter the directory to the backup : 

tool: D211: idevicebackup restore %s

tool: D43: idevicebackup2 backup %s

tool: D25: idevicebackup2 restore %s

assistant: ```c
int idevicebackup() {
  char choice[20];
  float version;
  char rep[20];
  char path[120];
  char buildCommand[1024];
  system("clear");
  printf("1) Backup\n");
  printf("2) Restore backup\n");
  fget(choice, 20);
  if (strcmp(choice, "backup") == 0 || strcmp(choice, "1") == 0) {
    printf("Is your iOS version less than iOS 4 ?\n1) YES\n2) NO\n");
    fget(rep, 20);
    if (strcmp(rep, "yes") == 0 || strcmp(rep, "YES") == 0 || strcmp(rep, "1") == 0) {
      printf("Enter the directory to copy the backup : ");
      fget(path, 120);
      sprintf(buildCommand, "idevicebackup backup %s", path);
      system(buildCommand);
    } else {
      printf("Enter the directory to copy the backup : ");
      fget(path, 120);
      sprintf(buildCommand, "idevicebackup2 backup %s", path);
      system(buildCommand);
    }
  }
  if (strcmp(choice, "restore") == 0 || strcmp(choice, "2") == 0) {
    printf("Is your iOS version less than iOS 4 ?\n1) YES\n2) NO\n");
    fget(rep, 20);
    if (strcmp(rep, "yes") == 0 || strcmp(rep, "YES") == 0 || strcmp(rep, "1") == 0) {
      printf("Enter the directory to the backup : ");
      fget(path, 120);
      sprintf(buildCommand, "idevicebackup restore %s", path);
      system(buildCommand);
    } else {
      printf("Enter the directory to the backup : ");
      fget(path, 120);
      sprintf(buildCommand, "idevicebackup2 restore %s", path);
      system(buildCommand);
    }
  }
}
```