Decompiled source of Mod Io Private Patch v1.1.0

MOP.dll

Decompiled a week ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Threading.Tasks;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Bounce.Singletons;
using Bounce.Unmanaged;
using HarmonyLib;
using Miop.Consumer.Messages;
using Miop.Patches;
using ModIO;
using Newtonsoft.Json;
using RPCPlugin.Interfaces;
using RPCPlugin.RPC;
using TaleSpire.ContentManagement;
using TaleSpire.Modding;
using Unity.Mathematics;
using UnityEngine;
using ZeroFormatter;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("ModIO Private Patch")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Hollo")]
[assembly: AssemblyProduct("MIOPP")]
[assembly: AssemblyCopyright("Copyright ©  2020")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4e4deb5e-97f9-4901-bf67-6748a9c1229a")]
[assembly: AssemblyFileVersion("1.1.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.1.0.0")]
internal static class InternedPackSourceReflectionFactory
{
	private static readonly ConstructorInfo _ctor;

	static InternedPackSourceReflectionFactory()
	{
		_ctor = typeof(InternedPackSource).GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[1] { typeof(PackSourceKind) }, null);
		if (_ctor == null)
		{
			throw new MissingMethodException("InternedPackSource", "Internal constructor InternedPackSource(PackSourceKind) not found.");
		}
	}

	public static InternedPackSource Create(PackSourceKind kind)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		return (InternedPackSource)_ctor.Invoke(new object[1] { kind });
	}
}
namespace RPCPlugin.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					resourceMan = new ResourceManager("RpcConsumers.Properties.Resources", typeof(Resources).Assembly);
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal Resources()
		{
		}
	}
}
namespace Miop
{
	[BepInPlugin("org.HolloFox.mop.patch", "MOP (Mod IO Private Patch)", "1.1.0.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class ModIOPrivatePatch : BaseUnityPlugin
	{
		public const string Name = "MOP (Mod IO Private Patch)";

		public const string Guid = "org.HolloFox.mop.patch";

		public const string Version = "1.1.0.0";

		internal static ManualLogSource InternalLogger;

		internal static HashSet<string> SubscribedAuthors;

		internal static HashSet<string> IgnoredAuthors;

		private ConfigEntry<string> WhiteList { get; set; }

		private ConfigEntry<string> BlackList { get; set; }

		internal static string LocalHidden { get; set; }

		public void Awake()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			InternalLogger = ((BaseUnityPlugin)this).Logger;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"In Awake for MOP (Mod IO Private Patch)");
			Harmony val = new Harmony("org.HolloFox.mop.patch");
			DoConfig(((BaseUnityPlugin)this).Config);
			val.PatchAll();
		}

		public void DoConfig(ConfigFile config)
		{
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0122: Unknown result type (might be due to invalid IL or missing references)
			WhiteList = config.Bind<string>("Author Filtering", "Auto-Subscribe", string.Empty, (ConfigDescription)null);
			BlackList = config.Bind<string>("Author Filtering", "Ignore", string.Empty, (ConfigDescription)null);
			SubscribedAuthors = WhiteList.Value.Split(",").ToHashSet();
			IgnoredAuthors = BlackList.Value.Split(",").ToHashSet();
			LocalHidden = Path.Join(string.op_Implicit(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location)), string.op_Implicit(".hidden"));
			string[] files = Directory.GetFiles(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "*.hidden");
			if (files.Any())
			{
				foreach (string item in files.Where((string f) => f != LocalHidden))
				{
					foreach (KeyValuePair<long, ModProfile> item2 in JsonConvert.DeserializeObject<Dictionary<long, ModProfile>>(File.ReadAllText(item)))
					{
						ModIOUnityAsyncGetCurrentUserCreationsPatch.importing[item2.Key] = item2.Value;
					}
				}
			}
			if (File.Exists(LocalHidden))
			{
				ModIOUnityAsyncGetCurrentUserCreationsPatch.myPrivateMods = JsonConvert.DeserializeObject<Dictionary<long, ModProfile>>(File.ReadAllText(LocalHidden));
			}
		}
	}
}
namespace Miop.Patches
{
	[HarmonyPatch(typeof(CommunityModsBrowserOwnedItem), "OnClicked")]
	internal class CommunityModsBrowserOwnedItemOnClickedPatch
	{
		public static void Prefix(ref ModInfo ____modInfo)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			if ((int)____modInfo.Kind == 4)
			{
				RPCInstance.SendMessage((RpcMessage)(object)new RespondModInfo
				{
					ModInfo = ____modInfo
				}, (PhotonTargets)0);
			}
		}
	}
	[HarmonyPatch(typeof(CommunityModsBrowserOwnedItem), "DeliverData")]
	internal class CommunityModsBrowserOwnedItemDeliverDataPatch
	{
		public static void Postfix(ref ModInfo ____modInfo, ref GameObject ____editButton)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			if ((int)____modInfo.Kind == 4 && !string.IsNullOrWhiteSpace(ModIOUnityAsyncGetCurrentUserCreationsPatch.MyRepoUserName) && ____modInfo.RepoUserName != ModIOUnityAsyncGetCurrentUserCreationsPatch.MyRepoUserName)
			{
				____editButton.SetActive(false);
			}
		}
	}
	public static class SysReflec
	{
		public static object CallMethod(this object o, string methodName, params object[] args)
		{
			MethodInfo method = o.GetType().GetMethod(methodName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
			return method?.Invoke(method.IsStatic ? null : o, args);
		}
	}
	[HarmonyPatch(typeof(ModIOUnityAsync), "GetMods")]
	internal class ModIOUnityAsyncGetModsPatch
	{
		private static List<ModProfile> mods = new List<ModProfile>();

		private static HashSet<int> addedPages = new HashSet<int>();

		public static void Prefix(ref SearchFilter filter, ref Task<ResultAnd<ModPage>> __result)
		{
			if (ModIOPrivatePatch.IgnoredAuthors.Count != 0)
			{
				filter.SetPageSize(100);
			}
		}

		public static void Postfix(ref SearchFilter filter, ref Task<ResultAnd<ModPage>> __result)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			if (ModIOPrivatePatch.IgnoredAuthors.Count == 0)
			{
				return;
			}
			int index = new Traverse((object)filter).Field("pageIndex").GetValue<int>();
			if (index == 0)
			{
				mods.Clear();
				addedPages.Clear();
			}
			Task<ResultAnd<ModPage>> copy = __result;
			__result = Task.Run<ResultAnd<ModPage>>(async delegate
			{
				ResultAnd<ModPage> val = await copy;
				if (!addedPages.Contains(index))
				{
					addedPages.Add(index);
					mods.AddRange(val.value.modProfiles.Where((ModProfile mod) => !ModIOPrivatePatch.IgnoredAuthors.Contains(mod.creator.username)));
				}
				val.value.modProfiles = mods.Skip(60 * index).Take(60).ToArray();
				return val;
			});
		}
	}
	[HarmonyPatch(typeof(ModIOUnityAsync), "GetCurrentUserCreations")]
	internal class ModIOUnityAsyncGetCurrentUserCreationsPatch
	{
		internal static Dictionary<long, ModProfile> myPrivateMods = new Dictionary<long, ModProfile>();

		internal static Dictionary<long, ModProfile> importing = new Dictionary<long, ModProfile>();

		private static HashSet<int> addedPages = new HashSet<int>();

		internal static List<ModProfile> modsPaginationProxy = new List<ModProfile>();

		internal static string MyRepoUserName;

		private static long actualOwned = -1L;

		public static void Postfix(ref SearchFilter filter, ref Task<ResultAnd<ModPage>> __result)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			Traverse val = new Traverse((object)filter);
			if (!val.Field("tags").GetValue<List<string>>().Contains("Creature"))
			{
				return;
			}
			int index = val.Field("pageIndex").GetValue<int>();
			val.Field("pageSize").GetValue<int>();
			if (index == 0)
			{
				addedPages.Clear();
				modsPaginationProxy.Clear();
				modsPaginationProxy.AddRange(importing.Values);
			}
			Task<ResultAnd<ModPage>> copy = __result;
			__result = Task.Run<ResultAnd<ModPage>>(async delegate
			{
				ResultAnd<ModPage> val2 = await copy;
				actualOwned = val2.value.totalSearchResultsFound;
				if (!addedPages.Contains(index))
				{
					addedPages.Add(index);
					foreach (ModProfile item in val2.value.modProfiles.Where((ModProfile mod) => !mod.visible))
					{
						myPrivateMods[ModId.op_Implicit(item.id)] = item;
					}
					string contents = JsonConvert.SerializeObject((object)myPrivateMods);
					File.WriteAllText(ModIOPrivatePatch.LocalHidden, contents);
					modsPaginationProxy.AddRange(val2.value.modProfiles);
				}
				val2.value.totalSearchResultsFound += importing.Count;
				if (index == 0 && val2.value.modProfiles.Length != 0)
				{
					MyRepoUserName = val2.value.modProfiles.First().creator.username;
				}
				val2.value.modProfiles = modsPaginationProxy.Skip(60 * index).Take(60).ToArray();
				return val2;
			});
		}
	}
}
namespace Miop.Consumer
{
	[InitOnLoad]
	internal sealed class RespondModInfoConsumer : RpcConsumer<RespondModInfo>
	{
		private static readonly RespondModInfoConsumer instance;

