Contributed by Michu Benaim S
Contributed by Frank Grießhammer
Contributed by Peiran Tan
Contributed by Chris Purcell