cache and call bound rotate function