version 2

keep public abstract