
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

uchar * ssh2_userkey_loadpub
                  (Filename *filename,char **algorithm,int *pub_blob_len,char **commentptr,
                  char **errorstr)

{
  int iVar1;
  FILE *__stream;
  int iVar2;
  uint uVar3;
  char *pcVar4;
  size_t namelen;
  ssh_signkey *psVar5;
  uchar *ret;
  uchar *puVar6;
  byte *pbVar7;
  byte *pbVar8;
  int in_GS_OFFSET;
  bool bVar9;
  bool bVar10;
  bool bVar11;
  byte bVar12;
  char *local_60;
  int public_blob_len;
  char header [40];
  
  bVar12 = 0;
  iVar1 = *(int *)(in_GS_OFFSET + 0x14);
  __stream = (FILE *)f_open(filename,"rb",0);
  if (__stream != (FILE *)0x0) {
    iVar2 = key_type_fp((FILE *)__stream);
    if (iVar2 == 9) {
      puVar6 = rfc4716_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);
    }
    else {
      if (iVar2 != 10) {
        if (iVar2 == 3) {
          pbVar7 = (byte *)header;
          do {
            iVar2 = fgetc(__stream);
            uVar3 = iVar2 + 1;
            bVar11 = uVar3 == 0xe;
            if (uVar3 < 0xf) {
              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;
              if (bVar9) goto LAB_00039b3e;
            }
            else if (iVar2 == 0x3a) {
              uVar3 = fgetc(__stream);
              bVar9 = uVar3 < 0x20;
              bVar11 = uVar3 == 0x20;
              if (bVar11) {
                *pbVar7 = 0;
                iVar2 = 0x16;
                pbVar7 = (byte *)header;
                pbVar8 = (byte *)"PuTTY-User-Key-File-2";
                goto code_r0x00039be7;
              }
              goto LAB_00039b3e;
            }
            bVar9 = pbVar7 < header + 0x27;
            bVar11 = pbVar7 == (byte *)(header + 0x27);
            if (bVar11) goto LAB_00039b3e;
            *pbVar7 = (byte)iVar2;
            pbVar7 = pbVar7 + 1;
          } while( true );
        }
        goto LAB_00039a63;
      }
      puVar6 = openssh_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);
    }
    fclose(__stream);
    goto LAB_00039aac;
  }
  if (errorstr != (char **)0x0) {
    *errorstr = "can\'t open file";
  }
  goto LAB_00039aaa;
  while( true ) {
    iVar2 = iVar2 + -1;
    bVar9 = *pbVar7 < *pbVar8;
    bVar11 = *pbVar7 == *pbVar8;
    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;
    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;
    if (!bVar11) break;
code_r0x00039be7:
    if (iVar2 == 0) break;
  }
  bVar10 = false;
  bVar11 = (!bVar9 && !bVar11) == bVar9;
  if (bVar11) {
LAB_00039c10:
    pcVar4 = read_body((FILE *)__stream);
    if (pcVar4 != (char *)0x0) {
      namelen = strlen(pcVar4);
      psVar5 = find_pubkey_alg_len(namelen,pcVar4);
      safefree(pcVar4);
      if (psVar5 != (ssh_signkey *)0x0) {
        pbVar7 = (byte *)header;
        do {
          iVar2 = fgetc(__stream);
          if (iVar2 + 1U < 0xf) {
            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;
          }
          else if (iVar2 == 0x3a) {
            uVar3 = fgetc(__stream);
            bVar11 = uVar3 < 0x20;
            bVar9 = uVar3 == 0x20;
            if (bVar9) {
              *pbVar7 = 0;
              iVar2 = 0xb;
              pbVar7 = (byte *)header;
              pbVar8 = (byte *)"Encryption";
              goto code_r0x00039cb3;
            }
            break;
          }
          if (pbVar7 == (byte *)(header + 0x27)) break;
          *pbVar7 = (byte)iVar2;
          pbVar7 = pbVar7 + 1;
        } while( true );
      }
    }
    goto LAB_00039c7d;
  }
  iVar2 = 0x16;
  pbVar7 = (byte *)header;
  pbVar8 = (byte *)"PuTTY-User-Key-File-1";
  do {
    if (iVar2 == 0) break;
    iVar2 = iVar2 + -1;
    bVar10 = *pbVar7 < *pbVar8;
    bVar11 = *pbVar7 == *pbVar8;
    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;
    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;
  } while (bVar11);
  bVar9 = false;
  bVar11 = (!bVar10 && !bVar11) == bVar10;
  if (bVar11) goto LAB_00039c10;
LAB_00039b3e:
  iVar2 = 0x14;
  pbVar7 = (byte *)header;
  pbVar8 = (byte *)"PuTTY-User-Key-File-";
  do {
    if (iVar2 == 0) break;
    iVar2 = iVar2 + -1;
    bVar9 = *pbVar7 < *pbVar8;
    bVar11 = *pbVar7 == *pbVar8;
    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;
    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;
  } while (bVar11);
  pcVar4 = "PuTTY key format too new";
  if ((!bVar9 && !bVar11) != bVar9) {
LAB_00039a63:
    pcVar4 = "not a PuTTY SSH-2 private key";
  }
  goto LAB_00039a69;
  while( true ) {
    iVar2 = iVar2 + -1;
    bVar11 = *pbVar7 < *pbVar8;
    bVar9 = *pbVar7 == *pbVar8;
    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;
    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;
    if (!bVar9) break;
code_r0x00039cb3:
    if (iVar2 == 0) break;
  }
  if (((!bVar11 && !bVar9) == bVar11) &&
     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)) {
    safefree(pcVar4);
    pbVar7 = (byte *)header;
    do {
      iVar2 = fgetc(__stream);
      if (iVar2 + 1U < 0xf) {
        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;
      }
      else if (iVar2 == 0x3a) {
        uVar3 = fgetc(__stream);
        bVar11 = uVar3 < 0x20;
        bVar9 = uVar3 == 0x20;
        if (bVar9) {
          *pbVar7 = 0;
          iVar2 = 8;
          pbVar7 = (byte *)header;
          pbVar8 = (byte *)"Comment";
          goto code_r0x00039d39;
        }
        break;
      }
      if (pbVar7 == (byte *)(header + 0x27)) break;
      *pbVar7 = (byte)iVar2;
      pbVar7 = pbVar7 + 1;
    } while( true );
  }
  goto LAB_00039c7d;
  while( true ) {
    iVar2 = iVar2 + -1;
    bVar11 = *pbVar7 < *pbVar8;
    bVar9 = *pbVar7 == *pbVar8;
    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;
    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;
    if (!bVar9) break;
code_r0x00039dfc:
    if (iVar2 == 0) break;
  }
  if (((!bVar11 && !bVar9) == bVar11) &&
     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)) {
    iVar2 = userkey_parse_line_counter(pcVar4);
    safefree(pcVar4);
    if ((-1 < iVar2) &&
       (puVar6 = read_blob((FILE *)__stream,iVar2,&public_blob_len), puVar6 != (uchar *)0x0)) {
      fclose(__stream);
      if (pub_blob_len != (int *)0x0) {
        *pub_blob_len = public_blob_len;
      }
      if (algorithm != (char **)0x0) {
        pcVar4 = dupstr(psVar5->name);
        *algorithm = pcVar4;
      }
      goto LAB_00039aac;
    }
  }
LAB_00039da5:
  pcVar4 = "file format error";
  bVar11 = commentptr != (char **)0x0;
  fclose(__stream);
  if (errorstr != (char **)0x0) goto LAB_00039a87;
  goto LAB_00039a8d;
  while( true ) {
    iVar2 = iVar2 + -1;
    bVar11 = *pbVar7 < *pbVar8;
    bVar9 = *pbVar7 == *pbVar8;
    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;
    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;
    if (!bVar9) break;
code_r0x00039d39:
    if (iVar2 == 0) break;
  }
  if (((!bVar11 && !bVar9) == bVar11) &&
     (local_60 = read_body((FILE *)__stream), local_60 != (char *)0x0)) {
    if (commentptr == (char **)0x0) {
      safefree(local_60);
    }
    else {
      *commentptr = local_60;
    }
    pbVar7 = (byte *)header;
    do {
      iVar2 = fgetc(__stream);
      if (iVar2 + 1U < 0xf) {
        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;
      }
      else if (iVar2 == 0x3a) {
        uVar3 = fgetc(__stream);
        bVar11 = uVar3 < 0x20;
        bVar9 = uVar3 == 0x20;
        if (bVar9) {
          *pbVar7 = 0;
          iVar2 = 0xd;
          pbVar7 = (byte *)header;
          pbVar8 = (byte *)"Public-Lines";
          goto code_r0x00039dfc;
        }
        goto LAB_00039da5;
      }
      if (pbVar7 == (byte *)(header + 0x27)) goto LAB_00039da5;
      *pbVar7 = (byte)iVar2;
      pbVar7 = pbVar7 + 1;
    } while( true );
  }
LAB_00039c7d:
  pcVar4 = "file format error";
LAB_00039a69:
  fclose(__stream);
  bVar11 = false;
  local_60 = (char *)0x0;
  if (errorstr != (char **)0x0) {
LAB_00039a87:
    *errorstr = pcVar4;
LAB_00039a8d:
    if (bVar11) {
      safefree(local_60);
      *commentptr = (char *)0x0;
    }
  }
LAB_00039aaa:
  puVar6 = (uchar *)0x0;
LAB_00039aac:
  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail_local();
  }
  return puVar6;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int FUN_000399e0(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,
                undefined4 *param_5)

{
  FILE *__stream;
  int iVar1;
  uint uVar2;
  char *pcVar3;
  size_t sVar4;
  int iVar5;
  int iVar6;
  undefined4 uVar7;
  byte *pbVar8;
  byte *pbVar9;
  int in_GS_OFFSET;
  bool bVar10;
  bool bVar11;
  bool bVar12;
  byte bVar13;
  int local_60;
  undefined4 local_4c;
  byte local_48 [39];
  byte local_21;
  int local_20;
  undefined4 uStack_14;
  
  bVar13 = 0;
  uStack_14 = 0x399e9;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  __stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);
  if (__stream != (FILE *)0x0) {
    iVar1 = FUN_000382f0();
    if (iVar1 == 9) {
      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);
    }
    else {
      if (iVar1 != 10) {
        if (iVar1 == 3) {
          pbVar8 = local_48;
          do {
            iVar1 = fgetc(__stream);
            uVar2 = iVar1 + 1;
            bVar12 = uVar2 == 0xe;
            if (uVar2 < 0xf) {
              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;
              if (bVar10) goto LAB_00039b3e;
            }
            else if (iVar1 == 0x3a) {
              uVar2 = fgetc(__stream);
              bVar10 = uVar2 < 0x20;
              bVar12 = uVar2 == 0x20;
              if (bVar12) {
                *pbVar8 = 0;
                iVar1 = 0x16;
                pbVar8 = local_48;
                pbVar9 = (byte *)"PuTTY-User-Key-File-2";
                goto code_r0x00039be7;
              }
              goto LAB_00039b3e;
            }
            bVar10 = pbVar8 < &local_21;
            bVar12 = pbVar8 == &local_21;
            if (bVar12) goto LAB_00039b3e;
            *pbVar8 = (byte)iVar1;
            pbVar8 = pbVar8 + 1;
          } while( true );
        }
        goto LAB_00039a63;
      }
      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);
    }
    fclose(__stream);
    goto LAB_00039aac;
  }
  if (param_5 != (undefined4 *)0x0) {
    *param_5 = "can\'t open file";
  }
  goto LAB_00039aaa;
  while( true ) {
    iVar1 = iVar1 + -1;
    bVar10 = *pbVar8 < *pbVar9;
    bVar12 = *pbVar8 == *pbVar9;
    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;
    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;
    if (!bVar12) break;
code_r0x00039be7:
    if (iVar1 == 0) break;
  }
  bVar11 = false;
  bVar12 = (!bVar10 && !bVar12) == bVar10;
  if (bVar12) {
LAB_00039c10:
    pcVar3 = (char *)FUN_000375b0();
    if (pcVar3 != (char *)0x0) {
      sVar4 = strlen(pcVar3);
      iVar5 = FUN_000381e0(sVar4,pcVar3);
      FUN_0001ed20(pcVar3);
      if (iVar5 != 0) {
        pbVar8 = local_48;
        do {
          iVar1 = fgetc(__stream);
          if (iVar1 + 1U < 0xf) {
            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;
          }
          else if (iVar1 == 0x3a) {
            uVar2 = fgetc(__stream);
            bVar12 = uVar2 < 0x20;
            bVar10 = uVar2 == 0x20;
            if (bVar10) {
              *pbVar8 = 0;
              iVar1 = 0xb;
              pbVar8 = local_48;
              pbVar9 = (byte *)"Encryption";
              goto code_r0x00039cb3;
            }
            break;
          }
          if (pbVar8 == &local_21) break;
          *pbVar8 = (byte)iVar1;
          pbVar8 = pbVar8 + 1;
        } while( true );
      }
    }
    goto LAB_00039c7d;
  }
  iVar1 = 0x16;
  pbVar8 = local_48;
  pbVar9 = (byte *)"PuTTY-User-Key-File-1";
  do {
    if (iVar1 == 0) break;
    iVar1 = iVar1 + -1;
    bVar11 = *pbVar8 < *pbVar9;
    bVar12 = *pbVar8 == *pbVar9;
    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;
    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;
  } while (bVar12);
  bVar10 = false;
  bVar12 = (!bVar11 && !bVar12) == bVar11;
  if (bVar12) goto LAB_00039c10;
LAB_00039b3e:
  iVar1 = 0x14;
  pbVar8 = local_48;
  pbVar9 = (byte *)"PuTTY-User-Key-File-";
  do {
    if (iVar1 == 0) break;
    iVar1 = iVar1 + -1;
    bVar10 = *pbVar8 < *pbVar9;
    bVar12 = *pbVar8 == *pbVar9;
    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;
    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;
  } while (bVar12);
  pcVar3 = "PuTTY key format too new";
  if ((!bVar10 && !bVar12) != bVar10) {
LAB_00039a63:
    pcVar3 = "not a PuTTY SSH-2 private key";
  }
  goto LAB_00039a69;
  while( true ) {
    iVar1 = iVar1 + -1;
    bVar12 = *pbVar8 < *pbVar9;
    bVar10 = *pbVar8 == *pbVar9;
    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;
    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;
    if (!bVar10) break;
code_r0x00039cb3:
    if (iVar1 == 0) break;
  }
  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {
    FUN_0001ed20(iVar1);
    pbVar8 = local_48;
    do {
      iVar1 = fgetc(__stream);
      if (iVar1 + 1U < 0xf) {
        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;
      }
      else if (iVar1 == 0x3a) {
        uVar2 = fgetc(__stream);
        bVar12 = uVar2 < 0x20;
        bVar10 = uVar2 == 0x20;
        if (bVar10) {
          *pbVar8 = 0;
          iVar1 = 8;
          pbVar8 = local_48;
          pbVar9 = (byte *)"Comment";
          goto code_r0x00039d39;
        }
        break;
      }
      if (pbVar8 == &local_21) break;
      *pbVar8 = (byte)iVar1;
      pbVar8 = pbVar8 + 1;
    } while( true );
  }
  goto LAB_00039c7d;
  while( true ) {
    iVar1 = iVar1 + -1;
    bVar12 = *pbVar8 < *pbVar9;
    bVar10 = *pbVar8 == *pbVar9;
    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;
    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;
    if (!bVar10) break;
code_r0x00039dfc:
    if (iVar1 == 0) break;
  }
  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {
    iVar6 = FUN_000374c0();
    FUN_0001ed20(iVar1);
    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {
      fclose(__stream);
      if (param_3 != (undefined4 *)0x0) {
        *param_3 = local_4c;
      }
      if (param_2 != (undefined4 *)0x0) {
        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));
        *param_2 = uVar7;
      }
      goto LAB_00039aac;
    }
  }
LAB_00039da5:
  pcVar3 = "file format error";
  bVar12 = param_4 != (int *)0x0;
  fclose(__stream);
  if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;
  goto LAB_00039a8d;
  while( true ) {
    iVar1 = iVar1 + -1;
    bVar12 = *pbVar8 < *pbVar9;
    bVar10 = *pbVar8 == *pbVar9;
    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;
    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;
    if (!bVar10) break;
code_r0x00039d39:
    if (iVar1 == 0) break;
  }
  if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {
    if (param_4 == (int *)0x0) {
      FUN_0001ed20(local_60);
    }
    else {
      *param_4 = local_60;
    }
    pbVar8 = local_48;
    do {
      iVar1 = fgetc(__stream);
      if (iVar1 + 1U < 0xf) {
        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;
      }
      else if (iVar1 == 0x3a) {
        uVar2 = fgetc(__stream);
        bVar12 = uVar2 < 0x20;
        bVar10 = uVar2 == 0x20;
        if (bVar10) {
          *pbVar8 = 0;
          iVar1 = 0xd;
          pbVar8 = local_48;
          pbVar9 = (byte *)"Public-Lines";
          goto code_r0x00039dfc;
        }
        goto LAB_00039da5;
      }
      if (pbVar8 == &local_21) goto LAB_00039da5;
      *pbVar8 = (byte)iVar1;
      pbVar8 = pbVar8 + 1;
    } while( true );
  }
LAB_00039c7d:
  pcVar3 = "file format error";
LAB_00039a69:
  fclose(__stream);
  bVar12 = false;
  local_60 = 0;
  if (param_5 != (undefined4 *)0x0) {
LAB_00039a87:
    *param_5 = pcVar3;
LAB_00039a8d:
    if (bVar12) {
      FUN_0001ed20(local_60);
      *param_4 = 0;
    }
  }
LAB_00039aaa:
  iVar1 = 0;
LAB_00039aac:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    FUN_0004d450();
  }
  return iVar1;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00014560