		private static readonly HashSet<ModInfo> alreadyLooked;

		public static RespondModInfoConsumer Instance => instance;

		static RespondModInfoConsumer()
		{
			instance = new RespondModInfoConsumer();
			alreadyLooked = new HashSet<ModInfo>();
		}

		private RespondModInfoConsumer()
		{
		}

		public override void Handle(RespondModInfo message)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Invalid comparison between Unknown and I4
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			ModInfo modInfo = message.ModInfo;
			if (alreadyLooked.Contains(modInfo))
			{
				ModIOPrivatePatch.InternalLogger.LogMessage((object)"has already been searched, Skipping!");
				return;
			}
			alreadyLooked.Add(modInfo);
			DbContentKind val = default(DbContentKind);
			InternedContentAddress val2 = default(InternedContentAddress);
			AssetDb.TryFindSoleSpawnableContentWithLock(modInfo.PackId, ref val, ref val2);
			if ((int)val != 4)
			{
				ModIOPrivatePatch.InternalLogger.LogMessage((object)"Does not exist, lets try finding it");
				if (!((ModInfo)(ref modInfo)).IsValid)
				{
					alreadyLooked.Remove(modInfo);
				}
				else
				{
					ModSubscription val3 = default(ModSubscription);
					SimpleSingletonBehaviour<ModManager>.Instance.MaybeAddSubscription(ref modInfo, ref val3);
				}
			}
		}
	}
}
namespace Miop.Consumer.Messages
{
	[ZeroFormattable]
	public class RespondModInfo : RpcMessage
	{
		[Index(0)]
		public virtual ushort ProviderIndex { get; set; }

