Refactor GP crossover to be more universal