'This function receives an initial state and imark and processes a list of pyvex.IRStmts
It annotates the request with a final state, last imark, and a list of SimIRStmts'

def _handle_statement(self, state, successors, stmt):

    if (type(stmt) == pyvex.IRStmt.IMark):
        ins_addr = (stmt.addr + stmt.delta)
        state.scratch.ins_addr = ins_addr
        for subaddr in xrange(stmt.len):
            if ((subaddr + stmt.addr) in state.scratch.dirty_addrs):
                raise SimReliftException(state)
        state._inspect('instruction', BP_AFTER)
        l.debug('IMark:    %#x', stmt.addr)
        state.scratch.num_insns += 1
        state._inspect('instruction', BP_BEFORE, instruction=ins_addr)
    s_stmt = translate_stmt(stmt, state)
    if (s_stmt is not None):
        state.history.extend_actions(s_stmt.actions)
    if (type(stmt) == pyvex.IRStmt.Exit):
        l.debug('%s    adding    conditional    exit', self)
        exit_state = state.copy()
        successors.add_successor(exit_state, s_stmt.target, s_stmt.guard, s_stmt.jumpkind, exit_stmt_idx=state.scratch.stmt_idx, exit_ins_addr=state.scratch.ins_addr)
        cont_condition = claripy.Not(s_stmt.guard)
        state.add_constraints(cont_condition)
        state.scratch.guard = claripy.And(state.scratch.guard, cont_condition)