ADD EBX,0x3647b
SUB ESP,0x60
MOV EAX,dword ptr [ESP + 0x78]
MOV dword ptr [ESP + 0x14],EAX
MOV EAX,dword ptr [ESP + 0x7c]
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,dword ptr [ESP + 0x80]
MOV dword ptr [ESP + 0xc],EAX
MOV EAX,dword ptr [ESP + 0x84]
MOV dword ptr [ESP + 0x8],EAX
MOV EAX,GS:[0x14]
MOV dword ptr [ESP + 0x50],EAX
XOR EAX,EAX
LEA EAX,[EBX + 0xfffe878b]
PUSH 0x0
PUSH EAX
PUSH dword ptr [ESP + 0x7c]
CALL 0x0004a6a0
ADD ESP,0x10
TEST EAX,EAX
JZ 0x00039ad0
MOV EBP,EAX
CALL 0x000382f0
CMP EAX,0x9
JZ 0x00039b70
CMP EAX,0xa
JZ 0x00039ba0
CMP EAX,0x3
JZ 0x00039af0
LEA ESI,[EBX + 0xfffe87f4]
SUB ESP,0xc
PUSH EBP
CALL 0x00012130
ADD ESP,0x10
MOV EAX,dword ptr [ESP + 0x4]
XOR EDX,EDX
MOV dword ptr [ESP + 0xc],0x0
TEST EAX,EAX
JZ 0x00039aaa
MOV EAX,dword ptr [ESP + 0x4]
MOV dword ptr [EAX],ESI
TEST DL,DL
JZ 0x00039aaa
SUB ESP,0xc
PUSH dword ptr [ESP + 0x18]
CALL 0x0001ed20
MOV EAX,dword ptr [ESP + 0x18]
ADD ESP,0x10
MOV dword ptr [EAX],0x0
XOR ESI,ESI
MOV ECX,dword ptr [ESP + 0x4c]
XOR ECX,dword ptr GS:[0x14]
MOV EAX,ESI
JNZ 0x00039e99
ADD ESP,0x5c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EDX,dword ptr [ESP + 0x4]
TEST EDX,EDX
JZ 0x00039aaa
MOV EDI,dword ptr [ESP + 0x4]
LEA EAX,[EBX + 0xfffe878e]
MOV dword ptr [EDI],EAX
JMP 0x00039aaa
LEA EAX,[ESP + 0x24]
MOV EDI,0x4801
MOV dword ptr [ESP + 0x18],EAX
MOV ESI,EAX
LEA EAX,[ESP + 0x4b]
MOV dword ptr [ESP + 0xc],EAX
JMP 0x00039b25
CMP EAX,0x3a
JZ 0x00039bc0
CMP ESI,dword ptr [ESP + 0xc]
JZ 0x00039b3e
ADD ESI,0x1
MOV byte ptr [ESI + -0x1],AL
SUB ESP,0xc
PUSH EBP
CALL 0x000123d0
ADD ESP,0x10
LEA ECX,[EAX + 0x1]
CMP ECX,0xe
JA 0x00039b10
BT EDI,ECX
JNC 0x00039b19
MOV ESI,dword ptr [ESP + 0x18]
MOV ECX,0x14
LEA EDI,[EBX + 0xfffe8857]
CMPSB.REPE ES:EDI,ESI
LEA ESI,[EBX + 0xfffe8812]
SETA AL
SBB AL,0x0
TEST AL,AL
JZ 0x00039a69
JMP 0x00039a63
SUB ESP,0xc
PUSH dword ptr [ESP + 0x10]
PUSH dword ptr [ESP + 0x18]
PUSH dword ptr [ESP + 0x28]
PUSH dword ptr [ESP + 0x28]
PUSH EBP
CALL 0x00039360
ADD ESP,0x14
MOV ESI,EAX
PUSH EBP
CALL 0x00012130
ADD ESP,0x10
JMP 0x00039aac
SUB ESP,0xc
PUSH dword ptr [ESP + 0x10]
PUSH dword ptr [ESP + 0x18]
PUSH dword ptr [ESP + 0x28]
PUSH dword ptr [ESP + 0x28]
PUSH EBP
CALL 0x000397e0
JMP 0x00039b89
SUB ESP,0xc
PUSH EBP
CALL 0x000123d0
ADD ESP,0x10
CMP EAX,0x20
JNZ 0x00039b3e
MOV byte ptr [ESI],0x0
MOV ESI,dword ptr [ESP + 0x18]
MOV ECX,0x16
LEA EDI,[EBX + 0xfffe882b]
CMPSB.REPE ES:EDI,ESI
SETA AL
SBB AL,0x0
TEST AL,AL
JZ 0x00039c10
MOV ESI,dword ptr [ESP + 0x18]
MOV ECX,0x16
LEA EDI,[EBX + 0xfffe8841]
CMPSB.REPE ES:EDI,ESI
SETA AL
SBB AL,0x0
TEST AL,AL
JNZ 0x00039b3e
MOV EAX,EBP
CALL 0x000375b0
MOV ESI,EAX
TEST EAX,EAX
JZ 0x00039c7d
SUB ESP,0xc
PUSH EAX
CALL 0x00012310
POP EDI
POP EDX
PUSH ESI
PUSH EAX
CALL 0x000381e0
MOV dword ptr [ESP],ESI
MOV EDI,EAX
MOV dword ptr [ESP + 0x2c],EAX
CALL 0x0001ed20
ADD ESP,0x10
TEST EDI,EDI
JZ 0x00039c7d
MOV EDI,dword ptr [ESP + 0x18]
LEA ESI,[ESP + 0x4b]
JMP 0x00039c5f
CMP EAX,0x3a
JZ 0x00039c90
CMP EDI,ESI
JZ 0x00039c7d
ADD EDI,0x1
MOV byte ptr [EDI + -0x1],AL
SUB ESP,0xc
PUSH EBP
CALL 0x000123d0
ADD ESP,0x10
LEA EDX,[EAX + 0x1]
CMP EDX,0xe
JA 0x00039c50
MOV ECX,0x4801
BT ECX,EDX
JNC 0x00039c55
LEA ESI,[EBX + 0xfffe8729]
JMP 0x00039a69
SUB ESP,0xc
PUSH EBP
CALL 0x000123d0
ADD ESP,0x10
CMP EAX,0x20
JNZ 0x00039c7d
MOV byte ptr [EDI],0x0
MOV ESI,dword ptr [ESP + 0x18]
MOV ECX,0xb
LEA EDI,[EBX + 0xfffe886c]
CMPSB.REPE ES:EDI,ESI
SETA AL
SBB AL,0x0
TEST AL,AL
JNZ 0x00039c7d
MOV EAX,EBP
CALL 0x000375b0
TEST EAX,EAX
JZ 0x00039c7d
SUB ESP,0xc
PUSH EAX
CALL 0x0001ed20
ADD ESP,0x10
MOV EDI,dword ptr [ESP + 0x18]
LEA ESI,[ESP + 0x4b]
JMP 0x00039cef
CMP EAX,0x3a
JZ 0x00039d12
CMP EDI,ESI
JZ 0x00039c7d
ADD EDI,0x1
MOV byte ptr [EDI + -0x1],AL
SUB ESP,0xc
PUSH EBP
CALL 0x000123d0
ADD ESP,0x10
LEA EDX,[EAX + 0x1]
CMP EDX,0xe
JA 0x00039ce0
MOV ECX,0x4801
BT ECX,EDX
JNC 0x00039ce5
JMP 0x00039c7d
SUB ESP,0xc
PUSH EBP
CALL 0x000123d0
ADD ESP,0x10
CMP EAX,0x20
JNZ 0x00039c7d
MOV byte ptr [EDI],0x0
MOV ESI,dword ptr [ESP + 0x18]
MOV ECX,0x8
LEA EDI,[EBX + 0xfffdfb20]
CMPSB.REPE ES:EDI,ESI
SETA AL
SBB AL,0x0
TEST AL,AL
JNZ 0x00039c7d
MOV EAX,EBP
CALL 0x000375b0
MOV dword ptr [ESP + 0xc],EAX
TEST EAX,EAX
JZ 0x00039c7d
MOV EDX,dword ptr [ESP + 0x8]
TEST EDX,EDX
JZ 0x00039e85
MOV dword ptr [EDX],EAX
MOV EDI,dword ptr [ESP + 0x18]
LEA ESI,[ESP + 0x4b]
JMP 0x00039d87
CMP EAX,0x3a
JZ 0x00039dd9
CMP EDI,ESI
JZ 0x00039da5
ADD EDI,0x1
MOV byte ptr [EDI + -0x1],AL
SUB ESP,0xc
PUSH EBP
CALL 0x000123d0
ADD ESP,0x10
LEA EDX,[EAX + 0x1]
CMP EDX,0xe
JA 0x00039d78
MOV ECX,0x4801
BT ECX,EDX
JNC 0x00039d7d
MOV ECX,dword ptr [ESP + 0x8]
LEA ESI,[EBX + 0xfffe8729]
TEST ECX,ECX
SETNZ DL
SUB ESP,0xc
MOV byte ptr [ESP + 0x1c],DL
PUSH EBP
CALL 0x00012130
ADD ESP,0x10
MOVZX EDX,byte ptr [ESP + 0x10]
CMP dword ptr [ESP + 0x4],0x0
JNZ 0x00039a87
JMP 0x00039a8d
SUB ESP,0xc
PUSH EBP
CALL 0x000123d0
ADD ESP,0x10
CMP EAX,0x20
JNZ 0x00039da5
MOV byte ptr [EDI],0x0
MOV ESI,dword ptr [ESP + 0x18]
MOV ECX,0xd
LEA EDI,[EBX + 0xfffe8877]
CMPSB.REPE ES:EDI,ESI
SETA AL
SBB AL,0x0
TEST AL,AL
JNZ 0x00039da5
MOV EAX,EBP
CALL 0x000375b0
MOV ESI,EAX
TEST EAX,EAX
JZ 0x00039da5
CALL 0x000374c0
SUB ESP,0xc
PUSH ESI
MOV EDI,EAX
CALL 0x0001ed20
ADD ESP,0x10
TEST EDI,EDI
JS 0x00039da5
LEA ECX,[ESP + 0x20]
MOV EDX,EDI
MOV EAX,EBP
CALL 0x00037690
MOV ESI,EAX
TEST EAX,EAX
JZ 0x00039da5
SUB ESP,0xc
PUSH EBP
CALL 0x00012130
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0x14]
TEST EDX,EDX
JZ 0x00039e60
MOV EAX,dword ptr [ESP + 0x20]
MOV dword ptr [EDX],EAX
MOV EDI,dword ptr [ESP + 0x10]
TEST EDI,EDI
JZ 0x00039aac
SUB ESP,0xc
MOV EAX,dword ptr [ESP + 0x28]
PUSH dword ptr [EAX + 0x30]
CALL 0x0001dbc0
ADD ESP,0x10
MOV dword ptr [EDI],EAX
JMP 0x00039aac
SUB ESP,0xc
PUSH dword ptr [ESP + 0x18]
CALL 0x0001ed20
ADD ESP,0x10
JMP 0x00039d69
CALL 0x0004d450
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nint FUN_000399e0(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,\n                undefined4 *param_5)\n\n{\n  FILE *__stream;\n  int iVar1;\n  uint uVar2;\n  char *pcVar3;\n  size_t sVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  int in_GS_OFFSET;\n  bool bVar10;\n  bool bVar11;\n  bool bVar12;\n  byte bVar13;\n  int local_60;\n  undefined4 local_4c;\n  byte local_48 [39];\n  byte local_21;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar13 = 0;\n  uStack_14 = 0x399e9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  __stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);\n  if (__stream != (FILE *)0x0) {\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }\n  if (param_5 != (undefined4 *)0x0) {\n    *param_5 = "can\'t open file";\n  }\n  goto LAB_00039aaa;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }\n  bVar11 = false;\n  bVar12 = (!bVar10 && !bVar12) == bVar10;\n  if (bVar12) {\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }\n  iVar1 = 0x16;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-1";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar12 = (!bVar11 && !bVar12) == bVar11;\n  if (bVar12) goto LAB_00039c10;\nLAB_00039b3e:\n  iVar1 = 0x14;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  pcVar3 = "PuTTY key format too new";\n  if ((!bVar10 && !bVar12) != bVar10) {\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }\n  goto LAB_00039a69;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\n  goto LAB_00039c7d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }\nLAB_00039da5:\n  pcVar3 = "file format error";\n  bVar12 = param_4 != (int *)0x0;\n  fclose(__stream);\n  if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;\n  goto LAB_00039a8d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\nLAB_00039c7d:\n  pcVar3 = "file format error";\nLAB_00039a69:\n  fclose(__stream);\n  bVar12 = false;\n  local_60 = 0;\n  if (param_5 != (undefined4 *)0x0) {\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }\nLAB_00039aaa:\n  iVar1 = 0;\nLAB_00039aac:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0004d450();\n  }\n  return iVar1;\n}\n\n" comment (function_definition "int FUN_000399e0(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,\n                undefined4 *param_5)\n\n{\n  FILE *__stream;\n  int iVar1;\n  uint uVar2;\n  char *pcVar3;\n  size_t sVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  int in_GS_OFFSET;\n  bool bVar10;\n  bool bVar11;\n  bool bVar12;\n  byte bVar13;\n  int local_60;\n  undefined4 local_4c;\n  byte local_48 [39];\n  byte local_21;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar13 = 0;\n  uStack_14 = 0x399e9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  __stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);\n  if (__stream != (FILE *)0x0) {\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }\n  if (param_5 != (undefined4 *)0x0) {\n    *param_5 = "can\'t open file";\n  }\n  goto LAB_00039aaa;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }\n  bVar11 = false;\n  bVar12 = (!bVar10 && !bVar12) == bVar10;\n  if (bVar12) {\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }\n  iVar1 = 0x16;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-1";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar12 = (!bVar11 && !bVar12) == bVar11;\n  if (bVar12) goto LAB_00039c10;\nLAB_00039b3e:\n  iVar1 = 0x14;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  pcVar3 = "PuTTY key format too new";\n  if ((!bVar10 && !bVar12) != bVar10) {\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }\n  goto LAB_00039a69;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\n  goto LAB_00039c7d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }\nLAB_00039da5:\n  pcVar3 = "file format error";\n  bVar12 = param_4 != (int *)0x0;\n  fclose(__stream);\n  if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;\n  goto LAB_00039a8d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\nLAB_00039c7d:\n  pcVar3 = "file format error";\nLAB_00039a69:\n  fclose(__stream);\n  bVar12 = false;\n  local_60 = 0;\n  if (param_5 != (undefined4 *)0x0) {\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }\nLAB_00039aaa:\n  iVar1 = 0;\nLAB_00039aac:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0004d450();\n  }\n  return iVar1;\n}" primitive_type (function_declarator "FUN_000399e0(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,\n                undefined4 *param_5)" identifier (parameter_list "(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,\n                undefined4 *param_5)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "undefined4 *param_5" type_identifier (pointer_declarator "*param_5" * identifier)) ))) (compound_statement "{\n  FILE *__stream;\n  int iVar1;\n  uint uVar2;\n  char *pcVar3;\n  size_t sVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  int in_GS_OFFSET;\n  bool bVar10;\n  bool bVar11;\n  bool bVar12;\n  byte bVar13;\n  int local_60;\n  undefined4 local_4c;\n  byte local_48 [39];\n  byte local_21;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar13 = 0;\n  uStack_14 = 0x399e9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  __stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);\n  if (__stream != (FILE *)0x0) {\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }\n  if (param_5 != (undefined4 *)0x0) {\n    *param_5 = "can\'t open file";\n  }\n  goto LAB_00039aaa;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }\n  bVar11 = false;\n  bVar12 = (!bVar10 && !bVar12) == bVar10;\n  if (bVar12) {\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }\n  iVar1 = 0x16;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-1";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar12 = (!bVar11 && !bVar12) == bVar11;\n  if (bVar12) goto LAB_00039c10;\nLAB_00039b3e:\n  iVar1 = 0x14;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  pcVar3 = "PuTTY key format too new";\n  if ((!bVar10 && !bVar12) != bVar10) {\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }\n  goto LAB_00039a69;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\n  goto LAB_00039c7d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }\nLAB_00039da5:\n  pcVar3 = "file format error";\n  bVar12 = param_4 != (int *)0x0;\n  fclose(__stream);\n  if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;\n  goto LAB_00039a8d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\nLAB_00039c7d:\n  pcVar3 = "file format error";\nLAB_00039a69:\n  fclose(__stream);\n  bVar12 = false;\n  local_60 = 0;\n  if (param_5 != (undefined4 *)0x0) {\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }\nLAB_00039aaa:\n  iVar1 = 0;\nLAB_00039aac:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0004d450();\n  }\n  return iVar1;\n}" { (declaration "FILE *__stream;" type_identifier (pointer_declarator "*__stream" * identifier) ;) (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "bool bVar10;" primitive_type identifier ;) (declaration "bool bVar11;" primitive_type identifier ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "byte bVar13;" type_identifier identifier ;) (declaration "int local_60;" primitive_type identifier ;) (declaration "undefined4 local_4c;" type_identifier identifier ;) (declaration "byte local_48 [39];" type_identifier (array_declarator "local_48 [39]" identifier [ number_literal ]) ;) (declaration "byte local_21;" type_identifier identifier ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "bVar13 = 0;" (assignment_expression "bVar13 = 0" identifier = number_literal) ;) (expression_statement "uStack_14 = 0x399e9;" (assignment_expression "uStack_14 = 0x399e9" identifier = number_literal) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "__stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);" (assignment_expression "__stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0)" identifier = (cast_expression "(FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0)" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0004a6a0(param_1,&DAT_000585ef,0)" identifier (argument_list "(param_1,&DAT_000585ef,0)" ( identifier , (pointer_expression "&DAT_000585ef" & identifier) , number_literal ))))) ;) (if_statement "if (__stream != (FILE *)0x0) {\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }" if (parenthesized_expression "(__stream != (FILE *)0x0)" ( (binary_expression "__stream != (FILE *)0x0" identifier != (cast_expression "(FILE *)0x0" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }" { (expression_statement "iVar1 = FUN_000382f0();" (assignment_expression "iVar1 = FUN_000382f0()" identifier = (call_expression "FUN_000382f0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }" if (parenthesized_expression "(iVar1 == 9)" ( (binary_expression "iVar1 == 9" identifier == number_literal) )) (compound_statement "{\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }" { (expression_statement "iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);" (assignment_expression "iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5)" identifier = (call_expression "FUN_00039360(__stream,param_2,param_3,param_4,param_5)" identifier (argument_list "(__stream,param_2,param_3,param_4,param_5)" ( identifier , identifier , identifier , identifier , identifier )))) ;) }) (else_clause "else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }" else (compound_statement "{\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }" { (if_statement "if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }" if (parenthesized_expression "(iVar1 != 10)" ( (binary_expression "iVar1 != 10" identifier != number_literal) )) (compound_statement "{\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }" { (if_statement "if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }" if (parenthesized_expression "(iVar1 == 3)" ( (binary_expression "iVar1 == 3" identifier == number_literal) )) (compound_statement "{\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }" { (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (do_statement "do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );" do (compound_statement "{\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          }" { (expression_statement "iVar1 = fgetc(__stream);" (assignment_expression "iVar1 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "uVar2 = iVar1 + 1;" (assignment_expression "uVar2 = iVar1 + 1" identifier = (binary_expression "iVar1 + 1" identifier + number_literal)) ;) (expression_statement "bVar12 = uVar2 == 0xe;" (assignment_expression "bVar12 = uVar2 == 0xe" identifier = (binary_expression "uVar2 == 0xe" identifier == number_literal)) ;) (if_statement "if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" if (parenthesized_expression "(uVar2 < 0xf)" ( (binary_expression "uVar2 < 0xf" identifier < number_literal) )) (compound_statement "{\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }" { (expression_statement "bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;" (assignment_expression "bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0" identifier = (binary_expression "(0x4801U >> (uVar2 & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (uVar2 & 0x1f) & 1)" ( (binary_expression "0x4801U >> (uVar2 & 0x1f) & 1" (binary_expression "0x4801U >> (uVar2 & 0x1f)" number_literal >> (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) ))) & number_literal) )) != number_literal)) ;) (if_statement "if (bVar10) goto LAB_00039b3e;" if (parenthesized_expression "(bVar10)" ( identifier )) (goto_statement "goto LAB_00039b3e;" goto statement_identifier ;)) }) (else_clause "else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" else (if_statement "if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" if (parenthesized_expression "(iVar1 == 0x3a)" ( (binary_expression "iVar1 == 0x3a" identifier == number_literal) )) (compound_statement "{\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" { (expression_statement "uVar2 = fgetc(__stream);" (assignment_expression "uVar2 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "bVar10 = uVar2 < 0x20;" (assignment_expression "bVar10 = uVar2 < 0x20" identifier = (binary_expression "uVar2 < 0x20" identifier < number_literal)) ;) (expression_statement "bVar12 = uVar2 == 0x20;" (assignment_expression "bVar12 = uVar2 == 0x20" identifier = (binary_expression "uVar2 == 0x20" identifier == number_literal)) ;) (if_statement "if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }" { (expression_statement "*pbVar8 = 0;" (assignment_expression "*pbVar8 = 0" (pointer_expression "*pbVar8" * identifier) = number_literal) ;) (expression_statement "iVar1 = 0x16;" (assignment_expression "iVar1 = 0x16" identifier = number_literal) ;) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"PuTTY-User-Key-File-2";" (assignment_expression "pbVar9 = (byte *)"PuTTY-User-Key-File-2"" identifier = (cast_expression "(byte *)"PuTTY-User-Key-File-2"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""PuTTY-User-Key-File-2"" " string_content "))) ;) (goto_statement "goto code_r0x00039be7;" goto statement_identifier ;) })) (goto_statement "goto LAB_00039b3e;" goto statement_identifier ;) })))) (expression_statement "bVar10 = pbVar8 < &local_21;" (assignment_expression "bVar10 = pbVar8 < &local_21" identifier = (binary_expression "pbVar8 < &local_21" identifier < (pointer_expression "&local_21" & identifier))) ;) (expression_statement "bVar12 = pbVar8 == &local_21;" (assignment_expression "bVar12 = pbVar8 == &local_21" identifier = (binary_expression "pbVar8 == &local_21" identifier == (pointer_expression "&local_21" & identifier))) ;) (if_statement "if (bVar12) goto LAB_00039b3e;" if (parenthesized_expression "(bVar12)" ( identifier )) (goto_statement "goto LAB_00039b3e;" goto statement_identifier ;)) (expression_statement "*pbVar8 = (byte)iVar1;" (assignment_expression "*pbVar8 = (byte)iVar1" (pointer_expression "*pbVar8" * identifier) = (cast_expression "(byte)iVar1" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) (goto_statement "goto LAB_00039a63;" goto statement_identifier ;) })) (expression_statement "iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);" (assignment_expression "iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5)" identifier = (call_expression "FUN_000397e0(__stream,param_2,param_3,param_4,param_5)" identifier (argument_list "(__stream,param_2,param_3,param_4,param_5)" ( identifier , identifier , identifier , identifier , identifier )))) ;) }))) (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" identifier (argument_list "(__stream)" ( identifier ))) ;) (goto_statement "goto LAB_00039aac;" goto statement_identifier ;) })) (if_statement "if (param_5 != (undefined4 *)0x0) {\n    *param_5 = "can\'t open file";\n  }" if (parenthesized_expression "(param_5 != (undefined4 *)0x0)" ( (binary_expression "param_5 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    *param_5 = "can\'t open file";\n  }" { (expression_statement "*param_5 = "can\'t open file";" (assignment_expression "*param_5 = "can\'t open file"" (pointer_expression "*param_5" * identifier) = (string_literal ""can\'t open file"" " string_content escape_sequence string_content ")) ;) })) (goto_statement "goto LAB_00039aaa;" goto statement_identifier ;) (while_statement "while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }" { (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (expression_statement "bVar10 = *pbVar8 < *pbVar9;" (assignment_expression "bVar10 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar12 = *pbVar8 == *pbVar9;" (assignment_expression "bVar12 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (if_statement "if (!bVar12) break;" if (parenthesized_expression "(!bVar12)" ( (unary_expression "!bVar12" ! identifier) )) (break_statement "break;" break ;)) (labeled_statement "code_r0x00039be7:\n    if (iVar1 == 0) break;" statement_identifier : (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;))) })) (expression_statement "bVar11 = false;" (assignment_expression "bVar11 = false" identifier = false) ;) (expression_statement "bVar12 = (!bVar10 && !bVar12) == bVar10;" (assignment_expression "bVar12 = (!bVar10 && !bVar12) == bVar10" identifier = (binary_expression "(!bVar10 && !bVar12) == bVar10" (parenthesized_expression "(!bVar10 && !bVar12)" ( (binary_expression "!bVar10 && !bVar12" (unary_expression "!bVar10" ! identifier) && (unary_expression "!bVar12" ! identifier)) )) == identifier)) ;) (if_statement "if (bVar12) {\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }" { (labeled_statement "LAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();" statement_identifier : (expression_statement "pcVar3 = (char *)FUN_000375b0();" (assignment_expression "pcVar3 = (char *)FUN_000375b0()" identifier = (cast_expression "(char *)FUN_000375b0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000375b0()" identifier (argument_list "()" ( ))))) ;)) (if_statement "if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }" if (parenthesized_expression "(pcVar3 != (char *)0x0)" ( (binary_expression "pcVar3 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }" { (expression_statement "sVar4 = strlen(pcVar3);" (assignment_expression "sVar4 = strlen(pcVar3)" identifier = (call_expression "strlen(pcVar3)" identifier (argument_list "(pcVar3)" ( identifier )))) ;) (expression_statement "iVar5 = FUN_000381e0(sVar4,pcVar3);" (assignment_expression "iVar5 = FUN_000381e0(sVar4,pcVar3)" identifier = (call_expression "FUN_000381e0(sVar4,pcVar3)" identifier (argument_list "(sVar4,pcVar3)" ( identifier , identifier )))) ;) (expression_statement "FUN_0001ed20(pcVar3);" (call_expression "FUN_0001ed20(pcVar3)" identifier (argument_list "(pcVar3)" ( identifier ))) ;) (if_statement "if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }" { (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (do_statement "do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );" do (compound_statement "{\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        }" { (expression_statement "iVar1 = fgetc(__stream);" (assignment_expression "iVar1 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (if_statement "if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" if (parenthesized_expression "(iVar1 + 1U < 0xf)" ( (binary_expression "iVar1 + 1U < 0xf" (binary_expression "iVar1 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }" { (if_statement "if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;" if (parenthesized_expression "((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0)" ( (binary_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1)" ( (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f) & 1" (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f)" number_literal >> (parenthesized_expression "(iVar1 + 1U & 0x1f)" ( (binary_expression "iVar1 + 1U & 0x1f" (binary_expression "iVar1 + 1U" identifier + number_literal) & number_literal) ))) & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) }) (else_clause "else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" else (if_statement "if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" if (parenthesized_expression "(iVar1 == 0x3a)" ( (binary_expression "iVar1 == 0x3a" identifier == number_literal) )) (compound_statement "{\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" { (expression_statement "uVar2 = fgetc(__stream);" (assignment_expression "uVar2 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "bVar12 = uVar2 < 0x20;" (assignment_expression "bVar12 = uVar2 < 0x20" identifier = (binary_expression "uVar2 < 0x20" identifier < number_literal)) ;) (expression_statement "bVar10 = uVar2 == 0x20;" (assignment_expression "bVar10 = uVar2 == 0x20" identifier = (binary_expression "uVar2 == 0x20" identifier == number_literal)) ;) (if_statement "if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }" if (parenthesized_expression "(bVar10)" ( identifier )) (compound_statement "{\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }" { (expression_statement "*pbVar8 = 0;" (assignment_expression "*pbVar8 = 0" (pointer_expression "*pbVar8" * identifier) = number_literal) ;) (expression_statement "iVar1 = 0xb;" (assignment_expression "iVar1 = 0xb" identifier = number_literal) ;) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"Encryption";" (assignment_expression "pbVar9 = (byte *)"Encryption"" identifier = (cast_expression "(byte *)"Encryption"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""Encryption"" " string_content "))) ;) (goto_statement "goto code_r0x00039cb3;" goto statement_identifier ;) })) (break_statement "break;" break ;) })))) (if_statement "if (pbVar8 == &local_21) break;" if (parenthesized_expression "(pbVar8 == &local_21)" ( (binary_expression "pbVar8 == &local_21" identifier == (pointer_expression "&local_21" & identifier)) )) (break_statement "break;" break ;)) (expression_statement "*pbVar8 = (byte)iVar1;" (assignment_expression "*pbVar8 = (byte)iVar1" (pointer_expression "*pbVar8" * identifier) = (cast_expression "(byte)iVar1" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) })) (goto_statement "goto LAB_00039c7d;" goto statement_identifier ;) })) (expression_statement "iVar1 = 0x16;" (assignment_expression "iVar1 = 0x16" identifier = number_literal) ;) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"PuTTY-User-Key-File-1";" (assignment_expression "pbVar9 = (byte *)"PuTTY-User-Key-File-1"" identifier = (cast_expression "(byte *)"PuTTY-User-Key-File-1"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""PuTTY-User-Key-File-1"" " string_content "))) ;) (do_statement "do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);" do (compound_statement "{\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  }" { (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (expression_statement "bVar11 = *pbVar8 < *pbVar9;" (assignment_expression "bVar11 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar12 = *pbVar8 == *pbVar9;" (assignment_expression "bVar12 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar12)" ( identifier )) ;) (expression_statement "bVar10 = false;" (assignment_expression "bVar10 = false" identifier = false) ;) (expression_statement "bVar12 = (!bVar11 && !bVar12) == bVar11;" (assignment_expression "bVar12 = (!bVar11 && !bVar12) == bVar11" identifier = (binary_expression "(!bVar11 && !bVar12) == bVar11" (parenthesized_expression "(!bVar11 && !bVar12)" ( (binary_expression "!bVar11 && !bVar12" (unary_expression "!bVar11" ! identifier) && (unary_expression "!bVar12" ! identifier)) )) == identifier)) ;) (if_statement "if (bVar12) goto LAB_00039c10;" if (parenthesized_expression "(bVar12)" ( identifier )) (goto_statement "goto LAB_00039c10;" goto statement_identifier ;)) (labeled_statement "LAB_00039b3e:\n  iVar1 = 0x14;" statement_identifier : (expression_statement "iVar1 = 0x14;" (assignment_expression "iVar1 = 0x14" identifier = number_literal) ;)) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"PuTTY-User-Key-File-";" (assignment_expression "pbVar9 = (byte *)"PuTTY-User-Key-File-"" identifier = (cast_expression "(byte *)"PuTTY-User-Key-File-"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""PuTTY-User-Key-File-"" " string_content "))) ;) (do_statement "do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);" do (compound_statement "{\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  }" { (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (expression_statement "bVar10 = *pbVar8 < *pbVar9;" (assignment_expression "bVar10 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar12 = *pbVar8 == *pbVar9;" (assignment_expression "bVar12 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar12)" ( identifier )) ;) (expression_statement "pcVar3 = "PuTTY key format too new";" (assignment_expression "pcVar3 = "PuTTY key format too new"" identifier = (string_literal ""PuTTY key format too new"" " string_content ")) ;) (if_statement "if ((!bVar10 && !bVar12) != bVar10) {\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }" if (parenthesized_expression "((!bVar10 && !bVar12) != bVar10)" ( (binary_expression "(!bVar10 && !bVar12) != bVar10" (parenthesized_expression "(!bVar10 && !bVar12)" ( (binary_expression "!bVar10 && !bVar12" (unary_expression "!bVar10" ! identifier) && (unary_expression "!bVar12" ! identifier)) )) != identifier) )) (compound_statement "{\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }" { (labeled_statement "LAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";" statement_identifier : (expression_statement "pcVar3 = "not a PuTTY SSH-2 private key";" (assignment_expression "pcVar3 = "not a PuTTY SSH-2 private key"" identifier = (string_literal ""not a PuTTY SSH-2 private key"" " string_content ")) ;)) })) (goto_statement "goto LAB_00039a69;" goto statement_identifier ;) (while_statement "while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }" { (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (expression_statement "bVar12 = *pbVar8 < *pbVar9;" (assignment_expression "bVar12 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar10 = *pbVar8 == *pbVar9;" (assignment_expression "bVar10 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (if_statement "if (!bVar10) break;" if (parenthesized_expression "(!bVar10)" ( (unary_expression "!bVar10" ! identifier) )) (break_statement "break;" break ;)) (labeled_statement "code_r0x00039cb3:\n    if (iVar1 == 0) break;" statement_identifier : (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;))) })) (if_statement "if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }" if (parenthesized_expression "(((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0))" ( (binary_expression "((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)" (parenthesized_expression "((!bVar12 && !bVar10) == bVar12)" ( (binary_expression "(!bVar12 && !bVar10) == bVar12" (parenthesized_expression "(!bVar12 && !bVar10)" ( (binary_expression "!bVar12 && !bVar10" (unary_expression "!bVar12" ! identifier) && (unary_expression "!bVar10" ! identifier)) )) == identifier) )) && (parenthesized_expression "(iVar1 = FUN_000375b0(), iVar1 != 0)" ( (comma_expression "iVar1 = FUN_000375b0(), iVar1 != 0" (assignment_expression "iVar1 = FUN_000375b0()" identifier = (call_expression "FUN_000375b0()" identifier (argument_list "()" ( )))) , (binary_expression "iVar1 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }" { (expression_statement "FUN_0001ed20(iVar1);" (call_expression "FUN_0001ed20(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (do_statement "do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );" do (compound_statement "{\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    }" { (expression_statement "iVar1 = fgetc(__stream);" (assignment_expression "iVar1 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (if_statement "if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" if (parenthesized_expression "(iVar1 + 1U < 0xf)" ( (binary_expression "iVar1 + 1U < 0xf" (binary_expression "iVar1 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }" { (if_statement "if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;" if (parenthesized_expression "((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0)" ( (binary_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1)" ( (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f) & 1" (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f)" number_literal >> (parenthesized_expression "(iVar1 + 1U & 0x1f)" ( (binary_expression "iVar1 + 1U & 0x1f" (binary_expression "iVar1 + 1U" identifier + number_literal) & number_literal) ))) & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) }) (else_clause "else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" else (if_statement "if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" if (parenthesized_expression "(iVar1 == 0x3a)" ( (binary_expression "iVar1 == 0x3a" identifier == number_literal) )) (compound_statement "{\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" { (expression_statement "uVar2 = fgetc(__stream);" (assignment_expression "uVar2 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "bVar12 = uVar2 < 0x20;" (assignment_expression "bVar12 = uVar2 < 0x20" identifier = (binary_expression "uVar2 < 0x20" identifier < number_literal)) ;) (expression_statement "bVar10 = uVar2 == 0x20;" (assignment_expression "bVar10 = uVar2 == 0x20" identifier = (binary_expression "uVar2 == 0x20" identifier == number_literal)) ;) (if_statement "if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }" if (parenthesized_expression "(bVar10)" ( identifier )) (compound_statement "{\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }" { (expression_statement "*pbVar8 = 0;" (assignment_expression "*pbVar8 = 0" (pointer_expression "*pbVar8" * identifier) = number_literal) ;) (expression_statement "iVar1 = 8;" (assignment_expression "iVar1 = 8" identifier = number_literal) ;) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"Comment";" (assignment_expression "pbVar9 = (byte *)"Comment"" identifier = (cast_expression "(byte *)"Comment"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""Comment"" " string_content "))) ;) (goto_statement "goto code_r0x00039d39;" goto statement_identifier ;) })) (break_statement "break;" break ;) })))) (if_statement "if (pbVar8 == &local_21) break;" if (parenthesized_expression "(pbVar8 == &local_21)" ( (binary_expression "pbVar8 == &local_21" identifier == (pointer_expression "&local_21" & identifier)) )) (break_statement "break;" break ;)) (expression_statement "*pbVar8 = (byte)iVar1;" (assignment_expression "*pbVar8 = (byte)iVar1" (pointer_expression "*pbVar8" * identifier) = (cast_expression "(byte)iVar1" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) (goto_statement "goto LAB_00039c7d;" goto statement_identifier ;) (while_statement "while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }" { (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (expression_statement "bVar12 = *pbVar8 < *pbVar9;" (assignment_expression "bVar12 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar10 = *pbVar8 == *pbVar9;" (assignment_expression "bVar10 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (if_statement "if (!bVar10) break;" if (parenthesized_expression "(!bVar10)" ( (unary_expression "!bVar10" ! identifier) )) (break_statement "break;" break ;)) (labeled_statement "code_r0x00039dfc:\n    if (iVar1 == 0) break;" statement_identifier : (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;))) })) (if_statement "if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }" if (parenthesized_expression "(((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0))" ( (binary_expression "((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)" (parenthesized_expression "((!bVar12 && !bVar10) == bVar12)" ( (binary_expression "(!bVar12 && !bVar10) == bVar12" (parenthesized_expression "(!bVar12 && !bVar10)" ( (binary_expression "!bVar12 && !bVar10" (unary_expression "!bVar12" ! identifier) && (unary_expression "!bVar10" ! identifier)) )) == identifier) )) && (parenthesized_expression "(iVar1 = FUN_000375b0(), iVar1 != 0)" ( (comma_expression "iVar1 = FUN_000375b0(), iVar1 != 0" (assignment_expression "iVar1 = FUN_000375b0()" identifier = (call_expression "FUN_000375b0()" identifier (argument_list "()" ( )))) , (binary_expression "iVar1 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }" { (expression_statement "iVar6 = FUN_000374c0();" (assignment_expression "iVar6 = FUN_000374c0()" identifier = (call_expression "FUN_000374c0()" identifier (argument_list "()" ( )))) ;) (expression_statement "FUN_0001ed20(iVar1);" (call_expression "FUN_0001ed20(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (if_statement "if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }" if (parenthesized_expression "((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0))" ( (binary_expression "(-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)" (parenthesized_expression "(-1 < iVar6)" ( (binary_expression "-1 < iVar6" number_literal < identifier) )) && (parenthesized_expression "(iVar1 = FUN_00037690(), iVar1 != 0)" ( (comma_expression "iVar1 = FUN_00037690(), iVar1 != 0" (assignment_expression "iVar1 = FUN_00037690()" identifier = (call_expression "FUN_00037690()" identifier (argument_list "()" ( )))) , (binary_expression "iVar1 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }" { (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" identifier (argument_list "(__stream)" ( identifier ))) ;) (if_statement "if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }" if (parenthesized_expression "(param_3 != (undefined4 *)0x0)" ( (binary_expression "param_3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        *param_3 = local_4c;\n      }" { (expression_statement "*param_3 = local_4c;" (assignment_expression "*param_3 = local_4c" (pointer_expression "*param_3" * identifier) = identifier) ;) })) (if_statement "if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }" if (parenthesized_expression "(param_2 != (undefined4 *)0x0)" ( (binary_expression "param_2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }" { (expression_statement "uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));" (assignment_expression "uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30))" identifier = (call_expression "FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30))" identifier (argument_list "(*(undefined4 *)(iVar5 + 0x30))" ( (pointer_expression "*(undefined4 *)(iVar5 + 0x30)" * (cast_expression "(undefined4 *)(iVar5 + 0x30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x30)" ( (binary_expression "iVar5 + 0x30" identifier + number_literal) )))) )))) ;) (expression_statement "*param_2 = uVar7;" (assignment_expression "*param_2 = uVar7" (pointer_expression "*param_2" * identifier) = identifier) ;) })) (goto_statement "goto LAB_00039aac;" goto statement_identifier ;) })) })) (labeled_statement "LAB_00039da5:\n  pcVar3 = "file format error";" statement_identifier : (expression_statement "pcVar3 = "file format error";" (assignment_expression "pcVar3 = "file format error"" identifier = (string_literal ""file format error"" " string_content ")) ;)) (expression_statement "bVar12 = param_4 != (int *)0x0;" (assignment_expression "bVar12 = param_4 != (int *)0x0" identifier = (binary_expression "param_4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ;) (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" identifier (argument_list "(__stream)" ( identifier ))) ;) (if_statement "if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;" if (parenthesized_expression "(param_5 != (undefined4 *)0x0)" ( (binary_expression "param_5 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00039a87;" goto statement_identifier ;)) (goto_statement "goto LAB_00039a8d;" goto statement_identifier ;) (while_statement "while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }" { (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (expression_statement "bVar12 = *pbVar8 < *pbVar9;" (assignment_expression "bVar12 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar10 = *pbVar8 == *pbVar9;" (assignment_expression "bVar10 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (if_statement "if (!bVar10) break;" if (parenthesized_expression "(!bVar10)" ( (unary_expression "!bVar10" ! identifier) )) (break_statement "break;" break ;)) (labeled_statement "code_r0x00039d39:\n    if (iVar1 == 0) break;" statement_identifier : (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;))) })) (if_statement "if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }" if (parenthesized_expression "(((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0))" ( (binary_expression "((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)" (parenthesized_expression "((!bVar12 && !bVar10) == bVar12)" ( (binary_expression "(!bVar12 && !bVar10) == bVar12" (parenthesized_expression "(!bVar12 && !bVar10)" ( (binary_expression "!bVar12 && !bVar10" (unary_expression "!bVar12" ! identifier) && (unary_expression "!bVar10" ! identifier)) )) == identifier) )) && (parenthesized_expression "(local_60 = FUN_000375b0(), local_60 != 0)" ( (comma_expression "local_60 = FUN_000375b0(), local_60 != 0" (assignment_expression "local_60 = FUN_000375b0()" identifier = (call_expression "FUN_000375b0()" identifier (argument_list "()" ( )))) , (binary_expression "local_60 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }" { (if_statement "if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }" if (parenthesized_expression "(param_4 == (int *)0x0)" ( (binary_expression "param_4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      FUN_0001ed20(local_60);\n    }" { (expression_statement "FUN_0001ed20(local_60);" (call_expression "FUN_0001ed20(local_60)" identifier (argument_list "(local_60)" ( identifier ))) ;) }) (else_clause "else {\n      *param_4 = local_60;\n    }" else (compound_statement "{\n      *param_4 = local_60;\n    }" { (expression_statement "*param_4 = local_60;" (assignment_expression "*param_4 = local_60" (pointer_expression "*param_4" * identifier) = identifier) ;) }))) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (do_statement "do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );" do (compound_statement "{\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    }" { (expression_statement "iVar1 = fgetc(__stream);" (assignment_expression "iVar1 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (if_statement "if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" if (parenthesized_expression "(iVar1 + 1U < 0xf)" ( (binary_expression "iVar1 + 1U < 0xf" (binary_expression "iVar1 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }" { (if_statement "if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;" if (parenthesized_expression "((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0)" ( (binary_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1)" ( (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f) & 1" (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f)" number_literal >> (parenthesized_expression "(iVar1 + 1U & 0x1f)" ( (binary_expression "iVar1 + 1U & 0x1f" (binary_expression "iVar1 + 1U" identifier + number_literal) & number_literal) ))) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00039da5;" goto statement_identifier ;)) }) (else_clause "else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" else (if_statement "if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" if (parenthesized_expression "(iVar1 == 0x3a)" ( (binary_expression "iVar1 == 0x3a" identifier == number_literal) )) (compound_statement "{\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" { (expression_statement "uVar2 = fgetc(__stream);" (assignment_expression "uVar2 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "bVar12 = uVar2 < 0x20;" (assignment_expression "bVar12 = uVar2 < 0x20" identifier = (binary_expression "uVar2 < 0x20" identifier < number_literal)) ;) (expression_statement "bVar10 = uVar2 == 0x20;" (assignment_expression "bVar10 = uVar2 == 0x20" identifier = (binary_expression "uVar2 == 0x20" identifier == number_literal)) ;) (if_statement "if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }" if (parenthesized_expression "(bVar10)" ( identifier )) (compound_statement "{\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }" { (expression_statement "*pbVar8 = 0;" (assignment_expression "*pbVar8 = 0" (pointer_expression "*pbVar8" * identifier) = number_literal) ;) (expression_statement "iVar1 = 0xd;" (assignment_expression "iVar1 = 0xd" identifier = number_literal) ;) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"Public-Lines";" (assignment_expression "pbVar9 = (byte *)"Public-Lines"" identifier = (cast_expression "(byte *)"Public-Lines"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""Public-Lines"" " string_content "))) ;) (goto_statement "goto code_r0x00039dfc;" goto statement_identifier ;) })) (goto_statement "goto LAB_00039da5;" goto statement_identifier ;) })))) (if_statement "if (pbVar8 == &local_21) goto LAB_00039da5;" if (parenthesized_expression "(pbVar8 == &local_21)" ( (binary_expression "pbVar8 == &local_21" identifier == (pointer_expression "&local_21" & identifier)) )) (goto_statement "goto LAB_00039da5;" goto statement_identifier ;)) (expression_statement "*pbVar8 = (byte)iVar1;" (assignment_expression "*pbVar8 = (byte)iVar1" (pointer_expression "*pbVar8" * identifier) = (cast_expression "(byte)iVar1" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) (labeled_statement "LAB_00039c7d:\n  pcVar3 = "file format error";" statement_identifier : (expression_statement "pcVar3 = "file format error";" (assignment_expression "pcVar3 = "file format error"" identifier = (string_literal ""file format error"" " string_content ")) ;)) (labeled_statement "LAB_00039a69:\n  fclose(__stream);" statement_identifier : (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" identifier (argument_list "(__stream)" ( identifier ))) ;)) (expression_statement "bVar12 = false;" (assignment_expression "bVar12 = false" identifier = false) ;) (expression_statement "local_60 = 0;" (assignment_expression "local_60 = 0" identifier = number_literal) ;) (if_statement "if (param_5 != (undefined4 *)0x0) {\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }" if (parenthesized_expression "(param_5 != (undefined4 *)0x0)" ( (binary_expression "param_5 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }" { (labeled_statement "LAB_00039a87:\n    *param_5 = pcVar3;" statement_identifier : (expression_statement "*param_5 = pcVar3;" (assignment_expression "*param_5 = pcVar3" (pointer_expression "*param_5" * identifier) = identifier) ;)) (labeled_statement "LAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }" statement_identifier : (if_statement "if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }" { (expression_statement "FUN_0001ed20(local_60);" (call_expression "FUN_0001ed20(local_60)" identifier (argument_list "(local_60)" ( identifier ))) ;) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) }))) })) (labeled_statement "LAB_00039aaa:\n  iVar1 = 0;" statement_identifier : (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" identifier = number_literal) ;)) (labeled_statement "LAB_00039aac:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0004d450();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0004d450();\n  }" if (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0004d450();\n  }" { comment (expression_statement "FUN_0004d450();" (call_expression "FUN_0004d450()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar1;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n\nuchar * ssh2_userkey_loadpub\n                  (Filename *filename,char **algorithm,int *pub_blob_len,char **commentptr,\n                  char **errorstr)\n\n{\n  int iVar1;\n  FILE *__stream;\n  int iVar2;\n  uint uVar3;\n  char *pcVar4;\n  size_t namelen;\n  ssh_signkey *psVar5;\n  uchar *ret;\n  uchar *puVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  int in_GS_OFFSET;\n  bool bVar9;\n  bool bVar10;\n  bool bVar11;\n  byte bVar12;\n  char *local_60;\n  int public_blob_len;\n  char header [40];\n  \n  bVar12 = 0;\n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  __stream = (FILE *)f_open(filename,"rb",0);\n  if (__stream != (FILE *)0x0) {\n    iVar2 = key_type_fp((FILE *)__stream);\n    if (iVar2 == 9) {\n      puVar6 = rfc4716_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }\n    else {\n      if (iVar2 != 10) {\n        if (iVar2 == 3) {\n          pbVar7 = (byte *)header;\n          do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      puVar6 = openssh_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }\n  if (errorstr != (char **)0x0) {\n    *errorstr = "can\'t open file";\n  }\n  goto LAB_00039aaa;\n  while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar11) break;\ncode_r0x00039be7:\n    if (iVar2 == 0) break;\n  }\n  bVar10 = false;\n  bVar11 = (!bVar9 && !bVar11) == bVar9;\n  if (bVar11) {\nLAB_00039c10:\n    pcVar4 = read_body((FILE *)__stream);\n    if (pcVar4 != (char *)0x0) {\n      namelen = strlen(pcVar4);\n      psVar5 = find_pubkey_alg_len(namelen,pcVar4);\n      safefree(pcVar4);\n      if (psVar5 != (ssh_signkey *)0x0) {\n        pbVar7 = (byte *)header;\n        do {\n          iVar2 = fgetc(__stream);\n          if (iVar2 + 1U < 0xf) {\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar7 == (byte *)(header + 0x27)) break;\n          *pbVar7 = (byte)iVar2;\n          pbVar7 = pbVar7 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }\n  iVar2 = 0x16;\n  pbVar7 = (byte *)header;\n  pbVar8 = (byte *)"PuTTY-User-Key-File-1";\n  do {\n    if (iVar2 == 0) break;\n    iVar2 = iVar2 + -1;\n    bVar10 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n  } while (bVar11);\n  bVar9 = false;\n  bVar11 = (!bVar10 && !bVar11) == bVar10;\n  if (bVar11) goto LAB_00039c10;\nLAB_00039b3e:\n  iVar2 = 0x14;\n  pbVar7 = (byte *)header;\n  pbVar8 = (byte *)"PuTTY-User-Key-File-";\n  do {\n    if (iVar2 == 0) break;\n    iVar2 = iVar2 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n  } while (bVar11);\n  pcVar4 = "PuTTY key format too new";\n  if ((!bVar9 && !bVar11) != bVar9) {\nLAB_00039a63:\n    pcVar4 = "not a PuTTY SSH-2 private key";\n  }\n  goto LAB_00039a69;\n  while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039cb3:\n    if (iVar2 == 0) break;\n  }\n  if (((!bVar11 && !bVar9) == bVar11) &&\n     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)) {\n    safefree(pcVar4);\n    pbVar7 = (byte *)header;\n    do {\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) break;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    } while( true );\n  }\n  goto LAB_00039c7d;\n  while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039dfc:\n    if (iVar2 == 0) break;\n  }\n  if (((!bVar11 && !bVar9) == bVar11) &&\n     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)) {\n    iVar2 = userkey_parse_line_counter(pcVar4);\n    safefree(pcVar4);\n    if ((-1 < iVar2) &&\n       (puVar6 = read_blob((FILE *)__stream,iVar2,&public_blob_len), puVar6 != (uchar *)0x0)) {\n      fclose(__stream);\n      if (pub_blob_len != (int *)0x0) {\n        *pub_blob_len = public_blob_len;\n      }\n      if (algorithm != (char **)0x0) {\n        pcVar4 = dupstr(psVar5->name);\n        *algorithm = pcVar4;\n      }\n      goto LAB_00039aac;\n    }\n  }\nLAB_00039da5:\n  pcVar4 = "file format error";\n  bVar11 = commentptr != (char **)0x0;\n  fclose(__stream);\n  if (errorstr != (char **)0x0) goto LAB_00039a87;\n  goto LAB_00039a8d;\n  while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039d39:\n    if (iVar2 == 0) break;\n  }\n  if (((!bVar11 && !bVar9) == bVar11) &&\n     (local_60 = read_body((FILE *)__stream), local_60 != (char *)0x0)) {\n    if (commentptr == (char **)0x0) {\n      safefree(local_60);\n    }\n    else {\n      *commentptr = local_60;\n    }\n    pbVar7 = (byte *)header;\n    do {\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) goto LAB_00039da5;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    } while( true );\n  }\nLAB_00039c7d:\n  pcVar4 = "file format error";\nLAB_00039a69:\n  fclose(__stream);\n  bVar11 = false;\n  local_60 = (char *)0x0;\n  if (errorstr != (char **)0x0) {\nLAB_00039a87:\n    *errorstr = pcVar4;\nLAB_00039a8d:\n    if (bVar11) {\n      safefree(local_60);\n      *commentptr = (char *)0x0;\n    }\n  }\nLAB_00039aaa:\n  puVar6 = (uchar *)0x0;\nLAB_00039aac:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return puVar6;\n}\n\n" comment comment (function_definition "uchar * ssh2_userkey_loadpub\n                  (Filename *filename,char **algorithm,int *pub_blob_len,char **commentptr,\n                  char **errorstr)\n\n{\n  int iVar1;\n  FILE *__stream;\n  int iVar2;\n  uint uVar3;\n  char *pcVar4;\n  size_t namelen;\n  ssh_signkey *psVar5;\n  uchar *ret;\n  uchar *puVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  int in_GS_OFFSET;\n  bool bVar9;\n  bool bVar10;\n  bool bVar11;\n  byte bVar12;\n  char *local_60;\n  int public_blob_len;\n  char header [40];\n  \n  bVar12 = 0;\n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  __stream = (FILE *)f_open(filename,"rb",0);\n  if (__stream != (FILE *)0x0) {\n    iVar2 = key_type_fp((FILE *)__stream);\n    if (iVar2 == 9) {\n      puVar6 = rfc4716_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }\n    else {\n      if (iVar2 != 10) {\n        if (iVar2 == 3) {\n          pbVar7 = (byte *)header;\n          do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      puVar6 = openssh_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }\n  if (errorstr != (char **)0x0) {\n    *errorstr = "can\'t open file";\n  }\n  goto LAB_00039aaa;\n  while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar11) break;\ncode_r0x00039be7:\n    if (iVar2 == 0) break;\n  }\n  bVar10 = false;\n  bVar11 = (!bVar9 && !bVar11) == bVar9;\n  if (bVar11) {\nLAB_00039c10:\n    pcVar4 = read_body((FILE *)__stream);\n    if (pcVar4 != (char *)0x0) {\n      namelen = strlen(pcVar4);\n      psVar5 = find_pubkey_alg_len(namelen,pcVar4);\n      safefree(pcVar4);\n      if (psVar5 != (ssh_signkey *)0x0) {\n        pbVar7 = (byte *)header;\n        do {\n          iVar2 = fgetc(__stream);\n          if (iVar2 + 1U < 0xf) {\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar7 == (byte *)(header + 0x27)) break;\n          *pbVar7 = (byte)iVar2;\n          pbVar7 = pbVar7 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }\n  iVar2 = 0x16;\n  pbVar7 = (byte *)header;\n  pbVar8 = (byte *)"PuTTY-User-Key-File-1";\n  do {\n    if (iVar2 == 0) break;\n    iVar2 = iVar2 + -1;\n    bVar10 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n  } while (bVar11);\n  bVar9 = false;\n  bVar11 = (!bVar10 && !bVar11) == bVar10;\n  if (bVar11) goto LAB_00039c10;\nLAB_00039b3e:\n  iVar2 = 0x14;\n  pbVar7 = (byte *)header;\n  pbVar8 = (byte *)"PuTTY-User-Key-File-";\n  do {\n    if (iVar2 == 0) break;\n    iVar2 = iVar2 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n  } while (bVar11);\n  pcVar4 = "PuTTY key format too new";\n  if ((!bVar9 && !bVar11) != bVar9) {\nLAB_00039a63:\n    pcVar4 = "not a PuTTY SSH-2 private key";\n  }\n  goto LAB_00039a69;\n  while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039cb3:\n    if (iVar2 == 0) break;\n  }\n  if (((!bVar11 && !bVar9) == bVar11) &&\n     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)) {\n    safefree(pcVar4);\n    pbVar7 = (byte *)header;\n    do {\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) break;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    } while( true );\n  }\n  goto LAB_00039c7d;\n  while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039dfc:\n    if (iVar2 == 0) break;\n  }\n  if (((!bVar11 && !bVar9) == bVar11) &&\n     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)) {\n    iVar2 = userkey_parse_line_counter(pcVar4);\n    safefree(pcVar4);\n    if ((-1 < iVar2) &&\n       (puVar6 = read_blob((FILE *)__stream,iVar2,&public_blob_len), puVar6 != (uchar *)0x0)) {\n      fclose(__stream);\n      if (pub_blob_len != (int *)0x0) {\n        *pub_blob_len = public_blob_len;\n      }\n      if (algorithm != (char **)0x0) {\n        pcVar4 = dupstr(psVar5->name);\n        *algorithm = pcVar4;\n      }\n      goto LAB_00039aac;\n    }\n  }\nLAB_00039da5:\n  pcVar4 = "file format error";\n  bVar11 = commentptr != (char **)0x0;\n  fclose(__stream);\n  if (errorstr != (char **)0x0) goto LAB_00039a87;\n  goto LAB_00039a8d;\n  while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039d39:\n    if (iVar2 == 0) break;\n  }\n  if (((!bVar11 && !bVar9) == bVar11) &&\n     (local_60 = read_body((FILE *)__stream), local_60 != (char *)0x0)) {\n    if (commentptr == (char **)0x0) {\n      safefree(local_60);\n    }\n    else {\n      *commentptr = local_60;\n    }\n    pbVar7 = (byte *)header;\n    do {\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) goto LAB_00039da5;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    } while( true );\n  }\nLAB_00039c7d:\n  pcVar4 = "file format error";\nLAB_00039a69:\n  fclose(__stream);\n  bVar11 = false;\n  local_60 = (char *)0x0;\n  if (errorstr != (char **)0x0) {\nLAB_00039a87:\n    *errorstr = pcVar4;\nLAB_00039a8d:\n    if (bVar11) {\n      safefree(local_60);\n      *commentptr = (char *)0x0;\n    }\n  }\nLAB_00039aaa:\n  puVar6 = (uchar *)0x0;\nLAB_00039aac:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return puVar6;\n}" type_identifier (pointer_declarator "* ssh2_userkey_loadpub\n                  (Filename *filename,char **algorithm,int *pub_blob_len,char **commentptr,\n                  char **errorstr)" * (function_declarator "ssh2_userkey_loadpub\n                  (Filename *filename,char **algorithm,int *pub_blob_len,char **commentptr,\n                  char **errorstr)" identifier (parameter_list "(Filename *filename,char **algorithm,int *pub_blob_len,char **commentptr,\n                  char **errorstr)" ( (parameter_declaration "Filename *filename" type_identifier (pointer_declarator "*filename" * identifier)) , (parameter_declaration "char **algorithm" primitive_type (pointer_declarator "**algorithm" * (pointer_declarator "*algorithm" * identifier))) , (parameter_declaration "int *pub_blob_len" primitive_type (pointer_declarator "*pub_blob_len" * identifier)) , (parameter_declaration "char **commentptr" primitive_type (pointer_declarator "**commentptr" * (pointer_declarator "*commentptr" * identifier))) , (parameter_declaration "char **errorstr" primitive_type (pointer_declarator "**errorstr" * (pointer_declarator "*errorstr" * identifier))) )))) (compound_statement "{\n  int iVar1;\n  FILE *__stream;\n  int iVar2;\n  uint uVar3;\n  char *pcVar4;\n  size_t namelen;\n  ssh_signkey *psVar5;\n  uchar *ret;\n  uchar *puVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  int in_GS_OFFSET;\n  bool bVar9;\n  bool bVar10;\n  bool bVar11;\n  byte bVar12;\n  char *local_60;\n  int public_blob_len;\n  char header [40];\n  \n  bVar12 = 0;\n  iVar1 = *(int *)(in_GS_OFFSET + 0x14);\n  __stream = (FILE *)f_open(filename,"rb",0);\n  if (__stream != (FILE *)0x0) {\n    iVar2 = key_type_fp((FILE *)__stream);\n    if (iVar2 == 9) {\n      puVar6 = rfc4716_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }\n    else {\n      if (iVar2 != 10) {\n        if (iVar2 == 3) {\n          pbVar7 = (byte *)header;\n          do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      puVar6 = openssh_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }\n  if (errorstr != (char **)0x0) {\n    *errorstr = "can\'t open file";\n  }\n  goto LAB_00039aaa;\n  while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar11) break;\ncode_r0x00039be7:\n    if (iVar2 == 0) break;\n  }\n  bVar10 = false;\n  bVar11 = (!bVar9 && !bVar11) == bVar9;\n  if (bVar11) {\nLAB_00039c10:\n    pcVar4 = read_body((FILE *)__stream);\n    if (pcVar4 != (char *)0x0) {\n      namelen = strlen(pcVar4);\n      psVar5 = find_pubkey_alg_len(namelen,pcVar4);\n      safefree(pcVar4);\n      if (psVar5 != (ssh_signkey *)0x0) {\n        pbVar7 = (byte *)header;\n        do {\n          iVar2 = fgetc(__stream);\n          if (iVar2 + 1U < 0xf) {\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar7 == (byte *)(header + 0x27)) break;\n          *pbVar7 = (byte)iVar2;\n          pbVar7 = pbVar7 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }\n  iVar2 = 0x16;\n  pbVar7 = (byte *)header;\n  pbVar8 = (byte *)"PuTTY-User-Key-File-1";\n  do {\n    if (iVar2 == 0) break;\n    iVar2 = iVar2 + -1;\n    bVar10 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n  } while (bVar11);\n  bVar9 = false;\n  bVar11 = (!bVar10 && !bVar11) == bVar10;\n  if (bVar11) goto LAB_00039c10;\nLAB_00039b3e:\n  iVar2 = 0x14;\n  pbVar7 = (byte *)header;\n  pbVar8 = (byte *)"PuTTY-User-Key-File-";\n  do {\n    if (iVar2 == 0) break;\n    iVar2 = iVar2 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n  } while (bVar11);\n  pcVar4 = "PuTTY key format too new";\n  if ((!bVar9 && !bVar11) != bVar9) {\nLAB_00039a63:\n    pcVar4 = "not a PuTTY SSH-2 private key";\n  }\n  goto LAB_00039a69;\n  while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039cb3:\n    if (iVar2 == 0) break;\n  }\n  if (((!bVar11 && !bVar9) == bVar11) &&\n     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)) {\n    safefree(pcVar4);\n    pbVar7 = (byte *)header;\n    do {\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) break;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    } while( true );\n  }\n  goto LAB_00039c7d;\n  while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039dfc:\n    if (iVar2 == 0) break;\n  }\n  if (((!bVar11 && !bVar9) == bVar11) &&\n     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)) {\n    iVar2 = userkey_parse_line_counter(pcVar4);\n    safefree(pcVar4);\n    if ((-1 < iVar2) &&\n       (puVar6 = read_blob((FILE *)__stream,iVar2,&public_blob_len), puVar6 != (uchar *)0x0)) {\n      fclose(__stream);\n      if (pub_blob_len != (int *)0x0) {\n        *pub_blob_len = public_blob_len;\n      }\n      if (algorithm != (char **)0x0) {\n        pcVar4 = dupstr(psVar5->name);\n        *algorithm = pcVar4;\n      }\n      goto LAB_00039aac;\n    }\n  }\nLAB_00039da5:\n  pcVar4 = "file format error";\n  bVar11 = commentptr != (char **)0x0;\n  fclose(__stream);\n  if (errorstr != (char **)0x0) goto LAB_00039a87;\n  goto LAB_00039a8d;\n  while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039d39:\n    if (iVar2 == 0) break;\n  }\n  if (((!bVar11 && !bVar9) == bVar11) &&\n     (local_60 = read_body((FILE *)__stream), local_60 != (char *)0x0)) {\n    if (commentptr == (char **)0x0) {\n      safefree(local_60);\n    }\n    else {\n      *commentptr = local_60;\n    }\n    pbVar7 = (byte *)header;\n    do {\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) goto LAB_00039da5;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    } while( true );\n  }\nLAB_00039c7d:\n  pcVar4 = "file format error";\nLAB_00039a69:\n  fclose(__stream);\n  bVar11 = false;\n  local_60 = (char *)0x0;\n  if (errorstr != (char **)0x0) {\nLAB_00039a87:\n    *errorstr = pcVar4;\nLAB_00039a8d:\n    if (bVar11) {\n      safefree(local_60);\n      *commentptr = (char *)0x0;\n    }\n  }\nLAB_00039aaa:\n  puVar6 = (uchar *)0x0;\nLAB_00039aac:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return puVar6;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "FILE *__stream;" type_identifier (pointer_declarator "*__stream" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "char *pcVar4;" primitive_type (pointer_declarator "*pcVar4" * identifier) ;) (declaration "size_t namelen;" primitive_type identifier ;) (declaration "ssh_signkey *psVar5;" type_identifier (pointer_declarator "*psVar5" * identifier) ;) (declaration "uchar *ret;" type_identifier (pointer_declarator "*ret" * identifier) ;) (declaration "uchar *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "bool bVar10;" primitive_type identifier ;) (declaration "bool bVar11;" primitive_type identifier ;) (declaration "byte bVar12;" type_identifier identifier ;) (declaration "char *local_60;" primitive_type (pointer_declarator "*local_60" * identifier) ;) (declaration "int public_blob_len;" primitive_type identifier ;) (declaration "char header [40];" primitive_type (array_declarator "header [40]" identifier [ number_literal ]) ;) (expression_statement "bVar12 = 0;" (assignment_expression "bVar12 = 0" identifier = number_literal) ;) (expression_statement "iVar1 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "iVar1 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "__stream = (FILE *)f_open(filename,"rb",0);" (assignment_expression "__stream = (FILE *)f_open(filename,"rb",0)" identifier = (cast_expression "(FILE *)f_open(filename,"rb",0)" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "f_open(filename,"rb",0)" identifier (argument_list "(filename,"rb",0)" ( identifier , (string_literal ""rb"" " string_content ") , number_literal ))))) ;) (if_statement "if (__stream != (FILE *)0x0) {\n    iVar2 = key_type_fp((FILE *)__stream);\n    if (iVar2 == 9) {\n      puVar6 = rfc4716_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }\n    else {\n      if (iVar2 != 10) {\n        if (iVar2 == 3) {\n          pbVar7 = (byte *)header;\n          do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      puVar6 = openssh_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }" if (parenthesized_expression "(__stream != (FILE *)0x0)" ( (binary_expression "__stream != (FILE *)0x0" identifier != (cast_expression "(FILE *)0x0" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    iVar2 = key_type_fp((FILE *)__stream);\n    if (iVar2 == 9) {\n      puVar6 = rfc4716_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }\n    else {\n      if (iVar2 != 10) {\n        if (iVar2 == 3) {\n          pbVar7 = (byte *)header;\n          do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      puVar6 = openssh_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }" { (expression_statement "iVar2 = key_type_fp((FILE *)__stream);" (assignment_expression "iVar2 = key_type_fp((FILE *)__stream)" identifier = (call_expression "key_type_fp((FILE *)__stream)" identifier (argument_list "((FILE *)__stream)" ( (cast_expression "(FILE *)__stream" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (if_statement "if (iVar2 == 9) {\n      puVar6 = rfc4716_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }\n    else {\n      if (iVar2 != 10) {\n        if (iVar2 == 3) {\n          pbVar7 = (byte *)header;\n          do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      puVar6 = openssh_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }" if (parenthesized_expression "(iVar2 == 9)" ( (binary_expression "iVar2 == 9" identifier == number_literal) )) (compound_statement "{\n      puVar6 = rfc4716_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }" { (expression_statement "puVar6 = rfc4716_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);" (assignment_expression "puVar6 = rfc4716_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr)" identifier = (call_expression "rfc4716_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr)" identifier (argument_list "((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr)" ( (cast_expression "(FILE *)__stream" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , identifier , identifier )))) ;) }) (else_clause "else {\n      if (iVar2 != 10) {\n        if (iVar2 == 3) {\n          pbVar7 = (byte *)header;\n          do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      puVar6 = openssh_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }" else (compound_statement "{\n      if (iVar2 != 10) {\n        if (iVar2 == 3) {\n          pbVar7 = (byte *)header;\n          do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      puVar6 = openssh_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);\n    }" { (if_statement "if (iVar2 != 10) {\n        if (iVar2 == 3) {\n          pbVar7 = (byte *)header;\n          do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }" if (parenthesized_expression "(iVar2 != 10)" ( (binary_expression "iVar2 != 10" identifier != number_literal) )) (compound_statement "{\n        if (iVar2 == 3) {\n          pbVar7 = (byte *)header;\n          do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }" { (if_statement "if (iVar2 == 3) {\n          pbVar7 = (byte *)header;\n          do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );\n        }" if (parenthesized_expression "(iVar2 == 3)" ( (binary_expression "iVar2 == 3" identifier == number_literal) )) (compound_statement "{\n          pbVar7 = (byte *)header;\n          do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );\n        }" { (expression_statement "pbVar7 = (byte *)header;" (assignment_expression "pbVar7 = (byte *)header" identifier = (cast_expression "(byte *)header" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (do_statement "do {\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          } while( true );" do (compound_statement "{\n            iVar2 = fgetc(__stream);\n            uVar3 = iVar2 + 1;\n            bVar11 = uVar3 == 0xe;\n            if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar9 = pbVar7 < header + 0x27;\n            bVar11 = pbVar7 == (byte *)(header + 0x27);\n            if (bVar11) goto LAB_00039b3e;\n            *pbVar7 = (byte)iVar2;\n            pbVar7 = pbVar7 + 1;\n          }" { (expression_statement "iVar2 = fgetc(__stream);" (assignment_expression "iVar2 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "uVar3 = iVar2 + 1;" (assignment_expression "uVar3 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (expression_statement "bVar11 = uVar3 == 0xe;" (assignment_expression "bVar11 = uVar3 == 0xe" identifier = (binary_expression "uVar3 == 0xe" identifier == number_literal)) ;) (if_statement "if (uVar3 < 0xf) {\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }\n            else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" if (parenthesized_expression "(uVar3 < 0xf)" ( (binary_expression "uVar3 < 0xf" identifier < number_literal) )) (compound_statement "{\n              bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;\n              if (bVar9) goto LAB_00039b3e;\n            }" { (expression_statement "bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0;" (assignment_expression "bVar9 = (0x4801U >> (uVar3 & 0x1f) & 1) != 0" identifier = (binary_expression "(0x4801U >> (uVar3 & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (uVar3 & 0x1f) & 1)" ( (binary_expression "0x4801U >> (uVar3 & 0x1f) & 1" (binary_expression "0x4801U >> (uVar3 & 0x1f)" number_literal >> (parenthesized_expression "(uVar3 & 0x1f)" ( (binary_expression "uVar3 & 0x1f" identifier & number_literal) ))) & number_literal) )) != number_literal)) ;) (if_statement "if (bVar9) goto LAB_00039b3e;" if (parenthesized_expression "(bVar9)" ( identifier )) (goto_statement "goto LAB_00039b3e;" goto statement_identifier ;)) }) (else_clause "else if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" else (if_statement "if (iVar2 == 0x3a) {\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" if (parenthesized_expression "(iVar2 == 0x3a)" ( (binary_expression "iVar2 == 0x3a" identifier == number_literal) )) (compound_statement "{\n              uVar3 = fgetc(__stream);\n              bVar9 = uVar3 < 0x20;\n              bVar11 = uVar3 == 0x20;\n              if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" { (expression_statement "uVar3 = fgetc(__stream);" (assignment_expression "uVar3 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "bVar9 = uVar3 < 0x20;" (assignment_expression "bVar9 = uVar3 < 0x20" identifier = (binary_expression "uVar3 < 0x20" identifier < number_literal)) ;) (expression_statement "bVar11 = uVar3 == 0x20;" (assignment_expression "bVar11 = uVar3 == 0x20" identifier = (binary_expression "uVar3 == 0x20" identifier == number_literal)) ;) (if_statement "if (bVar11) {\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }" if (parenthesized_expression "(bVar11)" ( identifier )) (compound_statement "{\n                *pbVar7 = 0;\n                iVar2 = 0x16;\n                pbVar7 = (byte *)header;\n                pbVar8 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }" { (expression_statement "*pbVar7 = 0;" (assignment_expression "*pbVar7 = 0" (pointer_expression "*pbVar7" * identifier) = number_literal) ;) (expression_statement "iVar2 = 0x16;" (assignment_expression "iVar2 = 0x16" identifier = number_literal) ;) (expression_statement "pbVar7 = (byte *)header;" (assignment_expression "pbVar7 = (byte *)header" identifier = (cast_expression "(byte *)header" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pbVar8 = (byte *)"PuTTY-User-Key-File-2";" (assignment_expression "pbVar8 = (byte *)"PuTTY-User-Key-File-2"" identifier = (cast_expression "(byte *)"PuTTY-User-Key-File-2"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""PuTTY-User-Key-File-2"" " string_content "))) ;) (goto_statement "goto code_r0x00039be7;" goto statement_identifier ;) })) (goto_statement "goto LAB_00039b3e;" goto statement_identifier ;) })))) (expression_statement "bVar9 = pbVar7 < header + 0x27;" (assignment_expression "bVar9 = pbVar7 < header + 0x27" identifier = (binary_expression "pbVar7 < header + 0x27" identifier < (binary_expression "header + 0x27" identifier + number_literal))) ;) (expression_statement "bVar11 = pbVar7 == (byte *)(header + 0x27);" (assignment_expression "bVar11 = pbVar7 == (byte *)(header + 0x27)" identifier = (binary_expression "pbVar7 == (byte *)(header + 0x27)" identifier == (cast_expression "(byte *)(header + 0x27)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(header + 0x27)" ( (binary_expression "header + 0x27" identifier + number_literal) ))))) ;) (if_statement "if (bVar11) goto LAB_00039b3e;" if (parenthesized_expression "(bVar11)" ( identifier )) (goto_statement "goto LAB_00039b3e;" goto statement_identifier ;)) (expression_statement "*pbVar7 = (byte)iVar2;" (assignment_expression "*pbVar7 = (byte)iVar2" (pointer_expression "*pbVar7" * identifier) = (cast_expression "(byte)iVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" identifier = (binary_expression "pbVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) (goto_statement "goto LAB_00039a63;" goto statement_identifier ;) })) (expression_statement "puVar6 = openssh_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr);" (assignment_expression "puVar6 = openssh_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr)" identifier = (call_expression "openssh_loadpub((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr)" identifier (argument_list "((FILE *)__stream,algorithm,pub_blob_len,commentptr,errorstr)" ( (cast_expression "(FILE *)__stream" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , identifier , identifier )))) ;) }))) (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" identifier (argument_list "(__stream)" ( identifier ))) ;) (goto_statement "goto LAB_00039aac;" goto statement_identifier ;) })) (if_statement "if (errorstr != (char **)0x0) {\n    *errorstr = "can\'t open file";\n  }" if (parenthesized_expression "(errorstr != (char **)0x0)" ( (binary_expression "errorstr != (char **)0x0" identifier != (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n    *errorstr = "can\'t open file";\n  }" { (expression_statement "*errorstr = "can\'t open file";" (assignment_expression "*errorstr = "can\'t open file"" (pointer_expression "*errorstr" * identifier) = (string_literal ""can\'t open file"" " string_content escape_sequence string_content ")) ;) })) (goto_statement "goto LAB_00039aaa;" goto statement_identifier ;) (while_statement "while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar11) break;\ncode_r0x00039be7:\n    if (iVar2 == 0) break;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar2 = iVar2 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar11) break;\ncode_r0x00039be7:\n    if (iVar2 == 0) break;\n  }" { (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "bVar9 = *pbVar7 < *pbVar8;" (assignment_expression "bVar9 = *pbVar7 < *pbVar8" identifier = (binary_expression "*pbVar7 < *pbVar8" (pointer_expression "*pbVar7" * identifier) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "bVar11 = *pbVar7 == *pbVar8;" (assignment_expression "bVar11 = *pbVar7 == *pbVar8" identifier = (binary_expression "*pbVar7 == *pbVar8" (pointer_expression "*pbVar7" * identifier) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar7 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar7 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (if_statement "if (!bVar11) break;" if (parenthesized_expression "(!bVar11)" ( (unary_expression "!bVar11" ! identifier) )) (break_statement "break;" break ;)) (labeled_statement "code_r0x00039be7:\n    if (iVar2 == 0) break;" statement_identifier : (if_statement "if (iVar2 == 0) break;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;))) })) (expression_statement "bVar10 = false;" (assignment_expression "bVar10 = false" identifier = false) ;) (expression_statement "bVar11 = (!bVar9 && !bVar11) == bVar9;" (assignment_expression "bVar11 = (!bVar9 && !bVar11) == bVar9" identifier = (binary_expression "(!bVar9 && !bVar11) == bVar9" (parenthesized_expression "(!bVar9 && !bVar11)" ( (binary_expression "!bVar9 && !bVar11" (unary_expression "!bVar9" ! identifier) && (unary_expression "!bVar11" ! identifier)) )) == identifier)) ;) (if_statement "if (bVar11) {\nLAB_00039c10:\n    pcVar4 = read_body((FILE *)__stream);\n    if (pcVar4 != (char *)0x0) {\n      namelen = strlen(pcVar4);\n      psVar5 = find_pubkey_alg_len(namelen,pcVar4);\n      safefree(pcVar4);\n      if (psVar5 != (ssh_signkey *)0x0) {\n        pbVar7 = (byte *)header;\n        do {\n          iVar2 = fgetc(__stream);\n          if (iVar2 + 1U < 0xf) {\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar7 == (byte *)(header + 0x27)) break;\n          *pbVar7 = (byte)iVar2;\n          pbVar7 = pbVar7 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }" if (parenthesized_expression "(bVar11)" ( identifier )) (compound_statement "{\nLAB_00039c10:\n    pcVar4 = read_body((FILE *)__stream);\n    if (pcVar4 != (char *)0x0) {\n      namelen = strlen(pcVar4);\n      psVar5 = find_pubkey_alg_len(namelen,pcVar4);\n      safefree(pcVar4);\n      if (psVar5 != (ssh_signkey *)0x0) {\n        pbVar7 = (byte *)header;\n        do {\n          iVar2 = fgetc(__stream);\n          if (iVar2 + 1U < 0xf) {\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar7 == (byte *)(header + 0x27)) break;\n          *pbVar7 = (byte)iVar2;\n          pbVar7 = pbVar7 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }" { (labeled_statement "LAB_00039c10:\n    pcVar4 = read_body((FILE *)__stream);" statement_identifier : (expression_statement "pcVar4 = read_body((FILE *)__stream);" (assignment_expression "pcVar4 = read_body((FILE *)__stream)" identifier = (call_expression "read_body((FILE *)__stream)" identifier (argument_list "((FILE *)__stream)" ( (cast_expression "(FILE *)__stream" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) ;)) (if_statement "if (pcVar4 != (char *)0x0) {\n      namelen = strlen(pcVar4);\n      psVar5 = find_pubkey_alg_len(namelen,pcVar4);\n      safefree(pcVar4);\n      if (psVar5 != (ssh_signkey *)0x0) {\n        pbVar7 = (byte *)header;\n        do {\n          iVar2 = fgetc(__stream);\n          if (iVar2 + 1U < 0xf) {\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar7 == (byte *)(header + 0x27)) break;\n          *pbVar7 = (byte)iVar2;\n          pbVar7 = pbVar7 + 1;\n        } while( true );\n      }\n    }" if (parenthesized_expression "(pcVar4 != (char *)0x0)" ( (binary_expression "pcVar4 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      namelen = strlen(pcVar4);\n      psVar5 = find_pubkey_alg_len(namelen,pcVar4);\n      safefree(pcVar4);\n      if (psVar5 != (ssh_signkey *)0x0) {\n        pbVar7 = (byte *)header;\n        do {\n          iVar2 = fgetc(__stream);\n          if (iVar2 + 1U < 0xf) {\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar7 == (byte *)(header + 0x27)) break;\n          *pbVar7 = (byte)iVar2;\n          pbVar7 = pbVar7 + 1;\n        } while( true );\n      }\n    }" { (expression_statement "namelen = strlen(pcVar4);" (assignment_expression "namelen = strlen(pcVar4)" identifier = (call_expression "strlen(pcVar4)" identifier (argument_list "(pcVar4)" ( identifier )))) ;) (expression_statement "psVar5 = find_pubkey_alg_len(namelen,pcVar4);" (assignment_expression "psVar5 = find_pubkey_alg_len(namelen,pcVar4)" identifier = (call_expression "find_pubkey_alg_len(namelen,pcVar4)" identifier (argument_list "(namelen,pcVar4)" ( identifier , identifier )))) ;) (expression_statement "safefree(pcVar4);" (call_expression "safefree(pcVar4)" identifier (argument_list "(pcVar4)" ( identifier ))) ;) (if_statement "if (psVar5 != (ssh_signkey *)0x0) {\n        pbVar7 = (byte *)header;\n        do {\n          iVar2 = fgetc(__stream);\n          if (iVar2 + 1U < 0xf) {\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar7 == (byte *)(header + 0x27)) break;\n          *pbVar7 = (byte)iVar2;\n          pbVar7 = pbVar7 + 1;\n        } while( true );\n      }" if (parenthesized_expression "(psVar5 != (ssh_signkey *)0x0)" ( (binary_expression "psVar5 != (ssh_signkey *)0x0" identifier != (cast_expression "(ssh_signkey *)0x0" ( (type_descriptor "ssh_signkey *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pbVar7 = (byte *)header;\n        do {\n          iVar2 = fgetc(__stream);\n          if (iVar2 + 1U < 0xf) {\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar7 == (byte *)(header + 0x27)) break;\n          *pbVar7 = (byte)iVar2;\n          pbVar7 = pbVar7 + 1;\n        } while( true );\n      }" { (expression_statement "pbVar7 = (byte *)header;" (assignment_expression "pbVar7 = (byte *)header" identifier = (cast_expression "(byte *)header" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (do_statement "do {\n          iVar2 = fgetc(__stream);\n          if (iVar2 + 1U < 0xf) {\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar7 == (byte *)(header + 0x27)) break;\n          *pbVar7 = (byte)iVar2;\n          pbVar7 = pbVar7 + 1;\n        } while( true );" do (compound_statement "{\n          iVar2 = fgetc(__stream);\n          if (iVar2 + 1U < 0xf) {\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar7 == (byte *)(header + 0x27)) break;\n          *pbVar7 = (byte)iVar2;\n          pbVar7 = pbVar7 + 1;\n        }" { (expression_statement "iVar2 = fgetc(__stream);" (assignment_expression "iVar2 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (if_statement "if (iVar2 + 1U < 0xf) {\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" if (parenthesized_expression "(iVar2 + 1U < 0xf)" ( (binary_expression "iVar2 + 1U < 0xf" (binary_expression "iVar2 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n            if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n          }" { (if_statement "if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;" if (parenthesized_expression "((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0)" ( (binary_expression "(0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (iVar2 + 1U & 0x1f) & 1)" ( (binary_expression "0x4801U >> (iVar2 + 1U & 0x1f) & 1" (binary_expression "0x4801U >> (iVar2 + 1U & 0x1f)" number_literal >> (parenthesized_expression "(iVar2 + 1U & 0x1f)" ( (binary_expression "iVar2 + 1U & 0x1f" (binary_expression "iVar2 + 1U" identifier + number_literal) & number_literal) ))) & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) }) (else_clause "else if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" else (if_statement "if (iVar2 == 0x3a) {\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" if (parenthesized_expression "(iVar2 == 0x3a)" ( (binary_expression "iVar2 == 0x3a" identifier == number_literal) )) (compound_statement "{\n            uVar3 = fgetc(__stream);\n            bVar11 = uVar3 < 0x20;\n            bVar9 = uVar3 == 0x20;\n            if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" { (expression_statement "uVar3 = fgetc(__stream);" (assignment_expression "uVar3 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "bVar11 = uVar3 < 0x20;" (assignment_expression "bVar11 = uVar3 < 0x20" identifier = (binary_expression "uVar3 < 0x20" identifier < number_literal)) ;) (expression_statement "bVar9 = uVar3 == 0x20;" (assignment_expression "bVar9 = uVar3 == 0x20" identifier = (binary_expression "uVar3 == 0x20" identifier == number_literal)) ;) (if_statement "if (bVar9) {\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }" if (parenthesized_expression "(bVar9)" ( identifier )) (compound_statement "{\n              *pbVar7 = 0;\n              iVar2 = 0xb;\n              pbVar7 = (byte *)header;\n              pbVar8 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }" { (expression_statement "*pbVar7 = 0;" (assignment_expression "*pbVar7 = 0" (pointer_expression "*pbVar7" * identifier) = number_literal) ;) (expression_statement "iVar2 = 0xb;" (assignment_expression "iVar2 = 0xb" identifier = number_literal) ;) (expression_statement "pbVar7 = (byte *)header;" (assignment_expression "pbVar7 = (byte *)header" identifier = (cast_expression "(byte *)header" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pbVar8 = (byte *)"Encryption";" (assignment_expression "pbVar8 = (byte *)"Encryption"" identifier = (cast_expression "(byte *)"Encryption"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""Encryption"" " string_content "))) ;) (goto_statement "goto code_r0x00039cb3;" goto statement_identifier ;) })) (break_statement "break;" break ;) })))) (if_statement "if (pbVar7 == (byte *)(header + 0x27)) break;" if (parenthesized_expression "(pbVar7 == (byte *)(header + 0x27))" ( (binary_expression "pbVar7 == (byte *)(header + 0x27)" identifier == (cast_expression "(byte *)(header + 0x27)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(header + 0x27)" ( (binary_expression "header + 0x27" identifier + number_literal) )))) )) (break_statement "break;" break ;)) (expression_statement "*pbVar7 = (byte)iVar2;" (assignment_expression "*pbVar7 = (byte)iVar2" (pointer_expression "*pbVar7" * identifier) = (cast_expression "(byte)iVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" identifier = (binary_expression "pbVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) })) (goto_statement "goto LAB_00039c7d;" goto statement_identifier ;) })) (expression_statement "iVar2 = 0x16;" (assignment_expression "iVar2 = 0x16" identifier = number_literal) ;) (expression_statement "pbVar7 = (byte *)header;" (assignment_expression "pbVar7 = (byte *)header" identifier = (cast_expression "(byte *)header" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pbVar8 = (byte *)"PuTTY-User-Key-File-1";" (assignment_expression "pbVar8 = (byte *)"PuTTY-User-Key-File-1"" identifier = (cast_expression "(byte *)"PuTTY-User-Key-File-1"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""PuTTY-User-Key-File-1"" " string_content "))) ;) (do_statement "do {\n    if (iVar2 == 0) break;\n    iVar2 = iVar2 + -1;\n    bVar10 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n  } while (bVar11);" do (compound_statement "{\n    if (iVar2 == 0) break;\n    iVar2 = iVar2 + -1;\n    bVar10 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n  }" { (if_statement "if (iVar2 == 0) break;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "bVar10 = *pbVar7 < *pbVar8;" (assignment_expression "bVar10 = *pbVar7 < *pbVar8" identifier = (binary_expression "*pbVar7 < *pbVar8" (pointer_expression "*pbVar7" * identifier) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "bVar11 = *pbVar7 == *pbVar8;" (assignment_expression "bVar11 = *pbVar7 == *pbVar8" identifier = (binary_expression "*pbVar7 == *pbVar8" (pointer_expression "*pbVar7" * identifier) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar7 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar7 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar11)" ( identifier )) ;) (expression_statement "bVar9 = false;" (assignment_expression "bVar9 = false" identifier = false) ;) (expression_statement "bVar11 = (!bVar10 && !bVar11) == bVar10;" (assignment_expression "bVar11 = (!bVar10 && !bVar11) == bVar10" identifier = (binary_expression "(!bVar10 && !bVar11) == bVar10" (parenthesized_expression "(!bVar10 && !bVar11)" ( (binary_expression "!bVar10 && !bVar11" (unary_expression "!bVar10" ! identifier) && (unary_expression "!bVar11" ! identifier)) )) == identifier)) ;) (if_statement "if (bVar11) goto LAB_00039c10;" if (parenthesized_expression "(bVar11)" ( identifier )) (goto_statement "goto LAB_00039c10;" goto statement_identifier ;)) (labeled_statement "LAB_00039b3e:\n  iVar2 = 0x14;" statement_identifier : (expression_statement "iVar2 = 0x14;" (assignment_expression "iVar2 = 0x14" identifier = number_literal) ;)) (expression_statement "pbVar7 = (byte *)header;" (assignment_expression "pbVar7 = (byte *)header" identifier = (cast_expression "(byte *)header" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pbVar8 = (byte *)"PuTTY-User-Key-File-";" (assignment_expression "pbVar8 = (byte *)"PuTTY-User-Key-File-"" identifier = (cast_expression "(byte *)"PuTTY-User-Key-File-"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""PuTTY-User-Key-File-"" " string_content "))) ;) (do_statement "do {\n    if (iVar2 == 0) break;\n    iVar2 = iVar2 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n  } while (bVar11);" do (compound_statement "{\n    if (iVar2 == 0) break;\n    iVar2 = iVar2 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar11 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n  }" { (if_statement "if (iVar2 == 0) break;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "bVar9 = *pbVar7 < *pbVar8;" (assignment_expression "bVar9 = *pbVar7 < *pbVar8" identifier = (binary_expression "*pbVar7 < *pbVar8" (pointer_expression "*pbVar7" * identifier) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "bVar11 = *pbVar7 == *pbVar8;" (assignment_expression "bVar11 = *pbVar7 == *pbVar8" identifier = (binary_expression "*pbVar7 == *pbVar8" (pointer_expression "*pbVar7" * identifier) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar7 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar7 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar11)" ( identifier )) ;) (expression_statement "pcVar4 = "PuTTY key format too new";" (assignment_expression "pcVar4 = "PuTTY key format too new"" identifier = (string_literal ""PuTTY key format too new"" " string_content ")) ;) (if_statement "if ((!bVar9 && !bVar11) != bVar9) {\nLAB_00039a63:\n    pcVar4 = "not a PuTTY SSH-2 private key";\n  }" if (parenthesized_expression "((!bVar9 && !bVar11) != bVar9)" ( (binary_expression "(!bVar9 && !bVar11) != bVar9" (parenthesized_expression "(!bVar9 && !bVar11)" ( (binary_expression "!bVar9 && !bVar11" (unary_expression "!bVar9" ! identifier) && (unary_expression "!bVar11" ! identifier)) )) != identifier) )) (compound_statement "{\nLAB_00039a63:\n    pcVar4 = "not a PuTTY SSH-2 private key";\n  }" { (labeled_statement "LAB_00039a63:\n    pcVar4 = "not a PuTTY SSH-2 private key";" statement_identifier : (expression_statement "pcVar4 = "not a PuTTY SSH-2 private key";" (assignment_expression "pcVar4 = "not a PuTTY SSH-2 private key"" identifier = (string_literal ""not a PuTTY SSH-2 private key"" " string_content ")) ;)) })) (goto_statement "goto LAB_00039a69;" goto statement_identifier ;) (while_statement "while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039cb3:\n    if (iVar2 == 0) break;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039cb3:\n    if (iVar2 == 0) break;\n  }" { (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "bVar11 = *pbVar7 < *pbVar8;" (assignment_expression "bVar11 = *pbVar7 < *pbVar8" identifier = (binary_expression "*pbVar7 < *pbVar8" (pointer_expression "*pbVar7" * identifier) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "bVar9 = *pbVar7 == *pbVar8;" (assignment_expression "bVar9 = *pbVar7 == *pbVar8" identifier = (binary_expression "*pbVar7 == *pbVar8" (pointer_expression "*pbVar7" * identifier) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar7 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar7 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (if_statement "if (!bVar9) break;" if (parenthesized_expression "(!bVar9)" ( (unary_expression "!bVar9" ! identifier) )) (break_statement "break;" break ;)) (labeled_statement "code_r0x00039cb3:\n    if (iVar2 == 0) break;" statement_identifier : (if_statement "if (iVar2 == 0) break;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;))) })) (if_statement "if (((!bVar11 && !bVar9) == bVar11) &&\n     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)) {\n    safefree(pcVar4);\n    pbVar7 = (byte *)header;\n    do {\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) break;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    } while( true );\n  }" if (parenthesized_expression "(((!bVar11 && !bVar9) == bVar11) &&\n     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0))" ( (binary_expression "((!bVar11 && !bVar9) == bVar11) &&\n     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)" (parenthesized_expression "((!bVar11 && !bVar9) == bVar11)" ( (binary_expression "(!bVar11 && !bVar9) == bVar11" (parenthesized_expression "(!bVar11 && !bVar9)" ( (binary_expression "!bVar11 && !bVar9" (unary_expression "!bVar11" ! identifier) && (unary_expression "!bVar9" ! identifier)) )) == identifier) )) && (parenthesized_expression "(pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)" ( (comma_expression "pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0" (assignment_expression "pcVar4 = read_body((FILE *)__stream)" identifier = (call_expression "read_body((FILE *)__stream)" identifier (argument_list "((FILE *)__stream)" ( (cast_expression "(FILE *)__stream" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) , (binary_expression "pcVar4 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n    safefree(pcVar4);\n    pbVar7 = (byte *)header;\n    do {\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) break;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    } while( true );\n  }" { (expression_statement "safefree(pcVar4);" (call_expression "safefree(pcVar4)" identifier (argument_list "(pcVar4)" ( identifier ))) ;) (expression_statement "pbVar7 = (byte *)header;" (assignment_expression "pbVar7 = (byte *)header" identifier = (cast_expression "(byte *)header" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (do_statement "do {\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) break;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    } while( true );" do (compound_statement "{\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) break;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    }" { (expression_statement "iVar2 = fgetc(__stream);" (assignment_expression "iVar2 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (if_statement "if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" if (parenthesized_expression "(iVar2 + 1U < 0xf)" ( (binary_expression "iVar2 + 1U < 0xf" (binary_expression "iVar2 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;\n      }" { (if_statement "if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) break;" if (parenthesized_expression "((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0)" ( (binary_expression "(0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (iVar2 + 1U & 0x1f) & 1)" ( (binary_expression "0x4801U >> (iVar2 + 1U & 0x1f) & 1" (binary_expression "0x4801U >> (iVar2 + 1U & 0x1f)" number_literal >> (parenthesized_expression "(iVar2 + 1U & 0x1f)" ( (binary_expression "iVar2 + 1U & 0x1f" (binary_expression "iVar2 + 1U" identifier + number_literal) & number_literal) ))) & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) }) (else_clause "else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" else (if_statement "if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" if (parenthesized_expression "(iVar2 == 0x3a)" ( (binary_expression "iVar2 == 0x3a" identifier == number_literal) )) (compound_statement "{\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" { (expression_statement "uVar3 = fgetc(__stream);" (assignment_expression "uVar3 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "bVar11 = uVar3 < 0x20;" (assignment_expression "bVar11 = uVar3 < 0x20" identifier = (binary_expression "uVar3 < 0x20" identifier < number_literal)) ;) (expression_statement "bVar9 = uVar3 == 0x20;" (assignment_expression "bVar9 = uVar3 == 0x20" identifier = (binary_expression "uVar3 == 0x20" identifier == number_literal)) ;) (if_statement "if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }" if (parenthesized_expression "(bVar9)" ( identifier )) (compound_statement "{\n          *pbVar7 = 0;\n          iVar2 = 8;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }" { (expression_statement "*pbVar7 = 0;" (assignment_expression "*pbVar7 = 0" (pointer_expression "*pbVar7" * identifier) = number_literal) ;) (expression_statement "iVar2 = 8;" (assignment_expression "iVar2 = 8" identifier = number_literal) ;) (expression_statement "pbVar7 = (byte *)header;" (assignment_expression "pbVar7 = (byte *)header" identifier = (cast_expression "(byte *)header" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pbVar8 = (byte *)"Comment";" (assignment_expression "pbVar8 = (byte *)"Comment"" identifier = (cast_expression "(byte *)"Comment"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""Comment"" " string_content "))) ;) (goto_statement "goto code_r0x00039d39;" goto statement_identifier ;) })) (break_statement "break;" break ;) })))) (if_statement "if (pbVar7 == (byte *)(header + 0x27)) break;" if (parenthesized_expression "(pbVar7 == (byte *)(header + 0x27))" ( (binary_expression "pbVar7 == (byte *)(header + 0x27)" identifier == (cast_expression "(byte *)(header + 0x27)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(header + 0x27)" ( (binary_expression "header + 0x27" identifier + number_literal) )))) )) (break_statement "break;" break ;)) (expression_statement "*pbVar7 = (byte)iVar2;" (assignment_expression "*pbVar7 = (byte)iVar2" (pointer_expression "*pbVar7" * identifier) = (cast_expression "(byte)iVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" identifier = (binary_expression "pbVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) (goto_statement "goto LAB_00039c7d;" goto statement_identifier ;) (while_statement "while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039dfc:\n    if (iVar2 == 0) break;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039dfc:\n    if (iVar2 == 0) break;\n  }" { (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "bVar11 = *pbVar7 < *pbVar8;" (assignment_expression "bVar11 = *pbVar7 < *pbVar8" identifier = (binary_expression "*pbVar7 < *pbVar8" (pointer_expression "*pbVar7" * identifier) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "bVar9 = *pbVar7 == *pbVar8;" (assignment_expression "bVar9 = *pbVar7 == *pbVar8" identifier = (binary_expression "*pbVar7 == *pbVar8" (pointer_expression "*pbVar7" * identifier) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar7 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar7 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (if_statement "if (!bVar9) break;" if (parenthesized_expression "(!bVar9)" ( (unary_expression "!bVar9" ! identifier) )) (break_statement "break;" break ;)) (labeled_statement "code_r0x00039dfc:\n    if (iVar2 == 0) break;" statement_identifier : (if_statement "if (iVar2 == 0) break;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;))) })) (if_statement "if (((!bVar11 && !bVar9) == bVar11) &&\n     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)) {\n    iVar2 = userkey_parse_line_counter(pcVar4);\n    safefree(pcVar4);\n    if ((-1 < iVar2) &&\n       (puVar6 = read_blob((FILE *)__stream,iVar2,&public_blob_len), puVar6 != (uchar *)0x0)) {\n      fclose(__stream);\n      if (pub_blob_len != (int *)0x0) {\n        *pub_blob_len = public_blob_len;\n      }\n      if (algorithm != (char **)0x0) {\n        pcVar4 = dupstr(psVar5->name);\n        *algorithm = pcVar4;\n      }\n      goto LAB_00039aac;\n    }\n  }" if (parenthesized_expression "(((!bVar11 && !bVar9) == bVar11) &&\n     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0))" ( (binary_expression "((!bVar11 && !bVar9) == bVar11) &&\n     (pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)" (parenthesized_expression "((!bVar11 && !bVar9) == bVar11)" ( (binary_expression "(!bVar11 && !bVar9) == bVar11" (parenthesized_expression "(!bVar11 && !bVar9)" ( (binary_expression "!bVar11 && !bVar9" (unary_expression "!bVar11" ! identifier) && (unary_expression "!bVar9" ! identifier)) )) == identifier) )) && (parenthesized_expression "(pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0)" ( (comma_expression "pcVar4 = read_body((FILE *)__stream), pcVar4 != (char *)0x0" (assignment_expression "pcVar4 = read_body((FILE *)__stream)" identifier = (call_expression "read_body((FILE *)__stream)" identifier (argument_list "((FILE *)__stream)" ( (cast_expression "(FILE *)__stream" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) , (binary_expression "pcVar4 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n    iVar2 = userkey_parse_line_counter(pcVar4);\n    safefree(pcVar4);\n    if ((-1 < iVar2) &&\n       (puVar6 = read_blob((FILE *)__stream,iVar2,&public_blob_len), puVar6 != (uchar *)0x0)) {\n      fclose(__stream);\n      if (pub_blob_len != (int *)0x0) {\n        *pub_blob_len = public_blob_len;\n      }\n      if (algorithm != (char **)0x0) {\n        pcVar4 = dupstr(psVar5->name);\n        *algorithm = pcVar4;\n      }\n      goto LAB_00039aac;\n    }\n  }" { (expression_statement "iVar2 = userkey_parse_line_counter(pcVar4);" (assignment_expression "iVar2 = userkey_parse_line_counter(pcVar4)" identifier = (call_expression "userkey_parse_line_counter(pcVar4)" identifier (argument_list "(pcVar4)" ( identifier )))) ;) (expression_statement "safefree(pcVar4);" (call_expression "safefree(pcVar4)" identifier (argument_list "(pcVar4)" ( identifier ))) ;) (if_statement "if ((-1 < iVar2) &&\n       (puVar6 = read_blob((FILE *)__stream,iVar2,&public_blob_len), puVar6 != (uchar *)0x0)) {\n      fclose(__stream);\n      if (pub_blob_len != (int *)0x0) {\n        *pub_blob_len = public_blob_len;\n      }\n      if (algorithm != (char **)0x0) {\n        pcVar4 = dupstr(psVar5->name);\n        *algorithm = pcVar4;\n      }\n      goto LAB_00039aac;\n    }" if (parenthesized_expression "((-1 < iVar2) &&\n       (puVar6 = read_blob((FILE *)__stream,iVar2,&public_blob_len), puVar6 != (uchar *)0x0))" ( (binary_expression "(-1 < iVar2) &&\n       (puVar6 = read_blob((FILE *)__stream,iVar2,&public_blob_len), puVar6 != (uchar *)0x0)" (parenthesized_expression "(-1 < iVar2)" ( (binary_expression "-1 < iVar2" number_literal < identifier) )) && (parenthesized_expression "(puVar6 = read_blob((FILE *)__stream,iVar2,&public_blob_len), puVar6 != (uchar *)0x0)" ( (comma_expression "puVar6 = read_blob((FILE *)__stream,iVar2,&public_blob_len), puVar6 != (uchar *)0x0" (assignment_expression "puVar6 = read_blob((FILE *)__stream,iVar2,&public_blob_len)" identifier = (call_expression "read_blob((FILE *)__stream,iVar2,&public_blob_len)" identifier (argument_list "((FILE *)__stream,iVar2,&public_blob_len)" ( (cast_expression "(FILE *)__stream" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , (pointer_expression "&public_blob_len" & identifier) )))) , (binary_expression "puVar6 != (uchar *)0x0" identifier != (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n      fclose(__stream);\n      if (pub_blob_len != (int *)0x0) {\n        *pub_blob_len = public_blob_len;\n      }\n      if (algorithm != (char **)0x0) {\n        pcVar4 = dupstr(psVar5->name);\n        *algorithm = pcVar4;\n      }\n      goto LAB_00039aac;\n    }" { (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" identifier (argument_list "(__stream)" ( identifier ))) ;) (if_statement "if (pub_blob_len != (int *)0x0) {\n        *pub_blob_len = public_blob_len;\n      }" if (parenthesized_expression "(pub_blob_len != (int *)0x0)" ( (binary_expression "pub_blob_len != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        *pub_blob_len = public_blob_len;\n      }" { (expression_statement "*pub_blob_len = public_blob_len;" (assignment_expression "*pub_blob_len = public_blob_len" (pointer_expression "*pub_blob_len" * identifier) = identifier) ;) })) (if_statement "if (algorithm != (char **)0x0) {\n        pcVar4 = dupstr(psVar5->name);\n        *algorithm = pcVar4;\n      }" if (parenthesized_expression "(algorithm != (char **)0x0)" ( (binary_expression "algorithm != (char **)0x0" identifier != (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n        pcVar4 = dupstr(psVar5->name);\n        *algorithm = pcVar4;\n      }" { (expression_statement "pcVar4 = dupstr(psVar5->name);" (assignment_expression "pcVar4 = dupstr(psVar5->name)" identifier = (call_expression "dupstr(psVar5->name)" identifier (argument_list "(psVar5->name)" ( (field_expression "psVar5->name" identifier -> field_identifier) )))) ;) (expression_statement "*algorithm = pcVar4;" (assignment_expression "*algorithm = pcVar4" (pointer_expression "*algorithm" * identifier) = identifier) ;) })) (goto_statement "goto LAB_00039aac;" goto statement_identifier ;) })) })) (labeled_statement "LAB_00039da5:\n  pcVar4 = "file format error";" statement_identifier : (expression_statement "pcVar4 = "file format error";" (assignment_expression "pcVar4 = "file format error"" identifier = (string_literal ""file format error"" " string_content ")) ;)) (expression_statement "bVar11 = commentptr != (char **)0x0;" (assignment_expression "bVar11 = commentptr != (char **)0x0" identifier = (binary_expression "commentptr != (char **)0x0" identifier != (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal))) ;) (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" identifier (argument_list "(__stream)" ( identifier ))) ;) (if_statement "if (errorstr != (char **)0x0) goto LAB_00039a87;" if (parenthesized_expression "(errorstr != (char **)0x0)" ( (binary_expression "errorstr != (char **)0x0" identifier != (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (goto_statement "goto LAB_00039a87;" goto statement_identifier ;)) (goto_statement "goto LAB_00039a8d;" goto statement_identifier ;) (while_statement "while( true ) {\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039d39:\n    if (iVar2 == 0) break;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar2 = iVar2 + -1;\n    bVar11 = *pbVar7 < *pbVar8;\n    bVar9 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;\n    pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n    if (!bVar9) break;\ncode_r0x00039d39:\n    if (iVar2 == 0) break;\n  }" { (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "bVar11 = *pbVar7 < *pbVar8;" (assignment_expression "bVar11 = *pbVar7 < *pbVar8" identifier = (binary_expression "*pbVar7 < *pbVar8" (pointer_expression "*pbVar7" * identifier) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "bVar9 = *pbVar7 == *pbVar8;" (assignment_expression "bVar9 = *pbVar7 == *pbVar8" identifier = (binary_expression "*pbVar7 == *pbVar8" (pointer_expression "*pbVar7" * identifier) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar7 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar7 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (if_statement "if (!bVar9) break;" if (parenthesized_expression "(!bVar9)" ( (unary_expression "!bVar9" ! identifier) )) (break_statement "break;" break ;)) (labeled_statement "code_r0x00039d39:\n    if (iVar2 == 0) break;" statement_identifier : (if_statement "if (iVar2 == 0) break;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (break_statement "break;" break ;))) })) (if_statement "if (((!bVar11 && !bVar9) == bVar11) &&\n     (local_60 = read_body((FILE *)__stream), local_60 != (char *)0x0)) {\n    if (commentptr == (char **)0x0) {\n      safefree(local_60);\n    }\n    else {\n      *commentptr = local_60;\n    }\n    pbVar7 = (byte *)header;\n    do {\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) goto LAB_00039da5;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    } while( true );\n  }" if (parenthesized_expression "(((!bVar11 && !bVar9) == bVar11) &&\n     (local_60 = read_body((FILE *)__stream), local_60 != (char *)0x0))" ( (binary_expression "((!bVar11 && !bVar9) == bVar11) &&\n     (local_60 = read_body((FILE *)__stream), local_60 != (char *)0x0)" (parenthesized_expression "((!bVar11 && !bVar9) == bVar11)" ( (binary_expression "(!bVar11 && !bVar9) == bVar11" (parenthesized_expression "(!bVar11 && !bVar9)" ( (binary_expression "!bVar11 && !bVar9" (unary_expression "!bVar11" ! identifier) && (unary_expression "!bVar9" ! identifier)) )) == identifier) )) && (parenthesized_expression "(local_60 = read_body((FILE *)__stream), local_60 != (char *)0x0)" ( (comma_expression "local_60 = read_body((FILE *)__stream), local_60 != (char *)0x0" (assignment_expression "local_60 = read_body((FILE *)__stream)" identifier = (call_expression "read_body((FILE *)__stream)" identifier (argument_list "((FILE *)__stream)" ( (cast_expression "(FILE *)__stream" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) , (binary_expression "local_60 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n    if (commentptr == (char **)0x0) {\n      safefree(local_60);\n    }\n    else {\n      *commentptr = local_60;\n    }\n    pbVar7 = (byte *)header;\n    do {\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) goto LAB_00039da5;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    } while( true );\n  }" { (if_statement "if (commentptr == (char **)0x0) {\n      safefree(local_60);\n    }\n    else {\n      *commentptr = local_60;\n    }" if (parenthesized_expression "(commentptr == (char **)0x0)" ( (binary_expression "commentptr == (char **)0x0" identifier == (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n      safefree(local_60);\n    }" { (expression_statement "safefree(local_60);" (call_expression "safefree(local_60)" identifier (argument_list "(local_60)" ( identifier ))) ;) }) (else_clause "else {\n      *commentptr = local_60;\n    }" else (compound_statement "{\n      *commentptr = local_60;\n    }" { (expression_statement "*commentptr = local_60;" (assignment_expression "*commentptr = local_60" (pointer_expression "*commentptr" * identifier) = identifier) ;) }))) (expression_statement "pbVar7 = (byte *)header;" (assignment_expression "pbVar7 = (byte *)header" identifier = (cast_expression "(byte *)header" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (do_statement "do {\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) goto LAB_00039da5;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    } while( true );" do (compound_statement "{\n      iVar2 = fgetc(__stream);\n      if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar7 == (byte *)(header + 0x27)) goto LAB_00039da5;\n      *pbVar7 = (byte)iVar2;\n      pbVar7 = pbVar7 + 1;\n    }" { (expression_statement "iVar2 = fgetc(__stream);" (assignment_expression "iVar2 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (if_statement "if (iVar2 + 1U < 0xf) {\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" if (parenthesized_expression "(iVar2 + 1U < 0xf)" ( (binary_expression "iVar2 + 1U < 0xf" (binary_expression "iVar2 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n        if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }" { (if_statement "if ((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;" if (parenthesized_expression "((0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0)" ( (binary_expression "(0x4801U >> (iVar2 + 1U & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (iVar2 + 1U & 0x1f) & 1)" ( (binary_expression "0x4801U >> (iVar2 + 1U & 0x1f) & 1" (binary_expression "0x4801U >> (iVar2 + 1U & 0x1f)" number_literal >> (parenthesized_expression "(iVar2 + 1U & 0x1f)" ( (binary_expression "iVar2 + 1U & 0x1f" (binary_expression "iVar2 + 1U" identifier + number_literal) & number_literal) ))) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00039da5;" goto statement_identifier ;)) }) (else_clause "else if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" else (if_statement "if (iVar2 == 0x3a) {\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" if (parenthesized_expression "(iVar2 == 0x3a)" ( (binary_expression "iVar2 == 0x3a" identifier == number_literal) )) (compound_statement "{\n        uVar3 = fgetc(__stream);\n        bVar11 = uVar3 < 0x20;\n        bVar9 = uVar3 == 0x20;\n        if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" { (expression_statement "uVar3 = fgetc(__stream);" (assignment_expression "uVar3 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "bVar11 = uVar3 < 0x20;" (assignment_expression "bVar11 = uVar3 < 0x20" identifier = (binary_expression "uVar3 < 0x20" identifier < number_literal)) ;) (expression_statement "bVar9 = uVar3 == 0x20;" (assignment_expression "bVar9 = uVar3 == 0x20" identifier = (binary_expression "uVar3 == 0x20" identifier == number_literal)) ;) (if_statement "if (bVar9) {\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }" if (parenthesized_expression "(bVar9)" ( identifier )) (compound_statement "{\n          *pbVar7 = 0;\n          iVar2 = 0xd;\n          pbVar7 = (byte *)header;\n          pbVar8 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }" { (expression_statement "*pbVar7 = 0;" (assignment_expression "*pbVar7 = 0" (pointer_expression "*pbVar7" * identifier) = number_literal) ;) (expression_statement "iVar2 = 0xd;" (assignment_expression "iVar2 = 0xd" identifier = number_literal) ;) (expression_statement "pbVar7 = (byte *)header;" (assignment_expression "pbVar7 = (byte *)header" identifier = (cast_expression "(byte *)header" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pbVar8 = (byte *)"Public-Lines";" (assignment_expression "pbVar8 = (byte *)"Public-Lines"" identifier = (cast_expression "(byte *)"Public-Lines"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""Public-Lines"" " string_content "))) ;) (goto_statement "goto code_r0x00039dfc;" goto statement_identifier ;) })) (goto_statement "goto LAB_00039da5;" goto statement_identifier ;) })))) (if_statement "if (pbVar7 == (byte *)(header + 0x27)) goto LAB_00039da5;" if (parenthesized_expression "(pbVar7 == (byte *)(header + 0x27))" ( (binary_expression "pbVar7 == (byte *)(header + 0x27)" identifier == (cast_expression "(byte *)(header + 0x27)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(header + 0x27)" ( (binary_expression "header + 0x27" identifier + number_literal) )))) )) (goto_statement "goto LAB_00039da5;" goto statement_identifier ;)) (expression_statement "*pbVar7 = (byte)iVar2;" (assignment_expression "*pbVar7 = (byte)iVar2" (pointer_expression "*pbVar7" * identifier) = (cast_expression "(byte)iVar2" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" identifier = (binary_expression "pbVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) (labeled_statement "LAB_00039c7d:\n  pcVar4 = "file format error";" statement_identifier : (expression_statement "pcVar4 = "file format error";" (assignment_expression "pcVar4 = "file format error"" identifier = (string_literal ""file format error"" " string_content ")) ;)) (labeled_statement "LAB_00039a69:\n  fclose(__stream);" statement_identifier : (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" identifier (argument_list "(__stream)" ( identifier ))) ;)) (expression_statement "bVar11 = false;" (assignment_expression "bVar11 = false" identifier = false) ;) (expression_statement "local_60 = (char *)0x0;" (assignment_expression "local_60 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (errorstr != (char **)0x0) {\nLAB_00039a87:\n    *errorstr = pcVar4;\nLAB_00039a8d:\n    if (bVar11) {\n      safefree(local_60);\n      *commentptr = (char *)0x0;\n    }\n  }" if (parenthesized_expression "(errorstr != (char **)0x0)" ( (binary_expression "errorstr != (char **)0x0" identifier != (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\nLAB_00039a87:\n    *errorstr = pcVar4;\nLAB_00039a8d:\n    if (bVar11) {\n      safefree(local_60);\n      *commentptr = (char *)0x0;\n    }\n  }" { (labeled_statement "LAB_00039a87:\n    *errorstr = pcVar4;" statement_identifier : (expression_statement "*errorstr = pcVar4;" (assignment_expression "*errorstr = pcVar4" (pointer_expression "*errorstr" * identifier) = identifier) ;)) (labeled_statement "LAB_00039a8d:\n    if (bVar11) {\n      safefree(local_60);\n      *commentptr = (char *)0x0;\n    }" statement_identifier : (if_statement "if (bVar11) {\n      safefree(local_60);\n      *commentptr = (char *)0x0;\n    }" if (parenthesized_expression "(bVar11)" ( identifier )) (compound_statement "{\n      safefree(local_60);\n      *commentptr = (char *)0x0;\n    }" { (expression_statement "safefree(local_60);" (call_expression "safefree(local_60)" identifier (argument_list "(local_60)" ( identifier ))) ;) (expression_statement "*commentptr = (char *)0x0;" (assignment_expression "*commentptr = (char *)0x0" (pointer_expression "*commentptr" * identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) })) (labeled_statement "LAB_00039aaa:\n  puVar6 = (uchar *)0x0;" statement_identifier : (expression_statement "puVar6 = (uchar *)0x0;" (assignment_expression "puVar6 = (uchar *)0x0" identifier = (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (labeled_statement "LAB_00039aac:\n  if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" statement_identifier : (if_statement "if (iVar1 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" if (parenthesized_expression "(iVar1 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "iVar1 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" { comment (expression_statement "__stack_chk_fail_local();" (call_expression "__stack_chk_fail_local()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return puVar6;" return identifier ;) })))
(translation_unit "int FUN_000399e0(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,\n                undefined4 *param_5)\n\n{\n  FILE *__stream;\n  int iVar1;\n  uint uVar2;\n  char *pcVar3;\n  size_t sVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  int in_GS_OFFSET;\n  bool bVar10;\n  bool bVar11;\n  bool bVar12;\n  byte bVar13;\n  int local_60;\n  undefined4 local_4c;\n  byte local_48 [39];\n  byte local_21;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar13 = 0;\n  uStack_14 = 0x399e9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  __stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);\n  if (__stream != (FILE *)0x0) {\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }\n  if (param_5 != (undefined4 *)0x0) {\n    *param_5 = "can\'t open file";\n  }\n  goto LAB_00039aaa;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }\n  bVar11 = false;\n  bVar12 = (!bVar10 && !bVar12) == bVar10;\n  if (bVar12) {\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }\n  iVar1 = 0x16;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-1";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar12 = (!bVar11 && !bVar12) == bVar11;\n  if (bVar12) goto LAB_00039c10;\nLAB_00039b3e:\n  iVar1 = 0x14;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  pcVar3 = "PuTTY key format too new";\n  if ((!bVar10 && !bVar12) != bVar10) {\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }\n  goto LAB_00039a69;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\n  goto LAB_00039c7d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }\nLAB_00039da5:\n  pcVar3 = "file format error";\n  bVar12 = param_4 != (int *)0x0;\n  fclose(__stream);\n  if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;\n  goto LAB_00039a8d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\nLAB_00039c7d:\n  pcVar3 = "file format error";\nLAB_00039a69:\n  fclose(__stream);\n  bVar12 = false;\n  local_60 = 0;\n  if (param_5 != (undefined4 *)0x0) {\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }\nLAB_00039aaa:\n  iVar1 = 0;\nLAB_00039aac:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_0004d450();\n  }\n  return iVar1;\n}\n\n" (function_definition "int FUN_000399e0(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,\n                undefined4 *param_5)\n\n{\n  FILE *__stream;\n  int iVar1;\n  uint uVar2;\n  char *pcVar3;\n  size_t sVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  int in_GS_OFFSET;\n  bool bVar10;\n  bool bVar11;\n  bool bVar12;\n  byte bVar13;\n  int local_60;\n  undefined4 local_4c;\n  byte local_48 [39];\n  byte local_21;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar13 = 0;\n  uStack_14 = 0x399e9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  __stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);\n  if (__stream != (FILE *)0x0) {\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }\n  if (param_5 != (undefined4 *)0x0) {\n    *param_5 = "can\'t open file";\n  }\n  goto LAB_00039aaa;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }\n  bVar11 = false;\n  bVar12 = (!bVar10 && !bVar12) == bVar10;\n  if (bVar12) {\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }\n  iVar1 = 0x16;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-1";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar12 = (!bVar11 && !bVar12) == bVar11;\n  if (bVar12) goto LAB_00039c10;\nLAB_00039b3e:\n  iVar1 = 0x14;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  pcVar3 = "PuTTY key format too new";\n  if ((!bVar10 && !bVar12) != bVar10) {\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }\n  goto LAB_00039a69;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\n  goto LAB_00039c7d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }\nLAB_00039da5:\n  pcVar3 = "file format error";\n  bVar12 = param_4 != (int *)0x0;\n  fclose(__stream);\n  if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;\n  goto LAB_00039a8d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\nLAB_00039c7d:\n  pcVar3 = "file format error";\nLAB_00039a69:\n  fclose(__stream);\n  bVar12 = false;\n  local_60 = 0;\n  if (param_5 != (undefined4 *)0x0) {\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }\nLAB_00039aaa:\n  iVar1 = 0;\nLAB_00039aac:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_0004d450();\n  }\n  return iVar1;\n}" primitive_type (function_declarator "FUN_000399e0(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,\n                undefined4 *param_5)" identifier (parameter_list "(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,\n                undefined4 *param_5)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "undefined4 *param_5" type_identifier (pointer_declarator "*param_5" * identifier)) ))) (compound_statement "{\n  FILE *__stream;\n  int iVar1;\n  uint uVar2;\n  char *pcVar3;\n  size_t sVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  int in_GS_OFFSET;\n  bool bVar10;\n  bool bVar11;\n  bool bVar12;\n  byte bVar13;\n  int local_60;\n  undefined4 local_4c;\n  byte local_48 [39];\n  byte local_21;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar13 = 0;\n  uStack_14 = 0x399e9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  __stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);\n  if (__stream != (FILE *)0x0) {\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }\n  if (param_5 != (undefined4 *)0x0) {\n    *param_5 = "can\'t open file";\n  }\n  goto LAB_00039aaa;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }\n  bVar11 = false;\n  bVar12 = (!bVar10 && !bVar12) == bVar10;\n  if (bVar12) {\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }\n  iVar1 = 0x16;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-1";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar12 = (!bVar11 && !bVar12) == bVar11;\n  if (bVar12) goto LAB_00039c10;\nLAB_00039b3e:\n  iVar1 = 0x14;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  pcVar3 = "PuTTY key format too new";\n  if ((!bVar10 && !bVar12) != bVar10) {\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }\n  goto LAB_00039a69;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\n  goto LAB_00039c7d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }\nLAB_00039da5:\n  pcVar3 = "file format error";\n  bVar12 = param_4 != (int *)0x0;\n  fclose(__stream);\n  if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;\n  goto LAB_00039a8d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\nLAB_00039c7d:\n  pcVar3 = "file format error";\nLAB_00039a69:\n  fclose(__stream);\n  bVar12 = false;\n  local_60 = 0;\n  if (param_5 != (undefined4 *)0x0) {\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }\nLAB_00039aaa:\n  iVar1 = 0;\nLAB_00039aac:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_0004d450();\n  }\n  return iVar1;\n}" { (declaration "FILE *__stream;" type_identifier (pointer_declarator "*__stream" * identifier) ;) (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "bool bVar10;" primitive_type identifier ;) (declaration "bool bVar11;" primitive_type identifier ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "byte bVar13;" type_identifier identifier ;) (declaration "int local_60;" primitive_type identifier ;) (declaration "undefined4 local_4c;" type_identifier identifier ;) (declaration "byte local_48 [39];" type_identifier (array_declarator "local_48 [39]" identifier [ number_literal ]) ;) (declaration "byte local_21;" type_identifier identifier ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "bVar13 = 0;" (assignment_expression "bVar13 = 0" identifier = number_literal) ;) (expression_statement "uStack_14 = 0x399e9;" (assignment_expression "uStack_14 = 0x399e9" identifier = number_literal) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "__stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);" (assignment_expression "__stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0)" identifier = (cast_expression "(FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0)" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0004a6a0(param_1,&DAT_000585ef,0)" identifier (argument_list "(param_1,&DAT_000585ef,0)" ( identifier , (pointer_expression "&DAT_000585ef" & identifier) , number_literal ))))) ;) (if_statement "if (__stream != (FILE *)0x0) {\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }" if (parenthesized_expression "(__stream != (FILE *)0x0)" ( (binary_expression "__stream != (FILE *)0x0" identifier != (cast_expression "(FILE *)0x0" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }" { (expression_statement "iVar1 = FUN_000382f0();" (assignment_expression "iVar1 = FUN_000382f0()" identifier = (call_expression "FUN_000382f0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }" if (parenthesized_expression "(iVar1 == 9)" ( (binary_expression "iVar1 == 9" identifier == number_literal) )) (compound_statement "{\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }" { (expression_statement "iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);" (assignment_expression "iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5)" identifier = (call_expression "FUN_00039360(__stream,param_2,param_3,param_4,param_5)" identifier (argument_list "(__stream,param_2,param_3,param_4,param_5)" ( identifier , identifier , identifier , identifier , identifier )))) ;) }) (else_clause "else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }" else (compound_statement "{\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }" { (if_statement "if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }" if (parenthesized_expression "(iVar1 != 10)" ( (binary_expression "iVar1 != 10" identifier != number_literal) )) (compound_statement "{\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }" { (if_statement "if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }" if (parenthesized_expression "(iVar1 == 3)" ( (binary_expression "iVar1 == 3" identifier == number_literal) )) (compound_statement "{\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }" { (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (do_statement "do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );" do (compound_statement "{\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          }" { (expression_statement "iVar1 = fgetc(__stream);" (assignment_expression "iVar1 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "uVar2 = iVar1 + 1;" (assignment_expression "uVar2 = iVar1 + 1" identifier = (binary_expression "iVar1 + 1" identifier + number_literal)) ;) (expression_statement "bVar12 = uVar2 == 0xe;" (assignment_expression "bVar12 = uVar2 == 0xe" identifier = (binary_expression "uVar2 == 0xe" identifier == number_literal)) ;) (if_statement "if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" if (parenthesized_expression "(uVar2 < 0xf)" ( (binary_expression "uVar2 < 0xf" identifier < number_literal) )) (compound_statement "{\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }" { (expression_statement "bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;" (assignment_expression "bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0" identifier = (binary_expression "(0x4801U >> (uVar2 & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (uVar2 & 0x1f) & 1)" ( (binary_expression "0x4801U >> (uVar2 & 0x1f) & 1" (binary_expression "0x4801U >> (uVar2 & 0x1f)" number_literal >> (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) ))) & number_literal) )) != number_literal)) ;) (if_statement "if (bVar10) goto LAB_00039b3e;" if (parenthesized_expression "(bVar10)" ( identifier )) (goto_statement "goto LAB_00039b3e;" goto statement_identifier ;)) }) (else_clause "else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" else (if_statement "if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" if (parenthesized_expression "(iVar1 == 0x3a)" ( (binary_expression "iVar1 == 0x3a" identifier == number_literal) )) (compound_statement "{\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" { (expression_statement "uVar2 = fgetc(__stream);" (assignment_expression "uVar2 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "bVar10 = uVar2 < 0x20;" (assignment_expression "bVar10 = uVar2 < 0x20" identifier = (binary_expression "uVar2 < 0x20" identifier < number_literal)) ;) (expression_statement "bVar12 = uVar2 == 0x20;" (assignment_expression "bVar12 = uVar2 == 0x20" identifier = (binary_expression "uVar2 == 0x20" identifier == number_literal)) ;) (if_statement "if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }" { (expression_statement "*pbVar8 = 0;" (assignment_expression "*pbVar8 = 0" (pointer_expression "*pbVar8" * identifier) = number_literal) ;) (expression_statement "iVar1 = 0x16;" (assignment_expression "iVar1 = 0x16" identifier = number_literal) ;) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"PuTTY-User-Key-File-2";" (assignment_expression "pbVar9 = (byte *)"PuTTY-User-Key-File-2"" identifier = (cast_expression "(byte *)"PuTTY-User-Key-File-2"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""PuTTY-User-Key-File-2"" " string_content "))) ;) (goto_statement "goto code_r0x00039be7;" goto statement_identifier ;) })) (goto_statement "goto LAB_00039b3e;" goto statement_identifier ;) })))) (expression_statement "bVar10 = pbVar8 < &local_21;" (assignment_expression "bVar10 = pbVar8 < &local_21" identifier = (binary_expression "pbVar8 < &local_21" identifier < (pointer_expression "&local_21" & identifier))) ;) (expression_statement "bVar12 = pbVar8 == &local_21;" (assignment_expression "bVar12 = pbVar8 == &local_21" identifier = (binary_expression "pbVar8 == &local_21" identifier == (pointer_expression "&local_21" & identifier))) ;) (if_statement "if (bVar12) goto LAB_00039b3e;" if (parenthesized_expression "(bVar12)" ( identifier )) (goto_statement "goto LAB_00039b3e;" goto statement_identifier ;)) (expression_statement "*pbVar8 = (byte)iVar1;" (assignment_expression "*pbVar8 = (byte)iVar1" (pointer_expression "*pbVar8" * identifier) = (cast_expression "(byte)iVar1" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) (goto_statement "goto LAB_00039a63;" goto statement_identifier ;) })) (expression_statement "iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);" (assignment_expression "iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5)" identifier = (call_expression "FUN_000397e0(__stream,param_2,param_3,param_4,param_5)" identifier (argument_list "(__stream,param_2,param_3,param_4,param_5)" ( identifier , identifier , identifier , identifier , identifier )))) ;) }))) (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" identifier (argument_list "(__stream)" ( identifier ))) ;) (goto_statement "goto LAB_00039aac;" goto statement_identifier ;) })) (if_statement "if (param_5 != (undefined4 *)0x0) {\n    *param_5 = "can\'t open file";\n  }" if (parenthesized_expression "(param_5 != (undefined4 *)0x0)" ( (binary_expression "param_5 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    *param_5 = "can\'t open file";\n  }" { (expression_statement "*param_5 = "can\'t open file";" (assignment_expression "*param_5 = "can\'t open file"" (pointer_expression "*param_5" * identifier) = (string_literal ""can\'t open file"" " string_content escape_sequence string_content ")) ;) })) (goto_statement "goto LAB_00039aaa;" goto statement_identifier ;) (while_statement "while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }" { (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (expression_statement "bVar10 = *pbVar8 < *pbVar9;" (assignment_expression "bVar10 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar12 = *pbVar8 == *pbVar9;" (assignment_expression "bVar12 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (if_statement "if (!bVar12) break;" if (parenthesized_expression "(!bVar12)" ( (unary_expression "!bVar12" ! identifier) )) (break_statement "break;" break ;)) (labeled_statement "code_r0x00039be7:\n    if (iVar1 == 0) break;" statement_identifier : (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;))) })) (expression_statement "bVar11 = false;" (assignment_expression "bVar11 = false" identifier = false) ;) (expression_statement "bVar12 = (!bVar10 && !bVar12) == bVar10;" (assignment_expression "bVar12 = (!bVar10 && !bVar12) == bVar10" identifier = (binary_expression "(!bVar10 && !bVar12) == bVar10" (parenthesized_expression "(!bVar10 && !bVar12)" ( (binary_expression "!bVar10 && !bVar12" (unary_expression "!bVar10" ! identifier) && (unary_expression "!bVar12" ! identifier)) )) == identifier)) ;) (if_statement "if (bVar12) {\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }" { (labeled_statement "LAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();" statement_identifier : (expression_statement "pcVar3 = (char *)FUN_000375b0();" (assignment_expression "pcVar3 = (char *)FUN_000375b0()" identifier = (cast_expression "(char *)FUN_000375b0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000375b0()" identifier (argument_list "()" ( ))))) ;)) (if_statement "if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }" if (parenthesized_expression "(pcVar3 != (char *)0x0)" ( (binary_expression "pcVar3 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }" { (expression_statement "sVar4 = strlen(pcVar3);" (assignment_expression "sVar4 = strlen(pcVar3)" identifier = (call_expression "strlen(pcVar3)" identifier (argument_list "(pcVar3)" ( identifier )))) ;) (expression_statement "iVar5 = FUN_000381e0(sVar4,pcVar3);" (assignment_expression "iVar5 = FUN_000381e0(sVar4,pcVar3)" identifier = (call_expression "FUN_000381e0(sVar4,pcVar3)" identifier (argument_list "(sVar4,pcVar3)" ( identifier , identifier )))) ;) (expression_statement "FUN_0001ed20(pcVar3);" (call_expression "FUN_0001ed20(pcVar3)" identifier (argument_list "(pcVar3)" ( identifier ))) ;) (if_statement "if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }" { (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (do_statement "do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );" do (compound_statement "{\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        }" { (expression_statement "iVar1 = fgetc(__stream);" (assignment_expression "iVar1 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (if_statement "if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" if (parenthesized_expression "(iVar1 + 1U < 0xf)" ( (binary_expression "iVar1 + 1U < 0xf" (binary_expression "iVar1 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }" { (if_statement "if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;" if (parenthesized_expression "((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0)" ( (binary_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1)" ( (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f) & 1" (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f)" number_literal >> (parenthesized_expression "(iVar1 + 1U & 0x1f)" ( (binary_expression "iVar1 + 1U & 0x1f" (binary_expression "iVar1 + 1U" identifier + number_literal) & number_literal) ))) & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) }) (else_clause "else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" else (if_statement "if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" if (parenthesized_expression "(iVar1 == 0x3a)" ( (binary_expression "iVar1 == 0x3a" identifier == number_literal) )) (compound_statement "{\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" { (expression_statement "uVar2 = fgetc(__stream);" (assignment_expression "uVar2 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "bVar12 = uVar2 < 0x20;" (assignment_expression "bVar12 = uVar2 < 0x20" identifier = (binary_expression "uVar2 < 0x20" identifier < number_literal)) ;) (expression_statement "bVar10 = uVar2 == 0x20;" (assignment_expression "bVar10 = uVar2 == 0x20" identifier = (binary_expression "uVar2 == 0x20" identifier == number_literal)) ;) (if_statement "if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }" if (parenthesized_expression "(bVar10)" ( identifier )) (compound_statement "{\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }" { (expression_statement "*pbVar8 = 0;" (assignment_expression "*pbVar8 = 0" (pointer_expression "*pbVar8" * identifier) = number_literal) ;) (expression_statement "iVar1 = 0xb;" (assignment_expression "iVar1 = 0xb" identifier = number_literal) ;) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"Encryption";" (assignment_expression "pbVar9 = (byte *)"Encryption"" identifier = (cast_expression "(byte *)"Encryption"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""Encryption"" " string_content "))) ;) (goto_statement "goto code_r0x00039cb3;" goto statement_identifier ;) })) (break_statement "break;" break ;) })))) (if_statement "if (pbVar8 == &local_21) break;" if (parenthesized_expression "(pbVar8 == &local_21)" ( (binary_expression "pbVar8 == &local_21" identifier == (pointer_expression "&local_21" & identifier)) )) (break_statement "break;" break ;)) (expression_statement "*pbVar8 = (byte)iVar1;" (assignment_expression "*pbVar8 = (byte)iVar1" (pointer_expression "*pbVar8" * identifier) = (cast_expression "(byte)iVar1" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) })) (goto_statement "goto LAB_00039c7d;" goto statement_identifier ;) })) (expression_statement "iVar1 = 0x16;" (assignment_expression "iVar1 = 0x16" identifier = number_literal) ;) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"PuTTY-User-Key-File-1";" (assignment_expression "pbVar9 = (byte *)"PuTTY-User-Key-File-1"" identifier = (cast_expression "(byte *)"PuTTY-User-Key-File-1"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""PuTTY-User-Key-File-1"" " string_content "))) ;) (do_statement "do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);" do (compound_statement "{\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  }" { (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (expression_statement "bVar11 = *pbVar8 < *pbVar9;" (assignment_expression "bVar11 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar12 = *pbVar8 == *pbVar9;" (assignment_expression "bVar12 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar12)" ( identifier )) ;) (expression_statement "bVar10 = false;" (assignment_expression "bVar10 = false" identifier = false) ;) (expression_statement "bVar12 = (!bVar11 && !bVar12) == bVar11;" (assignment_expression "bVar12 = (!bVar11 && !bVar12) == bVar11" identifier = (binary_expression "(!bVar11 && !bVar12) == bVar11" (parenthesized_expression "(!bVar11 && !bVar12)" ( (binary_expression "!bVar11 && !bVar12" (unary_expression "!bVar11" ! identifier) && (unary_expression "!bVar12" ! identifier)) )) == identifier)) ;) (if_statement "if (bVar12) goto LAB_00039c10;" if (parenthesized_expression "(bVar12)" ( identifier )) (goto_statement "goto LAB_00039c10;" goto statement_identifier ;)) (labeled_statement "LAB_00039b3e:\n  iVar1 = 0x14;" statement_identifier : (expression_statement "iVar1 = 0x14;" (assignment_expression "iVar1 = 0x14" identifier = number_literal) ;)) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"PuTTY-User-Key-File-";" (assignment_expression "pbVar9 = (byte *)"PuTTY-User-Key-File-"" identifier = (cast_expression "(byte *)"PuTTY-User-Key-File-"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""PuTTY-User-Key-File-"" " string_content "))) ;) (do_statement "do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);" do (compound_statement "{\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  }" { (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (expression_statement "bVar10 = *pbVar8 < *pbVar9;" (assignment_expression "bVar10 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar12 = *pbVar8 == *pbVar9;" (assignment_expression "bVar12 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar12)" ( identifier )) ;) (expression_statement "pcVar3 = "PuTTY key format too new";" (assignment_expression "pcVar3 = "PuTTY key format too new"" identifier = (string_literal ""PuTTY key format too new"" " string_content ")) ;) (if_statement "if ((!bVar10 && !bVar12) != bVar10) {\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }" if (parenthesized_expression "((!bVar10 && !bVar12) != bVar10)" ( (binary_expression "(!bVar10 && !bVar12) != bVar10" (parenthesized_expression "(!bVar10 && !bVar12)" ( (binary_expression "!bVar10 && !bVar12" (unary_expression "!bVar10" ! identifier) && (unary_expression "!bVar12" ! identifier)) )) != identifier) )) (compound_statement "{\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }" { (labeled_statement "LAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";" statement_identifier : (expression_statement "pcVar3 = "not a PuTTY SSH-2 private key";" (assignment_expression "pcVar3 = "not a PuTTY SSH-2 private key"" identifier = (string_literal ""not a PuTTY SSH-2 private key"" " string_content ")) ;)) })) (goto_statement "goto LAB_00039a69;" goto statement_identifier ;) (while_statement "while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }" { (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (expression_statement "bVar12 = *pbVar8 < *pbVar9;" (assignment_expression "bVar12 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar10 = *pbVar8 == *pbVar9;" (assignment_expression "bVar10 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (if_statement "if (!bVar10) break;" if (parenthesized_expression "(!bVar10)" ( (unary_expression "!bVar10" ! identifier) )) (break_statement "break;" break ;)) (labeled_statement "code_r0x00039cb3:\n    if (iVar1 == 0) break;" statement_identifier : (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;))) })) (if_statement "if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }" if (parenthesized_expression "(((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0))" ( (binary_expression "((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)" (parenthesized_expression "((!bVar12 && !bVar10) == bVar12)" ( (binary_expression "(!bVar12 && !bVar10) == bVar12" (parenthesized_expression "(!bVar12 && !bVar10)" ( (binary_expression "!bVar12 && !bVar10" (unary_expression "!bVar12" ! identifier) && (unary_expression "!bVar10" ! identifier)) )) == identifier) )) && (parenthesized_expression "(iVar1 = FUN_000375b0(), iVar1 != 0)" ( (comma_expression "iVar1 = FUN_000375b0(), iVar1 != 0" (assignment_expression "iVar1 = FUN_000375b0()" identifier = (call_expression "FUN_000375b0()" identifier (argument_list "()" ( )))) , (binary_expression "iVar1 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }" { (expression_statement "FUN_0001ed20(iVar1);" (call_expression "FUN_0001ed20(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (do_statement "do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );" do (compound_statement "{\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    }" { (expression_statement "iVar1 = fgetc(__stream);" (assignment_expression "iVar1 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (if_statement "if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" if (parenthesized_expression "(iVar1 + 1U < 0xf)" ( (binary_expression "iVar1 + 1U < 0xf" (binary_expression "iVar1 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }" { (if_statement "if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;" if (parenthesized_expression "((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0)" ( (binary_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1)" ( (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f) & 1" (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f)" number_literal >> (parenthesized_expression "(iVar1 + 1U & 0x1f)" ( (binary_expression "iVar1 + 1U & 0x1f" (binary_expression "iVar1 + 1U" identifier + number_literal) & number_literal) ))) & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) }) (else_clause "else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" else (if_statement "if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" if (parenthesized_expression "(iVar1 == 0x3a)" ( (binary_expression "iVar1 == 0x3a" identifier == number_literal) )) (compound_statement "{\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" { (expression_statement "uVar2 = fgetc(__stream);" (assignment_expression "uVar2 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "bVar12 = uVar2 < 0x20;" (assignment_expression "bVar12 = uVar2 < 0x20" identifier = (binary_expression "uVar2 < 0x20" identifier < number_literal)) ;) (expression_statement "bVar10 = uVar2 == 0x20;" (assignment_expression "bVar10 = uVar2 == 0x20" identifier = (binary_expression "uVar2 == 0x20" identifier == number_literal)) ;) (if_statement "if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }" if (parenthesized_expression "(bVar10)" ( identifier )) (compound_statement "{\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }" { (expression_statement "*pbVar8 = 0;" (assignment_expression "*pbVar8 = 0" (pointer_expression "*pbVar8" * identifier) = number_literal) ;) (expression_statement "iVar1 = 8;" (assignment_expression "iVar1 = 8" identifier = number_literal) ;) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"Comment";" (assignment_expression "pbVar9 = (byte *)"Comment"" identifier = (cast_expression "(byte *)"Comment"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""Comment"" " string_content "))) ;) (goto_statement "goto code_r0x00039d39;" goto statement_identifier ;) })) (break_statement "break;" break ;) })))) (if_statement "if (pbVar8 == &local_21) break;" if (parenthesized_expression "(pbVar8 == &local_21)" ( (binary_expression "pbVar8 == &local_21" identifier == (pointer_expression "&local_21" & identifier)) )) (break_statement "break;" break ;)) (expression_statement "*pbVar8 = (byte)iVar1;" (assignment_expression "*pbVar8 = (byte)iVar1" (pointer_expression "*pbVar8" * identifier) = (cast_expression "(byte)iVar1" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) (goto_statement "goto LAB_00039c7d;" goto statement_identifier ;) (while_statement "while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }" { (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (expression_statement "bVar12 = *pbVar8 < *pbVar9;" (assignment_expression "bVar12 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar10 = *pbVar8 == *pbVar9;" (assignment_expression "bVar10 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (if_statement "if (!bVar10) break;" if (parenthesized_expression "(!bVar10)" ( (unary_expression "!bVar10" ! identifier) )) (break_statement "break;" break ;)) (labeled_statement "code_r0x00039dfc:\n    if (iVar1 == 0) break;" statement_identifier : (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;))) })) (if_statement "if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }" if (parenthesized_expression "(((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0))" ( (binary_expression "((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)" (parenthesized_expression "((!bVar12 && !bVar10) == bVar12)" ( (binary_expression "(!bVar12 && !bVar10) == bVar12" (parenthesized_expression "(!bVar12 && !bVar10)" ( (binary_expression "!bVar12 && !bVar10" (unary_expression "!bVar12" ! identifier) && (unary_expression "!bVar10" ! identifier)) )) == identifier) )) && (parenthesized_expression "(iVar1 = FUN_000375b0(), iVar1 != 0)" ( (comma_expression "iVar1 = FUN_000375b0(), iVar1 != 0" (assignment_expression "iVar1 = FUN_000375b0()" identifier = (call_expression "FUN_000375b0()" identifier (argument_list "()" ( )))) , (binary_expression "iVar1 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }" { (expression_statement "iVar6 = FUN_000374c0();" (assignment_expression "iVar6 = FUN_000374c0()" identifier = (call_expression "FUN_000374c0()" identifier (argument_list "()" ( )))) ;) (expression_statement "FUN_0001ed20(iVar1);" (call_expression "FUN_0001ed20(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (if_statement "if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }" if (parenthesized_expression "((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0))" ( (binary_expression "(-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)" (parenthesized_expression "(-1 < iVar6)" ( (binary_expression "-1 < iVar6" number_literal < identifier) )) && (parenthesized_expression "(iVar1 = FUN_00037690(), iVar1 != 0)" ( (comma_expression "iVar1 = FUN_00037690(), iVar1 != 0" (assignment_expression "iVar1 = FUN_00037690()" identifier = (call_expression "FUN_00037690()" identifier (argument_list "()" ( )))) , (binary_expression "iVar1 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }" { (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" identifier (argument_list "(__stream)" ( identifier ))) ;) (if_statement "if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }" if (parenthesized_expression "(param_3 != (undefined4 *)0x0)" ( (binary_expression "param_3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        *param_3 = local_4c;\n      }" { (expression_statement "*param_3 = local_4c;" (assignment_expression "*param_3 = local_4c" (pointer_expression "*param_3" * identifier) = identifier) ;) })) (if_statement "if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }" if (parenthesized_expression "(param_2 != (undefined4 *)0x0)" ( (binary_expression "param_2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }" { (expression_statement "uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));" (assignment_expression "uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30))" identifier = (call_expression "FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30))" identifier (argument_list "(*(undefined4 *)(iVar5 + 0x30))" ( (pointer_expression "*(undefined4 *)(iVar5 + 0x30)" * (cast_expression "(undefined4 *)(iVar5 + 0x30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x30)" ( (binary_expression "iVar5 + 0x30" identifier + number_literal) )))) )))) ;) (expression_statement "*param_2 = uVar7;" (assignment_expression "*param_2 = uVar7" (pointer_expression "*param_2" * identifier) = identifier) ;) })) (goto_statement "goto LAB_00039aac;" goto statement_identifier ;) })) })) (labeled_statement "LAB_00039da5:\n  pcVar3 = "file format error";" statement_identifier : (expression_statement "pcVar3 = "file format error";" (assignment_expression "pcVar3 = "file format error"" identifier = (string_literal ""file format error"" " string_content ")) ;)) (expression_statement "bVar12 = param_4 != (int *)0x0;" (assignment_expression "bVar12 = param_4 != (int *)0x0" identifier = (binary_expression "param_4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ;) (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" identifier (argument_list "(__stream)" ( identifier ))) ;) (if_statement "if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;" if (parenthesized_expression "(param_5 != (undefined4 *)0x0)" ( (binary_expression "param_5 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00039a87;" goto statement_identifier ;)) (goto_statement "goto LAB_00039a8d;" goto statement_identifier ;) (while_statement "while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }" { (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" identifier = (binary_expression "iVar1 + -1" identifier + number_literal)) ;) (expression_statement "bVar12 = *pbVar8 < *pbVar9;" (assignment_expression "bVar12 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar10 = *pbVar8 == *pbVar9;" (assignment_expression "bVar10 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" identifier + (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (if_statement "if (!bVar10) break;" if (parenthesized_expression "(!bVar10)" ( (unary_expression "!bVar10" ! identifier) )) (break_statement "break;" break ;)) (labeled_statement "code_r0x00039d39:\n    if (iVar1 == 0) break;" statement_identifier : (if_statement "if (iVar1 == 0) break;" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (break_statement "break;" break ;))) })) (if_statement "if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }" if (parenthesized_expression "(((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0))" ( (binary_expression "((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)" (parenthesized_expression "((!bVar12 && !bVar10) == bVar12)" ( (binary_expression "(!bVar12 && !bVar10) == bVar12" (parenthesized_expression "(!bVar12 && !bVar10)" ( (binary_expression "!bVar12 && !bVar10" (unary_expression "!bVar12" ! identifier) && (unary_expression "!bVar10" ! identifier)) )) == identifier) )) && (parenthesized_expression "(local_60 = FUN_000375b0(), local_60 != 0)" ( (comma_expression "local_60 = FUN_000375b0(), local_60 != 0" (assignment_expression "local_60 = FUN_000375b0()" identifier = (call_expression "FUN_000375b0()" identifier (argument_list "()" ( )))) , (binary_expression "local_60 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }" { (if_statement "if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }" if (parenthesized_expression "(param_4 == (int *)0x0)" ( (binary_expression "param_4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      FUN_0001ed20(local_60);\n    }" { (expression_statement "FUN_0001ed20(local_60);" (call_expression "FUN_0001ed20(local_60)" identifier (argument_list "(local_60)" ( identifier ))) ;) }) (else_clause "else {\n      *param_4 = local_60;\n    }" else (compound_statement "{\n      *param_4 = local_60;\n    }" { (expression_statement "*param_4 = local_60;" (assignment_expression "*param_4 = local_60" (pointer_expression "*param_4" * identifier) = identifier) ;) }))) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (do_statement "do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );" do (compound_statement "{\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    }" { (expression_statement "iVar1 = fgetc(__stream);" (assignment_expression "iVar1 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (if_statement "if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" if (parenthesized_expression "(iVar1 + 1U < 0xf)" ( (binary_expression "iVar1 + 1U < 0xf" (binary_expression "iVar1 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }" { (if_statement "if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;" if (parenthesized_expression "((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0)" ( (binary_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1)" ( (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f) & 1" (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f)" number_literal >> (parenthesized_expression "(iVar1 + 1U & 0x1f)" ( (binary_expression "iVar1 + 1U & 0x1f" (binary_expression "iVar1 + 1U" identifier + number_literal) & number_literal) ))) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00039da5;" goto statement_identifier ;)) }) (else_clause "else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" else (if_statement "if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" if (parenthesized_expression "(iVar1 == 0x3a)" ( (binary_expression "iVar1 == 0x3a" identifier == number_literal) )) (compound_statement "{\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" { (expression_statement "uVar2 = fgetc(__stream);" (assignment_expression "uVar2 = fgetc(__stream)" identifier = (call_expression "fgetc(__stream)" identifier (argument_list "(__stream)" ( identifier )))) ;) (expression_statement "bVar12 = uVar2 < 0x20;" (assignment_expression "bVar12 = uVar2 < 0x20" identifier = (binary_expression "uVar2 < 0x20" identifier < number_literal)) ;) (expression_statement "bVar10 = uVar2 == 0x20;" (assignment_expression "bVar10 = uVar2 == 0x20" identifier = (binary_expression "uVar2 == 0x20" identifier == number_literal)) ;) (if_statement "if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }" if (parenthesized_expression "(bVar10)" ( identifier )) (compound_statement "{\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }" { (expression_statement "*pbVar8 = 0;" (assignment_expression "*pbVar8 = 0" (pointer_expression "*pbVar8" * identifier) = number_literal) ;) (expression_statement "iVar1 = 0xd;" (assignment_expression "iVar1 = 0xd" identifier = number_literal) ;) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"Public-Lines";" (assignment_expression "pbVar9 = (byte *)"Public-Lines"" identifier = (cast_expression "(byte *)"Public-Lines"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""Public-Lines"" " string_content "))) ;) (goto_statement "goto code_r0x00039dfc;" goto statement_identifier ;) })) (goto_statement "goto LAB_00039da5;" goto statement_identifier ;) })))) (if_statement "if (pbVar8 == &local_21) goto LAB_00039da5;" if (parenthesized_expression "(pbVar8 == &local_21)" ( (binary_expression "pbVar8 == &local_21" identifier == (pointer_expression "&local_21" & identifier)) )) (goto_statement "goto LAB_00039da5;" goto statement_identifier ;)) (expression_statement "*pbVar8 = (byte)iVar1;" (assignment_expression "*pbVar8 = (byte)iVar1" (pointer_expression "*pbVar8" * identifier) = (cast_expression "(byte)iVar1" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) (labeled_statement "LAB_00039c7d:\n  pcVar3 = "file format error";" statement_identifier : (expression_statement "pcVar3 = "file format error";" (assignment_expression "pcVar3 = "file format error"" identifier = (string_literal ""file format error"" " string_content ")) ;)) (labeled_statement "LAB_00039a69:\n  fclose(__stream);" statement_identifier : (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" identifier (argument_list "(__stream)" ( identifier ))) ;)) (expression_statement "bVar12 = false;" (assignment_expression "bVar12 = false" identifier = false) ;) (expression_statement "local_60 = 0;" (assignment_expression "local_60 = 0" identifier = number_literal) ;) (if_statement "if (param_5 != (undefined4 *)0x0) {\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }" if (parenthesized_expression "(param_5 != (undefined4 *)0x0)" ( (binary_expression "param_5 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }" { (labeled_statement "LAB_00039a87:\n    *param_5 = pcVar3;" statement_identifier : (expression_statement "*param_5 = pcVar3;" (assignment_expression "*param_5 = pcVar3" (pointer_expression "*param_5" * identifier) = identifier) ;)) (labeled_statement "LAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }" statement_identifier : (if_statement "if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }" { (expression_statement "FUN_0001ed20(local_60);" (call_expression "FUN_0001ed20(local_60)" identifier (argument_list "(local_60)" ( identifier ))) ;) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) }))) })) (labeled_statement "LAB_00039aaa:\n  iVar1 = 0;" statement_identifier : (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" identifier = number_literal) ;)) (labeled_statement "LAB_00039aac:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_0004d450();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_0004d450();\n  }" if (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    \n    FUN_0004d450();\n  }" { (expression_statement "FUN_0004d450();" (call_expression "FUN_0004d450()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar1;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT )))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) & LIT) )) != LIT)) ;) (if_statement if (parenthesized_expression ( IDENT )) (goto_statement goto statement_identifier ;)) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;) })))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < (pointer_expression & IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == (pointer_expression & IDENT))) ;) (if_statement if (parenthesized_expression ( IDENT )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( BOOL )) ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT )))) ;) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (string_literal " string_content escape_sequence string_content ")) ;) })) (goto_statement goto statement_identifier ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (break_statement break ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;))) })) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT)) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT >> (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) & LIT) ))) & LIT) )) != LIT) )) (break_statement break ;)) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (goto_statement goto statement_identifier ;) })) (break_statement break ;) })))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression & IDENT)) )) (break_statement break ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( BOOL )) ;) })) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT)) ;) (if_statement if (parenthesized_expression ( IDENT )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) != IDENT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;)) })) (goto_statement goto statement_identifier ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (break_statement break ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;))) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT >> (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) & LIT) ))) & LIT) )) != LIT) )) (break_statement break ;)) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (goto_statement goto statement_identifier ;) })) (break_statement break ;) })))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression & IDENT)) )) (break_statement break ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( BOOL )) ;) })) (goto_statement goto statement_identifier ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (break_statement break ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;))) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) })) (goto_statement goto statement_identifier ;) })) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (break_statement break ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;))) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT >> (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) & LIT) ))) & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;) })))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression & IDENT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( BOOL )) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;)) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;)) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) }))) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "int FUN_000399e0(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,\n                undefined4 *param_5)\n\n{\n  FILE *__stream;\n  int iVar1;\n  uint uVar2;\n  char *pcVar3;\n  size_t sVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  int in_GS_OFFSET;\n  bool bVar10;\n  bool bVar11;\n  bool bVar12;\n  byte bVar13;\n  int local_60;\n  undefined4 local_4c;\n  byte local_48 [39];\n  byte local_21;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar13 = 0;\n  uStack_14 = 0x399e9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  __stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);\n  if (__stream != (FILE *)0x0) {\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }\n  if (param_5 != (undefined4 *)0x0) {\n    *param_5 = "can\'t open file";\n  }\n  goto LAB_00039aaa;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }\n  bVar11 = false;\n  bVar12 = (!bVar10 && !bVar12) == bVar10;\n  if (bVar12) {\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }\n  iVar1 = 0x16;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-1";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar12 = (!bVar11 && !bVar12) == bVar11;\n  if (bVar12) goto LAB_00039c10;\nLAB_00039b3e:\n  iVar1 = 0x14;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  pcVar3 = "PuTTY key format too new";\n  if ((!bVar10 && !bVar12) != bVar10) {\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }\n  goto LAB_00039a69;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\n  goto LAB_00039c7d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }\nLAB_00039da5:\n  pcVar3 = "file format error";\n  bVar12 = param_4 != (int *)0x0;\n  fclose(__stream);\n  if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;\n  goto LAB_00039a8d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\nLAB_00039c7d:\n  pcVar3 = "file format error";\nLAB_00039a69:\n  fclose(__stream);\n  bVar12 = false;\n  local_60 = 0;\n  if (param_5 != (undefined4 *)0x0) {\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }\nLAB_00039aaa:\n  iVar1 = 0;\nLAB_00039aac:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_0004d450();\n  }\n  return iVar1;\n}" (primitive_type "int") (function_declarator "FUN_000399e0(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,\n                undefined4 *param_5)" (identifier "FUN_000399e0") (parameter_list "(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,\n                undefined4 *param_5)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 *param_2" (type_identifier "undefined4") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined4 *param_3" (type_identifier "undefined4") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "int *param_4" (primitive_type "int") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "undefined4 *param_5" (type_identifier "undefined4") (pointer_declarator "*param_5" (* "*") (identifier "param_5"))) () ")"))) (compound_statement "{\n  FILE *__stream;\n  int iVar1;\n  uint uVar2;\n  char *pcVar3;\n  size_t sVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  int in_GS_OFFSET;\n  bool bVar10;\n  bool bVar11;\n  bool bVar12;\n  byte bVar13;\n  int local_60;\n  undefined4 local_4c;\n  byte local_48 [39];\n  byte local_21;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar13 = 0;\n  uStack_14 = 0x399e9;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  __stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);\n  if (__stream != (FILE *)0x0) {\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }\n  if (param_5 != (undefined4 *)0x0) {\n    *param_5 = "can\'t open file";\n  }\n  goto LAB_00039aaa;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }\n  bVar11 = false;\n  bVar12 = (!bVar10 && !bVar12) == bVar10;\n  if (bVar12) {\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }\n  iVar1 = 0x16;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-1";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar12 = (!bVar11 && !bVar12) == bVar11;\n  if (bVar12) goto LAB_00039c10;\nLAB_00039b3e:\n  iVar1 = 0x14;\n  pbVar8 = local_48;\n  pbVar9 = (byte *)"PuTTY-User-Key-File-";\n  do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);\n  pcVar3 = "PuTTY key format too new";\n  if ((!bVar10 && !bVar12) != bVar10) {\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }\n  goto LAB_00039a69;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\n  goto LAB_00039c7d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }\nLAB_00039da5:\n  pcVar3 = "file format error";\n  bVar12 = param_4 != (int *)0x0;\n  fclose(__stream);\n  if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;\n  goto LAB_00039a8d;\n  while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }\n  if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }\nLAB_00039c7d:\n  pcVar3 = "file format error";\nLAB_00039a69:\n  fclose(__stream);\n  bVar12 = false;\n  local_60 = 0;\n  if (param_5 != (undefined4 *)0x0) {\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }\nLAB_00039aaa:\n  iVar1 = 0;\nLAB_00039aac:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_0004d450();\n  }\n  return iVar1;\n}" ({ "{") (declaration "FILE *__stream;" (type_identifier "FILE") (pointer_declarator "*__stream" (* "*") (identifier "__stream")) (; ";")) (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "char *pcVar3;" (primitive_type "char") (pointer_declarator "*pcVar3" (* "*") (identifier "pcVar3")) (; ";")) (declaration "size_t sVar4;" (primitive_type "size_t") (identifier "sVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "undefined4 uVar7;" (type_identifier "undefined4") (identifier "uVar7") (; ";")) (declaration "byte *pbVar8;" (type_identifier "byte") (pointer_declarator "*pbVar8" (* "*") (identifier "pbVar8")) (; ";")) (declaration "byte *pbVar9;" (type_identifier "byte") (pointer_declarator "*pbVar9" (* "*") (identifier "pbVar9")) (; ";")) (declaration "int in_GS_OFFSET;" (primitive_type "int") (identifier "in_GS_OFFSET") (; ";")) (declaration "bool bVar10;" (primitive_type "bool") (identifier "bVar10") (; ";")) (declaration "bool bVar11;" (primitive_type "bool") (identifier "bVar11") (; ";")) (declaration "bool bVar12;" (primitive_type "bool") (identifier "bVar12") (; ";")) (declaration "byte bVar13;" (type_identifier "byte") (identifier "bVar13") (; ";")) (declaration "int local_60;" (primitive_type "int") (identifier "local_60") (; ";")) (declaration "undefined4 local_4c;" (type_identifier "undefined4") (identifier "local_4c") (; ";")) (declaration "byte local_48 [39];" (type_identifier "byte") (array_declarator "local_48 [39]" (identifier "local_48") ([ "[") (number_literal "39") (] "]")) (; ";")) (declaration "byte local_21;" (type_identifier "byte") (identifier "local_21") (; ";")) (declaration "int local_20;" (primitive_type "int") (identifier "local_20") (; ";")) (declaration "undefined4 uStack_14;" (type_identifier "undefined4") (identifier "uStack_14") (; ";")) (expression_statement "bVar13 = 0;" (assignment_expression "bVar13 = 0" (identifier "bVar13") (= "=") (number_literal "0")) (; ";")) (expression_statement "uStack_14 = 0x399e9;" (assignment_expression "uStack_14 = 0x399e9" (identifier "uStack_14") (= "=") (number_literal "0x399e9")) (; ";")) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (= "=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "__stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);" (assignment_expression "__stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0)" (identifier "__stream") (= "=") (cast_expression "(FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0)" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0004a6a0(param_1,&DAT_000585ef,0)" (identifier "FUN_0004a6a0") (argument_list "(param_1,&DAT_000585ef,0)" (( "(") (identifier "param_1") (, ",") (pointer_expression "&DAT_000585ef" (& "&") (identifier "DAT_000585ef")) (, ",") (number_literal "0") () ")"))))) (; ";")) (if_statement "if (__stream != (FILE *)0x0) {\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }" (if "if") (parenthesized_expression "(__stream != (FILE *)0x0)" (( "(") (binary_expression "__stream != (FILE *)0x0" (identifier "__stream") (!= "!=") (cast_expression "(FILE *)0x0" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    iVar1 = FUN_000382f0();\n    if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }\n    fclose(__stream);\n    goto LAB_00039aac;\n  }" ({ "{") (expression_statement "iVar1 = FUN_000382f0();" (assignment_expression "iVar1 = FUN_000382f0()" (identifier "iVar1") (= "=") (call_expression "FUN_000382f0()" (identifier "FUN_000382f0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar1 == 9) {\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }\n    else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }" (if "if") (parenthesized_expression "(iVar1 == 9)" (( "(") (binary_expression "iVar1 == 9" (identifier "iVar1") (== "==") (number_literal "9")) () ")")) (compound_statement "{\n      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);\n    }" ({ "{") (expression_statement "iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);" (assignment_expression "iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5)" (identifier "iVar1") (= "=") (call_expression "FUN_00039360(__stream,param_2,param_3,param_4,param_5)" (identifier "FUN_00039360") (argument_list "(__stream,param_2,param_3,param_4,param_5)" (( "(") (identifier "__stream") (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "param_5") () ")")))) (; ";")) (} "}")) (else_clause "else {\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }" (else "else") (compound_statement "{\n      if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }\n      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);\n    }" ({ "{") (if_statement "if (iVar1 != 10) {\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }" (if "if") (parenthesized_expression "(iVar1 != 10)" (( "(") (binary_expression "iVar1 != 10" (identifier "iVar1") (!= "!=") (number_literal "10")) () ")")) (compound_statement "{\n        if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }\n        goto LAB_00039a63;\n      }" ({ "{") (if_statement "if (iVar1 == 3) {\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }" (if "if") (parenthesized_expression "(iVar1 == 3)" (( "(") (binary_expression "iVar1 == 3" (identifier "iVar1") (== "==") (number_literal "3")) () ")")) (compound_statement "{\n          pbVar8 = local_48;\n          do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );\n        }" ({ "{") (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" (identifier "pbVar8") (= "=") (identifier "local_48")) (; ";")) (do_statement "do {\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          } while( true );" (do "do") (compound_statement "{\n            iVar1 = fgetc(__stream);\n            uVar2 = iVar1 + 1;\n            bVar12 = uVar2 == 0xe;\n            if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }\n            bVar10 = pbVar8 < &local_21;\n            bVar12 = pbVar8 == &local_21;\n            if (bVar12) goto LAB_00039b3e;\n            *pbVar8 = (byte)iVar1;\n            pbVar8 = pbVar8 + 1;\n          }" ({ "{") (expression_statement "iVar1 = fgetc(__stream);" (assignment_expression "iVar1 = fgetc(__stream)" (identifier "iVar1") (= "=") (call_expression "fgetc(__stream)" (identifier "fgetc") (argument_list "(__stream)" (( "(") (identifier "__stream") () ")")))) (; ";")) (expression_statement "uVar2 = iVar1 + 1;" (assignment_expression "uVar2 = iVar1 + 1" (identifier "uVar2") (= "=") (binary_expression "iVar1 + 1" (identifier "iVar1") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "bVar12 = uVar2 == 0xe;" (assignment_expression "bVar12 = uVar2 == 0xe" (identifier "bVar12") (= "=") (binary_expression "uVar2 == 0xe" (identifier "uVar2") (== "==") (number_literal "0xe"))) (; ";")) (if_statement "if (uVar2 < 0xf) {\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }\n            else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" (if "if") (parenthesized_expression "(uVar2 < 0xf)" (( "(") (binary_expression "uVar2 < 0xf" (identifier "uVar2") (< "<") (number_literal "0xf")) () ")")) (compound_statement "{\n              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;\n              if (bVar10) goto LAB_00039b3e;\n            }" ({ "{") (expression_statement "bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;" (assignment_expression "bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0" (identifier "bVar10") (= "=") (binary_expression "(0x4801U >> (uVar2 & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (uVar2 & 0x1f) & 1)" (( "(") (binary_expression "0x4801U >> (uVar2 & 0x1f) & 1" (binary_expression "0x4801U >> (uVar2 & 0x1f)" (number_literal "0x4801U") (>> ">>") (parenthesized_expression "(uVar2 & 0x1f)" (( "(") (binary_expression "uVar2 & 0x1f" (identifier "uVar2") (& "&") (number_literal "0x1f")) () ")"))) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0"))) (; ";")) (if_statement "if (bVar10) goto LAB_00039b3e;" (if "if") (parenthesized_expression "(bVar10)" (( "(") (identifier "bVar10") () ")")) (goto_statement "goto LAB_00039b3e;" (goto "goto") (statement_identifier "LAB_00039b3e") (; ";"))) (} "}")) (else_clause "else if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" (else "else") (if_statement "if (iVar1 == 0x3a) {\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" (if "if") (parenthesized_expression "(iVar1 == 0x3a)" (( "(") (binary_expression "iVar1 == 0x3a" (identifier "iVar1") (== "==") (number_literal "0x3a")) () ")")) (compound_statement "{\n              uVar2 = fgetc(__stream);\n              bVar10 = uVar2 < 0x20;\n              bVar12 = uVar2 == 0x20;\n              if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }\n              goto LAB_00039b3e;\n            }" ({ "{") (expression_statement "uVar2 = fgetc(__stream);" (assignment_expression "uVar2 = fgetc(__stream)" (identifier "uVar2") (= "=") (call_expression "fgetc(__stream)" (identifier "fgetc") (argument_list "(__stream)" (( "(") (identifier "__stream") () ")")))) (; ";")) (expression_statement "bVar10 = uVar2 < 0x20;" (assignment_expression "bVar10 = uVar2 < 0x20" (identifier "bVar10") (= "=") (binary_expression "uVar2 < 0x20" (identifier "uVar2") (< "<") (number_literal "0x20"))) (; ";")) (expression_statement "bVar12 = uVar2 == 0x20;" (assignment_expression "bVar12 = uVar2 == 0x20" (identifier "bVar12") (= "=") (binary_expression "uVar2 == 0x20" (identifier "uVar2") (== "==") (number_literal "0x20"))) (; ";")) (if_statement "if (bVar12) {\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }" (if "if") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (compound_statement "{\n                *pbVar8 = 0;\n                iVar1 = 0x16;\n                pbVar8 = local_48;\n                pbVar9 = (byte *)"PuTTY-User-Key-File-2";\n                goto code_r0x00039be7;\n              }" ({ "{") (expression_statement "*pbVar8 = 0;" (assignment_expression "*pbVar8 = 0" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar1 = 0x16;" (assignment_expression "iVar1 = 0x16" (identifier "iVar1") (= "=") (number_literal "0x16")) (; ";")) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" (identifier "pbVar8") (= "=") (identifier "local_48")) (; ";")) (expression_statement "pbVar9 = (byte *)"PuTTY-User-Key-File-2";" (assignment_expression "pbVar9 = (byte *)"PuTTY-User-Key-File-2"" (identifier "pbVar9") (= "=") (cast_expression "(byte *)"PuTTY-User-Key-File-2"" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal ""PuTTY-User-Key-File-2"" (" """) (string_content "PuTTY-User-Key-File-2") (" """)))) (; ";")) (goto_statement "goto code_r0x00039be7;" (goto "goto") (statement_identifier "code_r0x00039be7") (; ";")) (} "}"))) (goto_statement "goto LAB_00039b3e;" (goto "goto") (statement_identifier "LAB_00039b3e") (; ";")) (} "}"))))) (expression_statement "bVar10 = pbVar8 < &local_21;" (assignment_expression "bVar10 = pbVar8 < &local_21" (identifier "bVar10") (= "=") (binary_expression "pbVar8 < &local_21" (identifier "pbVar8") (< "<") (pointer_expression "&local_21" (& "&") (identifier "local_21")))) (; ";")) (expression_statement "bVar12 = pbVar8 == &local_21;" (assignment_expression "bVar12 = pbVar8 == &local_21" (identifier "bVar12") (= "=") (binary_expression "pbVar8 == &local_21" (identifier "pbVar8") (== "==") (pointer_expression "&local_21" (& "&") (identifier "local_21")))) (; ";")) (if_statement "if (bVar12) goto LAB_00039b3e;" (if "if") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (goto_statement "goto LAB_00039b3e;" (goto "goto") (statement_identifier "LAB_00039b3e") (; ";"))) (expression_statement "*pbVar8 = (byte)iVar1;" (assignment_expression "*pbVar8 = (byte)iVar1" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (= "=") (cast_expression "(byte)iVar1" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "iVar1"))) (; ";")) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + 1" (identifier "pbVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}"))) (goto_statement "goto LAB_00039a63;" (goto "goto") (statement_identifier "LAB_00039a63") (; ";")) (} "}"))) (expression_statement "iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);" (assignment_expression "iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5)" (identifier "iVar1") (= "=") (call_expression "FUN_000397e0(__stream,param_2,param_3,param_4,param_5)" (identifier "FUN_000397e0") (argument_list "(__stream,param_2,param_3,param_4,param_5)" (( "(") (identifier "__stream") (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "param_5") () ")")))) (; ";")) (} "}")))) (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" (identifier "fclose") (argument_list "(__stream)" (( "(") (identifier "__stream") () ")"))) (; ";")) (goto_statement "goto LAB_00039aac;" (goto "goto") (statement_identifier "LAB_00039aac") (; ";")) (} "}"))) (if_statement "if (param_5 != (undefined4 *)0x0) {\n    *param_5 = "can\'t open file";\n  }" (if "if") (parenthesized_expression "(param_5 != (undefined4 *)0x0)" (( "(") (binary_expression "param_5 != (undefined4 *)0x0" (identifier "param_5") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    *param_5 = "can\'t open file";\n  }" ({ "{") (expression_statement "*param_5 = "can\'t open file";" (assignment_expression "*param_5 = "can\'t open file"" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (= "=") (string_literal ""can\'t open file"" (" """) (string_content "can") (escape_sequence "\'") (string_content "t open file") (" """))) (; ";")) (} "}"))) (goto_statement "goto LAB_00039aaa;" (goto "goto") (statement_identifier "LAB_00039aaa") (; ";")) (while_statement "while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar12) break;\ncode_r0x00039be7:\n    if (iVar1 == 0) break;\n  }" ({ "{") (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" (identifier "iVar1") (= "=") (binary_expression "iVar1 + -1" (identifier "iVar1") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar10 = *pbVar8 < *pbVar9;" (assignment_expression "bVar10 = *pbVar8 < *pbVar9" (identifier "bVar10") (= "=") (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (< "<") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "bVar12 = *pbVar8 == *pbVar9;" (assignment_expression "bVar12 = *pbVar8 == *pbVar9" (identifier "bVar12") (= "=") (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (== "==") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" (identifier "pbVar8") (+ "+") (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar13")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" (identifier "pbVar9") (= "=") (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" (identifier "pbVar9") (+ "+") (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar13")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (!bVar12) break;" (if "if") (parenthesized_expression "(!bVar12)" (( "(") (unary_expression "!bVar12" (! "!") (identifier "bVar12")) () ")")) (break_statement "break;" (break "break") (; ";"))) (labeled_statement "code_r0x00039be7:\n    if (iVar1 == 0) break;" (statement_identifier "code_r0x00039be7") (: ":") (if_statement "if (iVar1 == 0) break;" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";")))) (} "}"))) (expression_statement "bVar11 = false;" (assignment_expression "bVar11 = false" (identifier "bVar11") (= "=") (false "false")) (; ";")) (expression_statement "bVar12 = (!bVar10 && !bVar12) == bVar10;" (assignment_expression "bVar12 = (!bVar10 && !bVar12) == bVar10" (identifier "bVar12") (= "=") (binary_expression "(!bVar10 && !bVar12) == bVar10" (parenthesized_expression "(!bVar10 && !bVar12)" (( "(") (binary_expression "!bVar10 && !bVar12" (unary_expression "!bVar10" (! "!") (identifier "bVar10")) (&& "&&") (unary_expression "!bVar12" (! "!") (identifier "bVar12"))) () ")")) (== "==") (identifier "bVar10"))) (; ";")) (if_statement "if (bVar12) {\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }" (if "if") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (compound_statement "{\nLAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();\n    if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }\n    goto LAB_00039c7d;\n  }" ({ "{") (labeled_statement "LAB_00039c10:\n    pcVar3 = (char *)FUN_000375b0();" (statement_identifier "LAB_00039c10") (: ":") (expression_statement "pcVar3 = (char *)FUN_000375b0();" (assignment_expression "pcVar3 = (char *)FUN_000375b0()" (identifier "pcVar3") (= "=") (cast_expression "(char *)FUN_000375b0()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000375b0()" (identifier "FUN_000375b0") (argument_list "()" (( "(") () ")"))))) (; ";"))) (if_statement "if (pcVar3 != (char *)0x0) {\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }" (if "if") (parenthesized_expression "(pcVar3 != (char *)0x0)" (( "(") (binary_expression "pcVar3 != (char *)0x0" (identifier "pcVar3") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      sVar4 = strlen(pcVar3);\n      iVar5 = FUN_000381e0(sVar4,pcVar3);\n      FUN_0001ed20(pcVar3);\n      if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }\n    }" ({ "{") (expression_statement "sVar4 = strlen(pcVar3);" (assignment_expression "sVar4 = strlen(pcVar3)" (identifier "sVar4") (= "=") (call_expression "strlen(pcVar3)" (identifier "strlen") (argument_list "(pcVar3)" (( "(") (identifier "pcVar3") () ")")))) (; ";")) (expression_statement "iVar5 = FUN_000381e0(sVar4,pcVar3);" (assignment_expression "iVar5 = FUN_000381e0(sVar4,pcVar3)" (identifier "iVar5") (= "=") (call_expression "FUN_000381e0(sVar4,pcVar3)" (identifier "FUN_000381e0") (argument_list "(sVar4,pcVar3)" (( "(") (identifier "sVar4") (, ",") (identifier "pcVar3") () ")")))) (; ";")) (expression_statement "FUN_0001ed20(pcVar3);" (call_expression "FUN_0001ed20(pcVar3)" (identifier "FUN_0001ed20") (argument_list "(pcVar3)" (( "(") (identifier "pcVar3") () ")"))) (; ";")) (if_statement "if (iVar5 != 0) {\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }" (if "if") (parenthesized_expression "(iVar5 != 0)" (( "(") (binary_expression "iVar5 != 0" (identifier "iVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        pbVar8 = local_48;\n        do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );\n      }" ({ "{") (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" (identifier "pbVar8") (= "=") (identifier "local_48")) (; ";")) (do_statement "do {\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        } while( true );" (do "do") (compound_statement "{\n          iVar1 = fgetc(__stream);\n          if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }\n          if (pbVar8 == &local_21) break;\n          *pbVar8 = (byte)iVar1;\n          pbVar8 = pbVar8 + 1;\n        }" ({ "{") (expression_statement "iVar1 = fgetc(__stream);" (assignment_expression "iVar1 = fgetc(__stream)" (identifier "iVar1") (= "=") (call_expression "fgetc(__stream)" (identifier "fgetc") (argument_list "(__stream)" (( "(") (identifier "__stream") () ")")))) (; ";")) (if_statement "if (iVar1 + 1U < 0xf) {\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }\n          else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" (if "if") (parenthesized_expression "(iVar1 + 1U < 0xf)" (( "(") (binary_expression "iVar1 + 1U < 0xf" (binary_expression "iVar1 + 1U" (identifier "iVar1") (+ "+") (number_literal "1U")) (< "<") (number_literal "0xf")) () ")")) (compound_statement "{\n            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n          }" ({ "{") (if_statement "if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;" (if "if") (parenthesized_expression "((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0)" (( "(") (binary_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1)" (( "(") (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f) & 1" (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f)" (number_literal "0x4801U") (>> ">>") (parenthesized_expression "(iVar1 + 1U & 0x1f)" (( "(") (binary_expression "iVar1 + 1U & 0x1f" (binary_expression "iVar1 + 1U" (identifier "iVar1") (+ "+") (number_literal "1U")) (& "&") (number_literal "0x1f")) () ")"))) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (} "}")) (else_clause "else if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" (else "else") (if_statement "if (iVar1 == 0x3a) {\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" (if "if") (parenthesized_expression "(iVar1 == 0x3a)" (( "(") (binary_expression "iVar1 == 0x3a" (identifier "iVar1") (== "==") (number_literal "0x3a")) () ")")) (compound_statement "{\n            uVar2 = fgetc(__stream);\n            bVar12 = uVar2 < 0x20;\n            bVar10 = uVar2 == 0x20;\n            if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }\n            break;\n          }" ({ "{") (expression_statement "uVar2 = fgetc(__stream);" (assignment_expression "uVar2 = fgetc(__stream)" (identifier "uVar2") (= "=") (call_expression "fgetc(__stream)" (identifier "fgetc") (argument_list "(__stream)" (( "(") (identifier "__stream") () ")")))) (; ";")) (expression_statement "bVar12 = uVar2 < 0x20;" (assignment_expression "bVar12 = uVar2 < 0x20" (identifier "bVar12") (= "=") (binary_expression "uVar2 < 0x20" (identifier "uVar2") (< "<") (number_literal "0x20"))) (; ";")) (expression_statement "bVar10 = uVar2 == 0x20;" (assignment_expression "bVar10 = uVar2 == 0x20" (identifier "bVar10") (= "=") (binary_expression "uVar2 == 0x20" (identifier "uVar2") (== "==") (number_literal "0x20"))) (; ";")) (if_statement "if (bVar10) {\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }" (if "if") (parenthesized_expression "(bVar10)" (( "(") (identifier "bVar10") () ")")) (compound_statement "{\n              *pbVar8 = 0;\n              iVar1 = 0xb;\n              pbVar8 = local_48;\n              pbVar9 = (byte *)"Encryption";\n              goto code_r0x00039cb3;\n            }" ({ "{") (expression_statement "*pbVar8 = 0;" (assignment_expression "*pbVar8 = 0" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar1 = 0xb;" (assignment_expression "iVar1 = 0xb" (identifier "iVar1") (= "=") (number_literal "0xb")) (; ";")) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" (identifier "pbVar8") (= "=") (identifier "local_48")) (; ";")) (expression_statement "pbVar9 = (byte *)"Encryption";" (assignment_expression "pbVar9 = (byte *)"Encryption"" (identifier "pbVar9") (= "=") (cast_expression "(byte *)"Encryption"" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal ""Encryption"" (" """) (string_content "Encryption") (" """)))) (; ";")) (goto_statement "goto code_r0x00039cb3;" (goto "goto") (statement_identifier "code_r0x00039cb3") (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";")) (} "}"))))) (if_statement "if (pbVar8 == &local_21) break;" (if "if") (parenthesized_expression "(pbVar8 == &local_21)" (( "(") (binary_expression "pbVar8 == &local_21" (identifier "pbVar8") (== "==") (pointer_expression "&local_21" (& "&") (identifier "local_21"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "*pbVar8 = (byte)iVar1;" (assignment_expression "*pbVar8 = (byte)iVar1" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (= "=") (cast_expression "(byte)iVar1" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "iVar1"))) (; ";")) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + 1" (identifier "pbVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}"))) (} "}"))) (goto_statement "goto LAB_00039c7d;" (goto "goto") (statement_identifier "LAB_00039c7d") (; ";")) (} "}"))) (expression_statement "iVar1 = 0x16;" (assignment_expression "iVar1 = 0x16" (identifier "iVar1") (= "=") (number_literal "0x16")) (; ";")) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" (identifier "pbVar8") (= "=") (identifier "local_48")) (; ";")) (expression_statement "pbVar9 = (byte *)"PuTTY-User-Key-File-1";" (assignment_expression "pbVar9 = (byte *)"PuTTY-User-Key-File-1"" (identifier "pbVar9") (= "=") (cast_expression "(byte *)"PuTTY-User-Key-File-1"" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal ""PuTTY-User-Key-File-1"" (" """) (string_content "PuTTY-User-Key-File-1") (" """)))) (; ";")) (do_statement "do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);" (do "do") (compound_statement "{\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar11 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  }" ({ "{") (if_statement "if (iVar1 == 0) break;" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" (identifier "iVar1") (= "=") (binary_expression "iVar1 + -1" (identifier "iVar1") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar11 = *pbVar8 < *pbVar9;" (assignment_expression "bVar11 = *pbVar8 < *pbVar9" (identifier "bVar11") (= "=") (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (< "<") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "bVar12 = *pbVar8 == *pbVar9;" (assignment_expression "bVar12 = *pbVar8 == *pbVar9" (identifier "bVar12") (= "=") (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (== "==") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" (identifier "pbVar8") (+ "+") (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar13")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" (identifier "pbVar9") (= "=") (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" (identifier "pbVar9") (+ "+") (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar13")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (; ";")) (expression_statement "bVar10 = false;" (assignment_expression "bVar10 = false" (identifier "bVar10") (= "=") (false "false")) (; ";")) (expression_statement "bVar12 = (!bVar11 && !bVar12) == bVar11;" (assignment_expression "bVar12 = (!bVar11 && !bVar12) == bVar11" (identifier "bVar12") (= "=") (binary_expression "(!bVar11 && !bVar12) == bVar11" (parenthesized_expression "(!bVar11 && !bVar12)" (( "(") (binary_expression "!bVar11 && !bVar12" (unary_expression "!bVar11" (! "!") (identifier "bVar11")) (&& "&&") (unary_expression "!bVar12" (! "!") (identifier "bVar12"))) () ")")) (== "==") (identifier "bVar11"))) (; ";")) (if_statement "if (bVar12) goto LAB_00039c10;" (if "if") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (goto_statement "goto LAB_00039c10;" (goto "goto") (statement_identifier "LAB_00039c10") (; ";"))) (labeled_statement "LAB_00039b3e:\n  iVar1 = 0x14;" (statement_identifier "LAB_00039b3e") (: ":") (expression_statement "iVar1 = 0x14;" (assignment_expression "iVar1 = 0x14" (identifier "iVar1") (= "=") (number_literal "0x14")) (; ";"))) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" (identifier "pbVar8") (= "=") (identifier "local_48")) (; ";")) (expression_statement "pbVar9 = (byte *)"PuTTY-User-Key-File-";" (assignment_expression "pbVar9 = (byte *)"PuTTY-User-Key-File-"" (identifier "pbVar9") (= "=") (cast_expression "(byte *)"PuTTY-User-Key-File-"" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal ""PuTTY-User-Key-File-"" (" """) (string_content "PuTTY-User-Key-File-") (" """)))) (; ";")) (do_statement "do {\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  } while (bVar12);" (do "do") (compound_statement "{\n    if (iVar1 == 0) break;\n    iVar1 = iVar1 + -1;\n    bVar10 = *pbVar8 < *pbVar9;\n    bVar12 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n  }" ({ "{") (if_statement "if (iVar1 == 0) break;" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" (identifier "iVar1") (= "=") (binary_expression "iVar1 + -1" (identifier "iVar1") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar10 = *pbVar8 < *pbVar9;" (assignment_expression "bVar10 = *pbVar8 < *pbVar9" (identifier "bVar10") (= "=") (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (< "<") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "bVar12 = *pbVar8 == *pbVar9;" (assignment_expression "bVar12 = *pbVar8 == *pbVar9" (identifier "bVar12") (= "=") (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (== "==") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" (identifier "pbVar8") (+ "+") (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar13")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" (identifier "pbVar9") (= "=") (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" (identifier "pbVar9") (+ "+") (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar13")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (; ";")) (expression_statement "pcVar3 = "PuTTY key format too new";" (assignment_expression "pcVar3 = "PuTTY key format too new"" (identifier "pcVar3") (= "=") (string_literal ""PuTTY key format too new"" (" """) (string_content "PuTTY key format too new") (" """))) (; ";")) (if_statement "if ((!bVar10 && !bVar12) != bVar10) {\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }" (if "if") (parenthesized_expression "((!bVar10 && !bVar12) != bVar10)" (( "(") (binary_expression "(!bVar10 && !bVar12) != bVar10" (parenthesized_expression "(!bVar10 && !bVar12)" (( "(") (binary_expression "!bVar10 && !bVar12" (unary_expression "!bVar10" (! "!") (identifier "bVar10")) (&& "&&") (unary_expression "!bVar12" (! "!") (identifier "bVar12"))) () ")")) (!= "!=") (identifier "bVar10")) () ")")) (compound_statement "{\nLAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";\n  }" ({ "{") (labeled_statement "LAB_00039a63:\n    pcVar3 = "not a PuTTY SSH-2 private key";" (statement_identifier "LAB_00039a63") (: ":") (expression_statement "pcVar3 = "not a PuTTY SSH-2 private key";" (assignment_expression "pcVar3 = "not a PuTTY SSH-2 private key"" (identifier "pcVar3") (= "=") (string_literal ""not a PuTTY SSH-2 private key"" (" """) (string_content "not a PuTTY SSH-2 private key") (" """))) (; ";"))) (} "}"))) (goto_statement "goto LAB_00039a69;" (goto "goto") (statement_identifier "LAB_00039a69") (; ";")) (while_statement "while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039cb3:\n    if (iVar1 == 0) break;\n  }" ({ "{") (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" (identifier "iVar1") (= "=") (binary_expression "iVar1 + -1" (identifier "iVar1") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar12 = *pbVar8 < *pbVar9;" (assignment_expression "bVar12 = *pbVar8 < *pbVar9" (identifier "bVar12") (= "=") (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (< "<") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "bVar10 = *pbVar8 == *pbVar9;" (assignment_expression "bVar10 = *pbVar8 == *pbVar9" (identifier "bVar10") (= "=") (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (== "==") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" (identifier "pbVar8") (+ "+") (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar13")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" (identifier "pbVar9") (= "=") (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" (identifier "pbVar9") (+ "+") (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar13")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (!bVar10) break;" (if "if") (parenthesized_expression "(!bVar10)" (( "(") (unary_expression "!bVar10" (! "!") (identifier "bVar10")) () ")")) (break_statement "break;" (break "break") (; ";"))) (labeled_statement "code_r0x00039cb3:\n    if (iVar1 == 0) break;" (statement_identifier "code_r0x00039cb3") (: ":") (if_statement "if (iVar1 == 0) break;" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";")))) (} "}"))) (if_statement "if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }" (if "if") (parenthesized_expression "(((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0))" (( "(") (binary_expression "((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)" (parenthesized_expression "((!bVar12 && !bVar10) == bVar12)" (( "(") (binary_expression "(!bVar12 && !bVar10) == bVar12" (parenthesized_expression "(!bVar12 && !bVar10)" (( "(") (binary_expression "!bVar12 && !bVar10" (unary_expression "!bVar12" (! "!") (identifier "bVar12")) (&& "&&") (unary_expression "!bVar10" (! "!") (identifier "bVar10"))) () ")")) (== "==") (identifier "bVar12")) () ")")) (&& "&&") (parenthesized_expression "(iVar1 = FUN_000375b0(), iVar1 != 0)" (( "(") (comma_expression "iVar1 = FUN_000375b0(), iVar1 != 0" (assignment_expression "iVar1 = FUN_000375b0()" (identifier "iVar1") (= "=") (call_expression "FUN_000375b0()" (identifier "FUN_000375b0") (argument_list "()" (( "(") () ")")))) (, ",") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    FUN_0001ed20(iVar1);\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }" ({ "{") (expression_statement "FUN_0001ed20(iVar1);" (call_expression "FUN_0001ed20(iVar1)" (identifier "FUN_0001ed20") (argument_list "(iVar1)" (( "(") (identifier "iVar1") () ")"))) (; ";")) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" (identifier "pbVar8") (= "=") (identifier "local_48")) (; ";")) (do_statement "do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );" (do "do") (compound_statement "{\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }\n      if (pbVar8 == &local_21) break;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    }" ({ "{") (expression_statement "iVar1 = fgetc(__stream);" (assignment_expression "iVar1 = fgetc(__stream)" (identifier "iVar1") (= "=") (call_expression "fgetc(__stream)" (identifier "fgetc") (argument_list "(__stream)" (( "(") (identifier "__stream") () ")")))) (; ";")) (if_statement "if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" (if "if") (parenthesized_expression "(iVar1 + 1U < 0xf)" (( "(") (binary_expression "iVar1 + 1U < 0xf" (binary_expression "iVar1 + 1U" (identifier "iVar1") (+ "+") (number_literal "1U")) (< "<") (number_literal "0xf")) () ")")) (compound_statement "{\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;\n      }" ({ "{") (if_statement "if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;" (if "if") (parenthesized_expression "((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0)" (( "(") (binary_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1)" (( "(") (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f) & 1" (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f)" (number_literal "0x4801U") (>> ">>") (parenthesized_expression "(iVar1 + 1U & 0x1f)" (( "(") (binary_expression "iVar1 + 1U & 0x1f" (binary_expression "iVar1 + 1U" (identifier "iVar1") (+ "+") (number_literal "1U")) (& "&") (number_literal "0x1f")) () ")"))) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (} "}")) (else_clause "else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" (else "else") (if_statement "if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" (if "if") (parenthesized_expression "(iVar1 == 0x3a)" (( "(") (binary_expression "iVar1 == 0x3a" (identifier "iVar1") (== "==") (number_literal "0x3a")) () ")")) (compound_statement "{\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }\n        break;\n      }" ({ "{") (expression_statement "uVar2 = fgetc(__stream);" (assignment_expression "uVar2 = fgetc(__stream)" (identifier "uVar2") (= "=") (call_expression "fgetc(__stream)" (identifier "fgetc") (argument_list "(__stream)" (( "(") (identifier "__stream") () ")")))) (; ";")) (expression_statement "bVar12 = uVar2 < 0x20;" (assignment_expression "bVar12 = uVar2 < 0x20" (identifier "bVar12") (= "=") (binary_expression "uVar2 < 0x20" (identifier "uVar2") (< "<") (number_literal "0x20"))) (; ";")) (expression_statement "bVar10 = uVar2 == 0x20;" (assignment_expression "bVar10 = uVar2 == 0x20" (identifier "bVar10") (= "=") (binary_expression "uVar2 == 0x20" (identifier "uVar2") (== "==") (number_literal "0x20"))) (; ";")) (if_statement "if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }" (if "if") (parenthesized_expression "(bVar10)" (( "(") (identifier "bVar10") () ")")) (compound_statement "{\n          *pbVar8 = 0;\n          iVar1 = 8;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Comment";\n          goto code_r0x00039d39;\n        }" ({ "{") (expression_statement "*pbVar8 = 0;" (assignment_expression "*pbVar8 = 0" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar1 = 8;" (assignment_expression "iVar1 = 8" (identifier "iVar1") (= "=") (number_literal "8")) (; ";")) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" (identifier "pbVar8") (= "=") (identifier "local_48")) (; ";")) (expression_statement "pbVar9 = (byte *)"Comment";" (assignment_expression "pbVar9 = (byte *)"Comment"" (identifier "pbVar9") (= "=") (cast_expression "(byte *)"Comment"" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal ""Comment"" (" """) (string_content "Comment") (" """)))) (; ";")) (goto_statement "goto code_r0x00039d39;" (goto "goto") (statement_identifier "code_r0x00039d39") (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";")) (} "}"))))) (if_statement "if (pbVar8 == &local_21) break;" (if "if") (parenthesized_expression "(pbVar8 == &local_21)" (( "(") (binary_expression "pbVar8 == &local_21" (identifier "pbVar8") (== "==") (pointer_expression "&local_21" (& "&") (identifier "local_21"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "*pbVar8 = (byte)iVar1;" (assignment_expression "*pbVar8 = (byte)iVar1" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (= "=") (cast_expression "(byte)iVar1" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "iVar1"))) (; ";")) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + 1" (identifier "pbVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}"))) (goto_statement "goto LAB_00039c7d;" (goto "goto") (statement_identifier "LAB_00039c7d") (; ";")) (while_statement "while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039dfc:\n    if (iVar1 == 0) break;\n  }" ({ "{") (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" (identifier "iVar1") (= "=") (binary_expression "iVar1 + -1" (identifier "iVar1") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar12 = *pbVar8 < *pbVar9;" (assignment_expression "bVar12 = *pbVar8 < *pbVar9" (identifier "bVar12") (= "=") (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (< "<") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "bVar10 = *pbVar8 == *pbVar9;" (assignment_expression "bVar10 = *pbVar8 == *pbVar9" (identifier "bVar10") (= "=") (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (== "==") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" (identifier "pbVar8") (+ "+") (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar13")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" (identifier "pbVar9") (= "=") (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" (identifier "pbVar9") (+ "+") (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar13")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (!bVar10) break;" (if "if") (parenthesized_expression "(!bVar10)" (( "(") (unary_expression "!bVar10" (! "!") (identifier "bVar10")) () ")")) (break_statement "break;" (break "break") (; ";"))) (labeled_statement "code_r0x00039dfc:\n    if (iVar1 == 0) break;" (statement_identifier "code_r0x00039dfc") (: ":") (if_statement "if (iVar1 == 0) break;" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";")))) (} "}"))) (if_statement "if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }" (if "if") (parenthesized_expression "(((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0))" (( "(") (binary_expression "((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)" (parenthesized_expression "((!bVar12 && !bVar10) == bVar12)" (( "(") (binary_expression "(!bVar12 && !bVar10) == bVar12" (parenthesized_expression "(!bVar12 && !bVar10)" (( "(") (binary_expression "!bVar12 && !bVar10" (unary_expression "!bVar12" (! "!") (identifier "bVar12")) (&& "&&") (unary_expression "!bVar10" (! "!") (identifier "bVar10"))) () ")")) (== "==") (identifier "bVar12")) () ")")) (&& "&&") (parenthesized_expression "(iVar1 = FUN_000375b0(), iVar1 != 0)" (( "(") (comma_expression "iVar1 = FUN_000375b0(), iVar1 != 0" (assignment_expression "iVar1 = FUN_000375b0()" (identifier "iVar1") (= "=") (call_expression "FUN_000375b0()" (identifier "FUN_000375b0") (argument_list "()" (( "(") () ")")))) (, ",") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    iVar6 = FUN_000374c0();\n    FUN_0001ed20(iVar1);\n    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }\n  }" ({ "{") (expression_statement "iVar6 = FUN_000374c0();" (assignment_expression "iVar6 = FUN_000374c0()" (identifier "iVar6") (= "=") (call_expression "FUN_000374c0()" (identifier "FUN_000374c0") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "FUN_0001ed20(iVar1);" (call_expression "FUN_0001ed20(iVar1)" (identifier "FUN_0001ed20") (argument_list "(iVar1)" (( "(") (identifier "iVar1") () ")"))) (; ";")) (if_statement "if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }" (if "if") (parenthesized_expression "((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0))" (( "(") (binary_expression "(-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)" (parenthesized_expression "(-1 < iVar6)" (( "(") (binary_expression "-1 < iVar6" (number_literal "-1") (< "<") (identifier "iVar6")) () ")")) (&& "&&") (parenthesized_expression "(iVar1 = FUN_00037690(), iVar1 != 0)" (( "(") (comma_expression "iVar1 = FUN_00037690(), iVar1 != 0" (assignment_expression "iVar1 = FUN_00037690()" (identifier "iVar1") (= "=") (call_expression "FUN_00037690()" (identifier "FUN_00037690") (argument_list "()" (( "(") () ")")))) (, ",") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n      fclose(__stream);\n      if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }\n      if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }\n      goto LAB_00039aac;\n    }" ({ "{") (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" (identifier "fclose") (argument_list "(__stream)" (( "(") (identifier "__stream") () ")"))) (; ";")) (if_statement "if (param_3 != (undefined4 *)0x0) {\n        *param_3 = local_4c;\n      }" (if "if") (parenthesized_expression "(param_3 != (undefined4 *)0x0)" (( "(") (binary_expression "param_3 != (undefined4 *)0x0" (identifier "param_3") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        *param_3 = local_4c;\n      }" ({ "{") (expression_statement "*param_3 = local_4c;" (assignment_expression "*param_3 = local_4c" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "local_4c")) (; ";")) (} "}"))) (if_statement "if (param_2 != (undefined4 *)0x0) {\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }" (if "if") (parenthesized_expression "(param_2 != (undefined4 *)0x0)" (( "(") (binary_expression "param_2 != (undefined4 *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));\n        *param_2 = uVar7;\n      }" ({ "{") (expression_statement "uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));" (assignment_expression "uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30))" (identifier "uVar7") (= "=") (call_expression "FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30))" (identifier "FUN_0001dbc0") (argument_list "(*(undefined4 *)(iVar5 + 0x30))" (( "(") (pointer_expression "*(undefined4 *)(iVar5 + 0x30)" (* "*") (cast_expression "(undefined4 *)(iVar5 + 0x30)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0x30)" (( "(") (binary_expression "iVar5 + 0x30" (identifier "iVar5") (+ "+") (number_literal "0x30")) () ")")))) () ")")))) (; ";")) (expression_statement "*param_2 = uVar7;" (assignment_expression "*param_2 = uVar7" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (identifier "uVar7")) (; ";")) (} "}"))) (goto_statement "goto LAB_00039aac;" (goto "goto") (statement_identifier "LAB_00039aac") (; ";")) (} "}"))) (} "}"))) (labeled_statement "LAB_00039da5:\n  pcVar3 = "file format error";" (statement_identifier "LAB_00039da5") (: ":") (expression_statement "pcVar3 = "file format error";" (assignment_expression "pcVar3 = "file format error"" (identifier "pcVar3") (= "=") (string_literal ""file format error"" (" """) (string_content "file format error") (" """))) (; ";"))) (expression_statement "bVar12 = param_4 != (int *)0x0;" (assignment_expression "bVar12 = param_4 != (int *)0x0" (identifier "bVar12") (= "=") (binary_expression "param_4 != (int *)0x0" (identifier "param_4") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) (; ";")) (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" (identifier "fclose") (argument_list "(__stream)" (( "(") (identifier "__stream") () ")"))) (; ";")) (if_statement "if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;" (if "if") (parenthesized_expression "(param_5 != (undefined4 *)0x0)" (( "(") (binary_expression "param_5 != (undefined4 *)0x0" (identifier "param_5") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_00039a87;" (goto "goto") (statement_identifier "LAB_00039a87") (; ";"))) (goto_statement "goto LAB_00039a8d;" (goto "goto") (statement_identifier "LAB_00039a8d") (; ";")) (while_statement "while( true ) {\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    iVar1 = iVar1 + -1;\n    bVar12 = *pbVar8 < *pbVar9;\n    bVar10 = *pbVar8 == *pbVar9;\n    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;\n    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;\n    if (!bVar10) break;\ncode_r0x00039d39:\n    if (iVar1 == 0) break;\n  }" ({ "{") (expression_statement "iVar1 = iVar1 + -1;" (assignment_expression "iVar1 = iVar1 + -1" (identifier "iVar1") (= "=") (binary_expression "iVar1 + -1" (identifier "iVar1") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar12 = *pbVar8 < *pbVar9;" (assignment_expression "bVar12 = *pbVar8 < *pbVar9" (identifier "bVar12") (= "=") (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (< "<") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "bVar10 = *pbVar8 == *pbVar9;" (assignment_expression "bVar10 = *pbVar8 == *pbVar9" (identifier "bVar10") (= "=") (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (== "==") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9")))) (; ";")) (expression_statement "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar13 * -2" (identifier "pbVar8") (+ "+") (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar13")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1" (identifier "pbVar9") (= "=") (binary_expression "pbVar9 + (uint)bVar13 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar13 * -2" (identifier "pbVar9") (+ "+") (binary_expression "(uint)bVar13 * -2" (cast_expression "(uint)bVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar13")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (!bVar10) break;" (if "if") (parenthesized_expression "(!bVar10)" (( "(") (unary_expression "!bVar10" (! "!") (identifier "bVar10")) () ")")) (break_statement "break;" (break "break") (; ";"))) (labeled_statement "code_r0x00039d39:\n    if (iVar1 == 0) break;" (statement_identifier "code_r0x00039d39") (: ":") (if_statement "if (iVar1 == 0) break;" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";")))) (} "}"))) (if_statement "if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }" (if "if") (parenthesized_expression "(((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0))" (( "(") (binary_expression "((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)" (parenthesized_expression "((!bVar12 && !bVar10) == bVar12)" (( "(") (binary_expression "(!bVar12 && !bVar10) == bVar12" (parenthesized_expression "(!bVar12 && !bVar10)" (( "(") (binary_expression "!bVar12 && !bVar10" (unary_expression "!bVar12" (! "!") (identifier "bVar12")) (&& "&&") (unary_expression "!bVar10" (! "!") (identifier "bVar10"))) () ")")) (== "==") (identifier "bVar12")) () ")")) (&& "&&") (parenthesized_expression "(local_60 = FUN_000375b0(), local_60 != 0)" (( "(") (comma_expression "local_60 = FUN_000375b0(), local_60 != 0" (assignment_expression "local_60 = FUN_000375b0()" (identifier "local_60") (= "=") (call_expression "FUN_000375b0()" (identifier "FUN_000375b0") (argument_list "()" (( "(") () ")")))) (, ",") (binary_expression "local_60 != 0" (identifier "local_60") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }\n    pbVar8 = local_48;\n    do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );\n  }" ({ "{") (if_statement "if (param_4 == (int *)0x0) {\n      FUN_0001ed20(local_60);\n    }\n    else {\n      *param_4 = local_60;\n    }" (if "if") (parenthesized_expression "(param_4 == (int *)0x0)" (( "(") (binary_expression "param_4 == (int *)0x0" (identifier "param_4") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      FUN_0001ed20(local_60);\n    }" ({ "{") (expression_statement "FUN_0001ed20(local_60);" (call_expression "FUN_0001ed20(local_60)" (identifier "FUN_0001ed20") (argument_list "(local_60)" (( "(") (identifier "local_60") () ")"))) (; ";")) (} "}")) (else_clause "else {\n      *param_4 = local_60;\n    }" (else "else") (compound_statement "{\n      *param_4 = local_60;\n    }" ({ "{") (expression_statement "*param_4 = local_60;" (assignment_expression "*param_4 = local_60" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "local_60")) (; ";")) (} "}")))) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" (identifier "pbVar8") (= "=") (identifier "local_48")) (; ";")) (do_statement "do {\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    } while( true );" (do "do") (compound_statement "{\n      iVar1 = fgetc(__stream);\n      if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }\n      if (pbVar8 == &local_21) goto LAB_00039da5;\n      *pbVar8 = (byte)iVar1;\n      pbVar8 = pbVar8 + 1;\n    }" ({ "{") (expression_statement "iVar1 = fgetc(__stream);" (assignment_expression "iVar1 = fgetc(__stream)" (identifier "iVar1") (= "=") (call_expression "fgetc(__stream)" (identifier "fgetc") (argument_list "(__stream)" (( "(") (identifier "__stream") () ")")))) (; ";")) (if_statement "if (iVar1 + 1U < 0xf) {\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }\n      else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" (if "if") (parenthesized_expression "(iVar1 + 1U < 0xf)" (( "(") (binary_expression "iVar1 + 1U < 0xf" (binary_expression "iVar1 + 1U" (identifier "iVar1") (+ "+") (number_literal "1U")) (< "<") (number_literal "0xf")) () ")")) (compound_statement "{\n        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;\n      }" ({ "{") (if_statement "if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;" (if "if") (parenthesized_expression "((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0)" (( "(") (binary_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0" (parenthesized_expression "(0x4801U >> (iVar1 + 1U & 0x1f) & 1)" (( "(") (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f) & 1" (binary_expression "0x4801U >> (iVar1 + 1U & 0x1f)" (number_literal "0x4801U") (>> ">>") (parenthesized_expression "(iVar1 + 1U & 0x1f)" (( "(") (binary_expression "iVar1 + 1U & 0x1f" (binary_expression "iVar1 + 1U" (identifier "iVar1") (+ "+") (number_literal "1U")) (& "&") (number_literal "0x1f")) () ")"))) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00039da5;" (goto "goto") (statement_identifier "LAB_00039da5") (; ";"))) (} "}")) (else_clause "else if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" (else "else") (if_statement "if (iVar1 == 0x3a) {\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" (if "if") (parenthesized_expression "(iVar1 == 0x3a)" (( "(") (binary_expression "iVar1 == 0x3a" (identifier "iVar1") (== "==") (number_literal "0x3a")) () ")")) (compound_statement "{\n        uVar2 = fgetc(__stream);\n        bVar12 = uVar2 < 0x20;\n        bVar10 = uVar2 == 0x20;\n        if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }\n        goto LAB_00039da5;\n      }" ({ "{") (expression_statement "uVar2 = fgetc(__stream);" (assignment_expression "uVar2 = fgetc(__stream)" (identifier "uVar2") (= "=") (call_expression "fgetc(__stream)" (identifier "fgetc") (argument_list "(__stream)" (( "(") (identifier "__stream") () ")")))) (; ";")) (expression_statement "bVar12 = uVar2 < 0x20;" (assignment_expression "bVar12 = uVar2 < 0x20" (identifier "bVar12") (= "=") (binary_expression "uVar2 < 0x20" (identifier "uVar2") (< "<") (number_literal "0x20"))) (; ";")) (expression_statement "bVar10 = uVar2 == 0x20;" (assignment_expression "bVar10 = uVar2 == 0x20" (identifier "bVar10") (= "=") (binary_expression "uVar2 == 0x20" (identifier "uVar2") (== "==") (number_literal "0x20"))) (; ";")) (if_statement "if (bVar10) {\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }" (if "if") (parenthesized_expression "(bVar10)" (( "(") (identifier "bVar10") () ")")) (compound_statement "{\n          *pbVar8 = 0;\n          iVar1 = 0xd;\n          pbVar8 = local_48;\n          pbVar9 = (byte *)"Public-Lines";\n          goto code_r0x00039dfc;\n        }" ({ "{") (expression_statement "*pbVar8 = 0;" (assignment_expression "*pbVar8 = 0" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar1 = 0xd;" (assignment_expression "iVar1 = 0xd" (identifier "iVar1") (= "=") (number_literal "0xd")) (; ";")) (expression_statement "pbVar8 = local_48;" (assignment_expression "pbVar8 = local_48" (identifier "pbVar8") (= "=") (identifier "local_48")) (; ";")) (expression_statement "pbVar9 = (byte *)"Public-Lines";" (assignment_expression "pbVar9 = (byte *)"Public-Lines"" (identifier "pbVar9") (= "=") (cast_expression "(byte *)"Public-Lines"" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal ""Public-Lines"" (" """) (string_content "Public-Lines") (" """)))) (; ";")) (goto_statement "goto code_r0x00039dfc;" (goto "goto") (statement_identifier "code_r0x00039dfc") (; ";")) (} "}"))) (goto_statement "goto LAB_00039da5;" (goto "goto") (statement_identifier "LAB_00039da5") (; ";")) (} "}"))))) (if_statement "if (pbVar8 == &local_21) goto LAB_00039da5;" (if "if") (parenthesized_expression "(pbVar8 == &local_21)" (( "(") (binary_expression "pbVar8 == &local_21" (identifier "pbVar8") (== "==") (pointer_expression "&local_21" (& "&") (identifier "local_21"))) () ")")) (goto_statement "goto LAB_00039da5;" (goto "goto") (statement_identifier "LAB_00039da5") (; ";"))) (expression_statement "*pbVar8 = (byte)iVar1;" (assignment_expression "*pbVar8 = (byte)iVar1" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (= "=") (cast_expression "(byte)iVar1" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "iVar1"))) (; ";")) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + 1" (identifier "pbVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}"))) (labeled_statement "LAB_00039c7d:\n  pcVar3 = "file format error";" (statement_identifier "LAB_00039c7d") (: ":") (expression_statement "pcVar3 = "file format error";" (assignment_expression "pcVar3 = "file format error"" (identifier "pcVar3") (= "=") (string_literal ""file format error"" (" """) (string_content "file format error") (" """))) (; ";"))) (labeled_statement "LAB_00039a69:\n  fclose(__stream);" (statement_identifier "LAB_00039a69") (: ":") (expression_statement "fclose(__stream);" (call_expression "fclose(__stream)" (identifier "fclose") (argument_list "(__stream)" (( "(") (identifier "__stream") () ")"))) (; ";"))) (expression_statement "bVar12 = false;" (assignment_expression "bVar12 = false" (identifier "bVar12") (= "=") (false "false")) (; ";")) (expression_statement "local_60 = 0;" (assignment_expression "local_60 = 0" (identifier "local_60") (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_5 != (undefined4 *)0x0) {\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }" (if "if") (parenthesized_expression "(param_5 != (undefined4 *)0x0)" (( "(") (binary_expression "param_5 != (undefined4 *)0x0" (identifier "param_5") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\nLAB_00039a87:\n    *param_5 = pcVar3;\nLAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }\n  }" ({ "{") (labeled_statement "LAB_00039a87:\n    *param_5 = pcVar3;" (statement_identifier "LAB_00039a87") (: ":") (expression_statement "*param_5 = pcVar3;" (assignment_expression "*param_5 = pcVar3" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (= "=") (identifier "pcVar3")) (; ";"))) (labeled_statement "LAB_00039a8d:\n    if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }" (statement_identifier "LAB_00039a8d") (: ":") (if_statement "if (bVar12) {\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }" (if "if") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (compound_statement "{\n      FUN_0001ed20(local_60);\n      *param_4 = 0;\n    }" ({ "{") (expression_statement "FUN_0001ed20(local_60);" (call_expression "FUN_0001ed20(local_60)" (identifier "FUN_0001ed20") (argument_list "(local_60)" (( "(") (identifier "local_60") () ")"))) (; ";")) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (number_literal "0")) (; ";")) (} "}")))) (} "}"))) (labeled_statement "LAB_00039aaa:\n  iVar1 = 0;" (statement_identifier "LAB_00039aaa") (: ":") (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" (identifier "iVar1") (= "=") (number_literal "0")) (; ";"))) (labeled_statement "LAB_00039aac:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_0004d450();\n  }" (statement_identifier "LAB_00039aac") (: ":") (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_0004d450();\n  }" (if "if") (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" (( "(") (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (!= "!=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (compound_statement "{\n                    \n    FUN_0004d450();\n  }" ({ "{") (expression_statement "FUN_0004d450();" (call_expression "FUN_0004d450()" (identifier "FUN_0004d450") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (return_statement "return iVar1;" (return "return") (identifier "iVar1") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

type_1 * function_1
                  (type_2 *filename,char **var_28,int *var_27,char **var_30,
                  char **var_13)

{
  int var_32;
  type_3 *var_3;
  int var_5;
  type_4 var_8;
  char *var_17;
  size_t namelen;
  type_5 *var_21;
  type_1 *ret;
  type_1 *var_26;
  type_6 *var_9;
  type_6 *var_14;
  int var_1;
  bool var_15;
  bool var_22;
  bool var_23;
  type_6 bVar12;
  char *var_31;
  int public_blob_len;
  char var_10 [40];
  
  bVar12 = 0;
  var_32 = *(int *)(var_1 + 0x14);
  var_3 = (type_3 *)var_2(filename,"rb",0);
  if (var_3 != (type_3 *)0x0) {
    var_5 = var_4((type_3 *)var_3);
    if (var_5 == 9) {
      var_26 = var_6((type_3 *)var_3,var_28,var_27,var_30,var_13);
    }
    else {
      if (var_5 != 10) {
        if (var_5 == 3) {
          var_9 = (type_6 *)var_10;
          do {
            var_5 = var_7(var_3);
            var_8 = var_5 + 1;
            var_23 = var_8 == 0xe;
            if (var_8 < 0xf) {
              var_15 = (0x4801U >> (var_8 & 0x1f) & 1) != 0;
              if (var_15) goto LAB_00039b3e;
            }
            else if (var_5 == 0x3a) {
              var_8 = var_7(var_3);
              var_15 = var_8 < 0x20;
              var_23 = var_8 == 0x20;
              if (var_23) {
                *var_9 = 0;
                var_5 = 0x16;
                var_9 = (type_6 *)var_10;
                var_14 = (type_6 *)"PuTTY-User-Key-File-2";
                goto code_r0x00039be7;
              }
              goto LAB_00039b3e;
            }
            var_15 = var_9 < var_10 + 0x27;
            var_23 = var_9 == (type_6 *)(var_10 + 0x27);
            if (var_23) goto LAB_00039b3e;
            *var_9 = (type_6)var_5;
            var_9 = var_9 + 1;
          } while( true );
        }
        goto LAB_00039a63;
      }
      var_26 = var_11((type_3 *)var_3,var_28,var_27,var_30,var_13);
    }
    var_12(var_3);
    goto LAB_00039aac;
  }
  if (var_13 != (char **)0x0) {
    *var_13 = "can\'t open file";
  }
  goto LAB_00039aaa;
  while( true ) {
    var_5 = var_5 + -1;
    var_15 = *var_9 < *var_14;
    var_23 = *var_9 == *var_14;
    var_9 = var_9 + (type_4)bVar12 * -2 + 1;
    var_14 = var_14 + (type_4)bVar12 * -2 + 1;
    if (!var_23) break;
code_r0x00039be7:
    if (var_5 == 0) break;
  }
  var_22 = false;
  var_23 = (!var_15 && !var_23) == var_15;
  if (var_23) {
LAB_00039c10:
    var_17 = var_16((type_3 *)var_3);
    if (var_17 != (char *)0x0) {
      namelen = var_18(var_17);
      var_21 = var_19(namelen,var_17);
      var_20(var_17);
      if (var_21 != (type_5 *)0x0) {
        var_9 = (type_6 *)var_10;
        do {
          var_5 = var_7(var_3);
          if (var_5 + 1U < 0xf) {
            if ((0x4801U >> (var_5 + 1U & 0x1f) & 1) != 0) break;
          }
          else if (var_5 == 0x3a) {
            var_8 = var_7(var_3);
            var_23 = var_8 < 0x20;
            var_15 = var_8 == 0x20;
            if (var_15) {
              *var_9 = 0;
              var_5 = 0xb;
              var_9 = (type_6 *)var_10;
              var_14 = (type_6 *)"Encryption";
              goto code_r0x00039cb3;
            }
            break;
          }
          if (var_9 == (type_6 *)(var_10 + 0x27)) break;
          *var_9 = (type_6)var_5;
          var_9 = var_9 + 1;
        } while( true );
      }
    }
    goto LAB_00039c7d;
  }
  var_5 = 0x16;
  var_9 = (type_6 *)var_10;
  var_14 = (type_6 *)"PuTTY-User-Key-File-1";
  do {
    if (var_5 == 0) break;
    var_5 = var_5 + -1;
    var_22 = *var_9 < *var_14;
    var_23 = *var_9 == *var_14;
    var_9 = var_9 + (type_4)bVar12 * -2 + 1;
    var_14 = var_14 + (type_4)bVar12 * -2 + 1;
  } while (var_23);
  var_15 = false;
  var_23 = (!var_22 && !var_23) == var_22;
  if (var_23) goto LAB_00039c10;
LAB_00039b3e:
  var_5 = 0x14;
  var_9 = (type_6 *)var_10;
  var_14 = (type_6 *)"PuTTY-User-Key-File-";
  do {
    if (var_5 == 0) break;
    var_5 = var_5 + -1;
    var_15 = *var_9 < *var_14;
    var_23 = *var_9 == *var_14;
    var_9 = var_9 + (type_4)bVar12 * -2 + 1;
    var_14 = var_14 + (type_4)bVar12 * -2 + 1;
  } while (var_23);
  var_17 = "PuTTY key format too new";
  if ((!var_15 && !var_23) != var_15) {
LAB_00039a63:
    var_17 = "not a PuTTY SSH-2 private key";
  }
  goto LAB_00039a69;
  while( true ) {
    var_5 = var_5 + -1;
    var_23 = *var_9 < *var_14;
    var_15 = *var_9 == *var_14;
    var_9 = var_9 + (type_4)bVar12 * -2 + 1;
    var_14 = var_14 + (type_4)bVar12 * -2 + 1;
    if (!var_15) break;
code_r0x00039cb3:
    if (var_5 == 0) break;
  }
  if (((!var_23 && !var_15) == var_23) &&
     (var_17 = var_16((type_3 *)var_3), var_17 != (char *)0x0)) {
    var_20(var_17);
    var_9 = (type_6 *)var_10;
    do {
      var_5 = var_7(var_3);
      if (var_5 + 1U < 0xf) {
        if ((0x4801U >> (var_5 + 1U & 0x1f) & 1) != 0) break;
      }
      else if (var_5 == 0x3a) {
        var_8 = var_7(var_3);
        var_23 = var_8 < 0x20;
        var_15 = var_8 == 0x20;
        if (var_15) {
          *var_9 = 0;
          var_5 = 8;
          var_9 = (type_6 *)var_10;
          var_14 = (type_6 *)"Comment";
          goto code_r0x00039d39;
        }
        break;
      }
      if (var_9 == (type_6 *)(var_10 + 0x27)) break;
      *var_9 = (type_6)var_5;
      var_9 = var_9 + 1;
    } while( true );
  }
  goto LAB_00039c7d;
  while( true ) {
    var_5 = var_5 + -1;
    var_23 = *var_9 < *var_14;
    var_15 = *var_9 == *var_14;
    var_9 = var_9 + (type_4)bVar12 * -2 + 1;
    var_14 = var_14 + (type_4)bVar12 * -2 + 1;
    if (!var_15) break;
code_r0x00039dfc:
    if (var_5 == 0) break;
  }
  if (((!var_23 && !var_15) == var_23) &&
     (var_17 = var_16((type_3 *)var_3), var_17 != (char *)0x0)) {
    var_5 = var_24(var_17);
    var_20(var_17);
    if ((-1 < var_5) &&
       (var_26 = var_25((type_3 *)var_3,var_5,&public_blob_len), var_26 != (type_1 *)0x0)) {
      var_12(var_3);
      if (var_27 != (int *)0x0) {
        *var_27 = public_blob_len;
      }
      if (var_28 != (char **)0x0) {
        var_17 = var_29(var_21->name);
        *var_28 = var_17;
      }
      goto LAB_00039aac;
    }
  }
LAB_00039da5:
  var_17 = "file format error";
  var_23 = var_30 != (char **)0x0;
  var_12(var_3);
  if (var_13 != (char **)0x0) goto LAB_00039a87;
  goto LAB_00039a8d;
  while( true ) {
    var_5 = var_5 + -1;
    var_23 = *var_9 < *var_14;
    var_15 = *var_9 == *var_14;
    var_9 = var_9 + (type_4)bVar12 * -2 + 1;
    var_14 = var_14 + (type_4)bVar12 * -2 + 1;
    if (!var_15) break;
code_r0x00039d39:
    if (var_5 == 0) break;
  }
  if (((!var_23 && !var_15) == var_23) &&
     (var_31 = var_16((type_3 *)var_3), var_31 != (char *)0x0)) {
    if (var_30 == (char **)0x0) {
      var_20(var_31);
    }
    else {
      *var_30 = var_31;
    }
    var_9 = (type_6 *)var_10;
    do {
      var_5 = var_7(var_3);
      if (var_5 + 1U < 0xf) {
        if ((0x4801U >> (var_5 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;
      }
      else if (var_5 == 0x3a) {
        var_8 = var_7(var_3);
        var_23 = var_8 < 0x20;
        var_15 = var_8 == 0x20;
        if (var_15) {
          *var_9 = 0;
          var_5 = 0xd;
          var_9 = (type_6 *)var_10;
          var_14 = (type_6 *)"Public-Lines";
          goto code_r0x00039dfc;
        }
        goto LAB_00039da5;
      }
      if (var_9 == (type_6 *)(var_10 + 0x27)) goto LAB_00039da5;
      *var_9 = (type_6)var_5;
      var_9 = var_9 + 1;
    } while( true );
  }
LAB_00039c7d:
  var_17 = "file format error";
LAB_00039a69:
  var_12(var_3);
  var_23 = false;
  var_31 = (char *)0x0;
  if (var_13 != (char **)0x0) {
LAB_00039a87:
    *var_13 = var_17;
LAB_00039a8d:
    if (var_23) {
      var_20(var_31);
      *var_30 = (char *)0x0;
    }
  }
LAB_00039aaa:
  var_26 = (type_1 *)0x0;
LAB_00039aac:
  if (var_32 != *(int *)(var_1 + 0x14)) {
                    /* WARNING: Subroutine does not return */
    var_33();
  }
  return var_26;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier)))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (string_literal (string_content))))) (goto_statement label: (statement_identifier)))) (goto_statement label: (statement_identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (true))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier)))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (string_literal (string_content) (escape_sequence) (string_content)))))) (goto_statement label: (statement_identifier)) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (unary_expression argument: (identifier))) consequence: (break_statement)) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement))))) (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier)))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) right: (number_literal))) right: (number_literal))) consequence: (break_statement))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (string_literal (string_content))))) (goto_statement label: (statement_identifier)))) (break_statement))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (identifier)))) consequence: (break_statement)) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (true))))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (string_literal (string_content))))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))) condition: (parenthesized_expression (identifier))) (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier)))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (string_literal (string_content))))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))) condition: (parenthesized_expression (identifier))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content))))))) (goto_statement label: (statement_identifier)) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (unary_expression argument: (identifier))) consequence: (break_statement)) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) right: (number_literal))) right: (number_literal))) consequence: (break_statement))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (string_literal (string_content))))) (goto_statement label: (statement_identifier)))) (break_statement))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (identifier)))) consequence: (break_statement)) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (true))))) (goto_statement label: (statement_identifier)) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (unary_expression argument: (identifier))) consequence: (break_statement)) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))))) (goto_statement label: (statement_identifier)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier)) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (unary_expression argument: (identifier))) consequence: (break_statement)) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) right: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (string_literal (string_content))))) (goto_statement label: (statement_identifier)))) (goto_statement label: (statement_identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (identifier)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (true))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content))))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (return_statement (identifier)))))

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int MASKED(undefined4 param_1,undefined4 *param_2,undefined4 *param_3,int *param_4,
                undefined4 *param_5)

