/* WARNING: Removing unreachable block (ram,0x00403eb0) */
/* WARNING: Removing unreachable block (ram,0x00403f10) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_00403250(uint param_1,int param_2,int param_3)

{
  undefined2 uVar1;
  int iVar2;
  uint uVar3;
  socklen_t *psVar4;
  __fd_mask *p_Var5;
  int iVar6;
  ssize_t sVar7;
  char *pcVar8;
  uint uVar9;
  tm *__src;
  int iVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  char *__format;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  int iVar17;
  int iVar18;
  uint uVar19;
  uint uVar20;
  int iVar21;
  double dVar22;
  double dVar23;
  double dVar24;
  double dVar25;
  socklen_t local_460 [2];
  timeval local_458;
  timeval local_450;
  timeval local_448;
  undefined1 local_440 [8];
  undefined1 auStack_438 [8];
  char acStack_430 [40];
  tm tStack_408;
  undefined4 local_3dc;
  undefined4 local_3d8;
  undefined4 local_3d4;
  uint local_3b4;
  uint local_3b0;
  __fd_mask local_3ac [32];
  undefined4 local_32c [2];
  int local_324;
  char acStack_2ac [516];
  uint local_a8;
  uint local_a4;
  uint local_a0;
  uint local_9c;
  uint local_98;
  uint local_94;
  uint local_90;
  uint local_8c;
  uint local_88;
  uint local_84;
  int local_80;
  uint local_7c;
  int local_78;
  undefined1 *local_74;
  undefined1 *local_70;
  int local_6c;
  uint local_68;
  socklen_t *local_64;
  socklen_t *local_60;
  
  if (debug != 0) {
    puts("Listening...");
  }
  local_64 = local_460;
  local_460[0] = 0x10;
  local_68 = 1 << (param_1 & 0x1f);
  local_60 = local_64 + (param_1 >> 5);
  local_70 = local_440;
  local_74 = auStack_438;
  local_458.tv_sec = 0;
  local_6c = 0;
  do {
    local_458.tv_usec = 0;
    do {
      do {
        while( true ) {
          psVar4 = local_60;
          uVar11 = local_68;
          p_Var5 = local_3ac;
          do {
            *p_Var5 = 0;
            p_Var5 = p_Var5 + 1;
          } while (p_Var5 != local_32c);
          local_60[0x2d] = local_60[0x2d] | local_68;
          iVar6 = select(param_1 + 1,(fd_set *)local_3ac,(fd_set *)0x0,(fd_set *)0x0,&local_458);
          if ((iVar6 != 1) || ((uVar11 & psVar4[0x2d]) == 0)) break;
          sVar7 = recvfrom(param_1,&DAT_0041cea0,0x5dc,0,(sockaddr *)local_440,local_64)   //possible issue identified - semgrep
          if (sVar7 < 0) {
            perror("recvfrom");
          }
          else if (sVar7 - 1U < 0x5db) {
            gettimeofday(&local_450,(__timezone_ptr_t)0x0);
            local_80 = local_450.tv_sec;
            local_78 = local_450.tv_usec;
            if (debug != 0) {
              printf("packet of length %d received\n",sVar7);
              printf("Source: Address family %d\n",(uint)(ushort)local_440._0_2_);
              uVar1 = local_440._2_2_;
              if (local_440._0_2_ == 2) {
                uVar11 = (uint)(ushort)local_440._2_2_;
                pcVar8 = inet_ntoa((in_addr)local_440._4_4_);
                uVar11 = (uVar11 & 0xff) << 8 | (uint)((ushort)uVar1 >> 8);
                __format = "Source: INET Port %d host %s\n";
              }
              else {
                if (local_440._0_2_ != 10) {
                  printf("Source: Address family %d\n");
                  goto LAB_004036bc;
                }
                uVar11 = (uint)*(ushort *)(local_70 + 2);
                pcVar8 = inet_ntop(10,local_74,acStack_2ac,0x200)   //possible issue identified - semgrep
                __format = "Source: INET6 Port %d host %s\n";
              }
              printf(__format,uVar11,pcVar8);
            }
LAB_004036bc:
            uVar20 = DAT_0041cec0;
            uVar19 = DAT_0041cebc;
            uVar13 = DAT_0041ceb8;
            uVar11 = DAT_0041cea8;
            uVar14 = DAT_0041cea0 << 0x18;
            local_98 = DAT_0041cea0 >> 0x18;
            uVar12 = DAT_0041cea0 >> 8;
            uVar9 = DAT_0041cea0 & 0xff00;
            if ((local_98 & 0x80) != 0) {
              local_98 = local_98 | 0xffffff00;
            }
            local_a0 = DAT_0041cec8 << 0x18 | DAT_0041cec8 >> 0x18 | (DAT_0041cec8 & 0xff0000) >> 8
                       | (DAT_0041cec8 & 0xff00) << 8;
            local_9c = DAT_0041cecc << 0x18 | DAT_0041cecc >> 0x18 | (DAT_0041cecc & 0xff0000) >> 8
                       | (DAT_0041cecc & 0xff00) << 8;
            local_8c = DAT_0041ceb0;
            local_88 = DAT_0041ceb4;
            local_94 = DAT_0041cea4;
            local_90 = DAT_0041ceac;
            local_84 = DAT_0041cec4;
            if (DAT_0041ce98 != 0) {
              local_448.tv_sec = DAT_0041ce9c + 0x7c558180 + local_a0;
              local_448.tv_usec = (local_9c >> 0xc) + ((local_9c >> 10) + 0x8000 >> 0x10) * -0x2f7;
              iVar6 = settimeofday(&local_448,(timezone *)0x0);
              if (iVar6 < 0) {
                pcVar8 = "settimeofday";
                goto LAB_00403cb0;
              }
              if (debug != 0) {
                printf("set time to %lu.%.6lu\n",local_448.tv_sec,local_448.tv_usec);
              }
              time((time_t *)(local_460 + 1));
              __src = localtime((time_t *)(local_460 + 1));
              memcpy(&tStack_408,__src,0x2c)   //possible issue identified - semgrep
              strftime(acStack_430,0x27,"[%Y][%m][%d][%H][%M][%S]",&tStack_408);
              syslog(0xc5,"Time synchronized");
            }
            uVar3 = local_90;
            local_7c = local_80 + 0x83aa7e80;
            uVar11 = uVar11 << 0x18 | uVar11 >> 0x18 | (uVar11 & 0xff0000) >> 8 |
                     (uVar11 & 0xff00) << 8;
            local_a8 = uVar13 << 0x18 | uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 |
                       (uVar13 & 0xff00) << 8;
            local_a4 = uVar20 << 0x18 | uVar20 >> 0x18 | (uVar20 & 0xff0000) >> 8 |
                       (uVar20 & 0xff00) << 8;
            uVar20 = (local_78 * 0x7bd >> 0xb) + local_78 * 0x10c6;
            uVar19 = uVar19 << 0x18 | uVar19 >> 0x18 | (uVar19 & 0xff0000) >> 8 |
                     (uVar19 & 0xff00) << 8;
            uVar13 = local_84 << 0x18 | local_84 >> 0x18 | (local_84 & 0xff0000) >> 8 |
                     (local_84 & 0xff00) << 8;
            if (debug != 0) {
              uVar15 = local_90 >> 0x18;
              uVar16 = local_90 << 0x18 | uVar15 | (local_90 & 0xff0000) >> 8 |
                       (local_90 & 0xff00) << 8;
              printf("LI=%d  VN=%d  Mode=%d  Stratum=%d  Poll=%d  Precision=%d\n",uVar14 >> 0x1e,
                     (uVar14 & 0x38000000) >> 0x1b,(uVar14 & 0x7000000) >> 0x18,(uVar9 << 8) >> 0x10
                     ,(uVar12 & 0xff00) >> 8,local_98);
              dVar24 = (double)(int)(local_94 << 0x18 | local_94 >> 0x18 |
                                     (local_94 & 0xff0000) >> 8 | (local_94 & 0xff00) << 8) *
                       15.2587890625;
              printf("Delay=%.1f  Dispersion=%.1f  Refid=%u.%u.%u.%u\n",local_94,SUB84(dVar24,0),
                     (int)((ulonglong)dVar24 >> 0x20),(double)(int)uVar11 * 15.2587890625,
                     uVar3 & 0xff,(int)uVar16 >> 0x10 & 0xff,(int)uVar16 >> 8 & 0xff,uVar15);
              printf("Reference %u.%.10u\n",
                     local_8c << 0x18 | local_8c >> 0x18 | (local_8c & 0xff0000) >> 8 |
                     (local_8c & 0xff00) << 8,
                     local_88 << 0x18 | local_88 >> 0x18 | (local_88 & 0xff0000) >> 8 |
                     (local_88 & 0xff00) << 8);
              printf("Originate %u.%.10u\n",local_a8,uVar19);
              printf("Receive   %u.%.10u\n",local_a4,uVar13);
              printf("Transmit  %u.%.10u\n",local_a0,local_9c);
              printf("Our recv  %u.%.10u\n",local_7c,uVar20);
            }
            iVar6 = local_7c - local_a8;
            uVar9 = uVar20 - uVar19;
            if (uVar20 < uVar19) {
              uVar9 = ~(uVar19 - uVar20);
              iVar6 = iVar6 + -1;
            }
            iVar21 = local_a0 - local_a4;
            uVar12 = local_9c - uVar13;
            if (local_9c < uVar13) {
              iVar21 = iVar21 + -1;
              uVar12 = ~(uVar13 - local_9c);
            }
            iVar17 = local_a4 - local_a8;
            uVar14 = uVar13 - uVar19;
            if (uVar13 < uVar19) {
              uVar14 = ~(uVar19 - uVar13);
              iVar17 = iVar17 + -1;
            }
            iVar18 = local_7c - local_a0;
            uVar13 = uVar20 - local_9c;
            if (uVar20 < local_9c) {
              iVar18 = iVar18 + -1;
              uVar13 = ~(local_9c - uVar20);
            }
            local_32c[0] = 0;
            iVar10 = adjtimex(local_32c);
            iVar2 = local_324;
            if (iVar10 < 0) {
LAB_00403ca4:
              pcVar8 = "adjtimex";
LAB_00403cb0:
              perror(pcVar8);
                    /* WARNING: Subroutine does not return */
              exit(1);
            }
            dVar24 = (double)(int)uVar9;
            if ((int)uVar9 < 0) {
              dVar24 = dVar24 + 4294967296.0;
            }
            dVar25 = (double)(int)uVar14;
            dVar24 = (double)iVar6 * 1000000.0 + dVar24 * 0.00023283064365386963;
            if ((int)uVar14 < 0) {
              dVar25 = dVar25 + 4294967296.0;
            }
            dVar22 = (double)(int)uVar13;
            if ((int)uVar13 < 0) {
              dVar22 = dVar22 + 4294967296.0;
            }
            if (debug != 0) {
              dVar23 = (double)(int)uVar12;
              if ((int)uVar12 < 0) {
                dVar23 = dVar23 + 4294967296.0;
              }
              dVar22 = ((double)iVar17 * 1000000.0 + dVar25 * 0.00023283064365386963) -
                       ((double)iVar18 * 1000000.0 + dVar22 * 0.00023283064365386963);
              dVar25 = (double)iVar21 * 1000000.0 + dVar23 * 0.00023283064365386963;
              printf("Total elapsed: %9.2f\nServer stall:  %9.2f\nSlop:          %9.2f\n",
                     &DAT_00410000,SUB84(dVar24,0),(int)((ulonglong)dVar24 >> 0x20),dVar25,
                     dVar24 - dVar25);
              dVar22 = dVar22 * 0.5;
              printf(
                    "Skew:          %9.2f\nFrequency:     %9d\n day   second     elapsed    stall     skew  dispersion  freq\n"
                    );
              printf("%d %5d.%.3d  %8.1f %8.1f  %8.1f %8.1f %9d\n",local_7c / 0x15180 + 0x3aac,
                     local_7c % 0x15180,uVar20 / 0x418937,SUB84(dVar24,0),
                     (int)((ulonglong)dVar24 >> 0x20),SUB84(dVar25,0),
                     (int)((ulonglong)dVar25 >> 0x20),SUB84(dVar22,0),
                     (int)((ulonglong)dVar22 >> 0x20),(double)(int)uVar11 * 15.2587890625,iVar2);
            }
            fflush(_stdout);
            if (((DAT_0041ce94 != 0) && (iVar6 = contemplate_data(local_7c), debug == 0)) &&
               (iVar6 != iVar2)) {
              local_32c[0] = 2;
              local_324 = iVar6;
              iVar6 = adjtimex(local_32c);
              if (iVar6 < 0) goto LAB_00403ca4;
            }
            DAT_0041cb80 = 0;
          }
          else {
            printf("Ooops.  pack_len=%d\n",sVar7);
            fflush(_stdout);
          }
          if ((param_2 <= local_6c) && (param_2 != 0)) {
            return;
          }
        }
      } while (iVar6 == 4);
      if (iVar6 < 0) {
        perror("select");
      }
    } while (local_458.tv_sec != 0);
    if ((param_2 <= local_6c) && (param_2 != 0)) {
      return;
    }
    if (debug != 0) {
      fputs("Sending ...\n",_stderr);
    }
    memset(&local_3dc,0,0x30)   //possible issue identified - semgrep
    local_3d4 = 0x100;
    local_3d8 = 0x100;
    local_3dc = 0xfa04001b;
    gettimeofday(&local_450,(__timezone_ptr_t)0x0);
    uVar11 = local_450.tv_sec + 0x83aa7e80;
    uVar13 = (local_450.tv_usec * 0x7bd >> 0xb) + local_450.tv_usec * 0x10c6;
    local_3b4 = uVar11 * 0x1000000 | uVar11 >> 0x18 | (uVar11 & 0xff0000) >> 8 |
                (uVar11 & 0xff00) << 8;
    local_3b0 = uVar13 * 0x1000000 | uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 |
                (uVar13 & 0xff00) << 8;
    send(param_1,&local_3dc,0x30,0);
    DAT_0041d47c = local_450.tv_sec;
    DAT_0041d480 = local_450.tv_usec;
    local_6c = local_6c + 1;
    local_458.tv_sec = param_3;
  } while( true );
}