© G. Moroz, 09.2018. Source code on GitHub