* use backport lru_cache

* unified version