CEG 730: Distributed Computing Principles