Source: https://info.usherbrooke.ca/llavoie/enseignement/Modules/TM070-DFD.pdf