{
  FILE *__stream;
  int iVar1;
  uint uVar2;
  char *pcVar3;
  size_t sVar4;
  int iVar5;
  int iVar6;
  undefined4 uVar7;
  byte *pbVar8;
  byte *pbVar9;
  int in_GS_OFFSET;
  bool bVar10;
  bool bVar11;
  bool bVar12;
  byte bVar13;
  int local_60;
  undefined4 local_4c;
  byte local_48 [39];
  byte local_21;
  int local_20;
  undefined4 uStack_14;
  
  bVar13 = 0;
  uStack_14 = 0x399e9;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  __stream = (FILE *)FUN_0004a6a0(param_1,&DAT_000585ef,0);
  if (__stream != (FILE *)0x0) {
    iVar1 = FUN_000382f0();
    if (iVar1 == 9) {
      iVar1 = FUN_00039360(__stream,param_2,param_3,param_4,param_5);
    }
    else {
      if (iVar1 != 10) {
        if (iVar1 == 3) {
          pbVar8 = local_48;
          do {
            iVar1 = fgetc(__stream);
            uVar2 = iVar1 + 1;
            bVar12 = uVar2 == 0xe;
            if (uVar2 < 0xf) {
              bVar10 = (0x4801U >> (uVar2 & 0x1f) & 1) != 0;
              if (bVar10) goto LAB_00039b3e;
            }
            else if (iVar1 == 0x3a) {
              uVar2 = fgetc(__stream);
              bVar10 = uVar2 < 0x20;
              bVar12 = uVar2 == 0x20;
              if (bVar12) {
                *pbVar8 = 0;
                iVar1 = 0x16;
                pbVar8 = local_48;
                pbVar9 = (byte *)"PuTTY-User-Key-File-2";
                goto code_r0x00039be7;
              }
              goto LAB_00039b3e;
            }
            bVar10 = pbVar8 < &local_21;
            bVar12 = pbVar8 == &local_21;
            if (bVar12) goto LAB_00039b3e;
            *pbVar8 = (byte)iVar1;
            pbVar8 = pbVar8 + 1;
          } while( true );
        }
        goto LAB_00039a63;
      }
      iVar1 = FUN_000397e0(__stream,param_2,param_3,param_4,param_5);
    }
    fclose(__stream);
    goto LAB_00039aac;
  }
  if (param_5 != (undefined4 *)0x0) {
    *param_5 = "can\'t open file";
  }
  goto LAB_00039aaa;
  while( true ) {
    iVar1 = iVar1 + -1;
    bVar10 = *pbVar8 < *pbVar9;
    bVar12 = *pbVar8 == *pbVar9;
    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;
    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;
    if (!bVar12) break;
code_r0x00039be7:
    if (iVar1 == 0) break;
  }
  bVar11 = false;
  bVar12 = (!bVar10 && !bVar12) == bVar10;
  if (bVar12) {
LAB_00039c10:
    pcVar3 = (char *)FUN_000375b0();
    if (pcVar3 != (char *)0x0) {
      sVar4 = strlen(pcVar3);
      iVar5 = FUN_000381e0(sVar4,pcVar3);
      FUN_0001ed20(pcVar3);
      if (iVar5 != 0) {
        pbVar8 = local_48;
        do {
          iVar1 = fgetc(__stream);
          if (iVar1 + 1U < 0xf) {
            if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;
          }
          else if (iVar1 == 0x3a) {
            uVar2 = fgetc(__stream);
            bVar12 = uVar2 < 0x20;
            bVar10 = uVar2 == 0x20;
            if (bVar10) {
              *pbVar8 = 0;
              iVar1 = 0xb;
              pbVar8 = local_48;
              pbVar9 = (byte *)"Encryption";
              goto code_r0x00039cb3;
            }
            break;
          }
          if (pbVar8 == &local_21) break;
          *pbVar8 = (byte)iVar1;
          pbVar8 = pbVar8 + 1;
        } while( true );
      }
    }
    goto LAB_00039c7d;
  }
  iVar1 = 0x16;
  pbVar8 = local_48;
  pbVar9 = (byte *)"PuTTY-User-Key-File-1";
  do {
    if (iVar1 == 0) break;
    iVar1 = iVar1 + -1;
    bVar11 = *pbVar8 < *pbVar9;
    bVar12 = *pbVar8 == *pbVar9;
    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;
    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;
  } while (bVar12);
  bVar10 = false;
  bVar12 = (!bVar11 && !bVar12) == bVar11;
  if (bVar12) goto LAB_00039c10;
LAB_00039b3e:
  iVar1 = 0x14;
  pbVar8 = local_48;
  pbVar9 = (byte *)"PuTTY-User-Key-File-";
  do {
    if (iVar1 == 0) break;
    iVar1 = iVar1 + -1;
    bVar10 = *pbVar8 < *pbVar9;
    bVar12 = *pbVar8 == *pbVar9;
    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;
    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;
  } while (bVar12);
  pcVar3 = "PuTTY key format too new";
  if ((!bVar10 && !bVar12) != bVar10) {
LAB_00039a63:
    pcVar3 = "not a PuTTY SSH-2 private key";
  }
  goto LAB_00039a69;
  while( true ) {
    iVar1 = iVar1 + -1;
    bVar12 = *pbVar8 < *pbVar9;
    bVar10 = *pbVar8 == *pbVar9;
    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;
    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;
    if (!bVar10) break;
code_r0x00039cb3:
    if (iVar1 == 0) break;
  }
  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {
    FUN_0001ed20(iVar1);
    pbVar8 = local_48;
    do {
      iVar1 = fgetc(__stream);
      if (iVar1 + 1U < 0xf) {
        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) break;
      }
      else if (iVar1 == 0x3a) {
        uVar2 = fgetc(__stream);
        bVar12 = uVar2 < 0x20;
        bVar10 = uVar2 == 0x20;
        if (bVar10) {
          *pbVar8 = 0;
          iVar1 = 8;
          pbVar8 = local_48;
          pbVar9 = (byte *)"Comment";
          goto code_r0x00039d39;
        }
        break;
      }
      if (pbVar8 == &local_21) break;
      *pbVar8 = (byte)iVar1;
      pbVar8 = pbVar8 + 1;
    } while( true );
  }
  goto LAB_00039c7d;
  while( true ) {
    iVar1 = iVar1 + -1;
    bVar12 = *pbVar8 < *pbVar9;
    bVar10 = *pbVar8 == *pbVar9;
    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;
    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;
    if (!bVar10) break;
code_r0x00039dfc:
    if (iVar1 == 0) break;
  }
  if (((!bVar12 && !bVar10) == bVar12) && (iVar1 = FUN_000375b0(), iVar1 != 0)) {
    iVar6 = FUN_000374c0();
    FUN_0001ed20(iVar1);
    if ((-1 < iVar6) && (iVar1 = FUN_00037690(), iVar1 != 0)) {
      fclose(__stream);
      if (param_3 != (undefined4 *)0x0) {
        *param_3 = local_4c;
      }
      if (param_2 != (undefined4 *)0x0) {
        uVar7 = FUN_0001dbc0(*(undefined4 *)(iVar5 + 0x30));
        *param_2 = uVar7;
      }
      goto LAB_00039aac;
    }
  }
