def METHOD_NAME(rhapi, generate_args=None):
    available_seats = generate_args.get('available_seats')
    suffix = rhapi.__(generate_args.get('suffix', 'Main'))
    if generate_args.get('qualifiers_per_heat') and generate_args.get('advances_per_heat'):
        qualifiers_per_heat = int(generate_args['qualifiers_per_heat'])
        advances_per_heat = int(generate_args['advances_per_heat'])
    elif generate_args.get('advances_per_heat'):
        advances_per_heat = int(generate_args['advances_per_heat'])
        qualifiers_per_heat = available_seats - advances_per_heat
    elif generate_args.get('qualifiers_per_heat'):
        qualifiers_per_heat = int(generate_args['qualifiers_per_heat'])
        advances_per_heat = available_seats - qualifiers_per_heat
    else:
        qualifiers_per_heat = available_seats - 1
        advances_per_heat = 1
    if qualifiers_per_heat < 1 or advances_per_heat < 1:
        if not ('advances_per_heat' in generate_args and generate_args['advances_per_heat'] == 0):
            logger.warning("Unable to seed ladder: provided qualifiers and advances must be > 0")
            return False
    total_pilots = getTotalPilots(rhapi, generate_args)
    if total_pilots == 0:
        logger.warning("Unable to seed ladder: no pilots available")
        return False
    letters = rhapi.__('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
    heats = []
    if 'seed_offset' in generate_args:
        seed_offset = max(int(generate_args['seed_offset']) - 1, 0)
    else:
        seed_offset = 0
    unseeded_pilots = list(range(seed_offset, total_pilots+seed_offset))
    heat_pilots = 0
    while len(unseeded_pilots):
        if heat_pilots == 0:
            heat = HeatPlan(
                letters[len(heats)] + ' ' + suffix,
                []
            )
        if heat_pilots < qualifiers_per_heat:
            # slot qualifiers
            heat.slots.append(HeatPlanSlot(SeedMethod.INPUT, unseeded_pilots.pop(0) + 1))
            heat_pilots += 1
        else:
            if len(unseeded_pilots) <= advances_per_heat:
                # slot remainder as qualifiers
                for seed in unseeded_pilots:
                    heat.slots.append(HeatPlanSlot(SeedMethod.INPUT, seed + 1))
                unseeded_pilots = [] # empty after using
            else:
                # slot advances
                for adv_idx in range(advances_per_heat):
                    heat.slots.append(HeatPlanSlot(SeedMethod.HEAT_INDEX, adv_idx + 1, -len(heats) - 2))
            heats = [heat, *heats] # insert at front
            heat_pilots = 0
    if heat_pilots: # insert final heat
        heats = [heat, *heats]
    return heats