void FUN_00407df4(int *param_1)

{
  int *piVar1;
  int iVar2;
  int *__ptr;
  
  while( true ) {
    __ptr = (int *)*param_1;
    if (__ptr == param_1) break;
    piVar1 = (int *)__ptr[1];
    iVar2 = *__ptr;
    *piVar1 = iVar2;
    *(int **)(iVar2 + 4) = piVar1;
    *__ptr = 0;
    __ptr[1] = 0;
    FUN_00407f28(__ptr + 2);
    free(__ptr);
  }
  return;
}