user: Demonstrate the C code that generates the assembly output below:

```asm
<get_minor_device_name>:
  endbr64
  cmp    $0x3f,%edi
  ja     L226
  lea    D607(%rip),%rdx
  mov    %edi,%edi
  push   %r12
  movslq (%rdx,%rdi,4),%rax
  push   %rbp
  push   %rbx
  mov    %esi,%ebx
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
L103:
  lea    D444(%rip),%rax
L708:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax)
L226:
  lea    D444(%rip),%rax
  ret
  mov    %ebx,%eax
  movb   $0x0,D381(%rip)
  lea    D381(%rip),%rbp
  and    $0x30,%eax
  cmp    $0x20,%eax
  je     L689
  cmp    $0x30,%eax
  je     L663
  cmp    $0x10,%eax
  je     L736
L680:
  mov    %ebx,%r12d
  and    $0xf,%r12d
  jne    L315
L88:
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %eax,%r8d
  lea    D381(%rip),%rax
  test   %r8d,%r8d
  jg     L708
  lea    D91(%rip),%rax
  test   $0x4,%bl
  jne    L708
  lea    D613(%rip),%rax
  test   $0x8,%bl
  jne    L708
  lea    D492(%rip),%rax
  test   $0x10,%bl
  jne    L708
  and    $0x20,%ebx
  lea    D444(%rip),%rax
  lea    D489(%rip),%rdx
  cmovne %rdx,%rax
  jmp    L708
  nopl   0x0(%rax)
  cmp    $0x6,%ebx
  ja     10c0 <get_minor_device_name.cold>
  lea    D280(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
  cmp    $0x5,%ebx
  ja     L103
  lea    D281(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
  cmp    $0x6,%ebx
  ja     L103
  lea    D588(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
  lea    D691(%rip),%rax
  test   %ebx,%ebx
  je     L708
  lea    0x7(%rbx),%eax
  cmovns %ebx,%eax
  mov    %eax,%edx
  sar    $0x3,%edx
  cmp    $0x3f,%eax
  ja     10c0 <get_minor_device_name.cold>
  mov    %edx,%eax
  lea    D594(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  xchg   %ax,%ax
  cmp    $0x5,%ebx
  ja     L103
  lea    D677(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
  cmp    $0x12,%ebx
  ja     L103
  lea    D220(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
  lea    D6(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D378(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D678(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D410(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D552(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D758(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D318(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D228(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D128(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D34(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D507(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D691(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D587(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D85(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D287(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D63(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D236(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D508(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D486(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D175(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D99(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D416(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D264(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
  lea    D28(%rip),%rax
  jmp    L708
  lea    D485(%rip),%rax
  jmp    L708
  lea    D729(%rip),%rax
  jmp    L708
  lea    D580(%rip),%rax
  jmp    L708
  lea    D127(%rip),%rax
  jmp    L708
  lea    D192(%rip),%rax
  jmp    L708
  lea    D664(%rip),%rax
  jmp    L708
  lea    D643(%rip),%rax
  jmp    L708
  lea    D25(%rip),%rax
  jmp    L708
  lea    D556(%rip),%rax
  jmp    L708
  lea    D455(%rip),%rax
  jmp    L708
  lea    D72(%rip),%rax
  jmp    L708
  lea    D412(%rip),%rax
  jmp    L708
  lea    D50(%rip),%rax
  jmp    L708
  lea    D450(%rip),%rax
  jmp    L708
  lea    D337(%rip),%rax
  jmp    L708
  lea    D537(%rip),%rax
  jmp    L708
  lea    D753(%rip),%rax
  jmp    L708
  lea    D206(%rip),%rax
  jmp    L708
  lea    D87(%rip),%rax
  jmp    L708
  lea    D36(%rip),%rax
  jmp    L708
  lea    D49(%rip),%rax
  jmp    L708
  lea    D259(%rip),%rax
  jmp    L708
  lea    D532(%rip),%rax
  jmp    L708
  lea    D223(%rip),%rax
  jmp    L708
  nopl   0x0(%rax)
L315:
  mov    %rbp,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jle    L410
  lea    D205(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
L410:
  mov    %rbp,%rdi
  cmp    $0x6,%r12d
  ja     L665
  lea    D622(%rip),%rdx
  mov    %r12d,%r12d
  movslq (%rdx,%r12,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   0x0(%rax)
  call   <strlen@plt>
  mov    $0x30,%edx
  lea    D426(%rip),%rsi
  mov    %rbp,%rdi
  sub    %eax,%edx
  call   <strncat@plt>
  jmp    L88
  call   <strlen@plt>
  mov    $0x30,%edx
  lea    D759(%rip),%rsi
  mov    %rbp,%rdi
  sub    %eax,%edx
  call   <strncat@plt>
  jmp    L88
  call   <strlen@plt>
  mov    $0x30,%edx
  lea    D204(%rip),%rsi
  mov    %rbp,%rdi
  sub    %eax,%edx
  call   <strncat@plt>
  jmp    L88
  call   <strlen@plt>
  mov    $0x30,%edx
  lea    D721(%rip),%rsi
  mov    %rbp,%rdi
  sub    %eax,%edx
  call   <strncat@plt>
  jmp    L88
  call   <strlen@plt>
  mov    $0x30,%edx
  lea    D533(%rip),%rsi
  mov    %rbp,%rdi
  sub    %eax,%edx
  call   <strncat@plt>
  jmp    L88
  call   <strlen@plt>
  mov    $0x30,%edx
  lea    D375(%rip),%rsi
  mov    %rbp,%rdi
  sub    %eax,%edx
  call   <strncat@plt>
  jmp    L88
L736:
  mov    $0x30,%edx
  lea    D459(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncpy@plt>
  jmp    L680
  nopl   0x0(%rax)
L663:
  mov    $0x30,%edx
  lea    D481(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncpy@plt>
  jmp    L680
  nopl   0x0(%rax)
L689:
  mov    $0x30,%edx
  lea    D186(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncpy@plt>
  jmp    L680
L665:
  call   <strlen@plt>
  mov    $0x30,%edx
  lea    D130(%rip),%rsi
  mov    %rbp,%rdi
  sub    %eax,%edx
  call   <strncat@plt>
  jmp    L88
```

