completed first version