Parts 1-3 should be functional, may have missed some edge cases when testing, will try to fuzz for next week.