/* WARNING: Removing unreachable block (ram,0x004059cc) */
/* WARNING: Heritage AFTER dead removal. Example location: r0x0041ce90 : 0x00404f54 */
/* WARNING: Restarted to delay deadcode elimination for space: ram */

int contemplate_data(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
                    double param_5,int param_6)

{
  double dVar1;
  bool bVar2;
  bool bVar3;
  bool bVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  undefined4 uVar8;
  double *pdVar9;
  double *pdVar10;
  double *pdVar11;
  int iVar12;
  double dVar13;
  double dVar14;
  double dVar15;
  uint uVar16;
  uint in_fcsr;
  int iVar17;
  int iVar18;
  double local_78 [2];
  undefined4 local_68;
  undefined4 local_64;
  double local_60;
  undefined4 local_58;
  undefined4 local_54;
  double local_50;
  int local_48;
  undefined4 *local_44;
  
  if (debug != 0) {
    printf("xontemplate %u %.1f %.1f %d\n",param_1,param_3,param_4,SUB84(param_5,0),
           (int)((ulonglong)param_5 >> 0x20),param_6);
  }
  iVar12 = DAT_0041d490;
  iVar17 = DAT_0041d494 * 3;
  iVar18 = DAT_0041d494 * 0x30;
  iVar6 = (DAT_0041d494 * 6 + 1) * 8;
  *(undefined4 *)(&DAT_0041d498 + iVar6) = param_3;
  *(undefined4 *)(&DAT_0041d49c + iVar6) = param_4;
  *(double *)(&DAT_0041d498 + (iVar17 + 1) * 0x10) = param_5 - 800.0;
  *(int *)(&DAT_0041d4b0 + iVar18) = param_6;
  *(int *)(&DAT_0041d498 + iVar18) = param_1;
  if (iVar12 < 0x10) {
    DAT_0041d490 = iVar12 + 1;
  }
  if (DAT_0041d490 == 0x10) {
    if (debug != 0) {
      putchar(10);
    }
    dVar14 = 0.0;
    uVar16 = 0x41f00000;
    dVar15 = 1.52587890625e-05;
    uVar7 = DAT_0041d494;
    while( true ) {
      iVar12 = debug;
      iVar6 = uVar7 * 0x30;
      dVar13 = *(double *)(&DAT_0041d498 + (uVar7 * 6 + 1) * 8);
      dVar1 = *(double *)(&DAT_0041d498 + (uVar7 * 3 + 1) * 0x10);
      *(double *)(&DAT_0041d4b8 + iVar6) = (dVar13 - dVar14) - dVar1;
      *(double *)(&DAT_0041d4c0 + iVar6) = (dVar13 - dVar14) + dVar1;
      if (iVar12 != 0) {
        printf("hist %d %d %f %f %f\n",uVar7,*(int *)(&DAT_0041d498 + iVar6) - param_1);
      }
      iVar12 = uVar7 * 0x30;
      uVar7 = uVar7 - 1;
      if ((int)uVar7 < 0) {
        uVar7 = 0xf;
      }
      if (uVar7 == DAT_0041d494) break;
      dVar13 = (double)(*(int *)(&DAT_0041d498 + iVar12) - *(int *)(&DAT_0041d498 + uVar7 * 0x30));
      if (*(int *)(&DAT_0041d498 + iVar12) - *(int *)(&DAT_0041d498 + uVar7 * 0x30) < 0) {
        dVar13 = dVar13 + (double)((ulonglong)uVar16 << 0x20);
      }
      dVar14 = dVar14 + dVar13 * (double)(*(int *)(&DAT_0041d4b0 + iVar12) - param_6) * dVar15;
    }
    dVar14 = -100.0;
    pdVar10 = (double *)&DAT_0041d7a8;
    local_48 = 1;
    bVar2 = true;
    uVar7 = uVar7 + 1 & -(uint)((int)(uVar7 + 1) < 0x10);
    pdVar9 = pdVar10;
    do {
      uVar16 = DAT_0041d494;
      uVar5 = FUN_004049b0(DAT_0041d494,uVar7,1,1,0,pdVar9);
      FUN_004049b0(uVar16,uVar7,0,1);
      dVar15 = *pdVar9;
      in_fcsr = in_fcsr & 0xff7fffff;
      if (((local_78[0] < dVar15) && (dVar14 < local_78[0])) &&
         ((bVar2 || (local_78[0] < (double)CONCAT44(local_64,local_68))))) {
        bVar2 = false;
        memcpy(&local_68,local_78,0x10)   //possible issue identified - semgrep
      }
      if (debug != 0) {
        printf("maxseg[%d] = %f *x+ %f\n",local_48,SUB84(dVar15,0),(int)((ulonglong)dVar15 >> 0x20))
        ;
      }
      local_48 = local_48 + 1;
      dVar14 = *pdVar9;
      pdVar9 = pdVar9 + 2;
      uVar7 = uVar5;
    } while (uVar5 != DAT_0041d494);
    if ((debug != 0) && (!bVar2)) {
      printf("mincross %f *x+ %f\n");
    }
    local_44 = &local_58;
    dVar14 = 100.0;
    pdVar11 = (double *)&DAT_0041d8b8;
    iVar12 = 1;
    bVar4 = true;
    pdVar9 = pdVar11;
    uVar7 = DAT_0041d494 + 1 & -(uint)((int)(DAT_0041d494 + 1) < 0x10);
    do {
      uVar16 = DAT_0041d494;
      uVar5 = FUN_004049b0(DAT_0041d494,uVar7,0,0,1,pdVar9);
      FUN_004049b0(uVar16,uVar7,1,0);
      dVar15 = *pdVar9;
      in_fcsr = in_fcsr & 0xff7fffff;
      if (((dVar15 < local_78[0]) && (local_78[0] < dVar14)) &&
         ((bVar4 || (local_78[0] < (double)CONCAT44(local_54,local_58))))) {
        bVar4 = false;
        memcpy(local_44,local_78,0x10)   //possible issue identified - semgrep
      }
      if (debug != 0) {
        printf("minseg[%d] = %f *x+ %f\n",iVar12,SUB84(dVar15,0),(int)((ulonglong)dVar15 >> 0x20));
      }
      iVar12 = iVar12 + 1;
      dVar14 = *pdVar9;
      pdVar9 = pdVar9 + 2;
      uVar7 = uVar5;
    } while (uVar5 != DAT_0041d494);
    bVar3 = true;
    if (!bVar4) {
      bVar3 = bVar2;
    }
    if ((debug != 0) && (!bVar4)) {
      printf("maxcross %f *x+ %f\n");
    }
    iVar6 = 1;
    bVar2 = true;
    DAT_0041d9c0 = 0;
    DAT_0041d9c4 = 0x40340000;
    DAT_0041d9b8 = 0;
    DAT_0041d9bc = 0x40340000;
    FUN_00404c20();
    do {
      if ((bVar2) &&
         (in_fcsr = in_fcsr & 0xff7fffff, (double)CONCAT44(local_64,local_68) < *pdVar10)) {
        bVar2 = false;
        memcpy(pdVar10 + -2,&local_68,0x10)   //possible issue identified - semgrep
      }
      in_fcsr = in_fcsr & 0xff7fffff;
      if ((double)CONCAT44(local_54,local_58) < *pdVar10) break;
      iVar6 = iVar6 + 1;
      if (!bVar2) {
        FUN_00404c20(pdVar10);
      }
      pdVar10 = pdVar10 + 2;
    } while (iVar6 < local_48);
    if (bVar2) {
      if (debug == 0) {
        bVar3 = true;
      }
      else {
        puts("found maxseg vs. save_min inconsistency");
        bVar3 = true;
      }
    }
    memcpy(&DAT_0041d798 + iVar6 * 0x10,&local_58,0x10)   //possible issue identified - semgrep
    FUN_00404c20(&local_58);
    iVar6 = 1;
    bVar2 = true;
    do {
      if ((bVar2) &&
         (in_fcsr = in_fcsr & 0xff7fffff, *pdVar11 < (double)CONCAT44(local_54,local_58))) {
        bVar2 = false;
        memcpy(&DAT_0041d8a8,&local_58,0x10)   //possible issue identified - semgrep
      }
      in_fcsr = in_fcsr & 0xff7fffff;
      if (*pdVar11 < (double)CONCAT44(local_64,local_68)) break;
      iVar6 = iVar6 + 1;
      if (!bVar2) {
        FUN_00404c20(pdVar11);
      }
      pdVar11 = pdVar11 + 2;
    } while (iVar6 < iVar12);
    if (bVar2) {
      if (debug == 0) {
        bVar3 = true;
      }
      else {
        puts("found minseg vs. save_max inconsistency");
        bVar3 = true;
      }
    }
    memcpy(&DAT_0041d8a8 + iVar6 * 0x10,&local_58,0x10)   //possible issue identified - semgrep
    if (debug != 0) {
      FUN_00404c20(&local_68);
    }
    if (bVar3) {
      puts("# inconsistent");
    }
    else {
      in_fcsr = in_fcsr & 0xff7fffff;
      if ((double)CONCAT44(DAT_0041d9bc,DAT_0041d9b8) == 0.0) {
        if ((double)CONCAT44(DAT_0041d9c4,DAT_0041d9c0) == 0.0) {
          uVar8 = 0;
          bVar2 = false;
          uVar7 = 0;
        }
        else {
          bVar2 = false;
          uVar8 = DAT_0041d9c0;
          uVar7 = DAT_0041d9c4 ^ 0x80000000;
        }
      }
      else {
        bVar2 = false;
        uVar8 = DAT_0041d9b8;
        uVar7 = DAT_0041d9bc;
        if ((double)CONCAT44(DAT_0041d9c4,DAT_0041d9c0) != 0.0) {
          bVar2 = true;
          uVar8 = 0;
          uVar7 = 0;
        }
      }
      dVar14 = (double)CONCAT44(uVar7,uVar8);
      if (debug != 0) {
        printf("find_df() = %e\n");
      }
      if (bVar2) {
        dVar14 = 60.0 / ((local_50 - local_60) +
                        ((double)CONCAT44(local_54,local_58) - (double)CONCAT44(local_64,local_68))
                        * 600.0);
        dVar15 = ((local_50 + local_60) * 0.5) / -600.0 -
                 ((double)CONCAT44(local_54,local_58) + (double)CONCAT44(local_64,local_68)) * 0.5;
        if (debug != 0) {
          printf("find_df_center %f %f\n");
        }
        dVar14 = dVar14 * dVar15;
      }
      dVar14 = dVar14 * 65536.0 + 0.5;
      if ((((in_fcsr | 3) ^ 2) & 3) == 0) {
        dVar14 = ROUND(dVar14);
      }
      else {
        dVar14 = FLOOR(dVar14);
      }
      if (debug != 0) {
        printf("delta_f %f  delta_freq %d  bsn %d\n");
      }
      iVar12 = param_6 - (int)dVar14;
      printf("# box [( %.3f , %.1f ) ");
      printf(" ( %.3f , %.1f )] ");
      printf(" delta_f %.3f  computed_freq %d\n");
      param_6 = -6000000;
      if ((-0x5b8d81 < iVar12) && (param_6 = iVar12, 6000000 < iVar12)) {
        param_6 = 6000000;
      }
    }
  }
  DAT_0041d494 = (int)(DAT_0041d494 + 1) % 0x10;
  return param_6;
}