//randomize program data
        internal static List <ProgramData> RandomizeProgramList(List <ProgramData> progList, int designSeed = 0)
        {
            if (progList == null)
            {
                return(null);
            }
            List <ProgramData> progListNew = progList.Select(x => new ProgramData(x)).ToList();
            List <int>         indices     = new List <int>();

            for (int i = 0; i < progList.Count; i++)
            {
                indices.Add(i);
            }
            List <int>         indicesRandom = BasicUtility.RandomizeList(indices, new Random(designSeed));
            List <ProgramData> progListOut   = new List <ProgramData>();

            for (int i = 0; i < progListNew.Count; i++)
            {
                progListOut.Add(progListNew[indicesRandom[i]]);
            }
            return(progListOut);
        }