i hate recursion