type
A = ref object of RootObj
AA = ref object of A
BB = ref object of A
CC = ref object of A
method doSmt(a: A, i: int) = echo "A"
method doSmt(a: AA, i: int) = echo "AA"
method doSmt(a: BB, i: int) = echo "BB"
method doSmt(a: CC, i: int) = echo "CC"
let a: A = AA()
a.doSmt 1
echo NimVersion
dHlwZQogIEEgPSByZWYgb2JqZWN0IG9mIFJvb3RPYmoKICBBQSA9IHJlZiBvYmplY3Qgb2YgQQogIEJCID0gcmVmIG9iamVjdCBvZiBBCiAgQ0MgPSByZWYgb2JqZWN0IG9mIEEKICAKbWV0aG9kIGRvU210KGE6IEEsIGk6IGludCkgPSBlY2hvICJBIgptZXRob2QgZG9TbXQoYTogQUEsIGk6IGludCkgPSBlY2hvICJBQSIKbWV0aG9kIGRvU210KGE6IEJCLCBpOiBpbnQpID0gZWNobyAiQkIiCm1ldGhvZCBkb1NtdChhOiBDQywgaTogaW50KSA9IGVjaG8gIkNDIgoKbGV0IGE6IEEgPSBBQSgpCmEuZG9TbXQgMQplY2hvIE5pbVZlcnNpb24=