'Categorize all states into two different groups: reaching the destination within the peek depth, and not
reaching the destination within the peek depth.
:param SimulationManager pg:    The simulation manager that contains states. All active states (state belonging to "active" stash)
are subjected to categorization.
:return:                The categorized simulation manager.
:rtype:                 angr.SimulationManager'

def _categorize_states(self, pg):

    past_active_states = len(pg.active)
    for goal in self._goals:
        for p in pg.active:
            if self._check_goals(goal, p):
                if (self._goal_satisfied_callback is not None):
                    self._goal_satisfied_callback(goal, p, pg)
    pg.stash(filter_func=(lambda p: all(((not goal.check(self._cfg, p, peek_blocks=self._peek_blocks)) for goal in self._goals))), from_stash='active', to_stash='deprioritized')
    if pg.active:
        pass
    active_states = len(pg.active)
    l.debug('%d/%d    active    states    are    deprioritized.', (past_active_states - active_states), past_active_states)
    return pg
