void BuildChannelList(int param_1)

{
  bool bVar1;
  char cVar2;
  undefined1 uVar3;
  code *pcVar4;
  int iVar5;
  char *pcVar6;
  uint uVar7;
  uint uVar8;
  undefined1 *puVar9;
  uint uVar10;
  uint uVar11;
  undefined4 uVar12;
  int iVar13;
  char *local_58;
  int local_54;
  char local_50 [15];
  char cStack_41;
  void *local_40;
  char *local_3c;
  char *local_38;
  char *local_30;
  
  memset((void *)(param_1 + 0x4e3c),0,0x21c)   //possible issue identified - semgrep
  cVar2 = *(char *)(param_1 + 0x16982)   //possible issue identified - semgrep
  if (((cVar2 == '\x02') || (cVar2 == '\b')) || (cVar2 == '\v')) {
LAB_00031bf8:
    uVar7 = 0;
LAB_00031bfc:
    cVar2 = *(char *)(param_1 + 0x16982)   //possible issue identified - semgrep
    if ((((byte)(cVar2 - 2U) < 2) || (cVar2 == '\x05')) ||
       ((cVar2 == '\b' || ((cVar2 == '\n' || (cVar2 == '\v')))))) {
      uVar8 = 0;
      iVar5 = 0;
      do {
        iVar13 = iVar5;
        bVar1 = 0x16 < uVar8;
        uVar8 = uVar8 + 1 & 0xff;
        if (bVar1) {
          if (RTDebugLevel == 0) {
            return;
          }
          local_58 = (char *)(uint)*(byte *)(param_1 + 0x16981);
          pcVar6 = "CountryRegionABand=%d not support";
          goto LAB_00031aac;
        }
        iVar5 = uVar8 << 3;
      } while ((*(byte *)(param_1 + 0x16981) & 0x7f) != (&Country_Region_ChDesc_5GHZ)[iVar13]);
      uVar12 = *(undefined4 *)((int)&PTR_Country_Region0_ChDesc_5GHZ_000e2e04 + iVar13);
      uVar8 = TotalChNum(uVar12);
      uVar8 = uVar8 & 0xff;
      if (uVar8 == 0) {
        *(char *)(param_1 + 0x5058) = (char)uVar7;
      }
      else {
        memcpy(local_50,C_482_38452,0xf)   //possible issue identified - semgrep
        os_alloc_mem(0,&local_58,uVar8);
        if (local_58 == (char *)0x0) goto LAB_00031a90;
        os_alloc_mem(0,&local_54,uVar8);
        uVar11 = 0;
        if (local_54 == 0) goto LAB_00031d28;
        do {
          pcVar6 = local_58;
          cVar2 = GetChannel_5GHZ(uVar12,uVar11)   //possible issue identified - semgrep
          iVar5 = local_54;
          pcVar6[uVar11] = cVar2;
          uVar3 = GetChannelFlag(uVar12,uVar11);
          puVar9 = (undefined1 *)(iVar5 + uVar11);
          uVar11 = uVar11 + 1 & 0xff;
          *puVar9 = uVar3;
        } while (uVar11 < uVar8);
        puVar9 = (undefined1 *)(uVar7 * 10 + param_1 + 0x4e42);
        uVar10 = 0;
        local_3c = (char *)(param_1 + 0x4c22);
        local_30 = &cStack_41;
        uVar11 = uVar7;
        do {
          local_40 = (void *)(uVar11 * 10 + param_1 + 0x4e3c);
          iVar5 = 0;
          pcVar6 = local_3c;
          do {
            cVar2 = *pcVar6;
            pcVar6 = pcVar6 + 10;
            if (local_58[uVar10] == cVar2) {
              memmove(local_40,(void *)(param_1 + iVar5 * 10 + 0x4c20),10)   //possible issue identified - semgrep
            }
            iVar5 = iVar5 + 1;
            *(undefined1 *)((uVar10 + uVar7) * 10 + param_1 + 0x4e45) =
                 *(undefined1 *)(local_54 + uVar10);
          } while (iVar5 != 0x36);
          pcVar6 = local_50;
          do {
            cVar2 = *pcVar6;
            pcVar6 = pcVar6 + 1;
            if (local_58[uVar10] == cVar2) {
              puVar9[1] = 1;
            }
          } while (pcVar6 != local_30);
          uVar10 = uVar10 + 1 & 0xff;
          *puVar9 = 0x14;
          uVar11 = uVar11 + 1;
          puVar9 = puVar9 + 10;
        } while (uVar10 < uVar8);
        uVar8 = uVar8 + uVar7;
        uVar7 = uVar8 & 0xff;
        os_free_mem(0,local_58);
        os_free_mem(0,local_54);
        *(char *)(param_1 + 0x5058) = (char)uVar8;
      }
    }
    else {
      *(char *)(param_1 + 0x5058) = (char)uVar7;
    }
    if (2 < RTDebugLevel) {
      printk("country code=%d/%d, RFIC=%d, PHY mode=%d, support %d channels\n",
             *(undefined1 *)(param_1 + 0x16980),*(undefined1 *)(param_1 + 0x16981),
             *(undefined1 *)(param_1 + 0x4bd4),*(undefined1 *)(param_1 + 0x16982),uVar7);
    }
    for (uVar7 = 0; uVar7 < *(byte *)(param_1 + 0x5058); uVar7 = uVar7 + 1 & 0xff) {
      if (2 < RTDebugLevel) {
        iVar5 = uVar7 * 10 + param_1;
        printk("BuildChannel # %d :: Pwr0 = %d, Pwr1 =%d, Flags = %x\n ",
               *(undefined1 *)(iVar5 + 0x4e3e),(int)*(char *)(iVar5 + 0x4e40),
               (int)*(char *)(iVar5 + 0x4e41),*(undefined1 *)(iVar5 + 0x4e45));
      }
    }
  }
  else {
    uVar7 = 0;
    iVar5 = 0;
    do {
      iVar13 = iVar5;
      bVar1 = 0xb < uVar7;
      uVar7 = uVar7 + 1 & 0xff;
      if (bVar1) {
        if (RTDebugLevel == 0) {
          return;
        }
        local_58 = (char *)(uint)*(byte *)(param_1 + 0x16980);
        pcVar6 = "CountryRegion=%d not support";
        goto LAB_00031aac;
      }
      iVar5 = uVar7 << 3;
    } while ((*(byte *)(param_1 + 0x16980) & 0x7f) != (&Country_Region_ChDesc_2GHZ)[iVar13]);
    uVar12 = *(undefined4 *)((int)&PTR_Country_Region0_ChDesc_2GHZ_000e2cac + iVar13);
    uVar7 = TotalChNum(uVar12);
    uVar7 = uVar7 & 0xff;
    if (uVar7 == 0) goto LAB_00031bf8;
    os_alloc_mem(0,&local_58,uVar7);
    if (local_58 == (char *)0x0) {
LAB_00031a90:
      if (RTDebugLevel == 0) {
        return;
      }
      pcVar6 = "%s:Allocate memory for ChannelList failed\n";
      local_58 = "BuildChannelList";
LAB_00031aac:
      pcVar4 = printk;
    }
    else {
      os_alloc_mem(0,&local_54,uVar7);
      uVar8 = 0;
      if (local_54 != 0) {
        do {
          pcVar6 = local_58;
          cVar2 = GetChannel_2GHZ(uVar12,uVar8)   //possible issue identified - semgrep
          iVar5 = local_54;
          pcVar6[uVar8] = cVar2;
          uVar3 = GetChannelFlag(uVar12,uVar8);
          puVar9 = (undefined1 *)(iVar5 + uVar8);
          uVar8 = uVar8 + 1 & 0xff;
          *puVar9 = uVar3;
        } while (uVar8 < uVar7);
        local_38 = (char *)(param_1 + 0x4c22);
        uVar8 = 0;
        while( true ) {
          uVar11 = uVar8 & 0xff;
          if (uVar7 <= uVar11) break;
          iVar5 = 0;
          iVar13 = uVar11 * 10 + param_1;
          pcVar6 = local_38;
          do {
            cVar2 = *pcVar6;
            pcVar6 = pcVar6 + 10;
            if (local_58[uVar11] == cVar2) {
              memmove((void *)(uVar8 * 10 + param_1 + 0x4e3c),
                      (void *)(param_1 + iVar5 * 10 + 0x4c20),10)   //possible issue identified - semgrep
            }
            iVar5 = iVar5 + 1;
            *(undefined1 *)(iVar13 + 0x4e45) = *(undefined1 *)(local_54 + uVar11);
          } while (iVar5 != 0x36);
          *(undefined1 *)(iVar13 + 0x4e42) = 0x14;
          uVar8 = uVar8 + 1;
        }
        os_free_mem(0,local_58);
        os_free_mem(0,local_54);
        goto LAB_00031bfc;
      }
LAB_00031d28:
      if (RTDebugLevel != 0) {
        printk("%s:Allocate memory for ChannelListFlag failed\n","BuildChannelList");
      }
      pcVar6 = (char *)0x0;
      pcVar4 = os_free_mem;
    }
    (*pcVar4)(pcVar6,local_58);
  }
  return;
}