tried to level the playing field by removing dynamic allocations and inlining push/pop