user: What would the C source look like for the assembly code provided here:

```asm
<read_csv>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xc0,%rsp
  mov    %rdi,-0x78(%rbp)
  mov    %rsi,-0x80(%rbp)
  mov    %rdx,-0x88(%rbp)
  mov    %rcx,-0x90(%rbp)
  mov    %r8,-0x98(%rbp)
  mov    %r9,-0xa0(%rbp)
  mov    0x10(%rbp),%rax
  mov    %rax,-0xa8(%rbp)
  mov    0x18(%rbp),%rax
  mov    %rax,-0xb0(%rbp)
  mov    0x20(%rbp),%rax
  mov    %rax,-0xb8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movl   $0x0,-0x64(%rbp)
  movl   $0x0,-0x60(%rbp)
  movl   $0x0,-0x5c(%rbp)
  movl   $0x0,-0x58(%rbp)
  mov    -0x78(%rbp),%rax
  lea    D153(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x48(%rbp)
  cmpq   $0x0,-0x48(%rbp)
  jne    L428
  mov    -0x78(%rbp),%rax
  mov    %rax,%rsi
  lea    D57(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0xb8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    $0xffffffff,%edi
  call   <exit@plt>
  jmp    L428
L536:
  cmpl   $0x2,-0x64(%rbp)
  je     L508
  cmpl   $0x2,-0x64(%rbp)
  jg     L428
  cmpl   $0x0,-0x64(%rbp)
  je     L272
  cmpl   $0x1,-0x64(%rbp)
  je     L411
  jmp    L428
L272:
  mov    -0xb8(%rbp),%rax
  mov    $0x27,%edx
  lea    D105(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L521
  movl   $0x2,-0x64(%rbp)
  jmp    L428
L521:
  mov    -0xb8(%rbp),%rax
  mov    $0x23,%edx
  lea    D32(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L428
  movl   $0x1,-0x64(%rbp)
  jmp    L428
L411:
  mov    -0xb8(%rbp),%rax
  mov    $0x2c,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x50(%rbp)
  cmpq   $0x0,-0x50(%rbp)
  jne    L30
  jmp    L428
L30:
  addq   $0x1,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L500
  jmp    L428
L500:
  mov    -0x50(%rbp),%rax
  mov    $0x7,%edx
  lea    D63(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L337
  addq   $0x7,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  mov    $0x2c,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  test   %rax,%rax
  jne    L180
  jmp    L428
L180:
  mov    -0x50(%rbp),%rax
  mov    $0xd,%edx
  lea    D90(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L816
  addq   $0x10,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0x88(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L428
L816:
  mov    -0x50(%rbp),%rax
  mov    $0xc,%edx
  lea    D58(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L678
  addq   $0xf,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0x98(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L428
L678:
  mov    -0x50(%rbp),%rax
  mov    $0x9,%edx
  lea    D59(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L194
  addq   $0xc,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0xa8(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L428
L194:
  mov    -0x50(%rbp),%rax
  mov    $0xc,%edx
  lea    D3(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L428
  addq   $0xf,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0x80(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L428
L337:
  mov    -0x50(%rbp),%rax
  mov    $0x6,%edx
  lea    D9(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L428
  addq   $0x6,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  mov    $0x2c,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x50(%rbp)
  test   %rax,%rax
  jne    L245
  jmp    L428
L245:
  mov    -0x50(%rbp),%rax
  mov    $0xd,%edx
  lea    D90(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L190
  addq   $0x10,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0x90(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L428
L190:
  mov    -0x50(%rbp),%rax
  mov    $0xc,%edx
  lea    D58(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L360
  addq   $0xf,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0xa0(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L428
L360:
  mov    -0x50(%rbp),%rax
  mov    $0x9,%edx
  lea    D59(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L428
  addq   $0xc,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0xb0(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L428
L508:
  mov    -0xb8(%rbp),%rax
  mov    %rax,-0x50(%rbp)
  movl   $0x0,-0x54(%rbp)
  jmp    L129
L685:
  mov    -0x54(%rbp),%eax
  cltq
  mov    -0x50(%rbp),%rdx
  mov    %rdx,-0x40(%rbp,%rax,8)
  mov    -0x50(%rbp),%rax
  mov    $0x2c,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x50(%rbp)
  cmpq   $0x0,-0x50(%rbp)
  je     L690
  mov    -0x50(%rbp),%rax
  movb   $0x0,(%rax)
  addq   $0x1,-0x50(%rbp)
  addl   $0x1,-0x54(%rbp)
L129:
  cmpl   $0x5,-0x54(%rbp)
  jle    L685
  jmp    L297
L690:
  nop
L297:
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  cmp    %eax,-0x60(%rbp)
  je     L454
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x60(%rbp)
  movl   $0x0,-0x5c(%rbp)
  movl   $0x0,-0x58(%rbp)
L454:
  mov    -0x40(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x53,%al
  jne    L847
  mov    -0x30(%rbp),%rax
  mov    $0x5,%edx
  lea    D138(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L847
  mov    -0x28(%rbp),%rax
  mov    $0x6,%edx
  lea    D215(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L214
  movl   $0x1,-0x5c(%rbp)
  jmp    L122
L214:
  mov    -0x28(%rbp),%rax
  mov    $0x5,%edx
  lea    D120(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L122
  movl   $0x2,-0x5c(%rbp)
  jmp    L122
L847:
  mov    -0x40(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x44,%al
  jne    L342
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x31,%al
  jne    L342
  mov    -0x28(%rbp),%rax
  mov    $0x6,%edx
  lea    D88(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L342
  mov    -0x20(%rbp),%rax
  mov    $0xd,%edx
  lea    D31(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L137
  movl   $0x1,-0x58(%rbp)
  jmp    L420
L137:
  mov    -0x20(%rbp),%rax
  mov    $0xc,%edx
  lea    D188(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L232
  movl   $0x2,-0x58(%rbp)
  jmp    L420
L232:
  mov    -0x20(%rbp),%rax
  mov    $0x9,%edx
  lea    D230(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L844
  movl   $0x3,-0x58(%rbp)
  jmp    L420
L844:
  mov    -0x20(%rbp),%rax
  mov    $0xc,%edx
  lea    D180(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L420
  movl   $0x4,-0x58(%rbp)
  jmp    L420
L342:
  mov    -0x40(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x44,%al
  jne    L935
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x31,%al
  jne    L935
  mov    -0x28(%rbp),%rax
  mov    $0xd,%edx
  lea    D61(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L935
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x5,%eax
  jle    L935
  cmpl   $0x1,-0x5c(%rbp)
  jne    L400
  cmpl   $0x4,-0x58(%rbp)
  je     L153
  cmpl   $0x4,-0x58(%rbp)
  jg     L557
  cmpl   $0x3,-0x58(%rbp)
  je     L241
  cmpl   $0x3,-0x58(%rbp)
  jg     L557
  cmpl   $0x1,-0x58(%rbp)
  je     L363
  cmpl   $0x2,-0x58(%rbp)
  je     L709
  jmp    L557
L363:
  mov    -0x20(%rbp),%rax
  add    $0x3,%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0x88(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L166
L709:
  mov    -0x20(%rbp),%rax
  add    $0x3,%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0x98(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L166
L241:
  mov    -0x20(%rbp),%rax
  add    $0x3,%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0xa8(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0xa8(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L166
L153:
  mov    -0x20(%rbp),%rax
  add    $0x3,%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0x80(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L166
L400:
  cmpl   $0x2,-0x5c(%rbp)
  jne    L557
  cmpl   $0x4,-0x58(%rbp)
  je     L613
  cmpl   $0x4,-0x58(%rbp)
  jg     L557
  cmpl   $0x3,-0x58(%rbp)
  je     L858
  cmpl   $0x3,-0x58(%rbp)
  jg     L557
  cmpl   $0x1,-0x58(%rbp)
  je     L512
  cmpl   $0x2,-0x58(%rbp)
  je     L313
  jmp    L557
L512:
  mov    -0x20(%rbp),%rax
  add    $0x3,%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0x90(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L166
L313:
  mov    -0x20(%rbp),%rax
  add    $0x3,%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0xa0(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L166
L858:
  mov    -0x20(%rbp),%rax
  add    $0x3,%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0xb0(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L166
L613:
  mov    -0x20(%rbp),%rax
  add    $0x3,%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0x80(%rbp),%rax
  mov    %rdx,(%rax)
  nop
L166:
  jmp    L557
L935:
  mov    -0x40(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x44,%al
  jne    L507
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x31,%al
  jne    L507
  mov    -0x28(%rbp),%rax
  mov    $0x17,%edx
  lea    D109(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L507
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x5,%eax
  jle    L507
  cmpl   $0x1,-0x5c(%rbp)
  jne    L912
  mov    -0x20(%rbp),%rax
  add    $0x2,%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0xa8(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L507
L912:
  cmpl   $0x2,-0x5c(%rbp)
  jne    L507
  mov    -0x20(%rbp),%rax
  add    $0x2,%rax
  mov    %rax,%rdi
  call   <strdup@plt>
  mov    %rax,%rdx
  mov    -0xb0(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L507
L122:
  nop
  jmp    L507
L420:
  nop
  jmp    L507
L557:
  nop
L507:
  nop
L428:
  mov    -0x48(%rbp),%rdx
  mov    -0xb8(%rbp),%rax
  mov    $0x400,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L536
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L326
  call   <__stack_chk_fail@plt>
L326:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D153
datatype: string
name: parse_data
arguments: data_label: D57
datatype: string
name: parse_data
arguments: data_label: D105
datatype: string
name: parse_data
arguments: data_label: D32
datatype: string
name: parse_data
arguments: data_label: D63
datatype: string
name: parse_data
arguments: data_label: D90
datatype: string
name: parse_data
arguments: data_label: D58
datatype: string
name: parse_data
arguments: data_label: D59
datatype: string
name: parse_data
arguments: data_label: D3
datatype: string
name: parse_data
arguments: data_label: D9
datatype: string
name: parse_data
arguments: data_label: D138
datatype: string
name: parse_data
arguments: data_label: D215
datatype: string
name: parse_data
arguments: data_label: D120
datatype: string
name: parse_data
arguments: data_label: D88
datatype: string
name: parse_data
arguments: data_label: D31
datatype: string
name: parse_data
arguments: data_label: D188
datatype: string
name: parse_data
arguments: data_label: D230
datatype: string
name: parse_data
arguments: data_label: D180
datatype: string
name: parse_data
arguments: data_label: D61
datatype: string
name: parse_data
arguments: data_label: D162
datatype: string
name: parse_data
arguments: data_label: D109
datatype: string

tool: D153: r

tool: D57: Cant open file: %s


tool: D105: L,0,PPP,Type,Identifier,Length,Protocol

tool: D32: Index,Slave/Master,Type,Description

tool: D63: Master,

tool: D90: LMP_comb_key,

tool: D58: LMP_au_rand,

tool: D59: LMP_sres,

tool: D3: LMP_in_rand,

tool: D9: Slave,

tool: D138: Frame

tool: D215: Master

tool: D120: Slave

tool: D88: Opcode

tool: D31: LMP_comb_key

tool: D188: LMP_au_rand

tool: D230: LMP_sres

tool: D180: LMP_in_rand

tool: D61: Random Number

tool: D162: %s


tool: D109: Authentication Response

assistant: ```c
void read_csv(char *filename, char **InRand, char **MasterCombKey, char **SlaveCombKey, char **MasterAuRand, char **SlaveAuRand, char **MasterSres, char **SlaveSres, char *buf) {
  FILE *fh;
  char *tmp;
  char *temp[6] = {
      0,
  };
  int start = 0;
  int count = 0;
  int who = 0;
  int what = 0;
  int i;
  fh = fopen(filename, "r");
  if (!fh) {
    printf("Cant open file: %s\n", filename);
    free(buf);
    exit(-1);
  }
  while (fgets(buf, 1024, fh)) {
    switch (start) {
    case 0:
      if (!strncmp(buf, "L,0,PPP,Type,Identifier,Length,Protocol", 39)) {
        start = 2;
      } else if (!strncmp(buf, "Index,Slave/Master,Type,Description", 35)) {
        start = 1;
      }
      break;
    case 1:
      tmp = strchr(buf, ',');
      if (!tmp)
        continue;
      if (!*(++tmp))
        continue;
      if (!strncmp(tmp, "Master,", 7)) {
        tmp += 7;
        tmp = strchr(tmp, ',');
        if (!tmp++)
          continue;
        if (!strncmp(tmp, "LMP_comb_key,", 13)) {
          tmp += 16;
          *MasterCombKey = strdup(tmp);
        } else if (!strncmp(tmp, "LMP_au_rand,", 12)) {
          tmp += 15;
          *MasterAuRand = strdup(tmp);
        } else if (!strncmp(tmp, "LMP_sres,", 9)) {
          tmp += 12;
          *MasterSres = strdup(tmp);
        } else if (!strncmp(tmp, "LMP_in_rand,", 12)) {
          tmp += 15;
          *InRand = strdup(tmp);
        }
      } else if (!strncmp(tmp, "Slave,", 6)) {
        tmp += 6;
        tmp = strchr(tmp, ',');
        if (!tmp++)
          continue;
        if (!strncmp(tmp, "LMP_comb_key,", 13)) {
          tmp += 16;
          *SlaveCombKey = strdup(tmp);
        } else if (!strncmp(tmp, "LMP_au_rand,", 12)) {
          tmp += 15;
          *SlaveAuRand = strdup(tmp);
        } else if (!strncmp(tmp, "LMP_sres,", 9)) {
          tmp += 12;
          *SlaveSres = strdup(tmp);
        }
      }
      break;
    case 2:
      tmp = buf;
      for (i = 0; i < 6; i++) {
        temp[i] = tmp;
        tmp = strchr(tmp, ',');
        if (!tmp)
          break;
        *tmp = '\0';
        tmp++;
      }
      if (atoi(temp[1]) != count) {
        count = atoi(temp[1]);
        who = 0;
        what = 0;
      }
      if ((*temp[0] == 'S') && (!strncmp(temp[2], "Frame", 5))) {
        if (!strncmp(temp[3], "Master", 6))
          who = 1;
        else if (!strncmp(temp[3], "Slave", 5))
          who = 2;
      } else if ((*temp[0] == 'D') && (*temp[2] == '1') && (!strncmp(temp[3], "Opcode", 6))) {
        if (!strncmp(temp[4], "LMP_comb_key", 13))
          what = 1;
        else if (!strncmp(temp[4], "LMP_au_rand", 12))
          what = 2;
        else if (!strncmp(temp[4], "LMP_sres", 9))
          what = 3;
        else if (!strncmp(temp[4], "LMP_in_rand", 12))
          what = 4;
      } else if ((*temp[0] == 'D') && (*temp[2] == '1') && (!strncmp(temp[3], "Random Number", 13)) && (strlen(temp[4]) > 5)) {
        if (who == 1) {
          switch (what) {
          case 1:
            *MasterCombKey = strdup(temp[4] + 3);
            break;
          case 2:
            *MasterAuRand = strdup(temp[4] + 3);
            break;
          case 3:
            *MasterSres = strdup(temp[4] + 3);
            printf("%s\n", *MasterSres);
            break;
          case 4:
            *InRand = strdup(temp[4] + 3);
            break;
          }
        } else if (who == 2) {
          switch (what) {
          case 1:
            *SlaveCombKey = strdup(temp[4] + 3);
            break;
          case 2:
            *SlaveAuRand = strdup(temp[4] + 3);
            break;
          case 3:
            *SlaveSres = strdup(temp[4] + 3);
            break;
          case 4:
            *InRand = strdup(temp[4] + 3);
            break;
          }
        }
      } else if ((*temp[0] == 'D') && (*temp[2] == '1') && (!strncmp(temp[3], "Authentication Response", 23)) && (strlen(temp[4]) > 5)) {
        if (who == 1)
          *MasterSres = strdup(temp[4] + 2);
        else if (who == 2)
          *SlaveSres = strdup(temp[4] + 2);
      }
      break;
    }
  }
  fclose(fh);
  return;
}
```