		[Index(1)]
		public virtual uint Ix { get; set; }

		[Index(2)]
		public virtual uint Iy { get; set; }

		[Index(3)]
		public virtual uint Iz { get; set; }

		[Index(4)]
		public virtual uint Iw { get; set; }

		[Index(5)]
		public virtual uint Mx { get; set; }

		[Index(6)]
		public virtual uint My { get; set; }

		[Index(7)]
		public virtual uint Mz { get; set; }

		[Index(8)]
		public virtual uint Mw { get; set; }

		[Index(9)]
		public virtual string Name { get; set; }

		[Index(10)]
		public virtual string Summary { get; set; }

		[Index(11)]
		public virtual string Description { get; set; }

		[Index(12)]
		public virtual string ThumbnailUrl { get; set; }

		[Index(13)]
		public virtual string RepoUserName { get; set; }

		[Index(14)]
		public virtual string RepoModWebPageUrl { get; set; }

		[Index(15)]
		public virtual string ImageUrl { get; set; }

		[Index(16)]
		public virtual byte Kind { get; set; }

		[Index(17)]
		public virtual byte Status { get; set; }

		[Index(18)]
		public virtual ModVisibility ModVisibility { get; set; }

		[Index(19)]
		public virtual string ArchiveUrl { get; set; }

