Source: https://www.cs.cornell.edu/andru/papers/flac/flac.pdf