LAB_00039da5:
  pcVar3 = "file format error";
  bVar12 = param_4 != (int *)0x0;
  fclose(__stream);
  if (param_5 != (undefined4 *)0x0) goto LAB_00039a87;
  goto LAB_00039a8d;
  while( true ) {
    iVar1 = iVar1 + -1;
    bVar12 = *pbVar8 < *pbVar9;
    bVar10 = *pbVar8 == *pbVar9;
    pbVar8 = pbVar8 + (uint)bVar13 * -2 + 1;
    pbVar9 = pbVar9 + (uint)bVar13 * -2 + 1;
    if (!bVar10) break;
code_r0x00039d39:
    if (iVar1 == 0) break;
  }
  if (((!bVar12 && !bVar10) == bVar12) && (local_60 = FUN_000375b0(), local_60 != 0)) {
    if (param_4 == (int *)0x0) {
      FUN_0001ed20(local_60);
    }
    else {
      *param_4 = local_60;
    }
    pbVar8 = local_48;
    do {
      iVar1 = fgetc(__stream);
      if (iVar1 + 1U < 0xf) {
        if ((0x4801U >> (iVar1 + 1U & 0x1f) & 1) != 0) goto LAB_00039da5;
      }
      else if (iVar1 == 0x3a) {
        uVar2 = fgetc(__stream);
        bVar12 = uVar2 < 0x20;
        bVar10 = uVar2 == 0x20;
        if (bVar10) {
          *pbVar8 = 0;
          iVar1 = 0xd;
          pbVar8 = local_48;
          pbVar9 = (byte *)"Public-Lines";
          goto code_r0x00039dfc;
        }
        goto LAB_00039da5;
      }
      if (pbVar8 == &local_21) goto LAB_00039da5;
      *pbVar8 = (byte)iVar1;
      pbVar8 = pbVar8 + 1;
    } while( true );
  }
LAB_00039c7d:
  pcVar3 = "file format error";
LAB_00039a69:
  fclose(__stream);
  bVar12 = false;
  local_60 = 0;
  if (param_5 != (undefined4 *)0x0) {
LAB_00039a87:
    *param_5 = pcVar3;
LAB_00039a8d:
    if (bVar12) {
      FUN_0001ed20(local_60);
      *param_4 = 0;
    }
  }
LAB_00039aaa:
  iVar1 = 0;
LAB_00039aac:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    FUN_0004d450();
  }
  return iVar1;
}

