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

```asm
<generic_notification_ind_dump>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %ecx,-0x20(%rbp)
  movl   $0x0,-0x4(%rbp)
  mov    -0x18(%rbp),%rax
  lea    D5(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L190
L174:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  and    $0x7f,%eax
  cmp    $0x7b,%eax
  ja     L204
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D136(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D136(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x18(%rbp),%rax
  lea    D246(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D142(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D23(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D126(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D173(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D84(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D192(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D36(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D18(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D22(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D56(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D190(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D263(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D29(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D105(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D199(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D255(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D196(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D140(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D260(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D256(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
  mov    -0x18(%rbp),%rax
  lea    D116(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  jmp    L39
L204:
  mov    -0x18(%rbp),%rax
  lea    D6(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
L39:
  addl   $0x1,-0x4(%rbp)
L190:
  mov    -0x4(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jge    L130
  cmpl   $0x0,-0x4(%rbp)
  jne    L174
  mov    -0x4(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L174
L130:
  mov    -0x18(%rbp),%rax
  lea    D63(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <ss7_message@plt>
  mov    -0x20(%rbp),%eax
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D5
data_type: string
name: unpack_data
arguments: data_label: D246
data_type: string
name: unpack_data
arguments: data_label: D142
data_type: string
name: unpack_data
arguments: data_label: D23
data_type: string
name: unpack_data
arguments: data_label: D126
data_type: string
name: unpack_data
arguments: data_label: D173
data_type: string
name: unpack_data
arguments: data_label: D84
data_type: string
name: unpack_data
arguments: data_label: D192
data_type: string
name: unpack_data
arguments: data_label: D36
data_type: string
name: unpack_data
arguments: data_label: D18
data_type: string
name: unpack_data
arguments: data_label: D22
data_type: string
name: unpack_data
arguments: data_label: D56
data_type: string
name: unpack_data
arguments: data_label: D190
data_type: string
name: unpack_data
arguments: data_label: D263
data_type: string
name: unpack_data
arguments: data_label: D29
data_type: string
name: unpack_data
arguments: data_label: D105
data_type: string
name: unpack_data
arguments: data_label: D199
data_type: string
name: unpack_data
arguments: data_label: D255
data_type: string
name: unpack_data
arguments: data_label: D196
data_type: string
name: unpack_data
arguments: data_label: D140
data_type: string
name: unpack_data
arguments: data_label: D260
data_type: string
name: unpack_data
arguments: data_label: D256
data_type: string
name: unpack_data
arguments: data_label: D116
data_type: string
name: unpack_data
arguments: data_label: D6
data_type: string
name: unpack_data
arguments: data_label: D63
data_type: string

tool: D5: 			Notification indicator: 

tool: D246: user suspended; 

tool: D142: user resumed; 

tool: D23: bearer service change; 

tool: D126: discriminator for extension to ASN.1; 

tool: D173: call completion delay; 

tool: D84: conference established; 

tool: D192: conference disconnected; 

tool: D36: other party added; 

tool: D18: isolated; 

tool: D22: reattached; 

tool: D56: other party isolated; 

tool: D190: other party reattached; 

tool: D263: other party split; 

tool: D29: other party disconnected; 

tool: D105: other party floating; 

tool: D199: call is a waiting call; 

tool: D255: diversion activated; 

tool: D196: call transfer, alerting; 

tool: D140: call transfer, active; 

tool: D260: remote hold; 

tool: D256: remote retrieval; 

tool: D116: remote is diverting; 

tool: D6: reserved; 

tool: D63: 


assistant: ```c
int((generic_notification_ind_dump))(struct ss7 *ss7, int messagetype, unsigned char *parm, int len) {
  int pos = 0;
  ss7_message(ss7, "\t\t\tNotification indicator: ");
  while (pos < len && (pos || !(parm[pos - 1] & 0x80))) {
    switch (parm[pos] & 0x7f) {
    case 0x00:
      ss7_message(ss7, "user suspended; ");
      break;
    case 0x01:
      ss7_message(ss7, "user resumed; ");
      break;
    case 0x02:
      ss7_message(ss7, "bearer service change; ");
      break;
    case 0x03:
      ss7_message(ss7, "discriminator for extension to ASN.1; ");
      break;
    case 0x04:
      ss7_message(ss7, "call completion delay; ");
      break;
    case 0x42:
      ss7_message(ss7, "conference established; ");
      break;
    case 0x43:
      ss7_message(ss7, "conference disconnected; ");
      break;
    case 0x44:
      ss7_message(ss7, "other party added; ");
      break;
    case 0x45:
      ss7_message(ss7, "isolated; ");
      break;
    case 0x46:
      ss7_message(ss7, "reattached; ");
      break;
    case 0x47:
      ss7_message(ss7, "other party isolated; ");
      break;
    case 0x48:
      ss7_message(ss7, "other party reattached; ");
      break;
    case 0x49:
      ss7_message(ss7, "other party split; ");
      break;
    case 0x4a:
      ss7_message(ss7, "other party disconnected; ");
      break;
    case 0x4b:
      ss7_message(ss7, "other party floating; ");
      break;
    case 0x60:
      ss7_message(ss7, "call is a waiting call; ");
      break;
    case 0x68:
      ss7_message(ss7, "diversion activated; ");
      break;
    case 0x69:
      ss7_message(ss7, "call transfer, alerting; ");
      break;
    case 0x6a:
      ss7_message(ss7, "call transfer, active; ");
      break;
    case 0x79:
      ss7_message(ss7, "remote hold; ");
      break;
    case 0x7a:
      ss7_message(ss7, "remote retrieval; ");
      break;
    case 0x7b:
      ss7_message(ss7, "remote is diverting; ");
      break;
    default:
      ss7_message(ss7, "reserved; ");
    }
    pos++;
  }
  ss7_message(ss7, "\n");
  return len;
}
```