Contributed by Bryson Stohr
Contributed by Florian Hardwig
Contributed by Fabrizio Schiavi
Contributed by Stephen Coles