		[Index(20)]
		public virtual byte[] ArchiveMd5 { get; set; }

		[Index(21)]
		public virtual int ArchiveSize { get; set; }

		[Index(22)]
		public virtual DateTime UpdateDateTime { get; set; }

		[Index(23)]
		public virtual int UpVotes { get; set; }

		[Index(24)]
		public virtual int DownVotes { get; set; }

		[Index(25)]
		public virtual string CampaignGuid { get; set; }

		[IgnoreFormat]
		public ModInfo ModInfo
		{
			get
			{
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_000c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Unknown result type (might be due to invalid IL or missing references)
				//IL_004b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0050: Unknown result type (might be due to invalid IL or missing references)
				//IL_0055: Unknown result type (might be due to invalid IL or missing references)
				//IL_0085: Unknown result type (might be due to invalid IL or missing references)
				//IL_0096: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
				return new ModInfo(new ProviderIndex(ProviderIndex), new InternedPackId(InternedPackSourceReflectionFactory.Create((PackSourceKind)5), new SourceLocalPackId(new uint4(Ix, Iy, Iz, Iw)), new MD5(new uint4(Mx, My, Mz, Mw))), Name, (ModKind)Kind, (ModStatus)Status, Summary, Description, ThumbnailUrl, ImageUrl, ModVisibility, new ModArchiveInfo(ArchiveUrl, new MD5(ArchiveMd5), ArchiveSize, UpdateDateTime), true, RepoUserName, RepoModWebPageUrl, new ModVotes(UpVotes, DownVotes), new CampaignGuid(CampaignGuid), (object)null);
			}
			set
			{
				//IL_0020: Unknown result type (might be due to invalid IL or missing references)
				//IL_003c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0058: Unknown result type (might be due to invalid IL or missing references)
				//IL_0074: Unknown result type (might be due to invalid IL or missing references)
				//IL_0084: Unknown result type (might be due to invalid IL or missing references)
				//IL_0085: Unknown result type (might be due to invalid IL or missing references)
				//IL_008a: Unknown result type (might be due to invalid IL or missing references)
				//IL_008f: Unknown result type (might be due to invalid IL or missing references)
				//IL_009f: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00db: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
				//IL_0107: Expected I4, but got Unknown
				//IL_0108: Unknown result type (might be due to invalid IL or missing references)
				//IL_0109: Unknown result type (might be due to invalid IL or missing references)
				//IL_0113: Expected I4, but got Unknown
				//IL_0114: Unknown result type (might be due to invalid IL or missing references)
				//IL_0120: Unknown result type (might be due to invalid IL or missing references)
				//IL_012c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0138: Unknown result type (might be due to invalid IL or missing references)
				//IL_0144: Unknown result type (might be due to invalid IL or missing references)
				//IL_0145: Unknown result type (might be due to invalid IL or missing references)
				//IL_0150: Unknown result type (might be due to invalid IL or missing references)
				//IL_0151: Unknown result type (might be due to invalid IL or missing references)
				//IL_0178: Unknown result type (might be due to invalid IL or missing references)
				//IL_0179: Unknown result type (might be due to invalid IL or missing references)
				//IL_0189: Unknown result type (might be due to invalid IL or missing references)
				//IL_018a: Unknown result type (might be due to invalid IL or missing references)
				//IL_019a: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
				//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
				//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
				ProviderIndex = (ushort)((ProviderIndex)(ref value.ProviderIndex)).AsIndex;
				Ix = ((SourceLocalPackId)(ref value.PackId.SourceLocalPackId)).GetRawData().x;
				Iy = ((SourceLocalPackId)(ref value.PackId.SourceLocalPackId)).GetRawData().y;
				Iz = ((SourceLocalPackId)(ref value.PackId.SourceLocalPackId)).GetRawData().z;
				Iw = ((SourceLocalPackId)(ref value.PackId.SourceLocalPackId)).GetRawData().w;
				Mx = value.PackId.Version.Data.x;
				My = value.PackId.Version.Data.y;
				Mz = value.PackId.Version.Data.z;
				Mw = value.PackId.Version.Data.w;
				Name = value.Name;
				Kind = (byte)(int)value.Kind;
				Status = (byte)(int)value.Status;
				Summary = value.Summary;
				Description = value.Description;
				ThumbnailUrl = value.ThumbnailUrl;
				ImageUrl = value.ImageUrl;
				ModVisibility = value.ModVisibility;
				ArchiveUrl = value.ArchiveInfo.ArchiveUrl;
				ArchiveMd5 = ((MD5)(ref value.ArchiveInfo.ArchiveMd5)).ToArray();
				ArchiveSize = value.ArchiveInfo.ArchiveSize;
				UpdateDateTime = value.ArchiveInfo.UpdateDateTime;
				RepoUserName = value.RepoUserName;
				RepoModWebPageUrl = value.RepoModWebPageUrl;
				UpVotes = value.RepoVotes.UpVotes;
				DownVotes = value.RepoVotes.DownVotes;
				CampaignGuid = ((object)(CampaignGuid)(ref value.CampaignId)).ToString();
			}
		}

