UPD: добавил комментарии
UPD: поправил стилистику
UPD: поправил стилистику
UPD: поправил стилистику
UPD: поправил стилистику