tool_calls: name: read_data
arguments: data_label: D444
type_infered: string
name: read_data
arguments: data_label: D91
type_infered: string
name: read_data
arguments: data_label: D613
type_infered: string
name: read_data
arguments: data_label: D492
type_infered: string
name: read_data
arguments: data_label: D489
type_infered: string
name: read_data
arguments: data_label: D691
type_infered: string
name: read_data
arguments: data_label: D6
type_infered: string
name: read_data
arguments: data_label: D378
type_infered: string
name: read_data
arguments: data_label: D678
type_infered: string
name: read_data
arguments: data_label: D410
type_infered: string
name: read_data
arguments: data_label: D552
type_infered: string
name: read_data
arguments: data_label: D758
type_infered: string
name: read_data
arguments: data_label: D318
type_infered: string
name: read_data
arguments: data_label: D228
type_infered: string
name: read_data
arguments: data_label: D128
type_infered: string
name: read_data
arguments: data_label: D34
type_infered: string
name: read_data
arguments: data_label: D507
type_infered: string
name: read_data
arguments: data_label: D587
type_infered: string
name: read_data
arguments: data_label: D85
type_infered: string
name: read_data
arguments: data_label: D287
type_infered: string
name: read_data
arguments: data_label: D63
type_infered: string
name: read_data
arguments: data_label: D236
type_infered: string
name: read_data
arguments: data_label: D508
type_infered: string
name: read_data
arguments: data_label: D486
type_infered: string
name: read_data
arguments: data_label: D175
type_infered: string
name: read_data
arguments: data_label: D99
type_infered: string
name: read_data
arguments: data_label: D416
type_infered: string
name: read_data
arguments: data_label: D264
type_infered: string
name: read_data
arguments: data_label: D28
type_infered: string
name: read_data
arguments: data_label: D485
type_infered: string
name: read_data
arguments: data_label: D729
type_infered: string
name: read_data
arguments: data_label: D580
type_infered: string
name: read_data
arguments: data_label: D127
type_infered: string
name: read_data
arguments: data_label: D192
type_infered: string
name: read_data
arguments: data_label: D664
type_infered: string
name: read_data
arguments: data_label: D643
type_infered: string
name: read_data
arguments: data_label: D25
type_infered: string
name: read_data
arguments: data_label: D556
type_infered: string
name: read_data
arguments: data_label: D455
type_infered: string
name: read_data
arguments: data_label: D72
type_infered: string
name: read_data
arguments: data_label: D412
type_infered: string
name: read_data
arguments: data_label: D50
type_infered: string
name: read_data
arguments: data_label: D450
type_infered: string
name: read_data
arguments: data_label: D337
type_infered: string
name: read_data
arguments: data_label: D537
type_infered: string
name: read_data
arguments: data_label: D753
type_infered: string
name: read_data
arguments: data_label: D206
type_infered: string
name: read_data
arguments: data_label: D87
type_infered: string
name: read_data
arguments: data_label: D36
type_infered: string
name: read_data
arguments: data_label: D49
type_infered: string
name: read_data
arguments: data_label: D259
type_infered: string
name: read_data
arguments: data_label: D532
type_infered: string
name: read_data
arguments: data_label: D223
type_infered: string
name: read_data
arguments: data_label: D205
type_infered: string
name: read_data
arguments: data_label: D426
type_infered: string
name: read_data
arguments: data_label: D759
type_infered: string
name: read_data
arguments: data_label: D204
type_infered: string
name: read_data
arguments: data_label: D721
type_infered: string
name: read_data
arguments: data_label: D533
type_infered: string
name: read_data
arguments: data_label: D375
type_infered: string
name: read_data
arguments: data_label: D459
type_infered: string
name: read_data
arguments: data_label: D481
type_infered: string
name: read_data
arguments: data_label: D186
type_infered: string
name: read_data
arguments: data_label: D130
type_infered: string

