From fa029390abf3f9b271a2f8c777363b66ad2ec795 Mon Sep 17 00:00:00 2001 From: yallie Date: Wed, 25 Apr 2018 22:45:45 +0300 Subject: [PATCH] Added unit tests for a few known ysoserial.net exploits. --- .../SafeDeserializationHelpers.Tests.csproj | 2 + .../SafeSerializationBinderTests.cs | 5 +- SafeDeserializationHelpers.Tests/TestBase.cs | 74 +++++------------- .../TestBaseTests.cs | 63 +++++++++++++++ .../YsoserialGadgetTests.cs | 45 +++++++++++ .../CustomDataSetDeserializer.cs | 76 +++++++++++++++++++ .../SafeDeserializationHelpers.csproj | 3 + .../SafeSerializationBinder.cs | 19 ++++- 8 files changed, 232 insertions(+), 55 deletions(-) create mode 100644 SafeDeserializationHelpers.Tests/TestBaseTests.cs create mode 100644 SafeDeserializationHelpers.Tests/YsoserialGadgetTests.cs create mode 100644 SafeDeserializationHelpers/CustomDataSetDeserializer.cs diff --git a/SafeDeserializationHelpers.Tests/SafeDeserializationHelpers.Tests.csproj b/SafeDeserializationHelpers.Tests/SafeDeserializationHelpers.Tests.csproj index 9e8ab2b..3444322 100644 --- a/SafeDeserializationHelpers.Tests/SafeDeserializationHelpers.Tests.csproj +++ b/SafeDeserializationHelpers.Tests/SafeDeserializationHelpers.Tests.csproj @@ -52,8 +52,10 @@ + + diff --git a/SafeDeserializationHelpers.Tests/SafeSerializationBinderTests.cs b/SafeDeserializationHelpers.Tests/SafeSerializationBinderTests.cs index f3829be..c9f235a 100644 --- a/SafeDeserializationHelpers.Tests/SafeSerializationBinderTests.cs +++ b/SafeDeserializationHelpers.Tests/SafeSerializationBinderTests.cs @@ -66,7 +66,10 @@ public void SafeSerializationBinderDoesntBreakNormalClasses() new Hashtable { { "Hello", "World" } }, new List { func, action, action, func }, new PublicSerializable { X = 123 }, - new PrivateSerializable { Y = "Hello" } + new PrivateSerializable { Y = "Hello" }, + new DataSet[] { ds, null, null, ds, ds }, + new List { null, ds, null }, + new Dictionary { { ds.DataSetName, ds } } }; // make sure that the round-trip doesn't damage any of them diff --git a/SafeDeserializationHelpers.Tests/TestBase.cs b/SafeDeserializationHelpers.Tests/TestBase.cs index 29b37ca..ab962c7 100644 --- a/SafeDeserializationHelpers.Tests/TestBase.cs +++ b/SafeDeserializationHelpers.Tests/TestBase.cs @@ -1,66 +1,16 @@ using System; using System.Collections; using System.Data; -using System.Diagnostics; using System.IO; using System.Linq; using System.Management.Automation; using System.Runtime.Serialization.Formatters.Binary; -using System.Security; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace SafeDeserializationHelpers.Tests { - [TestClass] public class TestBase { - [TestMethod, ExpectedException(typeof(AssertFailedException))] - public void AssertDoesntThrowFailsIfExceptionWasThrown() - { - Assert_DoesNotThrow(() => { throw new SecurityException(); }); - } - - [TestMethod, ExpectedException(typeof(AssertFailedException))] - public void AssertThrowsFailsIfNoExceptionWasThrown() - { - Assert_Throws(() => { }); - } - - [TestMethod, ExpectedException(typeof(AssertFailedException))] - public void AssertThrowsFailsIfUnexpectedExceptionWasThrown() - { - Assert_Throws(() => { new ArgumentNullException(); }); - } - - [TestMethod] - public void AssertAreEqualWorksOnLotsOfDataTypes() - { - Assert_DoesNotThrow(() => - { - Assert_AreEqual(1, 1); - Assert_AreEqual("Hello", "Hello"); - Assert_AreEqual(new DataTable("Test"), new DataTable("Test")); - Assert_AreEqual(new Func(Process.Start), new Func(Process.Start)); - }); - - Assert_Throws(() => - { - Assert_AreEqual(1, 2); - }); - } - - [TestMethod] - public void RoundtripIsExpectedToSucceedOnPrimitives() - { - Assert_DoesNotThrow(() => - { - Roundtrip(1, false); - Roundtrip(1, true); - Roundtrip("Hello", false); - Roundtrip("Hello", true); - }); - } - protected void Roundtrip(object graph, bool useBinder) { var data = default(byte[]); @@ -167,6 +117,24 @@ protected void Assert_AreEqual(object expected, object actual, string msg = "Two return; } + if (expected != null && actual != null && + expected.GetType().IsValueType && !expected.GetType().IsPrimitive && + actual.GetType().IsValueType && !actual.GetType().IsPrimitive) + { + var expectedType = expected.GetType(); + var actualType = actual.GetType(); + Assert_AreEqual(expectedType, actualType, msg); + + foreach (var prop in expectedType.GetProperties()) + { + var exp = prop.GetValue(expected); + var act = prop.GetValue(actual); + Assert_AreEqual(exp, act, msg); + } + + return; + } + Assert.AreEqual(expected, actual, msg); } @@ -182,7 +150,7 @@ protected void Assert_DoesNotThrow(Action action) } } - protected void Assert_Throws(Action action) where T : Exception + protected void Assert_Throws(Action action, string msg = null) where T : Exception { try { @@ -194,10 +162,10 @@ protected void Assert_Throws(Action action) where T : Exception } catch (Exception ex) { - Assert.Fail($"Expected to catch exception of type {typeof(T).Name}, but here is what we caught: {ex.ToString()}"); + Assert.Fail(msg ?? $"Expected to catch exception of type {typeof(T).Name}, but here is what we caught: {ex.ToString()}"); } - Assert.Fail($"Expected to catch exception of type {typeof(T).Name}, but no exception was thrown."); + Assert.Fail(msg ?? $"Expected to catch exception of type {typeof(T).Name}, but no exception was thrown."); } } } diff --git a/SafeDeserializationHelpers.Tests/TestBaseTests.cs b/SafeDeserializationHelpers.Tests/TestBaseTests.cs new file mode 100644 index 0000000..207e5b0 --- /dev/null +++ b/SafeDeserializationHelpers.Tests/TestBaseTests.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.Linq; +using System.Security; +using System.Text; +using System.Threading.Tasks; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace SafeDeserializationHelpers.Tests +{ + [TestClass] + public class TestBaseTests : TestBase + { + [TestMethod, ExpectedException(typeof(AssertFailedException))] + public void AssertDoesntThrowFailsIfExceptionWasThrown() + { + Assert_DoesNotThrow(() => { throw new SecurityException(); }); + } + + [TestMethod, ExpectedException(typeof(AssertFailedException))] + public void AssertThrowsFailsIfNoExceptionWasThrown() + { + Assert_Throws(() => { }); + } + + [TestMethod, ExpectedException(typeof(AssertFailedException))] + public void AssertThrowsFailsIfUnexpectedExceptionWasThrown() + { + Assert_Throws(() => { new ArgumentNullException(); }); + } + + [TestMethod] + public void AssertAreEqualWorksOnLotsOfDataTypes() + { + Assert_DoesNotThrow(() => + { + Assert_AreEqual(1, 1); + Assert_AreEqual("Hello", "Hello"); + Assert_AreEqual(new DataTable("Test"), new DataTable("Test")); + Assert_AreEqual(new Func(Process.Start), new Func(Process.Start)); + }); + + Assert_Throws(() => + { + Assert_AreEqual(1, 2); + }); + } + + [TestMethod] + public void RoundtripIsExpectedToSucceedOnPrimitives() + { + Assert_DoesNotThrow(() => + { + Roundtrip(1, false); + Roundtrip(1, true); + Roundtrip("Hello", false); + Roundtrip("Hello", true); + }); + } + } +} diff --git a/SafeDeserializationHelpers.Tests/YsoserialGadgetTests.cs b/SafeDeserializationHelpers.Tests/YsoserialGadgetTests.cs new file mode 100644 index 0000000..9bfe532 --- /dev/null +++ b/SafeDeserializationHelpers.Tests/YsoserialGadgetTests.cs @@ -0,0 +1,45 @@ +using System; +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace SafeDeserializationHelpers.Tests +{ + [TestClass] + public class YsoserialGadgetTests : TestBase + { + private void DeserializeMaliciousPayload(string comment, string base64) + { + var payload = Convert.FromBase64String(base64); + using (var stream = new MemoryStream(payload)) + { + var fmt = new BinaryFormatter(); + fmt.Binder = new SafeSerializationBinder(); + + Assert_Throws(() => fmt.Deserialize(stream), + $"Failed to detect malicious payload: {comment}"); + } + } + + [TestMethod] + public void TypeConfuseDelegateTest() + { + DeserializeMaliciousPayload("ysoserial.exe -o base64 -g TypeConfuseDelegate -f BinaryFormatter -c calc", + @"AAEAAAD/////AQAAAAAAAAAMAgAAAElTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAACEAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLlNvcnRlZFNldGAxW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAFQ291bnQIQ29tcGFyZXIHVmVyc2lvbgVJdGVtcwADAAYIjQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Db21wYXJpc29uQ29tcGFyZXJgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0IAgAAAAIAAAAJAwAAAAIAAAAJBAAAAAQDAAAAjQFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5Db21wYXJpc29uQ29tcGFyZXJgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0BAAAAC19jb21wYXJpc29uAyJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyCQUAAAARBAAAAAIAAAAGBgAAAAcvYyBjYWxjBgcAAAADY21kBAUAAAAiU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcgMAAAAIRGVsZWdhdGUHbWV0aG9kMAdtZXRob2QxAwMDMFN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeS9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlci9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgkIAAAACQkAAAAJCgAAAAQIAAAAMFN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQcAAAAEdHlwZQhhc3NlbWJseQZ0YXJnZXQSdGFyZ2V0VHlwZUFzc2VtYmx5DnRhcmdldFR5cGVOYW1lCm1ldGhvZE5hbWUNZGVsZWdhdGVFbnRyeQEBAgEBAQMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcitEZWxlZ2F0ZUVudHJ5BgsAAACwAlN5c3RlbS5GdW5jYDNbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzLCBTeXN0ZW0sIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0GDAAAAEttc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkKBg0AAABJU3lzdGVtLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQYOAAAAGlN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzBg8AAAAFU3RhcnQJEAAAAAQJAAAAL1N5c3RlbS5SZWZsZWN0aW9uLk1lbWJlckluZm9TZXJpYWxpemF0aW9uSG9sZGVyBwAAAAROYW1lDEFzc2VtYmx5TmFtZQlDbGFzc05hbWUJU2lnbmF0dXJlClNpZ25hdHVyZTIKTWVtYmVyVHlwZRBHZW5lcmljQXJndW1lbnRzAQEBAQEAAwgNU3lzdGVtLlR5cGVbXQkPAAAACQ0AAAAJDgAAAAYUAAAAPlN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzIFN0YXJ0KFN5c3RlbS5TdHJpbmcsIFN5c3RlbS5TdHJpbmcpBhUAAAA+U3lzdGVtLkRpYWdub3N0aWNzLlByb2Nlc3MgU3RhcnQoU3lzdGVtLlN0cmluZywgU3lzdGVtLlN0cmluZykIAAAACgEKAAAACQAAAAYWAAAAB0NvbXBhcmUJDAAAAAYYAAAADVN5c3RlbS5TdHJpbmcGGQAAACtJbnQzMiBDb21wYXJlKFN5c3RlbS5TdHJpbmcsIFN5c3RlbS5TdHJpbmcpBhoAAAAyU3lzdGVtLkludDMyIENvbXBhcmUoU3lzdGVtLlN0cmluZywgU3lzdGVtLlN0cmluZykIAAAACgEQAAAACAAAAAYbAAAAcVN5c3RlbS5Db21wYXJpc29uYDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dCQwAAAAKCQwAAAAJGAAAAAkWAAAACgs="); + } + + [TestMethod] + public void PSObjectTest() + { + DeserializeMaliciousPayload("ysoserial.exe -o base64 -g PSObject -f BinaryFormatter -c calc", + @"AAEAAAD/////AQAAAAAAAAAMAgAAAF9TeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLCBWZXJzaW9uPTMuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49MzFiZjM4NTZhZDM2NGUzNQUBAAAAJVN5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24uUFNPYmplY3QBAAAABkNsaVhtbAECAAAABgMAAACJFQ0KPE9ianMgVmVyc2lvbj0iMS4xLjAuMSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vcG93ZXJzaGVsbC8yMDA0LzA0Ij4mI3hEOw0KPE9iaiBSZWZJZD0iMCI+JiN4RDsNCiAgICA8VE4gUmVmSWQ9IjAiPiYjeEQ7DQogICAgICA8VD5NaWNyb3NvZnQuTWFuYWdlbWVudC5JbmZyYXN0cnVjdHVyZS5DaW1JbnN0YW5jZSNTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uL1J1bnNwYWNlSW52b2tlNTwvVD4mI3hEOw0KICAgICAgPFQ+TWljcm9zb2Z0Lk1hbmFnZW1lbnQuSW5mcmFzdHJ1Y3R1cmUuQ2ltSW5zdGFuY2UjUnVuc3BhY2VJbnZva2U1PC9UPiYjeEQ7DQogICAgICA8VD5NaWNyb3NvZnQuTWFuYWdlbWVudC5JbmZyYXN0cnVjdHVyZS5DaW1JbnN0YW5jZTwvVD4mI3hEOw0KICAgICAgPFQ+U3lzdGVtLk9iamVjdDwvVD4mI3hEOw0KICAgIDwvVE4+JiN4RDsNCiAgICA8VG9TdHJpbmc+UnVuc3BhY2VJbnZva2U1PC9Ub1N0cmluZz4mI3hEOw0KICAgIDxPYmogUmVmSWQ9IjEiPiYjeEQ7DQogICAgICA8VE5SZWYgUmVmSWQ9IjAiIC8+JiN4RDsNCiAgICAgIDxUb1N0cmluZz5SdW5zcGFjZUludm9rZTU8L1RvU3RyaW5nPiYjeEQ7DQogICAgICA8UHJvcHM+JiN4RDsNCiAgICAgICAgPE5pbCBOPSJQU0NvbXB1dGVyTmFtZSIgLz4mI3hEOw0KCQk8T2JqIE49InRlc3QxIiBSZWZJZCA9IjIwIiA+ICYjeEQ7DQogICAgICAgICAgPFROIFJlZklkPSIxIiA+ICYjeEQ7DQogICAgICAgICAgICA8VD5TeXN0ZW0uV2luZG93cy5NYXJrdXAuWGFtbFJlYWRlcltdLCBQcmVzZW50YXRpb25GcmFtZXdvcmssIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1PC9UPiYjeEQ7DQogICAgICAgICAgICA8VD5TeXN0ZW0uQXJyYXk8L1Q+JiN4RDsNCiAgICAgICAgICAgIDxUPlN5c3RlbS5PYmplY3Q8L1Q+JiN4RDsNCiAgICAgICAgICA8L1ROPiYjeEQ7DQogICAgICAgICAgPExTVD4mI3hEOw0KICAgICAgICAgICAgPFMgTj0iSGFzaCIgPiAgDQoJCSZsdDtSZXNvdXJjZURpY3Rpb25hcnkNCiAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sL3ByZXNlbnRhdGlvbiINCiAgeG1sbnM6eD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aW5meC8yMDA2L3hhbWwiDQogIHhtbG5zOlN5c3RlbT0iY2xyLW5hbWVzcGFjZTpTeXN0ZW07YXNzZW1ibHk9bXNjb3JsaWIiDQogIHhtbG5zOkRpYWc9ImNsci1uYW1lc3BhY2U6U3lzdGVtLkRpYWdub3N0aWNzO2Fzc2VtYmx5PXN5c3RlbSImZ3Q7DQoJICZsdDtPYmplY3REYXRhUHJvdmlkZXIgeDpLZXk9IkxhdW5jaENhbGMiIE9iamVjdFR5cGUgPSAieyB4OlR5cGUgRGlhZzpQcm9jZXNzfSIgTWV0aG9kTmFtZSA9ICJTdGFydCIgJmd0Ow0KICAgICAmbHQ7T2JqZWN0RGF0YVByb3ZpZGVyLk1ldGhvZFBhcmFtZXRlcnMmZ3Q7DQogICAgICAgICZsdDtTeXN0ZW06U3RyaW5nJmd0O2NtZCZsdDsvU3lzdGVtOlN0cmluZyZndDsNCiAgICAgICAgJmx0O1N5c3RlbTpTdHJpbmcmZ3Q7L2MgImNhbGMiICZsdDsvU3lzdGVtOlN0cmluZyZndDsNCiAgICAgJmx0Oy9PYmplY3REYXRhUHJvdmlkZXIuTWV0aG9kUGFyYW1ldGVycyZndDsNCiAgICAmbHQ7L09iamVjdERhdGFQcm92aWRlciZndDsNCiZsdDsvUmVzb3VyY2VEaWN0aW9uYXJ5Jmd0Ow0KCQkJPC9TPiYjeEQ7DQogICAgICAgICAgPC9MU1Q+JiN4RDsNCiAgICAgICAgPC9PYmo+JiN4RDsNCiAgICAgIDwvUHJvcHM+JiN4RDsNCiAgICAgIDxNUz4mI3hEOw0KICAgICAgICA8T2JqIE49Il9fQ2xhc3NNZXRhZGF0YSIgUmVmSWQgPSIyIj4gJiN4RDsNCiAgICAgICAgICA8VE4gUmVmSWQ9IjEiID4gJiN4RDsNCiAgICAgICAgICAgIDxUPlN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3Q8L1Q+JiN4RDsNCiAgICAgICAgICAgIDxUPlN5c3RlbS5PYmplY3Q8L1Q+JiN4RDsNCiAgICAgICAgICA8L1ROPiYjeEQ7DQogICAgICAgICAgPExTVD4mI3hEOw0KICAgICAgICAgICAgPE9iaiBSZWZJZD0iMyI+ICYjeEQ7DQogICAgICAgICAgICAgIDxNUz4mI3hEOw0KICAgICAgICAgICAgICAgIDxTIE49IkNsYXNzTmFtZSI+UnVuc3BhY2VJbnZva2U1PC9TPiYjeEQ7DQogICAgICAgICAgICAgICAgPFMgTj0iTmFtZXNwYWNlIj5TeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uPC9TPiYjeEQ7DQogICAgICAgICAgICAgICAgPE5pbCBOPSJTZXJ2ZXJOYW1lIiAvPiYjeEQ7DQogICAgICAgICAgICAgICAgPEkzMiBOPSJIYXNoIj40NjA5MjkxOTI8L0kzMj4mI3hEOw0KICAgICAgICAgICAgICAgIDxTIE49Ik1pWG1sIj4gJmx0O0NMQVNTIE5BTUU9IlJ1bnNwYWNlSW52b2tlNSIgJmd0OyZsdDtQUk9QRVJUWSBOQU1FPSJ0ZXN0MSIgVFlQRSA9InN0cmluZyIgJmd0OyZsdDsvUFJPUEVSVFkmZ3Q7Jmx0Oy9DTEFTUyZndDs8L1M+JiN4RDsNCiAgICAgICAgICAgICAgPC9NUz4mI3hEOw0KICAgICAgICAgICAgPC9PYmo+JiN4RDsNCiAgICAgICAgICA8L0xTVD4mI3hEOw0KICAgICAgICA8L09iaj4mI3hEOw0KICAgICAgPC9NUz4mI3hEOw0KICAgIDwvT2JqPiYjeEQ7DQogICAgPE1TPiYjeEQ7DQogICAgICA8UmVmIE49Il9fQ2xhc3NNZXRhZGF0YSIgUmVmSWQgPSIyIiAvPiYjeEQ7DQogICAgPC9NUz4mI3hEOw0KICA8L09iaj4mI3hEOw0KPC9PYmpzPgs="); + } + + [TestMethod, Ignore] // fails + public void ActivitySurrogateTest() + { + DeserializeMaliciousPayload("ysoserial.exe -o base64 -g ActivitySurrogateSelector -f BinaryFormatter -c calc", + @"AAEAAAD/////AQAAAAAAAAAMAgAAAE5TeXN0ZW0uRGF0YSwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAABNTeXN0ZW0uRGF0YS5EYXRhU2V0CgAAABZEYXRhU2V0LlJlbW90aW5nRm9ybWF0E0RhdGFTZXQuRGF0YVNldE5hbWURRGF0YVNldC5OYW1lc3BhY2UORGF0YVNldC5QcmVmaXgVRGF0YVNldC5DYXNlU2Vuc2l0aXZlEkRhdGFTZXQuTG9jYWxlTENJRBpEYXRhU2V0LkVuZm9yY2VDb25zdHJhaW50cxpEYXRhU2V0LkV4dGVuZGVkUHJvcGVydGllcxREYXRhU2V0LlRhYmxlcy5Db3VudBBEYXRhU2V0LlRhYmxlc18wBAEBAQAAAAIABx9TeXN0ZW0uRGF0YS5TZXJpYWxpemF0aW9uRm9ybWF0AgAAAAEIAQgCAgAAAAX9////H1N5c3RlbS5EYXRhLlNlcmlhbGl6YXRpb25Gb3JtYXQBAAAAB3ZhbHVlX18ACAIAAAABAAAABgQAAAAACQQAAAAJBAAAAAAJBAAAAAoBAAAACQUAAAAPBQAAAIitAAACAAEAAAD/////AQAAAAAAAAAEAQAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5PYmplY3QsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24FAAAICAkCAAAABwAAAAcAAAAQAgAAAAgAAAAJAwAAAAkEAAAACQUAAAAJBgAAAAkHAAAACQgAAAAJCQAAAAoMCgAAAGFTeXN0ZW0uV29ya2Zsb3cuQ29tcG9uZW50TW9kZWwsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQMAAABqU3lzdGVtLldvcmtmbG93LkNvbXBvbmVudE1vZGVsLlNlcmlhbGl6YXRpb24uQWN0aXZpdHlTdXJyb2dhdGVTZWxlY3RvcitPYmplY3RTdXJyb2dhdGUrT2JqZWN0U2VyaWFsaXplZFJlZgIAAAAEdHlwZQttZW1iZXJEYXRhcwMFH1N5c3RlbS5Vbml0eVNlcmlhbGl6YXRpb25Ib2xkZXIKAAAACQsAAAAJDAAAAAEEAAAAAwAAAAkNAAAACQ4AAAABBQAAAAMAAAAJDwAAAAkQAAAAAQYAAAADAAAACREAAAAJEgAAAAEHAAAAAwAAAAkTAAAACRQAAAABCAAAAAMAAAAJFQAAAAkWAAAABAkAAAAcU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZQcAAAAKTG9hZEZhY3RvcgdWZXJzaW9uCENvbXBhcmVyEEhhc2hDb2RlUHJvdmlkZXIISGFzaFNpemUES2V5cwZWYWx1ZXMAAAMDAAUFCwgcU3lzdGVtLkNvbGxlY3Rpb25zLklDb21wYXJlciRTeXN0ZW0uQ29sbGVjdGlvbnMuSUhhc2hDb2RlUHJvdmlkZXII7FE4PwIAAAAKCgMAAAAJFwAAAAkYAAAABAsAAAAfU3lzdGVtLlVuaXR5U2VyaWFsaXphdGlvbkhvbGRlcgMAAAAERGF0YQlVbml0eVR5cGUMQXNzZW1ibHlOYW1lAQABCAYZAAAA+AFTeXN0ZW0uTGlucS5FbnVtZXJhYmxlK1doZXJlU2VsZWN0TGlzdEl0ZXJhdG9yYDJbW1N5c3RlbS5CeXRlW10sIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5SZWZsZWN0aW9uLkFzc2VtYmx5LCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAGGgAAAE5TeXN0ZW0uQ29yZSwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkQDAAAAAcAAAAJGwAAAAoJHAAAAAkdAAAACAgAAAAACggIAQAAAAENAAAACwAAAAYeAAAA+AFTeXN0ZW0uTGlucS5FbnVtZXJhYmxlKzxTZWxlY3RNYW55SXRlcmF0b3I+ZF9fMTdgMltbU3lzdGVtLlJlZmxlY3Rpb24uQXNzZW1ibHksIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5UeXBlLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAJGgAAABAOAAAACQAAAAgI/v///woICAEAAAAKCQMAAAAKCSEAAAANAgEPAAAACwAAAAYiAAAA7wFTeXN0ZW0uTGlucS5FbnVtZXJhYmxlK1doZXJlU2VsZWN0RW51bWVyYWJsZUl0ZXJhdG9yYDJbW1N5c3RlbS5UeXBlLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uT2JqZWN0LCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAJGgAAABAQAAAABwAAAAkEAAAACgklAAAACggIAAAAAAoICAEAAAABEQAAAAsAAAAGJgAAAClTeXN0ZW0uV2ViLlVJLldlYkNvbnRyb2xzLlBhZ2VkRGF0YVNvdXJjZQQAAAAGJwAAAE1TeXN0ZW0uV2ViLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49YjAzZjVmN2YxMWQ1MGEzYRASAAAABwAAAAkFAAAACAgAAAAACAgKAAAACAEACAEACAEACAgAAAAAARMAAAALAAAABikAAAApU3lzdGVtLkNvbXBvbmVudE1vZGVsLkRlc2lnbi5EZXNpZ25lclZlcmIEAAAABioAAABJU3lzdGVtLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4ORAUAAAABQAAAA0CCSsAAAAICAMAAAAJCAAAAAEVAAAACwAAAAYtAAAANFN5c3RlbS5SdW50aW1lLlJlbW90aW5nLkNoYW5uZWxzLkFnZ3JlZ2F0ZURpY3Rpb25hcnkEAAAABi4AAABLbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5EBYAAAABAAAACQYAAAAQFwAAAAIAAAAJBwAAAAkHAAAAEBgAAAACAAAABjEAAAAFSGVsbG8GMgAAAAZIZWxsbzIEGwAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5c3RlbS5CeXRlW10sIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24DAAAPU3lzdGVtLkJ5dGVbXVtdCAgJMwAAAAEAAAABAAAABBwAAAAiU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcgIAAAAIRGVsZWdhdGUHbWV0aG9kMAMDMFN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeS9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgk0AAAACTUAAAAEHQAAAIoBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxK0VudW1lcmF0b3JbW1N5c3RlbS5CeXRlW10sIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dBAAAAARsaXN0BWluZGV4B3ZlcnNpb24HY3VycmVudAMAAAd/U3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uQnl0ZVtdLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQgIAgoAAAAAAAAAAAoBIQAAABwAAAAJNgAAAAk3AAAAASUAAAAcAAAACTgAAAAJOQAAAAErAAAAAwAAAAk6AAAACTsAAAAHMwAAAAEBAAAABAAAAAcCCTwAAAAKCgoENAAAADBTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyK0RlbGVnYXRlRW50cnkHAAAABHR5cGUIYXNzZW1ibHkGdGFyZ2V0EnRhcmdldFR5cGVBc3NlbWJseQ50YXJnZXRUeXBlTmFtZQptZXRob2ROYW1lDWRlbGVnYXRlRW50cnkBAQIBAQEDMFN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQY9AAAA1QFTeXN0ZW0uRnVuY2AyW1tTeXN0ZW0uQnl0ZVtdLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uUmVmbGVjdGlvbi5Bc3NlbWJseSwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0JLgAAAAoJLgAAAAY/AAAAGlN5c3RlbS5SZWZsZWN0aW9uLkFzc2VtYmx5BkAAAAAETG9hZAoENQAAAC9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgcAAAAETmFtZQxBc3NlbWJseU5hbWUJQ2xhc3NOYW1lCVNpZ25hdHVyZQpTaWduYXR1cmUyCk1lbWJlclR5cGUQR2VuZXJpY0FyZ3VtZW50cwEBAQEBAAMIDVN5c3RlbS5UeXBlW10JQAAAAAkuAAAACT8AAAAGQwAAACdTeXN0ZW0uUmVmbGVjdGlvbi5Bc3NlbWJseSBMb2FkKEJ5dGVbXSkGRAAAAC5TeXN0ZW0uUmVmbGVjdGlvbi5Bc3NlbWJseSBMb2FkKFN5c3RlbS5CeXRlW10pCAAAAAoBNgAAADQAAAAGRQAAAMwCU3lzdGVtLkZ1bmNgMltbU3lzdGVtLlJlZmxlY3Rpb24uQXNzZW1ibHksIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklFbnVtZXJhYmxlYDFbW1N5c3RlbS5UeXBlLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXSwgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0JLgAAAAoJLgAAAAk/AAAABkgAAAAIR2V0VHlwZXMKATcAAAA1AAAACUgAAAAJLgAAAAk/AAAABksAAAAYU3lzdGVtLlR5cGVbXSBHZXRUeXBlcygpBkwAAAAYU3lzdGVtLlR5cGVbXSBHZXRUeXBlcygpCAAAAAoBOAAAADQAAAAGTQAAAMYBU3lzdGVtLkZ1bmNgMltbU3lzdGVtLlR5cGUsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5PYmplY3QsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dCS4AAAAKCS4AAAAGTwAAABBTeXN0ZW0uQWN0aXZhdG9yBlAAAAAOQ3JlYXRlSW5zdGFuY2UKATkAAAA1AAAACVAAAAAJLgAAAAlPAAAABlMAAAApU3lzdGVtLk9iamVjdCBDcmVhdGVJbnN0YW5jZShTeXN0ZW0uVHlwZSkGVAAAAClTeXN0ZW0uT2JqZWN0IENyZWF0ZUluc3RhbmNlKFN5c3RlbS5UeXBlKQgAAAAKAToAAAALAAAABlUAAAAmU3lzdGVtLkNvbXBvbmVudE1vZGVsLkRlc2lnbi5Db21tYW5kSUQEAAAACSoAAAAQOwAAAAIAAAAJVwAAAAgIACAAAA88AAAAAJoA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ChMWBRMXERcsYQAAc4QAAAoTGBEYERZvhQAACgARGHLPKgBwb4YAAAp0MQAAARMZERly2SoAcG+HAAAKKEMAAApzjQAAChMaERoRGW+JAAAKc4oAAApziwAACm+OAAAKExsA3gUmAADeAAARFhMEKwwAcuwLAHBzewAACnoRBCoAAAFAAAAAAC0AGUYABRAAAAEAAIUADZIABRAAAAEAANIAG+0ABRAAAAEAACgBWoIBBRAAAAEAAL0BWhcCBRAAAAETMAMAJwAAAAoAABEA0F8AAAEoNgAACgoDBm9iAAAKAANydDgAcAJ7AQAABG9jAAAKACpCAigQAAAKAAACA30BAAAEKhMwAQALAAAABAAAEQBygjgAcAorAAYqABMwAQALAAAABAAAEQBylDgAcAorAAYqABMwAwBHAAAABQAAEQBzagAACiVyngoAcG9rAAAKACVyvgoAcG9rAAAKACVy6AoAcG9rAAAKACVynzkAcG9rAAAKACVyBAsAcG9rAAAKAAorAAYqABMwBAAnAAAACwAAEQBy0zkAcANyBkYAcCgnAAAKCgZzIgAABgsCBwQFKBkAAAYMKwAIKgATMAEACwAAAAQAABEAcuNOAHAKKwAGKgATMAEACwAAAAQAABEAcgtPAHAKKwAGKgATMAMAOwAAAAUAABEAc2oAAAolcp4KAHBvawAACgAlcr4KAHBvawAACgAlcp85AHBvawAACgAlcgQLAHBvawAACgAKKwAGKgATMAQAlgAAAAwAABEAFP4GjwAACnOQAAAKCgYGKJEAAAp0DQAAGwsHKJIAAAoMCHOTAAAKDQlyY08AcG+UAAAKJglya08AcAMoLAAACm+UAAAKJtBhAAABKDYAAApyc08AcB8kb1cAAAoTBAdvlQAAChMGEQYTBREFFxT+BpYAAApzlwAACqIRBAcRBW9YAAAKAAIJBAUoGQAABhMHKwARByoAABMwAQALAAAABAAAEQByk08AcAorAAYqABMwAwAjAAAABQAAEQBzagAACiVymgwAcG9rAAAKACVyBA0AcG9rAAAKAAorAAYqABMwAQALAAAABAAAEQBy5U8AcAorAAYqABswBAAaAQAADQAAEQBzLAAABgoGA3KeCgBwFm8RAAAGdAcAABsLByg6AAAKDARvMwAACnJYDQBwbzQAAAoNCSxEAHIFUABwCHLO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c3RKU09OAFN5c3RlbS5JTwBTeXN0ZW0uRGF0YQBHZXRPYmplY3REYXRhAFN5c3RlbS5XZWIAbXNjb3JsaWIARGVzaWduZXJWZXJiADw+YwBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYwBSZWFkAExvYWQAQWRkAElzU3VwcG9ydGVkAEdldEZpZWxkAGNtZABNZW51Q29tbWFuZABHZXRNZXRob2QAZ2V0X0lzSW50ZXJmYWNlAFJlcGxhY2UAVHJhY2UAQ3JlYXRlSW5zdGFuY2UAc2V0X0RhdGFTb3VyY2UAUGFnZWREYXRhU291cmNlAFNlbGVjdFNpbmdsZU5vZGUAWG1sTm9kZQBnZXRfTWVzc2FnZQBJRW51bWVyYWJsZQBJRGlzcG9zYWJsZQBIYXNodGFibGUASVNlcmlhbGl6YWJsZQBnZXRfSXNTZXJpYWxpemFibGUAUnVudGltZVR5cGVIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAT2JqZWN0SGFuZGxlAEZpbGUAQ29uc29sZQBnZXRfTmFtZQBXcml0ZUxpbmUAQ29tYmluZQBHZXRUeXBlAFNldFR5cGUAR2V0RWxlbWVudFR5cGUAdHlwZQBDb21wYXJlAFdoZXJlAFN5c3RlbS5Db3JlAERpc3Bvc2UAUGFyc2UAQ3JlYXRlAENyZWF0ZURlbGVnYXRlAE11bHRpY2FzdERlbGVnYXRlAElTZXJpYWxpemF0aW9uU3Vycm9nYXRlAEdldFN1cnJvZ2F0ZQBHZW5lcmF0ZQBXcml0ZQBDb21waWxlckdlbmVyYXRlZEF0dHJpYnV0ZQBHdWlkQXR0cmlidXRlAERlYnVnZ2FibGVBdHRyaWJ1dGUAQ29tVmlzaWJsZUF0dHJpYnV0ZQBBc3NlbWJseVRpdGxlQXR0cmlidXRlAEFzc2VtYmx5VHJhZGVtYXJrQXR0cmlidXRlAFRhcmdldEZyYW1ld29ya0F0dHJpYnV0ZQBBc3NlbWJseUZpbGVWZXJzaW9uQXR0cmlidXRlAEFzc2VtYmx5Q29uZmlndXJhdGlvbkF0dHJpYnV0ZQBBc3NlbWJseURlc2NyaXB0aW9uQXR0cmlidXRlAENvbXBpbGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAQXNzZW1ibHlQcm9kdWN0QXR0cmlidXRlAEdldEF0dHJpYnV0ZQBBc3NlbWJseUNvcHlyaWdodEF0dHJpYnV0ZQBBc3NlbWJseUNvbXBhbnlBdHRyaWJ1dGUAUnVudGltZUNvbXBhdGliaWxpdHlBdHRyaWJ1dGUAQnl0ZQBBZGRWYWx1ZQBHZXRWYWx1ZQBTZXRWYWx1ZQB5c29zZXJpYWwuZXhlAFNlcmlhbGl6ZQBEZXNlcmlhbGl6ZQBFbmNvZGluZwBzZXRfVHlwZU5hbWVIYW5kbGluZwBTeXN0ZW0uUnVudGltZS5WZXJzaW9uaW5nAFRvQmFzZTY0U3RyaW5nAFN5c3RlbS5SdW50aW1lLlJlbW90aW5nAEZsdXNoAGdldF9MZW5ndGgAY21kb2JqAFBzT2JqZWN0TWFyc2hhbAB5c29zZXJpYWwAU3lzdGVtLlhtbABMb2FkWG1sAGdldF9Jbm5lclhtbABfeG1sAE1lbW9yeVN0cmVhbQBQcm9ncmFtAFN5c3RlbQBJc0Fzc2lnbmFibGVGcm9tAFN5c3RlbS5Db21wb25lbnRNb2RlbC5EZXNpZ24ATWFpbgBBcHBEb21haW4AZ2V0X0N1cnJlbnREb21haW4ASm9pbgBNZXNzYWdlQm94SWNvbgBnZXRfTG9jYXRpb24AU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbgBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uAFN5c3RlbS5YbWwuU2VyaWFsaXphdGlvbgBTeXN0ZW0uV2ViLlNjcmlwdC5TZXJpYWxpemF0aW9uAFN5c3RlbS5SZWZsZWN0aW9uAHNldF9Qb3NpdGlvbgBPcHRpb25FeGNlcHRpb24ARGVzY3JpcHRpb24ATmV3dG9uc29mdC5Kc29uAEZpZWxkSW5mbwBNZXRob2RJbmZvAFNlcmlhbGl6YXRpb25JbmZvAE1lbWJlckluZm8AaW5mbwBTeXN0ZW0uUnVudGltZS5TZXJpYWxpemF0aW9uLkZvcm1hdHRlcnMuU29hcABVbndyYXAAc2hvd19oZWxwAFN5c3RlbS5MaW5xAFN0cmluZ1JlYWRlcgBYbWxSZWFkZXIAWG1sVGV4dFJlYWRlcgBFdmVudEhhbmRsZXIAVGV4dFdyaXRlcgBPYmplY3RTdGF0ZUZvcm1hdHRlcgBTb2FwRm9ybWF0dGVyAExvc0Zvcm1hdHRlcgBCaW5hcnlGb3JtYXR0ZXIAZm9ybWF0dGVyAFNpbXBsZVR5cGVSZXNvbHZlcgBKYXZhU2NyaXB0VHlwZVJlc29sdmVyAFRvTG93ZXIAWG1sU2VyaWFsaXplcgBOZXREYXRhQ29udHJhY3RTZXJpYWxpemVyAFhtbE9iamVjdFNlcmlhbGl6ZXIASmF2YVNjcmlwdFNlcmlhbGl6ZXIAR2V0RW51bWVyYXRvcgBHZW5lcmljR2VuZXJhdG9yAFR5cGVDb25mdXNlRGVsZWdhdGVHZW5lcmF0b3IAT2JqZWN0RGF0YVByb3ZpZGVyR2VuZXJhdG9yAEFjdGl2aXR5U3Vycm9nYXRlU2VsZWN0b3JHZW5lcmF0b3IAUFNPYmplY3RHZW5lcmF0b3IAV2luZG93c0lkZW50aXR5R2VuZXJhdG9yAEFjdGl2YXRvcgAuY3RvcgAuY2N0b3IASVN1cnJvZ2F0ZVNlbGVjdG9yAHNldF9TdXJyb2dhdGVTZWxlY3RvcgBNeVN1cnJvZ2F0ZVNlbGVjdG9yAHNlbGVjdG9yAFN5c3RlbS5EaWFnbm9zdGljcwBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBEZWJ1Z2dpbmdNb2RlcwBHZXRBc3NlbWJsaWVzAEdldFR5cGVzAFJlYWRBbGxCeXRlcwBHZXRCeXRlcwBCaW5kaW5nRmxhZ3MASnNvblNlcmlhbGl6ZXJTZXR0aW5ncwBhcmdzAEVxdWFscwBTeXN0ZW0uV2ViLlVJLldlYkNvbnRyb2xzAFN5c3RlbS5XaW5kb3dzLkZvcm1zAENvbnRhaW5zAFN5c3RlbS5XZWIuRXh0ZW5zaW9ucwBTeXN0ZW0uQ29sbGVjdGlvbnMATkRlc2suT3B0aW9ucwBXcml0ZU9wdGlvbkRlc2NyaXB0aW9ucwBNZXNzYWdlQm94QnV0dG9ucwBTdXBwb3J0ZWRGb3JtYXR0ZXJzAHlzb3NlcmlhbC5HZW5lcmF0b3JzAFBheWxvYWRDbGFzcwBFeHBsb2l0Q2xhc3MAUHJvY2VzcwBDb25jYXQAU2VyaWFsaXphdGlvbkZvcm1hdABmb3JtYXQAUFNPYmplY3QAUmVhZE9iamVjdABEZXNlcmlhbGl6ZU9iamVjdABUb09iamVjdABTZWxlY3QARGF0YVNldABPcHRpb25TZXQAZ2FkZ2V0AEV4aXQARGlhbG9nUmVzdWx0AFhtbEVsZW1lbnQARW52aXJvbm1lbnQAWG1sRG9jdW1lbnQAZ2V0X0N1cnJlbnQAU3RhcnQASnNvbkNvbnZlcnQAdGVzdABHZXRJbnZvY2F0aW9uTGlzdABUb0xpc3QAZ2V0X091dABPcGVuU3RhbmRhcmRPdXRwdXQATW92ZU5leHQAU3lzdGVtLlRleHQAU3RyZWFtaW5nQ29udGV4dABjb250ZXh0AHYAU2hvdwBNZXNzYWdlQm94AFRvQXJyYXkAZ2V0X0Fzc2VtYmx5AFNlbGVjdE1hbnkAU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLkJpbmFyeQBJRGljdGlvbmFyeQBvcF9FcXVhbGl0eQBvcF9JbmVxdWFsaXR5AAAAAAtQAHcAbgBlAGQAAAEAE28AfABvAHUAdABwAHUAdAA9AAA/dABoAGUAIABvAHUAdABwAHUAdAAgAGYAbwByAG0AYQB0ACAAKAByAGEAdwB8AGIAYQBzAGUANgA0ACkALgAAE2cAfABnAGEAZABnAGUAdAA9AAAjdABoAGUAIABnAGEAZABnAGUAdAAgAGMAaABhAGkAbgAuAAAZZgB8AGYAbwByAG0AYQB0AHQAZQByAD0AAB10AGgAZQAgAGYAbwByAG0AYQB0AHQAZQByAC4AABVjAHwAYwBvAG0AbQBhAG4AZAA9AAA3dABoAGUAIABjAG8AbQBtAGEAbgBkACAAdABvACAAYgBlACAAZQB4AGUAYwB1AHQAZQBkAC4AAA10AHwAdABlAHMAdAAAXXcAaABlAHQAaABlAHIAIAB0AG8AIAByAHUAbgAgAHAAYQB5AGwAbwBhAGQAIABsAG8AYwBhAGwAbAB5AC4AIABEAGUAZgBhAHUAbAB0ADoAIABmAGEAbABzAGUAAA1oAHwAaABlAGwAcAAANXMAaABvAHcAIAB0AGgAaQBzACAAbQBlAHMAcwBhAGcAZQAgAGEAbgBkACAAZQB4AGkAdAAAF3kAcwBvAHMAZQByAGkAYQBsADoAIAAAWVQAcgB5ACAAJwB5AHMAbwBzAGUAcgBpAGEAbAAgAC0ALQBoAGUAbABwACcAIABmAG8AcgAgAG0AbwByAGUAIABpAG4AZgBvAHIAbQBhAHQAaQBvAG4ALgABJU0AaQBzAHMAaQBuAGcAIABhAHIAZwB1AG0AZQBuAHQAcwAuAACApXkAcwBvAHMAZQByAGkAYQBsAC4AbgBlAHQAIABnAGUAbgBlAHIAYQB0AGUAcwAgAGQAZQBzAGUAcgBpAGEAbABpAHoAYQB0AGkAbwBuACAAcABhAHkAbABvAGEAZABzACAAZgBvAHIAIABhACAAdgBhAHIAaQBlAHQAeQAgAG8AZgAgAC4ATgBFAFQAIABmAG8AcgBtAGEAdAB0AGUAcgBzAC4AACtBAHYAYQBpAGwAYQBiAGwAZQAgAGYAbwByAG0AYQB0AHQAZQByAHMAOgAAD0cAZQBuAGUAcgBpAGMAACt5AHMAbwBzAGUAcgBpAGEAbAAuAEcAZQBuAGUAcgBhAHQAbwByAHMALgAAE0cAZQBuAGUAcgBhAHQAbwByAAADCQAABSAAKAAAAykAABsJAAkARgBvAHIAbQBhAHQAdABlAHIAcwA6AAAHCQAJAAkAAClHAGEAZABnAGUAdAAgAG4AbwB0ACAAcwB1AHAAcABvAHIAdABlAGQAAD1VAHMAYQBnAGUAOgAgAHkAcwBvAHMAZQByAGkAYQBsAC4AZQB4AGUAIABbAG8AcAB0AGkAbwBuAHMAXQAAEU8AcAB0AGkAbwBuAHMAOgAAK0cAYQBkAGcAZQB0ACAAbgBvAHQAIABzAHUAcABwAG8AcgB0AGUAZAAuAAArRwBhAGQAZwBlAHQAIABuAG8AdAAgAHMAdQBwAHAAbwByAHQAZQBkACEAAGdGAG8AcgBtAGEAdAB0AGUAcgAgAG4AbwB0ACAAcwB1AHAAcABvAHIAdABlAGQALgAgAFMAdQBwAHAAbwByAHQAZQBkACAAZgBvAHIAbQBhAHQAdABlAHIAcwAgAGEAcgBlADoAIAAABSwAIAAADWIAYQBzAGUANgA0AAAZbABvAHMAZgBvAHIAbQBhAHQAdABlAHIAAAdyAGEAdwAAO1UAbgBzAHUAcABwAG8AcgB0AGUAZAAgAHMAZQByAGkAYQBsAGkAegBlAGQAIABmAG8AcgBtAGEAdAAAgXNTAHkAcwB0AGUAbQAuAFcAbwByAGsAZgBsAG8AdwAuAEMAbwBtAHAAbwBuAGUAbgB0AE0AbwBkAGUAbAAuAFMAZQByAGkAYQBsAGkAegBhAHQAaQBvAG4ALgBBAGMAdABpAHYAaQB0AHkAUwB1AHIAcgBvAGcAYQB0AGUAUwBlAGwAZQBjAHQAbwByACsATwBiAGoAZQBjAHQAUwB1AHIAcgBvAGcAYQB0AGUALAAgAFMAeQBzAHQAZQBtAC4AVwBvAHIAawBmAGwAbwB3AC4AQwBvAG0AcABvAG4AZQBuAHQATQBvAGQAZQBsACwAIABWAGUAcgBzAGkAbwBuAD0ANAAuADAALgAwAC4AMAAsACAAQwB1AGwAdAB1AHIAZQA9AG4AZQB1AHQAcgBhAGwALAAgAFAAdQBiAGwAaQBjAEsAZQB5AFQAbwBrAGUAbgA9ADMAMQBiAGYAMwA4ADUANgBhAGQAMwA2ADQAZQAzADUAACFJAG4AIABHAGUAdABPAGIAagBlAGMAdABEAGEAdABhAAARRwBlAHQAVAB5AHAAZQBzAABpUwB5AHMAdABlAG0ALgBSAHUAbgB0AGkAbQBlAC4AUgBlAG0AbwB0AGkAbgBnAC4AQwBoAGEAbgBuAGUAbABzAC4AQQBnAGcAcgBlAGcAYQB0AGUARABpAGMAdABpAG8AbgBhAHIAeQAAB1gAWQBaAAAVcAByAG8AcABlAHIAdABpAGUAcwAAC0gAZQBsAGwAbwAAC0QAdQBtAG0AeQAADUgAZQBsAGwAbwAyAAAPYgB1AGMAawBlAHQAcwAAB2sAZQB5AAAtRABhAHQAYQBTAGUAdAAuAFIAZQBtAG8AdABpAG4AZwBGAG8AcgBtAGEAdAAAJ0QAYQB0AGEAUwBlAHQALgBEAGEAdABhAFMAZQB0AE4AYQBtAGUAACNEAGEAdABhAFMAZQB0AC4ATgBhAG0AZQBzAHAAYQBjAGUAAB1EAGEAdABhAFMAZQB0AC4AUAByAGUAZgBpAHgAACtEAGEAdABhAFMAZQB0AC4AQwBhAHMAZQBTAGUAbgBzAGkAdABpAHYAZQAAJUQAYQB0AGEAUwBlAHQALgBMAG8AYwBhAGwAZQBMAEMASQBEAAA1RABhAHQAYQBTAGUAdAAuAEUAbgBmAG8AcgBjAGUAQwBvAG4AcwB0AHIAYQBpAG4AdABzAAA1RABhAHQAYQBTAGUAdAAuAEUAeAB0AGUAbgBkAGUAZABQAHIAbwBwAGUAcgB0AGkAZQBzAAApRABhAHQAYQBTAGUAdAAuAFQAYQBiAGwAZQBzAC4AQwBvAHUAbgB0AAAhRABhAHQAYQBTAGUAdAAuAFQAYQBiAGwAZQBzAF8AMAAAgSFBAGMAdABpAHYAaQB0AHkAUwB1AHIAcgBvAGcAYQB0AGUAUwBlAGwAZQBjAHQAbwByACAAZwBhAGQAZwBlAHQAIABiAHkAIABKAGEAbQBlAHMAIABGAG8AcgBzAGgAYQB3AC4AIABUAGgAaQBzACAAZwBhAGQAZwBlAHQAIABpAGcAbgBvAHIAZQBzACAAdABoAGUAIABjAG8AbQBtAGEAbgBkACAAcABhAHIAYQBtAGUAdABlAHIAIABhAG4AZAAgAGUAeABlAGMAdQB0AGUAcwAgAHQAaABlACAAYwBvAG4AcwB0AHIAdQBjAHQAbwByACAAbwBmACAARQB4AHAAbABvAGkAdABDAGwAYQBzAHMAIABjAGwAYQBzAHMALgAAH0IAaQBuAGEAcgB5AEYAbwByAG0AYQB0AHQAZQByAAApTwBiAGoAZQBjAHQAUwB0AGEAdABlAEYAbwByAG0AYQB0AHQAZQByAAAbUwBvAGEAcABGAG8AcgBtAGEAdAB0AGUAcgAAGUwAbwBzAEYAbwByAG0AYQB0AHQAZQByAAAzQQBjAHQAaQB2AGkAdAB5AFMAdQByAHIAbwBnAGEAdABlAFMAZQBsAGUAYwB0AG8AcgAAH2IAaQBuAGEAcgB5AGYAbwByAG0AYQB0AHQAZQByAAApbwBiAGoAZQBjAHQAcwB0AGEAdABlAGYAbwByAG0AYQB0AHQAZQByAAAbcwBvAGEAcABmAG8AcgBtAGEAdAB0AGUAcgAAM24AZQB0AGQAYQB0AGEAYwBvAG4AdAByAGEAYwB0AHMAZQByAGkAYQBsAGkAegBlAHIAAC9GAG8AcgBtAGEAdAB0AGUAcgAgAG4AbwB0ACAAcwB1AHAAcABvAHIAdABlAGQAAH1PAGIAagBlAGMAdABEAGEAdABhAFAAcgBvAHYAaQBkAGUAcgAgAEcAYQBkAGcAZQB0ACAAYgB5ACAATwBsAGUAawBzAGEAbgBkAHIAIABNAGkAcgBvAHMAaAAgAGEAbgBkACAAQQBsAHYAYQByAG8AIABNAHUAbgBvAHoAABFKAHMAbwBuAC4ATgBlAHQAABFGAGEAcwB0AEoAcwBvAG4AAClKAGEAdgBhAFMAYwByAGkAcAB0AFMAZQByAGkAYQBsAGkAegBlAHIAABtYAG0AbABTAGUAcgBpAGEAbABpAHoAZQByAAAtRABhAHQAYQBDAG8AbgB0AHIAYQBjAHQAUwBlAHIAaQBhAGwAaQB6AGUAcgAAJU8AYgBqAGUAYwB0AEQAYQB0AGEAUAByAG8AdgBpAGQAZQByAAARagBzAG8AbgAuAG4AZQB0AACCy3sADQAKACAAIAAgACAAJwAkAHQAeQBwAGUAJwA6ACcAUwB5AHMAdABlAG0ALgBXAGkAbgBkAG8AdwBzAC4ARABhAHQAYQAuAE8AYgBqAGUAYwB0AEQAYQB0AGEAUAByAG8AdgBpAGQAZQByACwAIABQAHIAZQBzAGUAbgB0AGEAdABpAG8AbgBGAHIAYQBtAGUAdwBvAHIAawAsACAAVgBlAHIAcwBpAG8AbgA9ADQALgAwAC4AMAAuADAALAAgAEMAdQBsAHQAdQByAGUAPQBuAGUAdQB0AHIAYQBsACwAIABQAHUAYgBsAGkAYwBLAGUAeQBUAG8AawBlAG4APQAzADEAYgBmADMAOAA1ADYAYQBkADMANgA0AGUAMwA1ACcALAAgAA0ACgAgACAAIAAgACcATQBlAHQAaABvAGQATgBhAG0AZQAnADoAJwBTAHQAYQByAHQAJwAsAA0ACgAgACAAIAAgACcATQBlAHQAaABvAGQAUABhAHIAYQBtAGUAdABlAHIAcwAnADoAewANAAoAIAAgACAAIAAgACAAIAAgACcAJAB0AHkAcABlACcAOgAnAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4AQQByAHIAYQB5AEwAaQBzAHQALAAgAG0AcwBjAG8AcgBsAGkAYgAsACAAVgBlAHIAcwBpAG8AbgA9ADQALgAwAC4AMAAuADAALAAgAEMAdQBsAHQAdQByAGUAPQBuAGUAdQB0AHIAYQBsACwAIABQAHUAYgBsAGkAYwBLAGUAeQBUAG8AawBlAG4APQBiADcANwBhADUAYwA1ADYAMQA5ADMANABlADAAOAA5ACcALAANAAoAIAAgACAAIAAgACAAIAAgACcAJAB2AGEAbAB1AGUAcwAnADoAWwAnAGMAbQBkACcALAAnAC8AYwAgAAGBKycAXQANAAoAIAAgACAAIAB9ACwADQAKACAAIAAgACAAJwBPAGIAagBlAGMAdABJAG4AcwB0AGEAbgBjAGUAJwA6AHsAJwAkAHQAeQBwAGUAJwA6ACcAUwB5AHMAdABlAG0ALgBEAGkAYQBnAG4AbwBzAHQAaQBjAHMALgBQAHIAbwBjAGUAcwBzACwAIABTAHkAcwB0AGUAbQAsACAAVgBlAHIAcwBpAG8AbgA9ADQALgAwAC4AMAAuADAALAAgAEMAdQBsAHQAdQByAGUAPQBuAGUAdQB0AHIAYQBsACwAIABQAHUAYgBsAGkAYwBLAGUAeQBUAG8AawBlAG4APQBiADcANwBhADUAYwA1ADYAMQA5ADMANABlADAAOAA5ACcAfQANAAoAfQABEWYAYQBzAHQAagBzAG8AbgAAhL17AA0ACgAgACAAIAAgACIAJAB0AHkAcABlAHMAIgA6AHsADQAKACAAIAAgACAAIAAgACAAIAAiAFMAeQBzAHQAZQBtAC4AVwBpAG4AZABvAHcAcwAuAEQAYQB0AGEALgBPAGIAagBlAGMAdABEAGEAdABhAFAAcgBvAHYAaQBkAGUAcgAsACAAUAByAGUAcwBlAG4AdABhAHQAaQBvAG4ARgByAGEAbQBlAHcAbwByAGsALAAgAFYAZQByAHMAaQBvAG4AIAA9ACAANAAuADAALgAwAC4AMAAsACAAQwB1AGwAdAB1AHIAZQAgAD0AIABuAGUAdQB0AHIAYQBsACwAIABQAHUAYgBsAGkAYwBLAGUAeQBUAG8AawBlAG4AIAA9ACAAMwAxAGIAZgAzADgANQA2AGEAZAAzADYANABlADMANQAiADoAIgAxACIALAANAAoAIAAgACAAIAAgACAAIAAgACIAUwB5AHMAdABlAG0ALgBEAGkAYQBnAG4AbwBzAHQAaQBjAHMALgBQAHIAbwBjAGUAcwBzACwAIABTAHkAcwB0AGUAbQAsACAAVgBlAHIAcwBpAG8AbgAgAD0AIAA0AC4AMAAuADAALgAwACwAIABDAHUAbAB0AHUAcgBlACAAPQAgAG4AZQB1AHQAcgBhAGwALAAgAFAAdQBiAGwAaQBjAEsAZQB5AFQAbwBrAGUAbgAgAD0AIABiADcANwBhADUAYwA1ADYAMQA5ADMANABlADAAOAA5ACIAOgAiADIAIgAsAA0ACgAgACAAIAAgACAAIAAgACAAIgBTAHkAcwB0AGUAbQAuAEQAaQBhAGcAbgBvAHMAdABpAGMAcwAuAFAAcgBvAGMAZQBzAHMAUwB0AGEAcgB0AEkAbgBmAG8ALAAgAFMAeQBzAHQAZQBtACwAIABWAGUAcgBzAGkAbwBuACAAPQAgADQALgAwAC4AMAAuADAALAAgAEMAdQBsAHQAdQByAGUAIAA9ACAAbgBlAHUAdAByAGEAbAAsACAAUAB1AGIAbABpAGMASwBlAHkAVABvAGsAZQBuACAAPQAgAGIANwA3AGEANQBjADUANgAxADkAMwA0AGUAMAA4ADkAIgA6ACIAMwAiAA0ACgAgACAAIAAgAH0ALAANAAoAIAAgACAAIAAiACQAdAB5AHAAZQAiADoAIgAxACIALAANAAoAIAAgACAAIAAiAE8AYgBqAGUAYwB0AEkAbgBzAHQAYQBuAGMAZQAiADoAewANAAoAIAAgACAAIAAgACAAIAAgACIAJAB0AHkAcABlACIAOgAiADIAIgAsAA0ACgAgACAAIAAgACAAIAAgACAAIgBTAHQAYQByAHQASQBuAGYAbwAiADoAewANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIgAkAHQAeQBwAGUAIgA6ACIAMwAiACwADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACIARgBpAGwAZQBOAGEAbQBlACIAOgAiAGMAbQBkACIALAANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIgBBAHIAZwB1AG0AZQBuAHQAcwAiADoAIgAvAGMAIAAAYyIADQAKACAAIAAgACAAIAAgACAAIAB9AA0ACgAgACAAIAAgAH0ALAANAAoAIAAgACAAIAAiAE0AZQB0AGgAbwBkAE4AYQBtAGUAIgA6ACIAUwB0AGEAcgB0ACIADQAKAH0AAClqAGEAdgBhAHMAYwByAGkAcAB0AHMAZQByAGkAYQBsAGkAegBlAHIAAIQ/ewANAAoAIAAgACAAIAAnAF8AXwB0AHkAcABlACcAOgAnAFMAeQBzAHQAZQBtAC4AVwBpAG4AZABvAHcAcwAuAEQAYQB0AGEALgBPAGIAagBlAGMAdABEAGEAdABhAFAAcgBvAHYAaQBkAGUAcgAsACAAUAByAGUAcwBlAG4AdABhAHQAaQBvAG4ARgByAGEAbQBlAHcAbwByAGsALAAgAFYAZQByAHMAaQBvAG4APQA0AC4AMAAuADAALgAwACwAIABDAHUAbAB0AHUAcgBlAD0AbgBlAHUAdAByAGEAbAAsACAAUAB1AGIAbABpAGMASwBlAHkAVABvAGsAZQBuAD0AMwAxAGIAZgAzADgANQA2AGEAZAAzADYANABlADMANQAnACwAIAANAAoAIAAgACAAIAAnAE0AZQB0AGgAbwBkAE4AYQBtAGUAJwA6ACcAUwB0AGEAcgB0ACcALAANAAoAIAAgACAAIAAnAE8AYgBqAGUAYwB0AEkAbgBzAHQAYQBuAGMAZQAnADoAewANAAoAIAAgACAAIAAgACAAIAAgACcAXwBfAHQAeQBwAGUAJwA6ACcAUwB5AHMAdABlAG0ALgBEAGkAYQBnAG4AbwBzAHQAaQBjAHMALgBQAHIAbwBjAGUAcwBzACwAIABTAHkAcwB0AGUAbQAsACAAVgBlAHIAcwBpAG8AbgA9ADQALgAwAC4AMAAuADAALAAgAEMAdQBsAHQAdQByAGUAPQBuAGUAdQB0AHIAYQBsACwAIABQAHUAYgBsAGkAYwBLAGUAeQBUAG8AawBlAG4APQBiADcANwBhADUAYwA1ADYAMQA5ADMANABlADAAOAA5ACcALAANAAoAIAAgACAAIAAgACAAIAAgACcAUwB0AGEAcgB0AEkAbgBmAG8AJwA6ACAAewANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJwBfAF8AdAB5AHAAZQAnADoAJwBTAHkAcwB0AGUAbQAuAEQAaQBhAGcAbgBvAHMAdABpAGMAcwAuAFAAcgBvAGMAZQBzAHMAUwB0AGEAcgB0AEkAbgBmAG8ALAAgAFMAeQBzAHQAZQBtACwAIABWAGUAcgBzAGkAbwBuAD0ANAAuADAALgAwAC4AMAAsACAAQwB1AGwAdAB1AHIAZQA9AG4AZQB1AHQAcgBhAGwALAAgAFAAdQBiAGwAaQBjAEsAZQB5AFQAbwBrAGUAbgA9AGIANwA3AGEANQBjADUANgAxADkAMwA0AGUAMAA4ADkAJwAsAA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAnAEYAaQBsAGUATgBhAG0AZQAnADoAJwBjAG0AZAAnACwADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACcAQQByAGcAdQBtAGUAbgB0AHMAJwA6ACcALwBjACAAAS0nAA0ACgAgACAAIAAgACAAIAAgACAAfQANAAoAIAAgACAAIAB9AA0ACgB9AAEbeABtAGwAcwBlAHIAaQBhAGwAaQB6AGUAcgAAj388AD8AeABtAGwAIAB2AGUAcgBzAGkAbwBuAD0AIgAxAC4AMAAiAD8APgANAAoAPAByAG8AbwB0ACAAeABtAGwAbgBzADoAeABzAGkAPQAiAGgAdAB0AHAAOgAvAC8AdwB3AHcALgB3ADMALgBvAHIAZwAvADIAMAAwADEALwBYAE0ATABTAGMAaABlAG0AYQAtAGkAbgBzAHQAYQBuAGMAZQAiACAAeABtAGwAbgBzADoAeABzAGQAPQAiAGgAdAB0AHAAOgAvAC8AdwB3AHcALgB3ADMALgBvAHIAZwAvADIAMAAwADEALwBYAE0ATABTAGMAaABlAG0AYQAiACAAdAB5AHAAZQA9ACIAUwB5AHMAdABlAG0ALgBEAGEAdABhAC4AUwBlAHIAdgBpAGMAZQBzAC4ASQBuAHQAZQByAG4AYQBsAC4ARQB4AHAAYQBuAGQAZQBkAFcAcgBhAHAAcABlAHIAYAAyAFsAWwBTAHkAcwB0AGUAbQAuAFcAaQBuAGQAbwB3AHMALgBNAGEAcgBrAHUAcAAuAFgAYQBtAGwAUgBlAGEAZABlAHIALAAgAFAAcgBlAHMAZQBuAHQAYQB0AGkAbwBuAEYAcgBhAG0AZQB3AG8AcgBrACwAIABWAGUAcgBzAGkAbwBuAD0ANAAuADAALgAwAC4AMAAsACAAQwB1AGwAdAB1AHIAZQA9AG4AZQB1AHQAcgBhAGwALAAgAFAAdQBiAGwAaQBjAEsAZQB5AFQAbwBrAGUAbgA9ADMAMQBiAGYAMwA4ADUANgBhAGQAMwA2ADQAZQAzADUAXQAsAFsAUwB5AHMAdABlAG0ALgBXAGkAbgBkAG8AdwBzAC4ARABhAHQAYQAuAE8AYgBqAGUAYwB0AEQAYQB0AGEAUAByAG8AdgBpAGQAZQByACwAIABQAHIAZQBzAGUAbgB0AGEAdABpAG8AbgBGAHIAYQBtAGUAdwBvAHIAawAsACAAVgBlAHIAcwBpAG8AbgA9ADQALgAwAC4AMAAuADAALAAgAEMAdQBsAHQAdQByAGUAPQBuAGUAdQB0AHIAYQBsACwAIABQAHUAYgBsAGkAYwBLAGUAeQBUAG8AawBlAG4APQAzADEAYgBmADMAOAA1ADYAYQBkADMANgA0AGUAMwA1AF0AXQAsACAAUwB5AHMAdABlAG0ALgBEAGEAdABhAC4AUwBlAHIAdgBpAGMAZQBzACwAIABWAGUAcgBzAGkAbwBuAD0ANAAuADAALgAwAC4AMAAsACAAQwB1AGwAdAB1AHIAZQA9AG4AZQB1AHQAcgBhAGwALAAgAFAAdQBiAGwAaQBjAEsAZQB5AFQAbwBrAGUAbgA9AGIANwA3AGEANQBjADUANgAxADkAMwA0AGUAMAA4ADkAIgA+AA0ACgAgACAAIAAgADwARQB4AHAAYQBuAGQAZQBkAFcAcgBhAHAAcABlAHIATwBmAFgAYQBtAGwAUgBlAGEAZABlAHIATwBiAGoAZQBjAHQARABhAHQAYQBQAHIAbwB2AGkAZABlAHIAPgANAAoAIAAgACAAIAAgACAAIAAgADwARQB4AHAAYQBuAGQAZQBkAEUAbABlAG0AZQBuAHQALwA+AA0ACgAgACAAIAAgACAAIAAgACAAPABQAHIAbwBqAGUAYwB0AGUAZABQAHIAbwBwAGUAcgB0AHkAMAA+AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAA8AE0AZQB0AGgAbwBkAE4AYQBtAGUAPgBQAGEAcgBzAGUAPAAvAE0AZQB0AGgAbwBkAE4AYQBtAGUAPgANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAPABNAGUAdABoAG8AZABQAGEAcgBhAG0AZQB0AGUAcgBzAD4ADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAPABhAG4AeQBUAHkAcABlACAAeABtAGwAbgBzADoAeABzAGkAPQAiAGgAdAB0AHAAOgAvAC8AdwB3AHcALgB3ADMALgBvAHIAZwAvADIAMAAwADEALwBYAE0ATABTAGMAaABlAG0AYQAtAGkAbgBzAHQAYQBuAGMAZQAiACAAeABtAGwAbgBzADoAeABzAGQAPQAiAGgAdAB0AHAAOgAvAC8AdwB3AHcALgB3ADMALgBvAHIAZwAvADIAMAAwADEALwBYAE0ATABTAGMAaABlAG0AYQAiACAAeABzAGkAOgB0AHkAcABlAD0AIgB4AHMAZAA6AHMAdAByAGkAbgBnACIAPgANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACYAbAB0ADsAUgBlAHMAbwB1AHIAYwBlAEQAaQBjAHQAaQBvAG4AYQByAHkAIAB4AG0AbABuAHMAPQAmAHEAdQBvAHQAOwBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8AdwBpAG4AZgB4AC8AMgAwADAANgAvAHgAYQBtAGwALwBwAHIAZQBzAGUAbgB0AGEAdABpAG8AbgAmAHEAdQBvAHQAOwAgAHgAbQBsAG4AcwA6AHgAPQAmAHEAdQBvAHQAOwBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8AdwBpAG4AZgB4AC8AMgAwADAANgAvAHgAYQBtAGwAJgBxAHUAbwB0ADsAIAB4AG0AbABuAHMAOgBTAHkAcwB0AGUAbQA9ACYAcQB1AG8AdAA7AGMAbAByAC0AbgBhAG0AZQBzAHAAYQBjAGUAOgBTAHkAcwB0AGUAbQA7AGEAcwBzAGUAbQBiAGwAeQA9AG0AcwBjAG8AcgBsAGkAYgAmAHEAdQBvAHQAOwAgAHgAbQBsAG4AcwA6AEQAaQBhAGcAPQAmAHEAdQBvAHQAOwBjAGwAcgAtAG4AYQBtAGUAcwBwAGEAYwBlADoAUwB5AHMAdABlAG0ALgBEAGkAYQBnAG4AbwBzAHQAaQBjAHMAOwBhAHMAcwBlAG0AYgBsAHkAPQBzAHkAcwB0AGUAbQAmAHEAdQBvAHQAOwAmAGcAdAA7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAmAGwAdAA7AE8AYgBqAGUAYwB0AEQAYQB0AGEAUAByAG8AdgBpAGQAZQByACAAeAA6AEsAZQB5AD0AJgBxAHUAbwB0ADsATABhAHUAbgBjAGgAQwBtAGQAJgBxAHUAbwB0ADsAIABPAGIAagBlAGMAdABUAHkAcABlAD0AJgBxAHUAbwB0ADsAewB7AHgAOgBUAHkAcABlACAARABpAGEAZwA6AFAAcgBvAGMAZQBzAHMAfQB9ACYAcQB1AG8AdAA7ACAATQBlAHQAaABvAGQATgBhAG0AZQA9ACYAcQB1AG8AdAA7AFMAdABhAHIAdAAmAHEAdQBvAHQAOwAmAGcAdAA7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACYAbAB0ADsATwBiAGoAZQBjAHQARABhAHQAYQBQAHIAbwB2AGkAZABlAHIALgBNAGUAdABoAG8AZABQAGEAcgBhAG0AZQB0AGUAcgBzACYAZwB0ADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAmAGwAdAA7AFMAeQBzAHQAZQBtADoAUwB0AHIAaQBuAGcAJgBnAHQAOwBjAG0AZAAmAGwAdAA7AC8AUwB5AHMAdABlAG0AOgBTAHQAcgBpAG4AZwAmAGcAdAA7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJgBsAHQAOwBTAHkAcwB0AGUAbQA6AFMAdAByAGkAbgBnACYAZwB0ADsALwBjACAAewAwAH0AJgBsAHQAOwAvAFMAeQBzAHQAZQBtADoAUwB0AHIAaQBuAGcAJgBnAHQAOwANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAmAGwAdAA7AC8ATwBiAGoAZQBjAHQARABhAHQAYQBQAHIAbwB2AGkAZABlAHIALgBNAGUAdABoAG8AZABQAGEAcgBhAG0AZQB0AGUAcgBzACYAZwB0ADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACYAbAB0ADsALwBPAGIAagBlAGMAdABEAGEAdABhAFAAcgBvAHYAaQBkAGUAcgAmAGcAdAA7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJgBsAHQAOwAvAFIAZQBzAG8AdQByAGMAZQBEAGkAYwB0AGkAbwBuAGEAcgB5ACYAZwB0ADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAPAAvAGEAbgB5AFQAeQBwAGUAPgANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAPAAvAE0AZQB0AGgAbwBkAFAAYQByAGEAbQBlAHQAZQByAHMAPgANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAPABPAGIAagBlAGMAdABJAG4AcwB0AGEAbgBjAGUAIAB4AHMAaQA6AHQAeQBwAGUAPQAiAFgAYQBtAGwAUgBlAGEAZABlAHIAIgA+ADwALwBPAGIAagBlAGMAdABJAG4AcwB0AGEAbgBjAGUAPgANAAoAIAAgACAAIAAgACAAIAAgADwALwBQAHIAbwBqAGUAYwB0AGUAZABQAHIAbwBwAGUAcgB0AHkAMAA+AA0ACgAgACAAIAAgADwALwBFAHgAcABhAG4AZABlAGQAVwByAGEAcABwAGUAcgBPAGYAWABhAG0AbABSAGUAYQBkAGUAcgBPAGIAagBlAGMAdABEAGEAdABhAFAAcgBvAHYAaQBkAGUAcgA+AA0ACgA8AC8AcgBvAG8AdAA+AA0ACgABCXIAbwBvAHQAAAl0AHkAcABlAAAtZABhAHQAYQBjAG8AbgB0AHIAYQBjAHQAcwBlAHIAaQBhAGwAaQB6AGUAcgAAjWE8AD8AeABtAGwAIAB2AGUAcgBzAGkAbwBuAD0AIgAxAC4AMAAiAD8APgANAAoAPAByAG8AbwB0ACAAeABtAGwAbgBzADoAeABzAGkAPQAiAGgAdAB0AHAAOgAvAC8AdwB3AHcALgB3ADMALgBvAHIAZwAvADIAMAAwADEALwBYAE0ATABTAGMAaABlAG0AYQAtAGkAbgBzAHQAYQBuAGMAZQAiACAAeABtAGwAbgBzADoAeABzAGQAPQAiAGgAdAB0AHAAOgAvAC8AdwB3AHcALgB3ADMALgBvAHIAZwAvADIAMAAwADEALwBYAE0ATABTAGMAaABlAG0AYQAiACAAdAB5AHAAZQA9ACIAUwB5AHMAdABlAG0ALgBEAGEAdABhAC4AUwBlAHIAdgBpAGMAZQBzAC4ASQBuAHQAZQByAG4AYQBsAC4ARQB4AHAAYQBuAGQAZQBkAFcAcgBhAHAAcABlAHIAYAAyAFsAWwBTAHkAcwB0AGUAbQAuAEQAaQBhAGcAbgBvAHMAdABpAGMAcwAuAFAAcgBvAGMAZQBzAHMALAAgAFMAeQBzAHQAZQBtACwAIABWAGUAcgBzAGkAbwBuAD0ANAAuADAALgAwAC4AMAAsACAAQwB1AGwAdAB1AHIAZQA9AG4AZQB1AHQAcgBhAGwALAAgAFAAdQBiAGwAaQBjAEsAZQB5AFQAbwBrAGUAbgA9AGIANwA3AGEANQBjADUANgAxADkAMwA0AGUAMAA4ADkAXQAsAFsAUwB5AHMAdABlAG0ALgBXAGkAbgBkAG8AdwBzAC4ARABhAHQAYQAuAE8AYgBqAGUAYwB0AEQAYQB0AGEAUAByAG8AdgBpAGQAZQByACwAIABQAHIAZQBzAGUAbgB0AGEAdABpAG8AbgBGAHIAYQBtAGUAdwBvAHIAawAsACAAVgBlAHIAcwBpAG8AbgA9ADQALgAwAC4AMAAuADAALAAgAEMAdQBsAHQAdQByAGUAPQBuAGUAdQB0AHIAYQBsACwAIABQAHUAYgBsAGkAYwBLAGUAeQBUAG8AawBlAG4APQAzADEAYgBmADMAOAA1ADYAYQBkADMANgA0AGUAMwA1AF0AXQAsACAAUwB5AHMAdABlAG0ALgBEAGEAdABhAC4AUwBlAHIAdgBpAGMAZQBzACwAIABWAGUAcgBzAGkAbwBuAD0ANAAuADAALgAwAC4AMAAsACAAQwB1AGwAdAB1AHIAZQA9AG4AZQB1AHQAcgBhAGwALAAgAFAAdQBiAGwAaQBjAEsAZQB5AFQAbwBrAGUAbgA9AGIANwA3AGEANQBjADUANgAxADkAMwA0AGUAMAA4ADkAIgA+AA0ACgAgACAAIAAgADwARQB4AHAAYQBuAGQAZQBkAFcAcgBhAHAAcABlAHIATwBmAFAAcgBvAGMAZQBzAHMATwBiAGoAZQBjAHQARABhAHQAYQBQAHIAbwB2AGkAZABlAHIAcABhAE8AXwBTAE8AcQBKAEwAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAGQAYQB0AGEAYwBvAG4AdAByAGEAYwB0AC4AbwByAGcALwAyADAAMAA0AC8AMAA3AC8AUwB5AHMAdABlAG0ALgBEAGEAdABhAC4AUwBlAHIAdgBpAGMAZQBzAC4ASQBuAHQAZQByAG4AYQBsACIADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAHgAbQBsAG4AcwA6AGkAPQAiAGgAdAB0AHAAOgAvAC8AdwB3AHcALgB3ADMALgBvAHIAZwAvADIAMAAwADEALwBYAE0ATABTAGMAaABlAG0AYQAtAGkAbgBzAHQAYQBuAGMAZQAiAA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAB4AG0AbABuAHMAOgB6AD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8AMgAwADAAMwAvADEAMAAvAFMAZQByAGkAYQBsAGkAegBhAHQAaQBvAG4ALwAiAD4ADQAKACAAIAAgACAAIAAgADwARQB4AHAAYQBuAGQAZQBkAEUAbABlAG0AZQBuAHQAIAB6ADoASQBkAD0AIgByAGUAZgAxACIAIAB4AG0AbABuAHMAOgBhAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBkAGEAdABhAGMAbwBuAHQAcgBhAGMAdAAuAG8AcgBnAC8AMgAwADAANAAvADAANwAvAFMAeQBzAHQAZQBtAC4ARABpAGEAZwBuAG8AcwB0AGkAYwBzACIAPgANAAoAIAAgACAAIAAgACAAIAAgADwAXwBfAGkAZABlAG4AdABpAHQAeQAgAGkAOgBuAGkAbAA9ACIAdAByAHUAZQAiACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBkAGEAdABhAGMAbwBuAHQAcgBhAGMAdAAuAG8AcgBnAC8AMgAwADAANAAvADAANwAvAFMAeQBzAHQAZQBtACIALwA+AA0ACgAgACAAIAAgACAAIAA8AC8ARQB4AHAAYQBuAGQAZQBkAEUAbABlAG0AZQBuAHQAPgANAAoAIAAgACAAIAAgACAAPABQAHIAbwBqAGUAYwB0AGUAZABQAHIAbwBwAGUAcgB0AHkAMAAgAHgAbQBsAG4AcwA6AGEAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAGQAYQB0AGEAYwBvAG4AdAByAGEAYwB0AC4AbwByAGcALwAyADAAMAA0AC8AMAA3AC8AUwB5AHMAdABlAG0ALgBXAGkAbgBkAG8AdwBzAC4ARABhAHQAYQAiAD4ADQAKACAAIAAgACAAIAAgACAAIAA8AGEAOgBNAGUAdABoAG8AZABOAGEAbQBlAD4AUwB0AGEAcgB0ADwALwBhADoATQBlAHQAaABvAGQATgBhAG0AZQA+AA0ACgAgACAAIAAgACAAIAAgACAAPABhADoATQBlAHQAaABvAGQAUABhAHIAYQBtAGUAdABlAHIAcwAgAHgAbQBsAG4AcwA6AGIAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwAyADAAMAAzAC8AMQAwAC8AUwBlAHIAaQBhAGwAaQB6AGEAdABpAG8AbgAvAEEAcgByAGEAeQBzACIAPgANAAoAIAAgACAAIAAgACAAIAAgACAAIAA8AGIAOgBhAG4AeQBUAHkAcABlACAAaQA6AHQAeQBwAGUAPQAiAGMAOgBzAHQAcgBpAG4AZwAiACAAeABtAGwAbgBzADoAYwA9ACIAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAHcAMwAuAG8AcgBnAC8AMgAwADAAMQAvAFgATQBMAFMAYwBoAGUAbQBhACIAPgBjAG0AZAA8AC8AYgA6AGEAbgB5AFQAeQBwAGUAPgANAAoAIAAgACAAIAAgACAAIAAgACAAIAA8AGIAOgBhAG4AeQBUAHkAcABlACAAaQA6AHQAeQBwAGUAPQAiAGMAOgBzAHQAcgBpAG4AZwAiACAAeABtAGwAbgBzADoAYwA9ACIAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAHcAMwAuAG8AcgBnAC8AMgAwADAAMQAvAFgATQBMAFMAYwBoAGUAbQBhACIAPgAvAGMAIAB7ADAAfQA8AC8AYgA6AGEAbgB5AFQAeQBwAGUAPgANAAoAIAAgACAAIAAgACAAIAAgADwALwBhADoATQBlAHQAaABvAGQAUABhAHIAYQBtAGUAdABlAHIAcwA+AA0ACgAgACAAIAAgACAAIAAgACAAPABhADoATwBiAGoAZQBjAHQASQBuAHMAdABhAG4AYwBlACAAegA6AFIAZQBmAD0AIgByAGUAZgAxACIALwA+AA0ACgAgACAAIAAgACAAIAA8AC8AUAByAG8AagBlAGMAdABlAGQAUAByAG8AcABlAHIAdAB5ADAAPgANAAoAIAAgACAAIAA8AC8ARQB4AHAAYQBuAGQAZQBkAFcAcgBhAHAAcABlAHIATwBmAFAAcgBvAGMAZQBzAHMATwBiAGoAZQBjAHQARABhAHQAYQBQAHIAbwB2AGkAZABlAHIAcABhAE8AXwBTAE8AcQBKAEwAPgANAAoAPAAvAHIAbwBvAHQAPgANAAoAAQ1DAGwAaQBYAG0AbAAAEVAAUwBPAGIAagBlAGMAdAAAgQlQAFMATwBiAGoAZQBjAHQAIABHAGEAZABnAGUAdAAgAGIAeQAgAE8AbABlAGsAcwBhAG4AZAByACAATQBpAHIAbwBzAGgAIABhAG4AZAAgAEEAbAB2AGEAcgBvACAATQB1AG4AbwB6AC4AIABUAGEAcgBnAGUAdAAgAG0AdQBzAHQAIAByAHUAbgAgAGEAIABzAHkAcwB0AGUAbQAgAG4AbwB0ACAAcABhAHQAYwBoAGUAZAAgAGYAbwByACAAQwBWAEUALQAyADAAMQA3AC0AOAA1ADYANQAgACgAUAB1AGIAbABpAHMAaABlAGQAOgAgADAANwAvADEAMQAvADIAMAAxADcAKQABM04AZQB0AEQAYQB0AGEAQwBvAG4AdAByAGEAYwB0AFMAZQByAGkAYQBsAGkAegBlAHIAAIwxDQAKADwATwBiAGoAcwAgAFYAZQByAHMAaQBvAG4APQAiADEALgAxAC4AMAAuADEAIgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAHAAbwB3AGUAcgBzAGgAZQBsAGwALwAyADAAMAA0AC8AMAA0ACIAPgAmACMAeABEADsADQAKADwATwBiAGoAIABSAGUAZgBJAGQAPQAiADAAIgA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAA8AFQATgAgAFIAZQBmAEkAZAA9ACIAMAAiAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAA8AFQAPgBNAGkAYwByAG8AcwBvAGYAdAAuAE0AYQBuAGEAZwBlAG0AZQBuAHQALgBJAG4AZgByAGEAcwB0AHIAdQBjAHQAdQByAGUALgBDAGkAbQBJAG4AcwB0AGEAbgBjAGUAIwBTAHkAcwB0AGUAbQAuAE0AYQBuAGEAZwBlAG0AZQBuAHQALgBBAHUAdABvAG0AYQB0AGkAbwBuAC8AUgB1AG4AcwBwAGEAYwBlAEkAbgB2AG8AawBlADUAPAAvAFQAPgAmACMAeABEADsADQAKACAAIAAgACAAIAAgADwAVAA+AE0AaQBjAHIAbwBzAG8AZgB0AC4ATQBhAG4AYQBnAGUAbQBlAG4AdAAuAEkAbgBmAHIAYQBzAHQAcgB1AGMAdAB1AHIAZQAuAEMAaQBtAEkAbgBzAHQAYQBuAGMAZQAjAFIAdQBuAHMAcABhAGMAZQBJAG4AdgBvAGsAZQA1ADwALwBUAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAA8AFQAPgBNAGkAYwByAG8AcwBvAGYAdAAuAE0AYQBuAGEAZwBlAG0AZQBuAHQALgBJAG4AZgByAGEAcwB0AHIAdQBjAHQAdQByAGUALgBDAGkAbQBJAG4AcwB0AGEAbgBjAGUAPAAvAFQAPgAmACMAeABEADsADQAKACAAIAAgACAAIAAgADwAVAA+AFMAeQBzAHQAZQBtAC4ATwBiAGoAZQBjAHQAPAAvAFQAPgAmACMAeABEADsADQAKACAAIAAgACAAPAAvAFQATgA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAA8AFQAbwBTAHQAcgBpAG4AZwA+AFIAdQBuAHMAcABhAGMAZQBJAG4AdgBvAGsAZQA1ADwALwBUAG8AUwB0AHIAaQBuAGcAPgAmACMAeABEADsADQAKACAAIAAgACAAPABPAGIAagAgAFIAZQBmAEkAZAA9ACIAMQAiAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAA8AFQATgBSAGUAZgAgAFIAZQBmAEkAZAA9ACIAMAAiACAALwA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAAgACAAPABUAG8AUwB0AHIAaQBuAGcAPgBSAHUAbgBzAHAAYQBjAGUASQBuAHYAbwBrAGUANQA8AC8AVABvAFMAdAByAGkAbgBnAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAA8AFAAcgBvAHAAcwA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAAgACAAIAAgADwATgBpAGwAIABOAD0AIgBQAFMAQwBvAG0AcAB1AHQAZQByAE4AYQBtAGUAIgAgAC8APgAmACMAeABEADsADQAKAAkACQA8AE8AYgBqACAATgA9ACIAdABlAHMAdAAxACIAIABSAGUAZgBJAGQAIAA9ACIAMgAwACIAIAA+ACAAJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgADwAVABOACAAUgBlAGYASQBkAD0AIgAxACIAIAA+ACAAJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAA8AFQAPgBTAHkAcwB0AGUAbQAuAFcAaQBuAGQAbwB3AHMALgBNAGEAcgBrAHUAcAAuAFgAYQBtAGwAUgBlAGEAZABlAHIAWwBdACwAIABQAHIAZQBzAGUAbgB0AGEAdABpAG8AbgBGAHIAYQBtAGUAdwBvAHIAawAsACAAVgBlAHIAcwBpAG8AbgA9ADQALgAwAC4AMAAuADAALAAgAEMAdQBsAHQAdQByAGUAPQBuAGUAdQB0AHIAYQBsACwAIABQAHUAYgBsAGkAYwBLAGUAeQBUAG8AawBlAG4APQAzADEAYgBmADMAOAA1ADYAYQBkADMANgA0AGUAMwA1ADwALwBUAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAA8AFQAPgBTAHkAcwB0AGUAbQAuAEEAcgByAGEAeQA8AC8AVAA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAPABUAD4AUwB5AHMAdABlAG0ALgBPAGIAagBlAGMAdAA8AC8AVAA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAAgACAAIAAgACAAIAA8AC8AVABOAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgADwATABTAFQAPgAmACMAeABEADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgADwAUwAgAE4APQAiAEgAYQBzAGgAIgAgAD4AIAAgAA0ACgAJAAkAJgBsAHQAOwBSAGUAcwBvAHUAcgBjAGUARABpAGMAdABpAG8AbgBhAHIAeQANAAoAIAAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAHcAaQBuAGYAeAAvADIAMAAwADYALwB4AGEAbQBsAC8AcAByAGUAcwBlAG4AdABhAHQAaQBvAG4AIgANAAoAIAAgAHgAbQBsAG4AcwA6AHgAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwB3AGkAbgBmAHgALwAyADAAMAA2AC8AeABhAG0AbAAiAA0ACgAgACAAeABtAGwAbgBzADoAUwB5AHMAdABlAG0APQAiAGMAbAByAC0AbgBhAG0AZQBzAHAAYQBjAGUAOgBTAHkAcwB0AGUAbQA7AGEAcwBzAGUAbQBiAGwAeQA9AG0AcwBjAG8AcgBsAGkAYgAiAA0ACgAgACAAeABtAGwAbgBzADoARABpAGEAZwA9ACIAYwBsAHIALQBuAGEAbQBlAHMAcABhAGMAZQA6AFMAeQBzAHQAZQBtAC4ARABpAGEAZwBuAG8AcwB0AGkAYwBzADsAYQBzAHMAZQBtAGIAbAB5AD0AcwB5AHMAdABlAG0AIgAmAGcAdAA7AA0ACgAJACAAJgBsAHQAOwBPAGIAagBlAGMAdABEAGEAdABhAFAAcgBvAHYAaQBkAGUAcgAgAHgAOgBLAGUAeQA9ACIATABhAHUAbgBjAGgAQwBhAGwAYwAiACAATwBiAGoAZQBjAHQAVAB5AHAAZQAgAD0AIAAiAHsAIAB4ADoAVAB5AHAAZQAgAEQAaQBhAGcAOgBQAHIAbwBjAGUAcwBzAH0AIgAgAE0AZQB0AGgAbwBkAE4AYQBtAGUAIAA9ACAAIgBTAHQAYQByAHQAIgAgACYAZwB0ADsADQAKACAAIAAgACAAIAAmAGwAdAA7AE8AYgBqAGUAYwB0AEQAYQB0AGEAUAByAG8AdgBpAGQAZQByAC4ATQBlAHQAaABvAGQAUABhAHIAYQBtAGUAdABlAHIAcwAmAGcAdAA7AA0ACgAgACAAIAAgACAAIAAgACAAJgBsAHQAOwBTAHkAcwB0AGUAbQA6AFMAdAByAGkAbgBnACYAZwB0ADsAYwBtAGQAJgBsAHQAOwAvAFMAeQBzAHQAZQBtADoAUwB0AHIAaQBuAGcAJgBnAHQAOwANAAoAIAAgACAAIAAgACAAIAAgACYAbAB0ADsAUwB5AHMAdABlAG0AOgBTAHQAcgBpAG4AZwAmAGcAdAA7AC8AYwAgACIAAYjbIgAgACYAbAB0ADsALwBTAHkAcwB0AGUAbQA6AFMAdAByAGkAbgBnACYAZwB0ADsADQAKACAAIAAgACAAIAAmAGwAdAA7AC8ATwBiAGoAZQBjAHQARABhAHQAYQBQAHIAbwB2AGkAZABlAHIALgBNAGUAdABoAG8AZABQAGEAcgBhAG0AZQB0AGUAcgBzACYAZwB0ADsADQAKACAAIAAgACAAJgBsAHQAOwAvAE8AYgBqAGUAYwB0AEQAYQB0AGEAUAByAG8AdgBpAGQAZQByACYAZwB0ADsADQAKACYAbAB0ADsALwBSAGUAcwBvAHUAcgBjAGUARABpAGMAdABpAG8AbgBhAHIAeQAmAGcAdAA7AA0ACgAJAAkACQA8AC8AUwA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAAgACAAIAAgACAAIAA8AC8ATABTAFQAPgAmACMAeABEADsADQAKACAAIAAgACAAIAAgACAAIAA8AC8ATwBiAGoAPgAmACMAeABEADsADQAKACAAIAAgACAAIAAgADwALwBQAHIAbwBwAHMAPgAmACMAeABEADsADQAKACAAIAAgACAAIAAgADwATQBTAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAAgACAAPABPAGIAagAgAE4APQAiAF8AXwBDAGwAYQBzAHMATQBlAHQAYQBkAGEAdABhACIAIABSAGUAZgBJAGQAIAA9ACIAMgAiAD4AIAAmACMAeABEADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAPABUAE4AIABSAGUAZgBJAGQAPQAiADEAIgAgAD4AIAAmACMAeABEADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgADwAVAA+AFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4AQQByAHIAYQB5AEwAaQBzAHQAPAAvAFQAPgAmACMAeABEADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgADwAVAA+AFMAeQBzAHQAZQBtAC4ATwBiAGoAZQBjAHQAPAAvAFQAPgAmACMAeABEADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAPAAvAFQATgA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAAgACAAIAAgACAAIAA8AEwAUwBUAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAA8AE8AYgBqACAAUgBlAGYASQBkAD0AIgAzACIAPgAgACYAIwB4AEQAOwANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgADwATQBTAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgADwAUwAgAE4APQAiAEMAbABhAHMAcwBOAGEAbQBlACIAPgBSAHUAbgBzAHAAYQBjAGUASQBuAHYAbwBrAGUANQA8AC8AUwA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAA8AFMAIABOAD0AIgBOAGEAbQBlAHMAcABhAGMAZQAiAD4AUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgA8AC8AUwA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAA8AE4AaQBsACAATgA9ACIAUwBlAHIAdgBlAHIATgBhAG0AZQAiACAALwA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAA8AEkAMwAyACAATgA9ACIASABhAHMAaAAiAD4ANAA2ADAAOQAyADkAMQA5ADIAPAAvAEkAMwAyAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgADwAUwAgAE4APQAiAE0AaQBYAG0AbAAiAD4AIAAmAGwAdAA7AEMATABBAFMAUwAgAE4AQQBNAEUAPQAiAFIAdQBuAHMAcABhAGMAZQBJAG4AdgBvAGsAZQA1ACIAIAAmAGcAdAA7ACYAbAB0ADsAUABSAE8AUABFAFIAVABZACAATgBBAE0ARQA9ACIAdABlAHMAdAAxACIAIABUAFkAUABFACAAPQAiAHMAdAByAGkAbgBnACIAIAAmAGcAdAA7ACYAbAB0ADsALwBQAFIATwBQAEUAUgBUAFkAJgBnAHQAOwAmAGwAdAA7AC8AQwBMAEEAUwBTACYAZwB0ADsAPAAvAFMAPgAmACMAeABEADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAA8AC8ATQBTAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAA8AC8ATwBiAGoAPgAmACMAeABEADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAPAAvAEwAUwBUAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAAgACAAPAAvAE8AYgBqAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgACAAIAA8AC8ATQBTAD4AJgAjAHgARAA7AA0ACgAgACAAIAAgADwALwBPAGIAagA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAA8AE0AUwA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAAgACAAPABSAGUAZgAgAE4APQAiAF8AXwBDAGwAYQBzAHMATQBlAHQAYQBkAGEAdABhACIAIABSAGUAZgBJAGQAIAA9ACIAMgAiACAALwA+ACYAIwB4AEQAOwANAAoAIAAgACAAIAA8AC8ATQBTAD4AJgAjAHgARAA7AA0ACgAgACAAPAAvAE8AYgBqAD4AJgAjAHgARAA7AA0ACgA8AC8ATwBiAGoAcwA+AAAnVAB5AHAAZQBDAG8AbgBmAHUAcwBlAEQAZQBsAGUAZwBhAHQAZQAAV1QAeQBwAGUAQwBvAG4AZgB1AHMAZQBEAGUAbABlAGcAYQB0AGUAIABnAGEAZABnAGUAdAAgAGIAeQAgAEoAYQBtAGUAcwAgAEYAbwByAHMAaABhAHcAAAdjAG0AZAAABy8AYwAgAAAfXwBpAG4AdgBvAGMAYQB0AGkAbwBuAEwAaQBzAHQAAFFXAGkAbgBkAG8AdwBzAEkAZABlAG4AdABpAHQAeQAgAEcAYQBkAGcAZQB0ACAAYgB5ACAATABlAHYAaQAgAEIAcgBvAGQAZQByAGkAYwBrAAAfVwBpAG4AZABvAHcAcwBJAGQAZQBuAHQAaQB0AHkAAIHHewANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACcAJAB0AHkAcABlACcAOgAgACcAUwB5AHMAdABlAG0ALgBTAGUAYwB1AHIAaQB0AHkALgBQAHIAaQBuAGMAaQBwAGEAbAAuAFcAaQBuAGQAbwB3AHMASQBkAGUAbgB0AGkAdAB5ACwAIABtAHMAYwBvAHIAbABpAGIALAAgAFYAZQByAHMAaQBvAG4APQA0AC4AMAAuADAALgAwACwAIABDAHUAbAB0AHUAcgBlAD0AbgBlAHUAdAByAGEAbAAsACAAUAB1AGIAbABpAGMASwBlAHkAVABvAGsAZQBuAD0AYgA3ADcAYQA1AGMANQA2ADEAOQAzADQAZQAwADgAOQAnACwADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAnAFMAeQBzAHQAZQBtAC4AUwBlAGMAdQByAGkAdAB5AC4AQwBsAGEAaQBtAHMASQBkAGUAbgB0AGkAdAB5AC4AYgBvAG8AdABzAHQAcgBhAHAAQwBvAG4AdABlAHgAdAAnADoAIAAnAAEpJwANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAB9AAGErTwAcgBvAG8AdAAgAHgAbQBsAG4AcwA6AHgAcwBpAD0AIgBoAHQAdABwADoALwAvAHcAdwB3AC4AdwAzAC4AbwByAGcALwAyADAAMAAxAC8AWABNAEwAUwBjAGgAZQBtAGEALQBpAG4AcwB0AGEAbgBjAGUAIgAgAHgAbQBsAG4AcwA6AHgAcwBkAD0AIgBoAHQAdABwADoALwAvAHcAdwB3AC4AdwAzAC4AbwByAGcALwAyADAAMAAxAC8AWABNAEwAUwBjAGgAZQBtAGEAIgAgAHQAeQBwAGUAPQAiAFMAeQBzAHQAZQBtAC4AUwBlAGMAdQByAGkAdAB5AC4AUAByAGkAbgBjAGkAcABhAGwALgBXAGkAbgBkAG8AdwBzAEkAZABlAG4AdABpAHQAeQAsACAAbQBzAGMAbwByAGwAaQBiACwAIABWAGUAcgBzAGkAbwBuAD0ANAAuADAALgAwAC4AMAAsACAAQwB1AGwAdAB1AHIAZQA9AG4AZQB1AHQAcgBhAGwALAAgAFAAdQBiAGwAaQBjAEsAZQB5AFQAbwBrAGUAbgA9AGIANwA3AGEANQBjADUANgAxADkAMwA0AGUAMAA4ADkAIgA+AA0ACgAgACAAIAAgADwAVwBpAG4AZABvAHcAcwBJAGQAZQBuAHQAaQB0AHkAIAB4AG0AbABuAHMAOgBpAD0AIgBoAHQAdABwADoALwAvAHcAdwB3AC4AdwAzAC4AbwByAGcALwAyADAAMAAxAC8AWABNAEwAUwBjAGgAZQBtAGEALQBpAG4AcwB0AGEAbgBjAGUAIgAgAHgAbQBsAG4AcwA6AHgAPQAiAGgAdAB0AHAAOgAvAC8AdwB3AHcALgB3ADMALgBvAHIAZwAvADIAMAAwADEALwBYAE0ATABTAGMAaABlAG0AYQAiACAAeABtAGwAbgBzAD0AIgBoAHQAdABwADoALwAvAHMAYwBoAGUAbQBhAHMALgBkAGEAdABhAGMAbwBuAHQAcgBhAGMAdAAuAG8AcgBnAC8AMgAwADAANAAvADAANwAvAFMAeQBzAHQAZQBtAC4AUwBlAGMAdQByAGkAdAB5AC4AUAByAGkAbgBjAGkAcABhAGwAIgA+AA0ACgAgACAAIAAgACAAIAA8AFMAeQBzAHQAZQBtAC4AUwBlAGMAdQByAGkAdAB5AC4AQwBsAGEAaQBtAHMASQBkAGUAbgB0AGkAdAB5AC4AYgBvAG8AdABzAHQAcgBhAHAAQwBvAG4AdABlAHgAdAAgAGkAOgB0AHkAcABlAD0AIgB4ADoAcwB0AHIAaQBuAGcAIgAgAHgAbQBsAG4AcwA9ACIAIgA+AHsAMAB9ADwALwBTAHkAcwB0AGUAbQAuAFMAZQBjAHUAcgBpAHQAeQAuAEMAbABhAGkAbQBzAEkAZABlAG4AdABpAHQAeQAuAGIAbwBvAHQAcwB0AHIAYQBwAEMAbwBuAHQAZQB4AHQAPgANAAoA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"); + } + } +} diff --git a/SafeDeserializationHelpers/CustomDataSetDeserializer.cs b/SafeDeserializationHelpers/CustomDataSetDeserializer.cs new file mode 100644 index 0000000..be54a93 --- /dev/null +++ b/SafeDeserializationHelpers/CustomDataSetDeserializer.cs @@ -0,0 +1,76 @@ +namespace SafeDeserializationHelpers +{ + using System; + using System.Collections.Generic; + using System.Data; + using System.Linq; + using System.Reflection; + using System.Runtime.Serialization; + using System.Security.Permissions; + using System.Text; + + /// + /// Custom descendant controlling the deserialization. + /// + [Serializable] + public sealed class CustomDataSetDeserializer : DataSet, IObjectReference + { + /// + /// Initializes a new instance of the class. + /// + /// Serialization info. + /// Streaming context + private CustomDataSetDeserializer(SerializationInfo info, StreamingContext context) + { + Info = info; + Context = context; + } + + private static ConstructorInfo Constructor { get; } = typeof(DataSet).GetConstructor( + BindingFlags.Instance | BindingFlags.NonPublic, + null, + new[] { typeof(SerializationInfo), typeof(StreamingContext) }, + null); + + private SerializationInfo Info { get; } + + private StreamingContext Context { get; } + + /// + [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)] + public object GetRealObject(StreamingContext context) + { + Validate(Info); + return Constructor.Invoke(new object[] { Info, context }); + } + + private void Validate(SerializationInfo info) + { + var remotingFormat = SerializationFormat.Xml; + var schemaSerializationMode = SchemaSerializationMode.IncludeSchema; + + var e = info.GetEnumerator(); + while (e.MoveNext()) + { + switch (e.Name) + { + case "DataSet.RemotingFormat": // DataSet.RemotingFormat does not exist in V1/V1.1 versions + remotingFormat = (SerializationFormat)e.Value; + break; + + case "SchemaSerializationMode.DataSet": // SchemaSerializationMode.DataSet does not exist in V1/V1.1 versions + schemaSerializationMode = (SchemaSerializationMode)e.Value; + break; + } + } + + if (remotingFormat == SerializationFormat.Xml) + { + // XML dataset serialization isn't vulnerable + return; + } + + throw new UnsafeDeserializationException("Serialized DataSet probably includes malicious data."); + } + } +} diff --git a/SafeDeserializationHelpers/SafeDeserializationHelpers.csproj b/SafeDeserializationHelpers/SafeDeserializationHelpers.csproj index e30f70f..d9108f6 100644 --- a/SafeDeserializationHelpers/SafeDeserializationHelpers.csproj +++ b/SafeDeserializationHelpers/SafeDeserializationHelpers.csproj @@ -42,6 +42,9 @@ + + Component + diff --git a/SafeDeserializationHelpers/SafeSerializationBinder.cs b/SafeDeserializationHelpers/SafeSerializationBinder.cs index bf202d7..89bb8ea 100644 --- a/SafeDeserializationHelpers/SafeSerializationBinder.cs +++ b/SafeDeserializationHelpers/SafeSerializationBinder.cs @@ -11,11 +11,21 @@ public class SafeSerializationBinder : SerializationBinder /// public const string CoreLibraryAssemblyName = "mscorlib"; + /// + /// System.Data assembly name. + /// + public const string SystemDataAssemblyName = "System.Data"; + /// /// System.DelegateSerializationHolder type name. /// public const string DelegateSerializationHolderTypeName = "System.DelegateSerializationHolder"; + /// + /// System.Data.DataSet type name. + /// + public const string DataSetTypeName = "System.Data.DataSet"; + /// /// Initializes a new instance of the class. /// @@ -30,13 +40,20 @@ public SafeSerializationBinder(SerializationBinder nextBinder = null) /// public override Type BindToType(string assemblyName, string typeName) { - // prevent delegate serialization attack + // prevent delegate deserialization attack if (typeName == DelegateSerializationHolderTypeName && assemblyName.StartsWith(CoreLibraryAssemblyName, StringComparison.InvariantCultureIgnoreCase)) { return typeof(CustomDelegateSerializationHolder); } + ////// prevent DataSet-based deserialization attack + ////if (typeName == DataSetTypeName && + //// assemblyName.StartsWith(SystemDataAssemblyName, StringComparison.InvariantCultureIgnoreCase)) + ////{ + //// return typeof(CustomDataSetDeserializer); + ////} + // suppress known blacklisted types TypeNameValidator.Default.ValidateTypeName(assemblyName, typeName);