Author: Joao Gabriel de Lima.