немного рефакторил код и добавил коменты