implement push func