Algorithms and optimisations for parity games