finished part 3 untested