diff --git a/StoreLib/Models/FE3.cs b/StoreLib/Models/FE3.cs index bcfaf0d..9bf8a2b 100644 --- a/StoreLib/Models/FE3.cs +++ b/StoreLib/Models/FE3.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; -using Newtonsoft.Json; +using System.IO; +using System.Text; +using System.Xml.XPath; namespace StoreLib.Models { @@ -9,95 +11,14 @@ public class PackageInstance public string PackageMoniker; public Uri PackageUri; public PackageType PackageType; - public ApplicabilityBlob ApplicabilityBlob; - public String UpdateId; - public PackageInstance(string PackageMoniker, Uri PackageUri, PackageType PackageType, ApplicabilityBlob ApplicabilityBlob, String UpdateId) + public PackageInstance(string PackageMoniker, Uri PackageUri, PackageType packageType) { this.PackageMoniker = PackageMoniker; this.PackageUri = PackageUri; - this.PackageType = PackageType; - this.ApplicabilityBlob = ApplicabilityBlob; - this.UpdateId = UpdateId; + this.PackageType = packageType; } - } - - // Root myDeserializedClass = JsonConvert.DeserializeObject(myJsonResponse); - public class ContentTargetPlatform - { - [JsonProperty("platform.maxVersionTested")] - public long PlatformMaxVersionTested { get; set; } - - [JsonProperty("platform.minVersion")] - public long PlatformMinVersion { get; set; } - - [JsonProperty("platform.target")] - public int PlatformTarget { get; set; } - } - - public class Policy - { - [JsonProperty("category.first")] - public string CategoryFirst { get; set; } - - [JsonProperty("category.second")] - public string CategorySecond { get; set; } - - [JsonProperty("category.third")] - public string CategoryThird { get; set; } - - [JsonProperty("optOut.backupRestore")] - public bool OptOutBackupRestore { get; set; } - - [JsonProperty("optOut.removeableMedia")] - public bool OptOutRemoveableMedia { get; set; } - } - - public class ThirdPartyAppRating - { - [JsonProperty("level")] - public int Level { get; set; } - - [JsonProperty("systemId")] - public int SystemId { get; set; } - } - - public class Policy2 - { - [JsonProperty("ageRating")] - public int AgeRating { get; set; } - - [JsonProperty("optOut.DVR")] - public bool OptOutDVR { get; set; } - - [JsonProperty("thirdPartyAppRatings")] - public List ThirdPartyAppRatings { get; set; } - } - - public class ApplicabilityBlob - { - [JsonProperty("blob.version")] - public long BlobVersion { get; set; } - - [JsonProperty("content.isMain")] - public bool ContentIsMain { get; set; } - - [JsonProperty("content.packageId")] - public string ContentPackageId { get; set; } - - [JsonProperty("content.productId")] - public string ContentProductId { get; set; } - - [JsonProperty("content.targetPlatforms")] - public List ContentTargetPlatforms { get; set; } - - [JsonProperty("content.type")] - public int ContentType { get; set; } - - [JsonProperty("policy")] - public Policy Policy { get; set; } - [JsonProperty("policy2")] - public Policy2 Policy2 { get; set; } + } } diff --git a/StoreLib/Services/DisplayCatalogHandler.cs b/StoreLib/Services/DisplayCatalogHandler.cs index 2ab3f31..d62c5cb 100644 --- a/StoreLib/Services/DisplayCatalogHandler.cs +++ b/StoreLib/Services/DisplayCatalogHandler.cs @@ -43,20 +43,18 @@ public static DisplayCatalogHandler ProductionConfig() /// Returns an IList of Uris containing the direct download links for the product's apps and dependacies. (if it has any). /// /// IList of Direct File URLs - public async Task> GetPackagesForProductAsync(string MSAToken = null) + public async Task> GetPackagesForProductAsync() { - string xml = await FE3Handler.SyncUpdatesAsync(ProductListing.Product.DisplaySkuAvailabilities[0].Sku.Properties.FulfillmentData.WuCategoryId, MSAToken); + string xml = await FE3Handler.SyncUpdatesAsync(ProductListing.Product.DisplaySkuAvailabilities[0].Sku.Properties.FulfillmentData.WuCategoryId); IList RevisionIDs; IList PackageNames; IList UpdateIDs; FE3Handler.ProcessUpdateIDs(xml, out RevisionIDs, out PackageNames, out UpdateIDs); - IList PackageInstances = await FE3Handler.GetPackageInstancesAsync(xml); - IList Files = await FE3Handler.GetFileUrlsAsync(UpdateIDs, RevisionIDs, MSAToken); + IList PackageInstances = await FE3Handler.GetPackageInstancesAsync(ProductListing.Product.DisplaySkuAvailabilities[0].Sku.Properties.FulfillmentData.WuCategoryId); + IList Files = await FE3Handler.GetFileUrlsAsync(UpdateIDs, RevisionIDs); foreach(PackageInstance package in PackageInstances) { - int id = PackageInstances.IndexOf(package); - package.PackageUri = Files[id]; - package.UpdateId = UpdateIDs[id]; + package.PackageUri = Files[PackageInstances.IndexOf(package)]; } return PackageInstances; } diff --git a/StoreLib/Services/FE3Handler.cs b/StoreLib/Services/FE3Handler.cs index f9c8747..9bc6037 100644 --- a/StoreLib/Services/FE3Handler.cs +++ b/StoreLib/Services/FE3Handler.cs @@ -10,7 +10,6 @@ using System.Threading.Tasks; using System.Web; using System.Xml; -using Newtonsoft.Json; namespace StoreLib.Services @@ -18,16 +17,15 @@ namespace StoreLib.Services public static class FE3Handler { private static readonly MSHttpClient _httpClient = new MSHttpClient(); - private static readonly String _msaToken = "dAA9AEUAdwBBAHcAQQBzAE4AMwBCAEEAQQBVADEAYgB5AHMAZQBtAGIAZQBEAFYAQwArADMAZgBtADcAbwBXAHkASAA3AGIAbgBnAEcAWQBtAEEAQQBMAGoAbQBqAFYAVQB2AFEAYwA0AEsAVwBFAC8AYwBDAEwANQBYAGUANABnAHYAWABkAGkAegBHAGwAZABjADEAZAAvAFcAeQAvAHgASgBQAG4AVwBRAGUAYwBtAHYAbwBjAGkAZwA5AGoAZABwAE4AawBIAG0AYQBzAHAAVABKAEwARAArAFAAYwBBAFgAbQAvAFQAcAA3AEgAagBzAEYANAA0AEgAdABsAC8AMQBtAHUAcgAwAFMAdQBtAG8AMABZAGEAdgBqAFIANwArADQAcABoAC8AcwA4ADEANgBFAFkANQBNAFIAbQBnAFIAQwA2ADMAQwBSAEoAQQBVAHYAZgBzADQAaQB2AHgAYwB5AEwAbAA2AHoAOABlAHgAMABrAFgAOQBPAHcAYQB0ADEAdQBwAFMAOAAxAEgANgA4AEEASABzAEoAegBnAFQAQQBMAG8AbgBBADIAWQBBAEEAQQBpAGcANQBJADMAUQAvAFYASABLAHcANABBAEIAcQA5AFMAcQBhADEAQgA4AGsAVQAxAGEAbwBLAEEAdQA0AHYAbABWAG4AdwBWADMAUQB6AHMATgBtAEQAaQBqAGgANQBkAEcAcgBpADgAQQBlAEUARQBWAEcAbQBXAGgASQBCAE0AUAAyAEQAVwA0ADMAZABWAGkARABUAHoAVQB0AHQARQBMAEgAaABSAGYAcgBhAGIAWgBsAHQAQQBUAEUATABmAHMARQBGAFUAYQBRAFMASgB4ADUAeQBRADgAagBaAEUAZQAyAHgANABCADMAMQB2AEIAMgBqAC8AUgBLAGEAWQAvAHEAeQB0AHoANwBUAHYAdAB3AHQAagBzADYAUQBYAEIAZQA4AHMAZwBJAG8AOQBiADUAQQBCADcAOAAxAHMANgAvAGQAUwBFAHgATgBEAEQAYQBRAHoAQQBYAFAAWABCAFkAdQBYAFEARQBzAE8AegA4AHQAcgBpAGUATQBiAEIAZQBUAFkAOQBiAG8AQgBOAE8AaQBVADcATgBSAEYAOQAzAG8AVgArAFYAQQBiAGgAcAAwAHAAUgBQAFMAZQBmAEcARwBPAHEAdwBTAGcANwA3AHMAaAA5AEoASABNAHAARABNAFMAbgBrAHEAcgAyAGYARgBpAEMAUABrAHcAVgBvAHgANgBuAG4AeABGAEQAbwBXAC8AYQAxAHQAYQBaAHcAegB5AGwATABMADEAMgB3AHUAYgBtADUAdQBtAHAAcQB5AFcAYwBLAFIAagB5AGgAMgBKAFQARgBKAFcANQBnAFgARQBJADUAcAA4ADAARwB1ADIAbgB4AEwAUgBOAHcAaQB3AHIANwBXAE0AUgBBAFYASwBGAFcATQBlAFIAegBsADkAVQBxAGcALwBwAFgALwB2AGUATAB3AFMAawAyAFMAUwBIAGYAYQBLADYAagBhAG8AWQB1AG4AUgBHAHIAOABtAGIARQBvAEgAbABGADYASgBDAGEAYQBUAEIAWABCAGMAdgB1AGUAQwBKAG8AOQA4AGgAUgBBAHIARwB3ADQAKwBQAEgAZQBUAGIATgBTAEUAWABYAHoAdgBaADYAdQBXADUARQBBAGYAZABaAG0AUwA4ADgAVgBKAGMAWgBhAEYASwA3AHgAeABnADAAdwBvAG4ANwBoADAAeABDADYAWgBCADAAYwBZAGoATAByAC8ARwBlAE8AegA5AEcANABRAFUASAA5AEUAawB5ADAAZAB5AEYALwByAGUAVQAxAEkAeQBpAGEAcABwAGgATwBQADgAUwAyAHQANABCAHIAUABaAFgAVAB2AEMAMABQADcAegBPACsAZgBHAGsAeABWAG0AKwBVAGYAWgBiAFEANQA1AHMAdwBFAD0AJgBwAD0A"; /// /// Returns raw xml containing various (Revision, Update, Package) IDs and info. /// /// /// - public static async Task SyncUpdatesAsync(string WuCategoryID, string MSAToken) + public static async Task SyncUpdatesAsync(string WuCategoryID) { - HttpContent httpContent = new StringContent(String.Format(GetResourceTextFile("WUIDRequest.xml"), await GetCookieAsync(), WuCategoryID, MSAToken ?? _msaToken), Encoding.UTF8, "application/soap+xml"); //Load in the Xml for this FE3 request and format it a cookie and the provided WuCategoryID. + HttpContent httpContent = new StringContent(String.Format(GetResourceTextFile("WUIDRequest.xml"), await GetCookieAsync(), WuCategoryID), Encoding.UTF8, "application/soap+xml"); //Load in the Xml for this FE3 request and format it a cookie and the provided WuCategoryID. HttpRequestMessage httpRequest = new HttpRequestMessage(); httpRequest.RequestUri = Endpoints.FE3Delivery; httpRequest.Content = httpContent; @@ -38,9 +36,10 @@ public static async Task SyncUpdatesAsync(string WuCategoryID, string MS return content; } - public static async Task> GetPackageInstancesAsync(string WuCategoryID, string MSAToken) + public static async Task> GetPackageInstancesAsync(string WuCategoryID) { - HttpContent httpContent = new StringContent(String.Format(GetResourceTextFile("WUIDRequest.xml"), await GetCookieAsync(), WuCategoryID, MSAToken ?? _msaToken), Encoding.UTF8, "application/soap+xml"); //Load in the Xml for this FE3 request and format it a cookie and the provided WuCategoryID. + IList PackageInstances = new List(); + HttpContent httpContent = new StringContent(String.Format(GetResourceTextFile("WUIDRequest.xml"), await GetCookieAsync(), WuCategoryID), Encoding.UTF8, "application/soap+xml"); //Load in the Xml for this FE3 request and format it a cookie and the provided WuCategoryID. HttpRequestMessage httpRequest = new HttpRequestMessage(); httpRequest.RequestUri = Endpoints.FE3Delivery; httpRequest.Content = httpContent; @@ -48,12 +47,6 @@ public static async Task> GetPackageInstancesAsync(string HttpResponseMessage httpResponse = await _httpClient.SendAsync(httpRequest, new System.Threading.CancellationToken()); string content = await httpResponse.Content.ReadAsStringAsync(); content = HttpUtility.HtmlDecode(content); - return await GetPackageInstancesAsync(content); - } - - public static async Task> GetPackageInstancesAsync(string content) - { - IList PackageInstances = new List(); XmlDocument doc = new XmlDocument(); doc.LoadXml(content); XmlNodeList nodes = doc.GetElementsByTagName("AppxMetadata"); @@ -61,9 +54,11 @@ public static async Task> GetPackageInstancesAsync(string { if(node.Attributes.Count >= 3) { - PackageInstance package = new PackageInstance(node.Attributes.GetNamedItem("PackageMoniker").Value, new Uri("http://test.com"), Utilities.TypeHelpers.StringToPackageType(node.Attributes.GetNamedItem("PackageType").Value), JsonConvert.DeserializeObject(node.FirstChild.InnerText), ""); + PackageInstance package = new PackageInstance(node.Attributes.GetNamedItem("PackageMoniker").Value, new Uri("http://test.com"), Utilities.TypeHelpers.StringToPackageType(node.Attributes.GetNamedItem("PackageType").Value)); PackageInstances.Add(package); } + + } return PackageInstances; @@ -116,13 +111,13 @@ public static void ProcessUpdateIDs(string Xml, out IList RevisionIDs, o /// /// /// IList of App Package Download Uris - public static async Task> GetFileUrlsAsync(IList UpdateIDs, IList RevisionIDs, string MSAToken) + public static async Task> GetFileUrlsAsync(IList UpdateIDs, IList RevisionIDs) { XmlDocument doc = new XmlDocument(); IList uris = new List(); foreach (string ID in UpdateIDs) { - HttpContent httpContent = new StringContent(String.Format(GetResourceTextFile("FE3FileUrl.xml"), ID, RevisionIDs[UpdateIDs.IndexOf(ID)], MSAToken ?? _msaToken), Encoding.UTF8, "application/soap+xml");//Loading the request xml from a file to keep things nice and tidy. + HttpContent httpContent = new StringContent(String.Format(GetResourceTextFile("FE3FileUrl.xml"), ID, RevisionIDs[UpdateIDs.IndexOf(ID)]), Encoding.UTF8, "application/soap+xml");//Loading the request xml from a file to keep things nice and tidy. HttpRequestMessage httpRequest = new HttpRequestMessage(); httpRequest.RequestUri = Endpoints.FE3DeliverySecured; httpRequest.Content = httpContent; diff --git a/StoreLib/Xml/FE3FileUrl.xml b/StoreLib/Xml/FE3FileUrl.xml index 1acfcc6..276d9db 100644 --- a/StoreLib/Xml/FE3FileUrl.xml +++ b/StoreLib/Xml/FE3FileUrl.xml @@ -16,7 +16,7 @@ xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wuws="http://schemas.microsoft.com/msus/2014/10/WindowsUpdateAuthorization"> - {2} + dAA9AEUAdwBBAHcAQQBzAE4AMwBCAEEAQQBVADEAYgB5AHMAZQBtAGIAZQBEAFYAQwArADMAZgBtADcAbwBXAHkASAA3AGIAbgBnAEcAWQBtAEEAQQBQAHoANQBoAFoAaQBtAGYAYwA1AE0AbgBVADMAYwAvADQARgAyAEwAawBFAFkAKwAwADkAMABhAEwAUgBOAEYAUwBTAE0AeQB3AGsAZAAyAC8ARQBZADMAWQB1AFUAeQBzACsAWABDAFIARQBoAEUAUwA3AGcAeQBBAGgAawByAGUAZQBHAHUAOABSAG4AYwBWAEYAVgBiAFUAUgBYAE0AWgBMAEMATQBWAEcARABTAFYANgB2ADMAeQBJAE0AYwBXAEwARgBUAC8ATgBuAE4ATgBRAE0ARgArAHAAWgBuAHYAZABaADAAcwBOAGwAMABwAEEARAA4AHMAMgBDAGgAcgBiAE0AZQBoAGsATwB2AEEATgA0AHUATwAyAFUAVgAwAFcAagBLAG8ARABPAEsAagBJAHkAMABXAE4AMQBnAGUASABwAC8AVwBhAEwANABTAFkAVwBBADIAWQBBAEEAQQBqAFEAZwA5AGwAUQAwAFoATwA3AEMAWQBBAEIAagAyAHgAZwB0AFQATQBuAFUAdgBkAHQAYQBOAE0AbwBxAG4AYwB3AFUATABEAHIAQQBhAG0ATQA0ADMAKwBwAGEAMwA3AG4ANgBTAEsARwBBAHYAdwB1AEwAaQAzAEQAZAB4AEcAVAAvAFEAaQAzAEYAZQBTAEUAcgA3AGkANwBiAG8ANwBoAFUAKwB2AGkASQBtAHEAVABRAG4AKwA2AEQAMgB0AEUAZgBHAGMAZQBaADgAUgB1AGoAdAAzAFIAVQBkAHIAQwB5AC8ASgBOAFIAZwBRAGcATABWAHcANABGAEwAOQB6AEsAMwBMAE8AKwBTAHoARgA0AFQAQgBuADYAbwB6AEIAcABJAHQAYgBZAHAARwAxAE8ASwBtAEoAdwBDAHIANwBqAGEAUAA2AGoASwBlAGYAbQA3AFQASQBlAEQAegBOADIAcQBMAHUAMwB5AFIAOABIAE4ANABPAFMAeABWAGsATQA4AGIANgBkAEwAVgB6AHQANwBhAEYAdABsADIANABEAFcAUwB2AG0AVwBMAG8AKwArADMAbwA0ACsASQBGAHcAagBlAHYATABuADgAYgBjAGoARwBTAEEARgBlAFAAYQBtADUAcAA0ADQANQBlAEcAegBQAFAANABiAFMASAB2AEsAbwBQAFEASwBFAG4AUQBwAEoATQBKAFIAZAA4AEcAZgBNAG4AOQA1ADgAZgBtADYALwBzADcANgBYAHEAMgBSAGUAQQBIAGUAcwBvAHoAWQBOAHYAVABlADYAQQAvAHAATgBnAFoAWQAzAGkAYgAzAEcAaABuAFYAWgBUAGcAdAA1AG4AOQBWAGoAbABwAEMAawBZAHMAOAA1AGEAbQBSADcAdQAwAGgAZAByADkALwBYAEsANgBxAGkATQBFAC8ASwAwAEQAWgBnAEEASQBSAEYAUgBuAE4AQQAxAEUAZgB4AGcARABNAEIAWgBoAFUAbgBqAHgAMABwAHcANgBPAHgAYgB3AHgAMQA5AEgAcABIAE4AOAB0ACsAQgBoAC8AVABvAE0AVABKAHoANQAvAG8AcgBzAFcATwBDAGQARgB1AHIARAAzAHUAbABWAHQAMAB1AGkAegBHAE4AVABQAEkARABsAGkAcgBkAFUAbQBFAGkAbQA4AFMAdQAyAEMANQBuAHoAbwB1AGMARQBpAGIAZgBmAGYAWAA2AFIATwBMAHcATABsAFIAYwBoAFIAMABhAFkAWQA2AEIANgB2AEEAVgB4AHYAbgA5ADMATQBNAEwAawBaAEcAYQBQACsAdQBHACsAWgA1AEoALwBqAFAANwBWAC8ASwB1AFgAOQB4ADkAUABvADUAVABmAEkATwAxAHMAdwBFAD0AJgBwAD0A diff --git a/StoreLib/Xml/WUIDRequest.xml b/StoreLib/Xml/WUIDRequest.xml index 07c5a05..93006cd 100644 --- a/StoreLib/Xml/WUIDRequest.xml +++ b/StoreLib/Xml/WUIDRequest.xml @@ -16,7 +16,7 @@ xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wuws="http://schemas.microsoft.com/msus/2014/10/WindowsUpdateAuthorization"> - {2} + dAA9AEUAdwBBAHcAQQBzAE4AMwBCAEEAQQBVADEAYgB5AHMAZQBtAGIAZQBEAFYAQwArADMAZgBtADcAbwBXAHkASAA3AGIAbgBnAEcAWQBtAEEAQQBMAGoAbQBqAFYAVQB2AFEAYwA0AEsAVwBFAC8AYwBDAEwANQBYAGUANABnAHYAWABkAGkAegBHAGwAZABjADEAZAAvAFcAeQAvAHgASgBQAG4AVwBRAGUAYwBtAHYAbwBjAGkAZwA5AGoAZABwAE4AawBIAG0AYQBzAHAAVABKAEwARAArAFAAYwBBAFgAbQAvAFQAcAA3AEgAagBzAEYANAA0AEgAdABsAC8AMQBtAHUAcgAwAFMAdQBtAG8AMABZAGEAdgBqAFIANwArADQAcABoAC8AcwA4ADEANgBFAFkANQBNAFIAbQBnAFIAQwA2ADMAQwBSAEoAQQBVAHYAZgBzADQAaQB2AHgAYwB5AEwAbAA2AHoAOABlAHgAMABrAFgAOQBPAHcAYQB0ADEAdQBwAFMAOAAxAEgANgA4AEEASABzAEoAegBnAFQAQQBMAG8AbgBBADIAWQBBAEEAQQBpAGcANQBJADMAUQAvAFYASABLAHcANABBAEIAcQA5AFMAcQBhADEAQgA4AGsAVQAxAGEAbwBLAEEAdQA0AHYAbABWAG4AdwBWADMAUQB6AHMATgBtAEQAaQBqAGgANQBkAEcAcgBpADgAQQBlAEUARQBWAEcAbQBXAGgASQBCAE0AUAAyAEQAVwA0ADMAZABWAGkARABUAHoAVQB0AHQARQBMAEgAaABSAGYAcgBhAGIAWgBsAHQAQQBUAEUATABmAHMARQBGAFUAYQBRAFMASgB4ADUAeQBRADgAagBaAEUAZQAyAHgANABCADMAMQB2AEIAMgBqAC8AUgBLAGEAWQAvAHEAeQB0AHoANwBUAHYAdAB3AHQAagBzADYAUQBYAEIAZQA4AHMAZwBJAG8AOQBiADUAQQBCADcAOAAxAHMANgAvAGQAUwBFAHgATgBEAEQAYQBRAHoAQQBYAFAAWABCAFkAdQBYAFEARQBzAE8AegA4AHQAcgBpAGUATQBiAEIAZQBUAFkAOQBiAG8AQgBOAE8AaQBVADcATgBSAEYAOQAzAG8AVgArAFYAQQBiAGgAcAAwAHAAUgBQAFMAZQBmAEcARwBPAHEAdwBTAGcANwA3AHMAaAA5AEoASABNAHAARABNAFMAbgBrAHEAcgAyAGYARgBpAEMAUABrAHcAVgBvAHgANgBuAG4AeABGAEQAbwBXAC8AYQAxAHQAYQBaAHcAegB5AGwATABMADEAMgB3AHUAYgBtADUAdQBtAHAAcQB5AFcAYwBLAFIAagB5AGgAMgBKAFQARgBKAFcANQBnAFgARQBJADUAcAA4ADAARwB1ADIAbgB4AEwAUgBOAHcAaQB3AHIANwBXAE0AUgBBAFYASwBGAFcATQBlAFIAegBsADkAVQBxAGcALwBwAFgALwB2AGUATAB3AFMAawAyAFMAUwBIAGYAYQBLADYAagBhAG8AWQB1AG4AUgBHAHIAOABtAGIARQBvAEgAbABGADYASgBDAGEAYQBUAEIAWABCAGMAdgB1AGUAQwBKAG8AOQA4AGgAUgBBAHIARwB3ADQAKwBQAEgAZQBUAGIATgBTAEUAWABYAHoAdgBaADYAdQBXADUARQBBAGYAZABaAG0AUwA4ADgAVgBKAGMAWgBhAEYASwA3AHgAeABnADAAdwBvAG4ANwBoADAAeABDADYAWgBCADAAYwBZAGoATAByAC8ARwBlAE8AegA5AEcANABRAFUASAA5AEUAawB5ADAAZAB5AEYALwByAGUAVQAxAEkAeQBpAGEAcABwAGgATwBQADgAUwAyAHQANABCAHIAUABaAFgAVAB2AEMAMABQADcAegBPACsAZgBHAGsAeABWAG0AKwBVAGYAWgBiAFEANQA1AHMAdwBFAD0AJgBwAD0A @@ -39,7 +39,6 @@ 544 549 2359974 - 2359977 5169044 8788830 23110993 @@ -70,7 +69,6 @@ 130040031 132387090 132393049 - 133399034 138537048 140377312 143747671