updated template function