		public RespondModInfo()
		{
		}

		public override byte[] Value()
		{
			return ZeroFormatterSerializer.Serialize<RespondModInfo>(this);
		}

		public RespondModInfo(byte[] data)
		{
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			ModIOPrivatePatch.InternalLogger.LogInfo((object)$"Received {data.Length} bytes.");
			RespondModInfo respondModInfo = ZeroFormatterSerializer.Deserialize<RespondModInfo>(data);
			ProviderIndex = respondModInfo.ProviderIndex;
			Iw = respondModInfo.Iw;
			Ix = respondModInfo.Ix;
			Iy = respondModInfo.Iy;
			Iz = respondModInfo.Iz;
			Mw = respondModInfo.Mw;
			Mx = respondModInfo.Mx;
			My = respondModInfo.My;
			Mz = respondModInfo.Mz;
			Name = respondModInfo.Name;
			Summary = respondModInfo.Summary;
			Description = respondModInfo.Description;
			ThumbnailUrl = respondModInfo.ThumbnailUrl;
			ImageUrl = respondModInfo.ImageUrl;
			RepoUserName = respondModInfo.RepoUserName;
			RepoModWebPageUrl = respondModInfo.RepoModWebPageUrl;
			ImageUrl = respondModInfo.ImageUrl;
			Kind = respondModInfo.Kind;
			Status = respondModInfo.Status;
			ModVisibility = respondModInfo.ModVisibility;
			ArchiveUrl = respondModInfo.ArchiveUrl;
			ArchiveMd5 = respondModInfo.ArchiveMd5;
			ArchiveSize = respondModInfo.ArchiveSize;
			UpdateDateTime = respondModInfo.UpdateDateTime;
			UpVotes = respondModInfo.UpVotes;
			DownVotes = respondModInfo.DownVotes;
			CampaignGuid = respondModInfo.CampaignGuid;
		}
	}
}