public static object Do(object Me, MethodBase M, List <object> O)
    {
        if ((!Description.SpecialVar) && (MList.L.Count > 0))
        {
            lock (MList.threadLock)
            {
                O = MList.L.Select(x => x);
                MList.L.Clear();
            }
        }
        var        e = Z.GetfromM(M);
        var        u = e.O.GetfromO(Me);
        MethodInfo BM, EM;

        if (u == null)
        {
            BM = e.BasicBeginM;
            EM = e.BasicEndM;
        }
        else
        {
            BM = u.BeginM;
            EM = u.EndM;
        }
        if (BM != null)
        {
            BM.Invoke(null, new object[] { Me, M, O });
        }

        byte[] R = e.BegCode;
        e.HandlersConditionsInst.ForEach(x => R = AOP.Handlers[x](R, Me, e, O));
        InjectionHelper.UpdateILCodes(M, R);
        object Res = M.Invoke(Me, O.ToArray());

        // InjectionHelper.UpdateILCodes(M, this.GetType().GetMethod("ORunner_" + O.Count.ToString()).GetMethodBody().GetILAsByteArray());
        InjectionHelper.UpdateILCodes(M, e.ChangeCode);
        if (EM != null)
        {
            EM.Invoke(null, new object[] { Res, Me, M, O });
        }
        return(Res);
    }