return 0 on happy exit