undefined4 FUN_00408408(char *param_1,int param_2)

{
  byte bVar1;
  ushort uVar2;
  int iVar3;
  FILE *__stream;
  size_t sVar4;
  size_t sVar5;
  char *pcVar6;
  uint uVar7;
  byte *pbVar8;
  uint uVar9;
  undefined4 uVar10;
  uint local_4f8;
  ushort local_4f2;
  uint local_4f0;
  byte local_4ec [16];
  byte local_4dc [16];
  byte abStack_4cc [4];
  stat sStack_4c8;
  char acStack_430 [1024];
  uint *local_30;
  byte *local_2c;
  
  iVar3 = stat(param_1,&sStack_4c8)   //possible issue identified - semgrep
  if (iVar3 < 0) {
    if (param_2 == 0) {
      return 0xffffffff;
    }
    pcVar6 = "Unable to get the info of \'%s\'\n";
  }
  else {
    __stream = fopen(param_1,"r+")   //possible issue identified - semgrep
    if (__stream != (FILE *)0x0) {
      if (param_2 != 0) {
        printf("FILE - %s (%d bytes)\n",param_1,sStack_4c8.st_blocks);
      }
      local_30 = &local_4f8;
      local_2c = abStack_4cc;
      uVar10 = 0xffffffff;
LAB_00408808:
      iVar3 = feof(__stream);
      if (((iVar3 == 0) && (iVar3 = ferror(__stream), iVar3 == 0)) &&
         (sVar4 = fread(local_30,0xc,1,__stream), uVar2 = local_4f2, sVar4 == 1)) {
        if (local_4f8 == 0x17a4a35e) {
          uVar7 = (uint)local_4f2;
          uVar9 = local_4f0 << 0x18 | local_4f0 >> 0x18 | local_4f0 >> 8 & 0xff00 |
                  (local_4f0 & 0xff00) << 8;
          if ((uVar9 == 0) || (sVar4 = fread(local_4ec,0x10,1,__stream), sVar4 == 1)) {   //possible issue identified - semgrep
            uVar7 = (uVar7 & 0xff) << 8 | (uint)(uVar2 >> 8);
            if (uVar7 < 0x401) {
              sVar4 = fread(acStack_430,1,uVar7,__stream)   //possible issue identified - semgrep
              if (sVar4 == uVar7) goto LAB_00408608;
              if (param_2 != 0) {
                pcVar6 = "Unable to read SEAMA META data!";
                goto LAB_004085f4;
              }
            }
            else if (param_2 != 0) {
              pcVar6 = "META data in SEAMA header is too large!";
              goto LAB_004085f4;
            }
          }
          else if (param_2 != 0) {
            pcVar6 = "Error reading checksum !";
            goto LAB_004085f4;
          }
        }
        else if (param_2 != 0) {
          pcVar6 = "Invalid SEAMA magic. Probably no more SEAMA!";
          goto LAB_004085f4;
        }
        goto LAB_0040889c;
      }
      if (param_2 == 0) goto LAB_0040889c;
      goto LAB_00408848;
    }
    if (param_2 == 0) {
      return 0xffffffff;
    }
    pcVar6 = "Unable to open \'%s\' for reading!\n";
  }
  printf(pcVar6,param_1);
  return 0xffffffff;
LAB_00408608:
  if (param_2 != 0) {
    puts("SEAMA ==========================================");
    printf("  magic      : %08x\n",
           local_4f8 << 0x18 | local_4f8 >> 0x18 | local_4f8 >> 8 & 0xff00 |
           (local_4f8 & 0xff00) << 8);
    printf("  meta size  : %d bytes\n",sVar4);
    for (uVar7 = 0; pcVar6 = acStack_430 + uVar7, uVar7 < sVar4; uVar7 = uVar7 + sVar5 + 1) {
      printf("  meta data  : %s\n",pcVar6);
      sVar5 = strlen(pcVar6);
    }
    printf("  image size : %d bytes\n",uVar9);
  }
  if (uVar9 != 0) {
    if (param_2 != 0) {
      printf("  checksum   : ");
      pbVar8 = local_4ec;
      do {
        bVar1 = *pbVar8;
        pbVar8 = pbVar8 + 1;
        printf("%02X",(uint)bVar1);
      } while (pbVar8 != local_4dc);
      putchar(10);
    }
    pbVar8 = local_4dc;
    FUN_004082bc(__stream,uVar9,pbVar8);
    if (param_2 != 0) {
      printf("  digest     : ");
      do {
        printf("%02X",(uint)*pbVar8);
        pbVar8 = pbVar8 + 1;
      } while (pbVar8 != local_2c);
      putchar(10);
    }
    iVar3 = memcmp(local_4ec,local_4dc,0x10);
    if (iVar3 != 0) {
      if (param_2 == 0) goto LAB_0040889c;
      pcVar6 = "!!ERROR!! checksum error !!";
LAB_004085f4:
      puts(pcVar6);
LAB_00408848:
      puts("================================================");
LAB_0040889c:
      fclose(__stream);
      return uVar10;
    }
    uVar10 = 0;
  }
  goto LAB_00408808;
}