'Tick stash "stash" forward (up to "n" times or until "num_find" states are found), looking for condition "find",
avoiding condition "avoid". Stores found states into "find_stash\' and avoided states into "avoid_stash".
The "find" and "avoid" parameters may be any of:
- An address to find
- A set or list of addresses to find
- A function that takes a state and returns whether or not it matches.
If an angr CFG is passed in as the "cfg" parameter and "find" is either a number or a list or a set, then
any states which cannot possibly reach a success state without going through a failure state will be
preemptively avoided.'

def explore(self, stash=None, n=None, find=None, avoid=None, find_stash='found', avoid_stash='avoid', cfg=None, num_find=1, step_func=None):

    num_find += (len(self.stashes[find_stash]) if (find_stash in self.stashes) else 0)
    tech = exploration_techniques.Explorer(find=find, avoid=avoid, find_stash=find_stash, avoid_stash=avoid_stash, cfg=cfg, num_find=num_find)
    self.use_technique(tech)
    out = self.run(stash=stash, step_func=step_func, n=n)
    out.remove_tech(tech)
    self.remove_tech(tech)
    return out
