merge with latest swift3 version