void FUN_00404a90(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4)

{
  int iVar1;
  int iVar2;
  char *pcVar3;
  byte bVar4;
  int iVar5;
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18;
  undefined4 local_14;
  
  iVar5 = param_4 + 8;
  int_set_mld_version(param_1,1);
  FUN_00401448(7,"Received a ICMPv6 MLDv1 Reduction for %s on %s/%u\n",iVar5,param_1);
  if (((*(char *)(param_4 + 8) == -1) && (bVar4 = *(byte *)(param_4 + 9) & 0xf, bVar4 != 1)) &&
     (bVar4 != 2)) {
    iVar1 = group_find(iVar5);
    if (iVar1 == 0) {
      pcVar3 = "Couldn\'t find group %s for reduction of %s/%u\n";
    }
    else {
      iVar1 = grpint_find(*(undefined4 *)(iVar1 + 0x10),param_1);
      if (iVar1 == 0) {
        pcVar3 = "Couldn\'t find the grpint %s for reduction of %s/%u\n";
      }
      else {
        local_20 = 0;
        local_1c = 0;
        local_18 = 0;
        local_14 = 0;
        iVar2 = subscr_unsub(*(undefined4 *)(iVar1 + 4),&local_20);
        if (iVar2 != 0) {
          if (0 < *(int *)(*(int *)(iVar1 + 4) + 8)) {
            return;
          }
          FUN_00401448(7,"Querying for other listeners to %s on interface %s/%u\n",iVar5,param_1);
          FUN_004044e0(param_1,iVar5,0,0);
          *(undefined4 *)(*(int *)(iVar1 + 4) + 8) = 0xfffffffe;
          return;
        }
        pcVar3 = "Couldn\'t unsubscribe from %s on interface %s/%u\n";
      }
    }
    FUN_00401448(4,pcVar3,iVar5,param_1);
  }
  return;
}