Немного покодил, добавил комменты
Сырой набросок