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

```asm
<get_minor_device_name>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,-0x4(%rbp)
  mov    %esi,-0x8(%rbp)
  cmpl   $0x3f,-0x4(%rbp)
  ja     L498
  mov    -0x4(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D570(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D570(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D662(%rip),%rax
  jmp    L271
  cmpl   $0x6,-0x8(%rbp)
  ja     L649
  mov    -0x8(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D684(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D684(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D807(%rip),%rax
  jmp    L271
  lea    D747(%rip),%rax
  jmp    L271
  lea    D580(%rip),%rax
  jmp    L271
  lea    D159(%rip),%rax
  jmp    L271
  lea    D948(%rip),%rax
  jmp    L271
  lea    D1046(%rip),%rax
  jmp    L271
  lea    D762(%rip),%rax
  jmp    L271
  cmpl   $0x6,-0x8(%rbp)
  ja     L542
  mov    -0x8(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D541(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D541(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D807(%rip),%rax
  jmp    L271
  lea    D864(%rip),%rax
  jmp    L271
  lea    D367(%rip),%rax
  jmp    L271
  lea    D772(%rip),%rax
  jmp    L271
  lea    D1039(%rip),%rax
  jmp    L271
  lea    D907(%rip),%rax
  jmp    L271
  lea    D891(%rip),%rax
  jmp    L271
  cmpl   $0x0,-0x8(%rbp)
  jne    L704
  lea    D807(%rip),%rax
  jmp    L271
L704:
  mov    -0x8(%rbp),%eax
  lea    0x7(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x3,%eax
  cmp    $0x7,%eax
  ja     L528
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D954(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D954(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D134(%rip),%rax
  jmp    L271
  lea    D231(%rip),%rax
  jmp    L271
  lea    D757(%rip),%rax
  jmp    L271
  lea    D55(%rip),%rax
  jmp    L271
  lea    D270(%rip),%rax
  jmp    L271
  lea    D7(%rip),%rax
  jmp    L271
  lea    D531(%rip),%rax
  jmp    L271
  lea    D431(%rip),%rax
  jmp    L271
  cmpl   $0x12,-0x8(%rbp)
  ja     L541
  mov    -0x8(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D801(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D801(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D807(%rip),%rax
  jmp    L271
  lea    D1025(%rip),%rax
  jmp    L271
  lea    D476(%rip),%rax
  jmp    L271
  lea    D587(%rip),%rax
  jmp    L271
  lea    D970(%rip),%rax
  jmp    L271
  lea    D994(%rip),%rax
  jmp    L271
  lea    D85(%rip),%rax
  jmp    L271
  lea    D128(%rip),%rax
  jmp    L271
  lea    D293(%rip),%rax
  jmp    L271
  lea    D179(%rip),%rax
  jmp    L271
  lea    D333(%rip),%rax
  jmp    L271
  lea    D888(%rip),%rax
  jmp    L271
  lea    D1021(%rip),%rax
  jmp    L271
  lea    D917(%rip),%rax
  jmp    L271
  lea    D882(%rip),%rax
  jmp    L271
  lea    D601(%rip),%rax
  jmp    L271
  lea    D898(%rip),%rax
  jmp    L271
  movb   $0x0,D625(%rip)
  mov    -0x8(%rbp),%eax
  and    $0x30,%eax
  cmp    $0x30,%eax
  je     L884
  cmp    $0x30,%eax
  jg     L23
  cmp    $0x10,%eax
  je     L354
  cmp    $0x20,%eax
  je     L472
  jmp    L23
L354:
  mov    $0x30,%edx
  lea    D786(%rip),%rax
  mov    %rax,%rsi
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L23
L472:
  mov    $0x30,%edx
  lea    D766(%rip),%rax
  mov    %rax,%rsi
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L23
L884:
  mov    $0x30,%edx
  lea    D785(%rip),%rax
  mov    %rax,%rsi
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strncpy@plt>
  nop
L23:
  mov    -0x8(%rbp),%eax
  and    $0xf,%eax
  test   %eax,%eax
  je     L135
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jle    L135
  lea    D427(%rip),%rax
  mov    %rax,%rsi
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strcat@plt>
L135:
  mov    -0x8(%rbp),%eax
  and    $0xf,%eax
  cmp    $0x6,%eax
  ja     L686
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D841(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D841(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    $0x2f,%eax
  sub    %edx,%eax
  mov    %eax,%edx
  lea    D549(%rip),%rax
  mov    %rax,%rsi
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strncat@plt>
  jmp    L1
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    $0x2f,%eax
  sub    %edx,%eax
  mov    %eax,%edx
  lea    D63(%rip),%rax
  mov    %rax,%rsi
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strncat@plt>
  jmp    L1
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    $0x2f,%eax
  sub    %edx,%eax
  mov    %eax,%edx
  lea    D255(%rip),%rax
  mov    %rax,%rsi
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strncat@plt>
  jmp    L1
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    $0x2f,%eax
  sub    %edx,%eax
  mov    %eax,%edx
  lea    D913(%rip),%rax
  mov    %rax,%rsi
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strncat@plt>
  jmp    L1
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    $0x2f,%eax
  sub    %edx,%eax
  mov    %eax,%edx
  lea    D406(%rip),%rax
  mov    %rax,%rsi
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strncat@plt>
  jmp    L1
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    $0x2f,%eax
  sub    %edx,%eax
  mov    %eax,%edx
  lea    D568(%rip),%rax
  mov    %rax,%rsi
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strncat@plt>
  jmp    L1
L686:
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    $0x2f,%eax
  sub    %edx,%eax
  mov    %eax,%edx
  lea    D510(%rip),%rax
  mov    %rax,%rsi
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strncat@plt>
  jmp    L1
  nop
L1:
  lea    D625(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jle    L692
  lea    D625(%rip),%rax
  jmp    L271
  mov    -0x8(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L369
  lea    D430(%rip),%rax
  jmp    L271
L369:
  mov    -0x8(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L426
  lea    D932(%rip),%rax
  jmp    L271
L426:
  mov    -0x8(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L240
  lea    D50(%rip),%rax
  jmp    L271
L240:
  mov    -0x8(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L735
  lea    D72(%rip),%rax
  jmp    L271
  cmpl   $0x5,-0x8(%rbp)
  ja     L143
  mov    -0x8(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D515(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D515(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D965(%rip),%rax
  jmp    L271
  lea    D184(%rip),%rax
  jmp    L271
  lea    D280(%rip),%rax
  jmp    L271
  lea    D395(%rip),%rax
  jmp    L271
  lea    D16(%rip),%rax
  jmp    L271
  cmpl   $0x5,-0x8(%rbp)
  ja     L417
  mov    -0x8(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D649(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D649(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D312(%rip),%rax
  jmp    L271
  lea    D633(%rip),%rax
  jmp    L271
  lea    D129(%rip),%rax
  jmp    L271
  lea    D663(%rip),%rax
  jmp    L271
  lea    D692(%rip),%rax
  jmp    L271
  lea    D662(%rip),%rax
  jmp    L271
L649:
  nop
  jmp    L498
L542:
  nop
  jmp    L498
L528:
  nop
  jmp    L498
L541:
  nop
  jmp    L498
L692:
  nop
  jmp    L498
L735:
  nop
  jmp    L498
L143:
  nop
  jmp    L498
L417:
  nop
L498:
  lea    D673(%rip),%rax
L271:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D662
data_type: string
name: read_data
arguments: tag: D807
data_type: string
name: read_data
arguments: tag: D747
data_type: string
name: read_data
arguments: tag: D580
data_type: string
name: read_data
arguments: tag: D159
data_type: string
name: read_data
arguments: tag: D948
data_type: string
name: read_data
arguments: tag: D1046
data_type: string
name: read_data
arguments: tag: D762
data_type: string
name: read_data
arguments: tag: D864
data_type: string
name: read_data
arguments: tag: D367
data_type: string
name: read_data
arguments: tag: D772
data_type: string
name: read_data
arguments: tag: D1039
data_type: string
name: read_data
arguments: tag: D907
data_type: string
name: read_data
arguments: tag: D891
data_type: string
name: read_data
arguments: tag: D134
data_type: string
name: read_data
arguments: tag: D231
data_type: string
name: read_data
arguments: tag: D757
data_type: string
name: read_data
arguments: tag: D55
data_type: string
name: read_data
arguments: tag: D270
data_type: string
name: read_data
arguments: tag: D7
data_type: string
name: read_data
arguments: tag: D531
data_type: string
name: read_data
arguments: tag: D431
data_type: string
name: read_data
arguments: tag: D1025
data_type: string
name: read_data
arguments: tag: D476
data_type: string
name: read_data
arguments: tag: D587
data_type: string
name: read_data
arguments: tag: D970
data_type: string
name: read_data
arguments: tag: D994
data_type: string
name: read_data
arguments: tag: D85
data_type: string
name: read_data
arguments: tag: D128
data_type: string
name: read_data
arguments: tag: D293
data_type: string
name: read_data
arguments: tag: D179
data_type: string
name: read_data
arguments: tag: D333
data_type: string
name: read_data
arguments: tag: D888
data_type: string
name: read_data
arguments: tag: D1021
data_type: string
name: read_data
arguments: tag: D917
data_type: string
name: read_data
arguments: tag: D882
data_type: string
name: read_data
arguments: tag: D601
data_type: string
name: read_data
arguments: tag: D898
data_type: string
name: read_data
arguments: tag: D786
data_type: string
name: read_data
arguments: tag: D766
data_type: string
name: read_data
arguments: tag: D785
data_type: string
name: read_data
arguments: tag: D427
data_type: string
name: read_data
arguments: tag: D549
data_type: string
name: read_data
arguments: tag: D63
data_type: string
name: read_data
arguments: tag: D255
data_type: string
name: read_data
arguments: tag: D913
data_type: string
name: read_data
arguments: tag: D406
data_type: string
name: read_data
arguments: tag: D568
data_type: string
name: read_data
arguments: tag: D510
data_type: string
name: read_data
arguments: tag: D430
data_type: string
name: read_data
arguments: tag: D932
data_type: string
name: read_data
arguments: tag: D50
data_type: string
name: read_data
arguments: tag: D72
data_type: string
name: read_data
arguments: tag: D965
data_type: string
name: read_data
arguments: tag: D184
data_type: string
name: read_data
arguments: tag: D280
data_type: string
name: read_data
arguments: tag: D395
data_type: string
name: read_data
arguments: tag: D16
data_type: string
name: read_data
arguments: tag: D312
data_type: string
name: read_data
arguments: tag: D633
data_type: string
name: read_data
arguments: tag: D129
data_type: string
name: read_data
arguments: tag: D663
data_type: string
name: read_data
arguments: tag: D692
data_type: string
name: read_data
arguments: tag: D673
data_type: string

tool: 

tool: D807: Uncategorized

tool: D747: Desktop workstation

tool: D580: Server

tool: D159: Laptop

tool: D948: Handheld

tool: D1046: Palm

tool: D762: Wearable

tool: D864: Cellular

tool: D367: Cordless

tool: D772: Smart phone

tool: D1039: Wired modem or voice gateway

tool: D907: Common ISDN Access

tool: D891: Sim Card Reader

tool: D134: Fully available

tool: D231: 1-17% utilized

tool: D757: 17-33% utilized

tool: D55: 33-50% utilized

tool: D270: 50-67% utilized

tool: D7: 67-83% utilized

tool: D531: 83-99% utilized

tool: D431: No service available

tool: D1025: Device conforms to the Headset profile

tool: D476: Hands-free

tool: D587: Microphone

tool: D970: Loudspeaker

tool: D994: Headphones

tool: D85: Portable Audio

tool: D128: Car Audio

tool: D293: Set-top box

tool: D179: HiFi Audio Device

tool: D333: VCR

tool: D888: Video Camera

tool: D1021: Camcorder

tool: D917: Video Monitor

tool: D882: Video Display and Loudspeaker

tool: D601: Video Conferencing

tool: D898: Gaming/Toy

tool: D786: Keyboard

tool: D766: Pointing device

tool: D785: Combo keyboard/pointing device

tool: D427: /

tool: D549: Joystick

tool: D63: Gamepad

tool: D255: Remote control

tool: D913: Sensing device

tool: D406: Digitizer tablet

tool: D568: Card reader

tool: D510: (reserved)

tool: D430: Display

tool: D932: Camera

tool: D50: Scanner

tool: D72: Printer

tool: D965: Wrist Watch

tool: D184: Pager

tool: D280: Jacket

tool: D395: Helmet

tool: D16: Glasses

tool: D312: Robot

tool: D633: Vehicle

tool: D129: Doll / Action Figure

tool: D663: Controller

tool: D692: Game

tool: D673: Unknown (reserved) minor device class

assistant: ```c
char *get_minor_device_name(int major, int minor) {
  switch (major) {
  case 0:
    return "";
  case 1:
    switch (minor) {
    case 0:
      return "Uncategorized";
    case 1:
      return "Desktop workstation";
    case 2:
      return "Server";
    case 3:
      return "Laptop";
    case 4:
      return "Handheld";
    case 5:
      return "Palm";
    case 6:
      return "Wearable";
    }
    break;
  case 2:
    switch (minor) {
    case 0:
      return "Uncategorized";
    case 1:
      return "Cellular";
    case 2:
      return "Cordless";
    case 3:
      return "Smart phone";
    case 4:
      return "Wired modem or voice gateway";
    case 5:
      return "Common ISDN Access";
    case 6:
      return "Sim Card Reader";
    }
    break;
  case 3:
    if (minor == 0)
      return "Uncategorized";
    switch (minor / 8) {
    case 0:
      return "Fully available";
    case 1:
      return "1-17% utilized";
    case 2:
      return "17-33% utilized";
    case 3:
      return "33-50% utilized";
    case 4:
      return "50-67% utilized";
    case 5:
      return "67-83% utilized";
    case 6:
      return "83-99% utilized";
    case 7:
      return "No service available";
    }
    break;
  case 4:
    switch (minor) {
    case 0:
      return "Uncategorized";
    case 1:
      return "Device conforms to the Headset profile";
    case 2:
      return "Hands-free";
    case 4:
      return "Microphone";
    case 5:
      return "Loudspeaker";
    case 6:
      return "Headphones";
    case 7:
      return "Portable Audio";
    case 8:
      return "Car Audio";
    case 9:
      return "Set-top box";
    case 10:
      return "HiFi Audio Device";
    case 11:
      return "VCR";
    case 12:
      return "Video Camera";
    case 13:
      return "Camcorder";
    case 14:
      return "Video Monitor";
    case 15:
      return "Video Display and Loudspeaker";
    case 16:
      return "Video Conferencing";
    case 18:
      return "Gaming/Toy";
    }
    break;
  case 5: {
    static char cls_str[48];
    cls_str[0] = 0;
    switch (minor & 48) {
    case 16:
      strncpy(cls_str, "Keyboard", sizeof(cls_str));
      break;
    case 32:
      strncpy(cls_str, "Pointing device", sizeof(cls_str));
      break;
    case 48:
      strncpy(cls_str, "Combo keyboard/pointing device", sizeof(cls_str));
      break;
    }
    if ((minor & 15) && (strlen(cls_str) > 0))
      strcat(cls_str, "/");
    switch (minor & 15) {
    case 0:
      break;
    case 1:
      strncat(cls_str, "Joystick", sizeof(cls_str) - strlen(cls_str) - 1);
      break;
    case 2:
      strncat(cls_str, "Gamepad", sizeof(cls_str) - strlen(cls_str) - 1);
      break;
    case 3:
      strncat(cls_str, "Remote control", sizeof(cls_str) - strlen(cls_str) - 1);
      break;
    case 4:
      strncat(cls_str, "Sensing device", sizeof(cls_str) - strlen(cls_str) - 1);
      break;
    case 5:
      strncat(cls_str, "Digitizer tablet", sizeof(cls_str) - strlen(cls_str) - 1);
      break;
    case 6:
      strncat(cls_str, "Card reader", sizeof(cls_str) - strlen(cls_str) - 1);
      break;
    default:
      strncat(cls_str, "(reserved)", sizeof(cls_str) - strlen(cls_str) - 1);
      break;
    }
    if (strlen(cls_str) > 0)
      return cls_str;
    break;
  }
  case 6:
    if (minor & 4)
      return "Display";
    if (minor & 8)
      return "Camera";
    if (minor & 16)
      return "Scanner";
    if (minor & 32)
      return "Printer";
    break;
  case 7:
    switch (minor) {
    case 1:
      return "Wrist Watch";
    case 2:
      return "Pager";
    case 3:
      return "Jacket";
    case 4:
      return "Helmet";
    case 5:
      return "Glasses";
    }
    break;
  case 8:
    switch (minor) {
    case 1:
      return "Robot";
    case 2:
      return "Vehicle";
    case 3:
      return "Doll / Action Figure";
    case 4:
      return "Controller";
    case 5:
      return "Game";
    }
    break;
  case 63:
    return "";
  }
  return "Unknown (reserved) minor device class";
}
```