tool: D444: Unknown

tool: D91: Display

tool: D613: Camera

tool: D492: Scanner

tool: D489: Printer

tool: D691: Uncategorized

tool: 

tool: D378: Vehicle

tool: D678: Pager

tool: D410: Game

tool: D552: Controller

tool: D758: Doll / Action Figure

tool: D318: Wrist Watch

tool: D228: Helmet

tool: D128: Jacket

tool: D34: Robot

tool: D507: Glasses

tool: D587: Desktop workstation

tool: D85: Cellular

tool: D287: Cordless

tool: D63: Sim Card Reader

tool: D236: Common ISDN Access

tool: D508: Wired modem / voice gateway

tool: D486: Smart phone

tool: D175: Wearable

tool: D99: Palm

tool: D416: Handheld

tool: D264: Laptop

tool: D28: Server

tool: D485: 1-17% utilized

tool: D729: 83-99% utilized

tool: D580: No service available

tool: D127: 67-83% utilized

tool: D192: 50-67% utilized

tool: D664: Fully available

tool: D643: 33-50% utilized

tool: D25: 17-33% utilized

tool: D556: Gaming/Toy

tool: D455: Video Conferencing

tool: D72: Video Display and Loudspeaker

tool: D412: Video Monitor

tool: D50: Loudspeaker

tool: D450: Microphone

tool: D337: Hands-free

tool: D537: Camcorder

tool: D753: Video Camera

tool: D206: VCR

tool: D87: HiFi Audio Device

tool: D36: Set-top box

tool: D49: Car Audio

tool: D259: Portable Audio

tool: D532: Headphones

tool: D223: Headset profile

tool: D205: /

tool: D426: Digitizer tablet

tool: D759: Sensing device

tool: D204: Remote control

tool: D721: Gamepad

tool: D533: Joystick

tool: D375: Card reader

tool: D459: Keyboard

tool: D481: Combo keyboard/pointing device

tool: D186: Pointing device

tool: D130: (reserved)

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 / 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 "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));
      break;
    case 2:
      strncat(cls_str, "Gamepad", sizeof(cls_str) - strlen(cls_str));
      break;
    case 3:
      strncat(cls_str, "Remote control", sizeof(cls_str) - strlen(cls_str));
      break;
    case 4:
      strncat(cls_str, "Sensing device", sizeof(cls_str) - strlen(cls_str));
      break;
    case 5:
      strncat(cls_str, "Digitizer tablet", sizeof(cls_str) - strlen(cls_str));
      break;
    case 6:
      strncat(cls_str, "Card reader", sizeof(cls_str) - strlen(cls_str));
      break;
    default:
      strncat(cls_str, "(reserved)", sizeof(cls_str) - strlen(cls_str));
      break;
    }
    if (strlen(cls_str) > 0)
      return cls_str;
  }
  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";
}
```