in v0.12 https://github.com/bitcoin/bitcoin/pull/7081 (by @luke-jr) was merged adding `-bytespersigop` (with default of 20).

this is preventing simple bare multisig transactions from being accepted into mempool when the size is < 400 bytes.  
eg; https://gist.github.com/rubensayshi/ac4f617207f7a50559e85d61c05800be

from 1-of-7 and onwards they are accepted because the ratio of bytes:sigops is high enough.  
also having 2 or more inputs will work because it again tips the ratio of bytes:sigops over.

the reason mainly being that `GetLegacySigOpCount` calls `GetSigOpCount` with `fAccurate=false`.

It looks like changing `GetLegacySigOpCount` to use `fAccurate=true` would cause side effects in the few other places (`ConnectBlock`, `CheckBlock`, `CreateNewBlock`) and simply adding `fAccurate` as arg to `GetLegacySigOpCount` would affect the value stored in `CTxMemPoolEntry.sigOpCount` which in turn affects a bunch of other things.

}
        
        nNextSweep = nMinExpTime + ORPHAN_TX_EXPIRE_INTERVAL;
        if (nErased > 0) LogPrint("mempool", "Erased %d orphan tx due to expiration\n", nErased);
    }
    while (mapOrphanTransactions.size() > nMaxOrphans)
    {
        
        uint256 randomhash = GetRandHash();
        map<uint256, COrphanTx>::iterator it = mapOrphanTransactions.lower_bound(randomhash);
        if (it == mapOrphanTransactions.end())
            it = mapOrphanTransactions.begin();
        EraseOrphanTx(it->first);
        ++nEvicted;
    }
    return nEvicted;
}
bool IsFinalTx(const CTransaction &tx, int nBlockHeight, int64_t nBlockTime)
{
    if (tx.nLockTime == 0)
        return true;
    if ((int64_t)tx.nLockTime < ((int64_t)tx.nLockTime < LOCKTIME_THRESHOLD ? (int64_t)nBlockHeight : nBlockTime))
        return true;
    BOOST_FOREACH(const CTxIn& txin, tx.vin) {
        if (!(txin.nSequence == CTxIn::SEQUENCE_FINAL))
            return false;
    }
    return true;
}
bool CheckFinalTx(const CTransaction &tx, int flags)