evaluate beforehand