Contributed by Maxim Balabin
Contributed by Ara Oms
Contributed by TypeMates
Contributed by Adelina Shaydullina