public List <UMthdChked> GetMethodListFromFile( )
        {
            if (SolverLst1 == null)
            {
                new List <UAlgMethod>();
            }
            else
            {
                SolverLst1.Clear();
            }

            SolverLst1.AddRange(GNPX_Eng.AnMan.SolverLst0);
            SolverLst1.ForEach(P => P.IsChecked = true);

            char[] sep = new char[] { ' ', ',' };
            string st;
            int    IDx = 0;

            if (File.Exists(SDK_MethodsFileName))
            {
                using (var fIn = new StreamReader(SDK_MethodsFileName)){
                    while ((st = fIn.ReadLine()) != null)
                    {
                        bool bChk = true;

                        if (st[0] == '*')
                        {
                            var mLst = st.Split(sep, StringSplitOptions.RemoveEmptyEntries);
                            st = mLst[0].Substring(1);
                            GMthdOption[st] = mLst[1];
                        }
                        else
                        {
                            if (st[0] == '-')
                            {
                                bChk = false; st = st.Substring(1);
                            }
                            UAlgMethod Q = SolverLst1.Find(x => x.MethodName.Contains(st));
                            if (Q is UAlgMethod)
                            {
                                Q.ID = IDx++; Q.IsChecked = bChk;
                            }
                        }
                    }
                }
            }
            SolverLst1.Sort((p, q) => (p.ID - q.ID));
            SetMethodLis_1to2(FileOutput: false);
            return(SolverLst2);
        }
        public List <UMthdChked> ChangeMethodList(int nx, int UD)
        {
            UAlgMethod MA = SolverLst1[nx], MB;

            if (UD < 0)
            {
                MB = SolverLst1[nx - 1]; SolverLst1[nx - 1] = MA; SolverLst1[nx] = MB;
            }
            if (UD > 0)
            {
                MB = SolverLst1[nx + 1]; SolverLst1[nx + 1] = MA; SolverLst1[nx] = MB;
            }
            SetMethodLis_1to2(FileOutput: true);
            return(SolverLst2);
        }
        public List <UMthdChked> SetMethodLis_1to2(bool FileOutput)
        {
            string     po = (string)GNPXApp000.GMthdOption["GeneralLogicOn"];
            bool       B  = (po.ToInt() == 1);
            UAlgMethod P  = SolverLst1.Find(x => x.MethodName.Contains("GeneralLogic"));

            if (P == null)
            {
                return(null);
            }
            P.IsChecked = B; P.IsEnabled = false;

            SolverLst1.Find(x => x.MethodName.Contains("LastDigit")).IsEnabled    = false;
            SolverLst1.Find(x => x.MethodName.Contains("NakedSingle")).IsEnabled  = false;
            SolverLst1.Find(x => x.MethodName.Contains("HiddenSingle")).IsEnabled = false;

            SolverLst2 = SolverLst1.ConvertAll(Q => new UMthdChked(Q));

            if (FileOutput)
            {
                MethodListOutPut();
            }
            return(SolverLst2);
        }
        public int __DifLevel;     //(difficulty)

        public UMthdChked(UAlgMethod P)
        {
            this.UAM = P; this.ID = P.ID; Name = P.MethodName; IsChecked = P.IsChecked;
        }