refactored keyboards
added an abstractkeyboard
for "dry"