Менее проработанная версия есть здесь.