Código completo, totalmente comentado. Versão final