The CMS Particle Flow Algorithm