void FUN_004821e0(int param_1)

{
  undefined4 *puVar1;
  undefined4 uVar2;
  undefined8 *puVar3;
  int iVar4;
  undefined8 *puVar5;
  int iVar6;
  
  puVar5 = (undefined8 *)(param_1 + 0x50);
  if (*(int *)(param_1 + 0x18) == 0) {
    if (*(int *)(param_1 + 8) == -0x80000000) {
      puVar1 = *(undefined4 **)(param_1 + 0x4c);
      *(undefined4 **)(param_1 + 0x4c) = puVar1 + 1;
      uVar2 = *puVar1;
      *(undefined4 *)(param_1 + 8) = uVar2;
      *(undefined4 *)(param_1 + 0x50) = uVar2;
      iVar4 = *(int *)(param_1 + 4);
    }
    else {
      iVar4 = *(int *)(param_1 + 4);
    }
    iVar6 = 0;
    if (iVar4 == -0x80000000) {
      puVar1 = *(undefined4 **)(param_1 + 0x4c);
      *(undefined4 **)(param_1 + 0x4c) = puVar1 + 1;
      uVar2 = *puVar1;
      *(undefined4 *)(param_1 + 4) = uVar2;
      *(undefined4 *)(param_1 + 0x50) = uVar2;
    }
    while (iVar6 < *(int *)(param_1 + 0x1c)) {
      iVar4 = *(int *)(param_1 + (iVar6 + 10) * 4);
      iVar6 = iVar6 + 1;
      if (iVar4 != 8) {
        puVar1 = *(undefined4 **)(param_1 + 0x4c);
        if (iVar4 < 9) {
          if (((iVar4 == 2) || (iVar4 < 3)) || (iVar4 != 7)) goto LAB_00482304;
LAB_004822ec:
          puVar3 = (undefined8 *)((int)puVar1 + 7U & 0xfffffff8);
          *(undefined8 **)(param_1 + 0x4c) = puVar3 + 1;
          *puVar5 = *puVar3;
        }
        else {
          if ((iVar4 != 0x400) && (0x400 < iVar4)) {
            if (iVar4 == 0x800) {
              puVar1 = (undefined4 *)((int)puVar1 + 7U & 0xfffffff8);
              *(undefined4 **)(param_1 + 0x4c) = puVar1 + 2;
              uVar2 = *puVar1;
              *(undefined4 *)((int)puVar5 + 4) = puVar1[1];
              *(undefined4 *)puVar5 = uVar2;
              goto LAB_00482310;
            }
            if (iVar4 == 0x807) goto LAB_004822ec;
          }
LAB_00482304:
          *(undefined4 **)(param_1 + 0x4c) = puVar1 + 1;
          *(undefined4 *)puVar5 = *puVar1;
        }
LAB_00482310:
        puVar5 = puVar5 + 1;
      }
    }
    iVar4 = *(int *)(param_1 + 8);
  }
  else {
    if (*(int *)(param_1 + 8) == -0x80000000) {
      *(undefined4 *)(param_1 + 8) =
           *(undefined4 *)(puVar5 + -(1 - (uint)*(byte *)(param_1 + 0x24)));
      iVar4 = *(int *)(param_1 + 4);
    }
    else {
      iVar4 = *(int *)(param_1 + 4);
    }
    if (iVar4 == -0x80000000) {
      *(undefined4 *)(param_1 + 4) =
           *(undefined4 *)(puVar5 + -(1 - (uint)*(byte *)(param_1 + 0x25)));
      iVar4 = *(int *)(param_1 + 8);
    }
    else {
      iVar4 = *(int *)(param_1 + 8);
    }
  }
  if (iVar4 < 0) {
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    *(int *)(param_1 + 8) = -iVar4;
    *(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) & 0xfffffffe | 8;
  }
  return;
}