user: Please show me the C implementation that matches the assembly code listed below:

```asm
<romMenu>:
  endbr64
  push   %rbx
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  lea    D405(%rip),%rdi
  call   <system@plt>
  lea    D37(%rip),%rbx
  mov    %rbx,%rdi
  call   <printf@plt>
  lea    D94(%rip),%rdi
  call   <printf@plt>
  mov    %rbx,%rdi
  call   <printf@plt>
  lea    D407(%rip),%rdi
  call   <printf@plt>
  lea    D192(%rip),%rdi
  call   <printf@plt>
  lea    D501(%rip),%rdi
  call   <printf@plt>
  lea    D561(%rip),%rdi
  call   <printf@plt>
  lea    D417(%rip),%rdi
  call   <printf@plt>
  lea    D362(%rip),%rdi
  call   <printf@plt>
  lea    D27(%rip),%rdi
  call   <printf@plt>
  lea    D385(%rip),%rdi
  call   <printf@plt>
  lea    D431(%rip),%rdi
  call   <printf@plt>
  lea    D169(%rip),%rdi
  call   <printf@plt>
  mov    %rbx,%rdi
  call   <printf@plt>
  lea    D234(%rip),%rdi
  call   <printf@plt>
  lea    D93(%rip),%rdi
  call   <printf@plt>
  lea    0x4(%rsp),%rsi
  lea    D87(%rip),%rdi
  call   <scanf@plt>
  mov    0x4(%rsp),%ebx
  cmp    $0xa,%ebx
  ja     L114
  mov    %ebx,%eax
  lea    D224(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D462(%rip),%rdi
  call   <printf@plt>
  lea    D537(%rip),%rdi
  call   <printf@plt>
  lea    D16(%rip),%rdi
  call   <printf@plt>
  lea    D547(%rip),%rdi
  call   <printf@plt>
  lea    D135(%rip),%rdi
  call   <printf@plt>
  lea    D157(%rip),%rdi
  call   <printf@plt>
  lea    D447(%rip),%rdi
  call   <printf@plt>
  lea    D202(%rip),%rdi
  call   <printf@plt>
  lea    D273(%rip),%rdi
  call   <printf@plt>
  lea    D588(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  call   <romMenu>
  mov    %eax,%ebx
  jmp    L77
  lea    D558(%rip),%rdi
  call   <printf@plt>
  jmp    L77
  lea    D422(%rip),%rdi
  call   <system@plt>
  lea    D52(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
L85:
  call   <romMenu>
  mov    %eax,%ebx
L77:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L70
  mov    %ebx,%eax
  add    $0x10,%rsp
  pop    %rbx
  ret
  lea    D406(%rip),%rdi
  call   <system@plt>
  lea    D1(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L85
  lea    D378(%rip),%rdi
  call   <system@plt>
  lea    D445(%rip),%rdi
  call   <system@plt>
  lea    D321(%rip),%rdi
  call   <printf@plt>
  lea    D512(%rip),%rdi
  call   <system@plt>
  lea    D53(%rip),%rdi
  call   <system@plt>
  lea    D84(%rip),%rdi
  call   <printf@plt>
  lea    D379(%rip),%rdi
  call   <system@plt>
  lea    D193(%rip),%rdi
  call   <printf@plt>
  lea    D596(%rip),%rdi
  call   <system@plt>
  lea    D317(%rip),%rdi
  call   <printf@plt>
  lea    D165(%rip),%rdi
  call   <system@plt>
  lea    D91(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L85
  lea    D620(%rip),%rdi
  call   <printf@plt>
  lea    D103(%rip),%rdi
  call   <system@plt>
  lea    D613(%rip),%rdi
  call   <printf@plt>
  lea    D495(%rip),%rdi
  call   <system@plt>
  lea    D249(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D158(%rip),%rdi
  call   <system@plt>
  jmp    L85
  lea    D341(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D119(%rip),%rdi
  call   <printf@plt>
  lea    D252(%rip),%rdi
  call   <system@plt>
  lea    D72(%rip),%rdi
  call   <system@plt>
  lea    D80(%rip),%rdi
  call   <system@plt>
  lea    D361(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L85
  lea    D154(%rip),%rdi
  call   <system@plt>
  lea    D376(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D50(%rip),%rdi
  call   <system@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L85
  lea    D412(%rip),%rdi
  call   <system@plt>
  jmp    L85
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D450(%rip),%rdi
  call   <system@plt>
  lea    D223(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  jmp    L85
  mov    $0x0,%eax
  call   <advancedMenu@plt>
  jmp    L85
L114:
  lea    D191(%rip),%rdi
  call   <printf@plt>
  jmp    L85
L70:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D405
type: string
name: disassemble_data
arguments: data_tag: D37
type: string
name: disassemble_data
arguments: data_tag: D94
type: string
name: disassemble_data
arguments: data_tag: D407
type: string
name: disassemble_data
arguments: data_tag: D192
type: string
name: disassemble_data
arguments: data_tag: D501
type: string
name: disassemble_data
arguments: data_tag: D561
type: string
name: disassemble_data
arguments: data_tag: D417
type: string
name: disassemble_data
arguments: data_tag: D362
type: string
name: disassemble_data
arguments: data_tag: D27
type: string
name: disassemble_data
arguments: data_tag: D385
type: string
name: disassemble_data
arguments: data_tag: D431
type: string
name: disassemble_data
arguments: data_tag: D169
type: string
name: disassemble_data
arguments: data_tag: D234
type: string
name: disassemble_data
arguments: data_tag: D93
type: string
name: disassemble_data
arguments: data_tag: D87
type: string
name: disassemble_data
arguments: data_tag: D462
type: string
name: disassemble_data
arguments: data_tag: D537
type: string
name: disassemble_data
arguments: data_tag: D16
type: string
name: disassemble_data
arguments: data_tag: D547
type: string
name: disassemble_data
arguments: data_tag: D135
type: string
name: disassemble_data
arguments: data_tag: D157
type: string
name: disassemble_data
arguments: data_tag: D447
type: string
name: disassemble_data
arguments: data_tag: D202
type: string
name: disassemble_data
arguments: data_tag: D273
type: string
name: disassemble_data
arguments: data_tag: D588
type: string
name: disassemble_data
arguments: data_tag: D558
type: string
name: disassemble_data
arguments: data_tag: D422
type: string
name: disassemble_data
arguments: data_tag: D52
type: string
name: disassemble_data
arguments: data_tag: D406
type: string
name: disassemble_data
arguments: data_tag: D1
type: string
name: disassemble_data
arguments: data_tag: D378
type: string
name: disassemble_data
arguments: data_tag: D445
type: string
name: disassemble_data
arguments: data_tag: D321
type: string
name: disassemble_data
arguments: data_tag: D512
type: string
name: disassemble_data
arguments: data_tag: D53
type: string
name: disassemble_data
arguments: data_tag: D84
type: string
name: disassemble_data
arguments: data_tag: D379
type: string
name: disassemble_data
arguments: data_tag: D193
type: string
name: disassemble_data
arguments: data_tag: D596
type: string
name: disassemble_data
arguments: data_tag: D317
type: string
name: disassemble_data
arguments: data_tag: D165
type: string
name: disassemble_data
arguments: data_tag: D91
type: string
name: disassemble_data
arguments: data_tag: D620
type: string
name: disassemble_data
arguments: data_tag: D103
type: string
name: disassemble_data
arguments: data_tag: D613
type: string
name: disassemble_data
arguments: data_tag: D495
type: string
name: disassemble_data
arguments: data_tag: D249
type: string
name: disassemble_data
arguments: data_tag: D158
type: string
name: disassemble_data
arguments: data_tag: D341
type: string
name: disassemble_data
arguments: data_tag: D119
type: string
name: disassemble_data
arguments: data_tag: D252
type: string
name: disassemble_data
arguments: data_tag: D72
type: string
name: disassemble_data
arguments: data_tag: D80
type: string
name: disassemble_data
arguments: data_tag: D361
type: string
name: disassemble_data
arguments: data_tag: D154
type: string
name: disassemble_data
arguments: data_tag: D376
type: string
name: disassemble_data
arguments: data_tag: D50
type: string
name: disassemble_data
arguments: data_tag: D412
type: string
name: disassemble_data
arguments: data_tag: D450
type: string
name: disassemble_data
arguments: data_tag: D223
type: string
name: disassemble_data
arguments: data_tag: D191
type: string

tool: D405: @cls||clear

tool: D37: =======================================


tool: D94:    ROM Menu                       |


tool: D407: | [1] Create workspace            |


tool: D192: | [2] Extract ROM.zip             |


tool: D501: | [3] Extract boot.img            |


tool: D561: | [4] Repack boot.img             |


tool: D417: | [5] Extract system.img          |


tool: D362: | [6] Extract system.new.dat      |


tool: D27: | [7] Delete workspace            |


tool: D385: | [8] Install SuperSU(root)       |


tool: D431: | [9] Information about menu      |


tool: D169: | [10] Enter to advanced ROM menu |


tool: D234: [0] Exit


tool: D93: 
What you want?: 

tool: D87: %d

tool: D462: This is information about ROM Menu.


tool: D537: 1. For working with ROM's you must create personal workspace. Press [1] to do it.


tool: D16: 2. If you need extract .zip with you ROM, place him to 'workspace' folder, then press [2].


tool: D547: 3. If you need extract boot.img, press [3].


tool: D135: 4. For repacking boot.img press [4]


tool: D157: 5. When you want unpack some images (for example system.img), use this feature - [5]


tool: D447: 6. For unpacking system.new.dat, press [6]. // Repack feature in progress...


tool: D202: 7. If you tired of your workspace, you can delete it. Just press [7]


tool: D273: 8. Also you can install SuperSU in your ROM. Press [8] to do it.


tool: D588: 10. I think it doesn't need to explain... And next items too.


tool: D558: Goodbye ;P


tool: D422: mkdir workspace && cd workspace 

tool: D52: Done. Replace your ROMZIP in on 'workspace' folder


tool: D406: cd workspace && unzip *.zip && cd ..

tool: D1: 
	ROM is unzipped


tool: D378: cd ~/*/workspace/ && mkdir boot

tool: D445: cp ~/*/insides/boot/* ~/*/workspace/boot

tool: D321: 	Unpacking boot.img


tool: D512: cd ~/*/workspace/ && cp boot.img ~/*/workspace/boot

tool: D53: cd ~/*/workspace/boot && ./unpackbootimg -i boot.img

tool: D84: 	Making 'ramdisk' directory


tool: D379: cd ~/*/workspace/boot && mkdir ramdisk

tool: D193: 	Replacing boot.img-ramdisk.gz to 'ramdisk'


tool: D596: cd ~/*/workspace/boot && mv boot.img-ramdisk.gz ramdisk

tool: D317: Unpacking ramdisk


tool: D165: cd ~/*/workspace/boot/ramdisk && gzip -dc boot.img-ramdisk.gz | cpio -i

tool: D91: 
	boot.img and ramdisk ready


tool: D620: 	Repacking ramdisk


tool: D103: cd ~/*/workspace/boot/ && ./mkbootfs ./ramdisk | gzip > boot.img-ramdisk.gz

tool: D613: 	Repacking boot.img


tool: D495: cd ~/*/workspace/boot/ && ./mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel boot.img-kernel --ramdisk boot.img-ramdisk.gz -o boot-new.img

tool: D249: 	boot-new.img ready!


tool: D158: cd ~/*/workspace/

tool: D341: 	
Put your system.img in ROM folder.


tool: D119: 	
I'm working! Please wait!


tool: D252: cd ~/*/workspace

tool: D72: cp ~/*/workspace/system.img ~/Universal_Tool/

tool: D80: mkdir extractedsystem && sudo mount -t ext4 -o loop system.img extractedsystem

tool: D361: 	Done. .img file extracted to Universal_Tool/extractedsystem/


tool: D154: cd ~/*/insides/rom/ && cp sdat2img/* ~/Universal_Tool/workspace/ 

tool: D376: Press any key to continue

tool: D50: cd ~/*/workspace/ && ./sdat2img.py system.transfer.list system.new.dat system.img

tool: D412: cd ~/Universal_Tool/ && rm -rf workspace && rm -rf extractedsystem

tool: D450: cp ~/*/insides/rom/supersu ~/*/workspace/system/priv-app

tool: D223: 	Done


tool: D191: Make a choice!


assistant: ```c
int romMenu(void) {
  int user_key;
  system("@cls||clear");
  printf("=======================================\n");
  printf("   ROM Menu                       |\n");
  printf("=======================================\n");
  printf("| [1] Create workspace            |\n");
  printf("| [2] Extract ROM.zip             |\n");
  printf("| [3] Extract boot.img            |\n");
  printf("| [4] Repack boot.img             |\n");
  printf("| [5] Extract system.img          |\n");
  printf("| [6] Extract system.new.dat      |\n");
  printf("| [7] Delete workspace            |\n");
  printf("| [8] Install SuperSU(root)       |\n");
  printf("| [9] Information about menu      |\n");
  printf("| [10] Enter to advanced ROM menu |\n");
  printf("=======================================\n");
  printf("[0] Exit\n");
  printf("\nWhat you want?: ");
  scanf("%d", &user_key);
  switch (user_key) {
  case 9:
    getchar();
    printf("This is information about ROM Menu.\n");
    printf("1. For working with ROM's you must create personal workspace. Press [1] to do it.\n");
    printf("2. If you need extract .zip with you ROM, place him to 'workspace' folder, then press [2].\n");
    printf("3. If you need extract boot.img, press [3].\n");
    printf("4. For repacking boot.img press [4]\n");
    printf("5. When you want unpack some images (for example system.img), use this feature - [5]\n");
    printf("6. For unpacking system.new.dat, press [6]. // Repack feature in progress...\n");
    printf("7. If you tired of your workspace, you can delete it. Just press [7]\n");
    printf("8. Also you can install SuperSU in your ROM. Press [8] to do it.\n");
    printf("10. I think it doesn't need to explain... And next items too.\n");
    getchar();
    return romMenu();
    break;
  case 0:
    printf("Goodbye ;P\n");
    return 0;
  case 1: {
    system("mkdir workspace && cd workspace ");
    printf("Done. Replace your ROMZIP in on 'workspace' folder\n");
    getchar();
    break;
  }
  case 2: {
    system("cd workspace && unzip *.zip && cd ..");
    printf("\n\tROM is unzipped\n");
    getchar();
    break;
  }
  case 3: {
    system("cd ~/*/workspace/ && mkdir boot");
    system("cp ~/*/insides/boot/* ~/*/workspace/boot");
    printf("\tUnpacking boot.img\n");
    system("cd ~/*/workspace/ && cp boot.img ~/*/workspace/boot");
    system("cd ~/*/workspace/boot && ./unpackbootimg -i boot.img");
    printf("\tMaking 'ramdisk' directory\n");
    system("cd ~/*/workspace/boot && mkdir ramdisk");
    printf("\tReplacing boot.img-ramdisk.gz to 'ramdisk'\n");
    system("cd ~/*/workspace/boot && mv boot.img-ramdisk.gz ramdisk");
    printf("Unpacking ramdisk\n");
    system("cd ~/*/workspace/boot/ramdisk && gzip -dc boot.img-ramdisk.gz | cpio -i");
    printf("\n\tboot.img and ramdisk ready\n");
    getchar();
    break;
  }
  case 4: {
    printf("\tRepacking ramdisk\n");
    system("cd ~/*/workspace/boot/ && ./mkbootfs ./ramdisk | gzip > boot.img-ramdisk.gz");
    printf("\tRepacking boot.img\n");
    system("cd ~/*/workspace/boot/ && ./mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel boot.img-kernel --ramdisk boot.img-ramdisk.gz -o boot-new.img");
    printf("\tboot-new.img ready!\n");
    getchar();
    system("cd ~/*/workspace/");
    break;
  }
  case 5: {
    printf("\t\nPut your system.img in ROM folder.\n");
    getchar();
    printf("\t\nI'm working! Please wait!\n");
    system("cd ~/*/workspace");
    system("cp ~/*/workspace/system.img ~/Universal_Tool/");
    system("mkdir extractedsystem && sudo mount -t ext4 -o loop system.img extractedsystem");
    printf("\tDone. .img file extracted to Universal_Tool/extractedsystem/\n");
    getchar();
    break;
  }
  case 6: {
    system("cd ~/*/insides/rom/ && cp sdat2img/* ~/Universal_Tool/workspace/ ");
    printf("Press any key to continue");
    getchar();
    system("cd ~/*/workspace/ && ./sdat2img.py system.transfer.list system.new.dat system.img");
    getchar();
    break;
  }
  case 7:
    system("cd ~/Universal_Tool/ && rm -rf workspace && rm -rf extractedsystem");
    break;
  case 8: {
    getchar();
    system("cp ~/*/insides/rom/supersu ~/*/workspace/system/priv-app");
    printf("\tDone\n");
    getchar();
    break;
  }
  case 10:
    advancedMenu();
    break;
  default:
    printf("Make a choice!\n");
  }
  return romMenu();
}
```