Replaced .NET hashing with OpenSSL
authorpkanavos <pkanavos@gmail.com>
Tue, 4 Sep 2012 18:25:52 +0000 (21:25 +0300)
committerpkanavos <pkanavos@gmail.com>
Tue, 4 Sep 2012 18:25:52 +0000 (21:25 +0300)
trunk/Libraries/OpenSSL/ManagedOpenSsl.dll [new file with mode: 0644]
trunk/Libraries/OpenSSL/libeay32.dll [new file with mode: 0644]
trunk/Libraries/OpenSSL/ssleay32.dll [new file with mode: 0644]
trunk/Pithos.Core/Agents/BlockExtensions.cs
trunk/Pithos.Core/Agents/BlockUpdater.cs
trunk/Pithos.Core/Pithos.Core.csproj
trunk/Pithos.Network/BlockHashAlgorithms.cs
trunk/Pithos.Network/MD5BlockCalculator.cs
trunk/Pithos.Network/Pithos.Network.csproj
trunk/Pithos.Network/Signature.cs
trunk/Pithos.sln

diff --git a/trunk/Libraries/OpenSSL/ManagedOpenSsl.dll b/trunk/Libraries/OpenSSL/ManagedOpenSsl.dll
new file mode 100644 (file)
index 0000000..5e80529
Binary files /dev/null and b/trunk/Libraries/OpenSSL/ManagedOpenSsl.dll differ
diff --git a/trunk/Libraries/OpenSSL/libeay32.dll b/trunk/Libraries/OpenSSL/libeay32.dll
new file mode 100644 (file)
index 0000000..d0f48bb
Binary files /dev/null and b/trunk/Libraries/OpenSSL/libeay32.dll differ
diff --git a/trunk/Libraries/OpenSSL/ssleay32.dll b/trunk/Libraries/OpenSSL/ssleay32.dll
new file mode 100644 (file)
index 0000000..d28499b
Binary files /dev/null and b/trunk/Libraries/OpenSSL/ssleay32.dll differ
index 7cb826c..d03351e 100644 (file)
@@ -45,7 +45,7 @@ using System.Diagnostics;
 using System.Diagnostics.Contracts;\r
 using System.Linq;\r
 using System.Reflection;\r
-using System.Security.Cryptography;\r
+\r
 using System.Text;\r
 using System.IO;\r
 using System.Text.RegularExpressions;\r
@@ -53,6 +53,9 @@ using System.Threading;
 using System.Threading.Tasks;\r
 using Pithos.Network;\r
 using log4net;\r
+using OpenSSL.Core;\r
+using OpenSSL.Crypto;\r
+\r
 \r
 namespace Pithos.Core.Agents\r
 {\r
@@ -107,7 +110,7 @@ namespace Pithos.Core.Agents
        /// <param name="info">The file to hash</param>\r
        /// <param name="hasher">The hash algorithm to use</param>\r
        /// <returns>A hash value for the entire file. An empty string if the file does not exist.</returns>\r
-       public static string ComputeShortHash(this FileInfo info, HashAlgorithm hasher,IStatusNotification notification)\r
+       public static string ComputeShortHash(this FileInfo info, MessageDigestContext hasher,IStatusNotification notification)\r
        {\r
            if(info == null)\r
                throw new ArgumentNullException("info");\r
@@ -139,7 +142,16 @@ namespace Pithos.Core.Agents
                    bytesRead = stream.Read(buffer, 0, 32768);\r
                    if (bytesRead > 0)\r
                    {\r
-                       hasher.TransformBlock(buffer, 0, bytesRead, null, 0);\r
+                       if (bytesRead == buffer.Length)\r
+                       {\r
+                           hasher.Update(buffer);\r
+                       }\r
+                       else\r
+                       {\r
+                           var block = new byte[bytesRead];\r
+                           Buffer.BlockCopy(buffer, 0, block, 0, bytesRead);\r
+                           hasher.Update(block);\r
+                       }\r
                    }\r
                    counter++;\r
                    if (counter % 100 == 0)\r
@@ -148,9 +160,8 @@ namespace Pithos.Core.Agents
                                                       info.Name);\r
                        notification.Notify(progress);\r
                    }\r
-               } while (bytesRead > 0);\r
-               hasher.TransformFinalBlock(buffer, 0, 0);\r
-               var hash = hasher.Hash;\r
+               } while (bytesRead > 0);               \r
+               var hash = hasher.DigestFinal();\r
 \r
                progress.Title = String.Format("Hashed {0} ", info.Name);\r
                notification.Notify(progress);\r
@@ -161,6 +172,7 @@ namespace Pithos.Core.Agents
            }\r
        }\r
 \r
+/*\r
         public static async Task<string> ComputeShortHash(this FileInfo info, MD5BlockCalculator calculator,IStatusNotification notification)\r
        {\r
            if(info == null)\r
@@ -216,6 +228,7 @@ namespace Pithos.Core.Agents
                return hashString;\r
            }\r
        }\r
+*/\r
 \r
         public static string ComputeShortHash(this FileInfo info,IStatusNotification notification)\r
        {\r
@@ -225,8 +238,9 @@ namespace Pithos.Core.Agents
             if (info.FullName.Split('/').Contains(".pithos.cache"))\r
                 throw new ArgumentException(String.Format("Trying to hash file from the cache folder: [{0}]", info.FullName));\r
 \r
-           using (var hasher=HashAlgorithm.Create("md5"))\r
+           using (var hasher=new MessageDigestContext(MessageDigest.CreateByName("md5")))\r
            {               \r
+               hasher.Init();\r
                return ComputeShortHash(info,hasher,notification);\r
            }\r
        }\r
index ac70743..b39ca18 100644 (file)
-#region
-/* -----------------------------------------------------------------------
- * <copyright file="BlockUpdater.cs" company="GRNet">
- * 
- * Copyright 2011-2012 GRNET S.A. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- *   1. Redistributions of source code must retain the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer in the documentation and/or other materials
- *      provided with the distribution.
- *
- *
- * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and
- * documentation are those of the authors and should not be
- * interpreted as representing official policies, either expressed
- * or implied, of GRNET S.A.
- * </copyright>
- * -----------------------------------------------------------------------
- */
-#endregion
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Security.Cryptography;
-using System.Text;
-using System.Threading.Tasks;
-using Pithos.Network;
-
-namespace Pithos.Core.Agents
-{
-    class BlockUpdater
-    {
-        //TODO: Must clean orphaned blocks from the Cache folder.
-        //
-        //The Cache folder may have orphaned blocks. Blocks may be left in the Cache folder because:
-        //1. A download was in progress when the application terminated. These blocks are needed to proceed 
-        //  with partial download
-        //2. The application terminated abnormally before the blocks were cleared after a download
-        //3. The server file was deleted before the download completed.
-        //
-        //In #1, we need to keep the blocks. We need to detect the other cases and delete orphans
-        //
-        //Mitigations:
-        // - Delete blocks with no corresponding state
-        // - Check and delete possible orphans when a Deletion is detected
-        // - Add Advanced command "Clear Cache"
-        //
-        //Need a better way to differentiate between cases #2, #3 and #1
-
-        private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
-        public string FilePath { get; private set; }
-        public string RelativePath { get; private set; }
-
-        public string CachePath { get; private set; }
-
-        public TreeHash ServerHash { get; private set; }
-
-        public string TempPath { get; private set; }
-
-        public bool HasBlocks
-        {
-            get { return _blocks.Count>0; }            
-        }
-
-        readonly ConcurrentDictionary<long, string> _blocks = new ConcurrentDictionary<long, string>();
-        readonly ConcurrentDictionary<string, string> _orphanBlocks = new ConcurrentDictionary<string, string>();
-
-        [ContractInvariantMethod]
-        private void Invariants()
-        {
-            Contract.Invariant(Path.IsPathRooted(CachePath));
-            Contract.Invariant(Path.IsPathRooted(FilePath));
-            Contract.Invariant(Path.IsPathRooted(TempPath));
-            Contract.Invariant(!Path.IsPathRooted(RelativePath));
-            Contract.Invariant(_blocks!=null);
-            Contract.Invariant(_orphanBlocks!=null);
-            Contract.Invariant(ServerHash!=null);
-        }
-
-        public BlockUpdater(string cachePath, string filePath, string relativePath,TreeHash serverHash)
-        {   
-            if (String.IsNullOrWhiteSpace(cachePath))
-                throw new ArgumentNullException("cachePath");
-            if (!Path.IsPathRooted(cachePath))
-                throw new ArgumentException("The cachePath must be rooted", "cachePath");
-            
-            if (string.IsNullOrWhiteSpace(filePath))
-                throw new ArgumentNullException("filePath");
-            if (!Path.IsPathRooted(filePath))
-                throw new ArgumentException("The filePath must be rooted", "filePath");
-            
-            if (string.IsNullOrWhiteSpace(relativePath))
-                throw new ArgumentNullException("relativePath");
-            if (Path.IsPathRooted(relativePath))
-                throw new ArgumentException("The relativePath must NOT be rooted", "relativePath");
-
-            if (serverHash == null)
-                throw new ArgumentNullException("serverHash");
-            Contract.EndContractBlock();
-
-            CachePath=cachePath;
-            FilePath = filePath;
-            RelativePath=relativePath;
-            ServerHash = serverHash;
-            //The file will be stored in a temporary location while downloading with an extension .download
-            TempPath = Path.Combine(CachePath, RelativePath + ".download");
-            
-            //Need to calculate the directory path because RelativePath may include folders
-            var directoryPath = Path.GetDirectoryName(TempPath);            
-            //directoryPath CAN be null if TempPath is a root path
-            if (String.IsNullOrWhiteSpace(directoryPath))
-                throw new ArgumentException("TempPath");
-            //CachePath was absolute so directoryPath is absolute too
-            Contract.Assume(Path.IsPathRooted(directoryPath));
-            
-            if (!Directory.Exists(directoryPath))
-                Directory.CreateDirectory(directoryPath);
-
-            LoadOrphans(directoryPath);
-        }
-
-        private void LoadOrphans(string directoryPath)
-        {
-            if (string.IsNullOrWhiteSpace(directoryPath))
-                throw new ArgumentNullException("directoryPath");
-            if (!Path.IsPathRooted(directoryPath))
-                throw new ArgumentException("The directoryPath must be rooted", "directoryPath");
-            if (ServerHash==null)
-                throw new InvalidOperationException("ServerHash wasn't initialized");
-            Contract.EndContractBlock();
-
-            var fileNamename = Path.GetFileName(FilePath);
-            var orphans = Directory.GetFiles(directoryPath, fileNamename + ".*");
-            foreach (var orphan in orphans)
-            {
-                using (HashAlgorithm hasher = HashAlgorithm.Create(ServerHash.BlockHash))
-                {
-                    var buffer=File.ReadAllBytes(orphan);
-                    //The server truncates nulls before calculating hashes, have to do the same
-                    //Find the last non-null byte, starting from the end
-                    var lastByteIndex = Array.FindLastIndex(buffer, buffer.Length-1, aByte => aByte != 0);
-                    //lastByteIndex may be -1 if the file was empty. We don't want to use that block file
-                    if (lastByteIndex >= 0)
-                    {
-                        var binHash = hasher.ComputeHash(buffer, 0, lastByteIndex);
-                        var hash = binHash.ToHashString();
-                        _orphanBlocks[hash] = orphan;
-                    }
-                }
-            }
-        }
-
-
-        public void Commit()
-        {
-            if (String.IsNullOrWhiteSpace(FilePath))
-                throw new InvalidOperationException("FilePath is empty");
-            if (String.IsNullOrWhiteSpace(TempPath))
-                throw new InvalidOperationException("TempPath is empty");
-            Contract.EndContractBlock();
-
-            //Copy the file to a temporary location. Changes will be made to the
-            //temporary file, then it will replace the original file
-            if (File.Exists(FilePath))
-                File.Copy(FilePath, TempPath, true);
-
-            //Set the size of the file to the size specified in the treehash
-            //This will also create an empty file if the file doesn't exist                        
-            
-            
-            SetFileSize(TempPath, ServerHash.Bytes);
-
-            //Update the temporary file with the data from the blocks
-            using (var stream = File.OpenWrite(TempPath))
-            {
-                foreach (var block in _blocks)
-                {
-                    var blockPath = block.Value;
-                    var blockIndex = block.Key;
-                    using (var blockStream = File.OpenRead(blockPath))
-                    {                        
-                        long offset = blockIndex*ServerHash.BlockSize;
-                        stream.Seek(offset, SeekOrigin.Begin);
-                        blockStream.CopyTo(stream);
-                    }
-                }
-            }
-            SwapFiles();
-
-            ClearBlocks();
-        }
-
-        private void SwapFiles()
-        {
-            if (String.IsNullOrWhiteSpace(FilePath))
-                throw new InvalidOperationException("FilePath is empty");
-            if (String.IsNullOrWhiteSpace(TempPath))
-                throw new InvalidOperationException("TempPath is empty");            
-            Contract.EndContractBlock();
-
-            if (File.Exists(FilePath))
-                File.Replace(TempPath, FilePath, null, true);
-            else
-            {
-                var targetDirectory = Path.GetDirectoryName(FilePath);
-                if (!Directory.Exists(targetDirectory))
-                    Directory.CreateDirectory(targetDirectory);
-                File.Move(TempPath, FilePath);
-            }
-        }
-
-        private void ClearBlocks()
-        {
-            if (Log.IsDebugEnabled)
-                Log.DebugFormat("Clearing blocks for {0}",this.FilePath);
-            //Get all the the block paths, orphan or not
-            var paths= _blocks.Select(pair => pair.Value)
-                          .Union(_orphanBlocks.Select(pair => pair.Value));
-            foreach (var filePath in paths)
-            {
-                File.Delete(filePath);
-            }
-
-            File.Delete(TempPath);
-            _blocks.Clear();
-            _orphanBlocks.Clear();
-        }
-
-        //Change the file's size, possibly truncating or adding to it
-        private  void SetFileSize(string filePath, long fileSize)
-        {
-            if (String.IsNullOrWhiteSpace(filePath))
-                throw new ArgumentNullException("filePath");
-            if (!Path.IsPathRooted(filePath))
-                throw new ArgumentException("The filePath must be rooted", "filePath");
-            if (fileSize < 0)
-                throw new ArgumentOutOfRangeException("fileSize");
-            Contract.EndContractBlock();
-
-            using (var stream = File.Open(filePath, FileMode.OpenOrCreate, FileAccess.Write))
-            {
-                stream.SetLength(fileSize);
-            }
-        }
-
-       /* //Check whether we should copy the local file to a temp path        
-        private  bool ShouldCopy(string localPath, string tempPath)
-        {
-            //No need to copy if there is no file
-            if (!File.Exists(localPath))
-                return false;
-
-            //If there is no temp file, go ahead and copy
-            if (!File.Exists(tempPath))
-                return true;
-
-            //If there is a temp file and is newer than the actual file, don't copy
-            var localLastWrite = File.GetLastWriteTime(localPath);
-            var tempLastWrite = File.GetLastWriteTime(tempPath);
-
-            //This could mean there is an interrupted download in progress
-            return (tempLastWrite < localLastWrite);
-        }*/
-
-
-        public bool UseOrphan(long blockIndex, string blockHash)
-        {
-            string blockPath=null;
-            if (_orphanBlocks.TryGetValue(blockHash,out blockPath))
-            {
-                _blocks[blockIndex] = blockPath;
-                return true;
-            }
-            return false;
-        }
-
-        public Task StoreBlock(long blockIndex,byte[] buffer)
-        {
-            var blockPath = String.Format("{0}.{1:000000}", TempPath, blockIndex);
-            _blocks[blockIndex] = blockPath;
-            //Remove any orphan files
-            if (File.Exists(blockPath))
-                File.Delete(blockPath);
-
-            return FileAsync.WriteAllBytes(blockPath, buffer);
-        }
-
-       
-
-    }
-}
+#region\r
+/* -----------------------------------------------------------------------\r
+ * <copyright file="BlockUpdater.cs" company="GRNet">\r
+ * \r
+ * Copyright 2011-2012 GRNET S.A. All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or\r
+ * without modification, are permitted provided that the following\r
+ * conditions are met:\r
+ *\r
+ *   1. Redistributions of source code must retain the above\r
+ *      copyright notice, this list of conditions and the following\r
+ *      disclaimer.\r
+ *\r
+ *   2. Redistributions in binary form must reproduce the above\r
+ *      copyright notice, this list of conditions and the following\r
+ *      disclaimer in the documentation and/or other materials\r
+ *      provided with the distribution.\r
+ *\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS\r
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR\r
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF\r
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\r
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ * The views and conclusions contained in the software and\r
+ * documentation are those of the authors and should not be\r
+ * interpreted as representing official policies, either expressed\r
+ * or implied, of GRNET S.A.\r
+ * </copyright>\r
+ * -----------------------------------------------------------------------\r
+ */\r
+#endregion\r
+using System;\r
+using System.Collections.Concurrent;\r
+using System.Diagnostics.Contracts;\r
+using System.IO;\r
+using System.Linq;\r
+using System.Reflection;\r
+using System.Threading.Tasks;\r
+using OpenSSL.Crypto;\r
+using Pithos.Network;\r
+\r
+namespace Pithos.Core.Agents\r
+{\r
+    class BlockUpdater\r
+    {\r
+        //TODO: Must clean orphaned blocks from the Cache folder.\r
+        //\r
+        //The Cache folder may have orphaned blocks. Blocks may be left in the Cache folder because:\r
+        //1. A download was in progress when the application terminated. These blocks are needed to proceed \r
+        //  with partial download\r
+        //2. The application terminated abnormally before the blocks were cleared after a download\r
+        //3. The server file was deleted before the download completed.\r
+        //\r
+        //In #1, we need to keep the blocks. We need to detect the other cases and delete orphans\r
+        //\r
+        //Mitigations:\r
+        // - Delete blocks with no corresponding state\r
+        // - Check and delete possible orphans when a Deletion is detected\r
+        // - Add Advanced command "Clear Cache"\r
+        //\r
+        //Need a better way to differentiate between cases #2, #3 and #1\r
+\r
+        private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);\r
+\r
+        public string FilePath { get; private set; }\r
+        public string RelativePath { get; private set; }\r
+\r
+        public string CachePath { get; private set; }\r
+\r
+        public TreeHash ServerHash { get; private set; }\r
+\r
+        public string TempPath { get; private set; }\r
+\r
+        public bool HasBlocks\r
+        {\r
+            get { return _blocks.Count>0; }            \r
+        }\r
+\r
+        readonly ConcurrentDictionary<long, string> _blocks = new ConcurrentDictionary<long, string>();\r
+        readonly ConcurrentDictionary<string, string> _orphanBlocks = new ConcurrentDictionary<string, string>();\r
+\r
+        [ContractInvariantMethod]\r
+        private void Invariants()\r
+        {\r
+            Contract.Invariant(Path.IsPathRooted(CachePath));\r
+            Contract.Invariant(Path.IsPathRooted(FilePath));\r
+            Contract.Invariant(Path.IsPathRooted(TempPath));\r
+            Contract.Invariant(!Path.IsPathRooted(RelativePath));\r
+            Contract.Invariant(_blocks!=null);\r
+            Contract.Invariant(_orphanBlocks!=null);\r
+            Contract.Invariant(ServerHash!=null);\r
+        }\r
+\r
+        public BlockUpdater(string cachePath, string filePath, string relativePath,TreeHash serverHash)\r
+        {   \r
+            if (String.IsNullOrWhiteSpace(cachePath))\r
+                throw new ArgumentNullException("cachePath");\r
+            if (!Path.IsPathRooted(cachePath))\r
+                throw new ArgumentException("The cachePath must be rooted", "cachePath");\r
+            \r
+            if (string.IsNullOrWhiteSpace(filePath))\r
+                throw new ArgumentNullException("filePath");\r
+            if (!Path.IsPathRooted(filePath))\r
+                throw new ArgumentException("The filePath must be rooted", "filePath");\r
+            \r
+            if (string.IsNullOrWhiteSpace(relativePath))\r
+                throw new ArgumentNullException("relativePath");\r
+            if (Path.IsPathRooted(relativePath))\r
+                throw new ArgumentException("The relativePath must NOT be rooted", "relativePath");\r
+\r
+            if (serverHash == null)\r
+                throw new ArgumentNullException("serverHash");\r
+            Contract.EndContractBlock();\r
+\r
+            CachePath=cachePath;\r
+            FilePath = filePath;\r
+            RelativePath=relativePath;\r
+            ServerHash = serverHash;\r
+            //The file will be stored in a temporary location while downloading with an extension .download\r
+            TempPath = Path.Combine(CachePath, RelativePath + ".download");\r
+            \r
+            //Need to calculate the directory path because RelativePath may include folders\r
+            var directoryPath = Path.GetDirectoryName(TempPath);            \r
+            //directoryPath CAN be null if TempPath is a root path\r
+            if (String.IsNullOrWhiteSpace(directoryPath))\r
+                throw new ArgumentException("TempPath");\r
+            //CachePath was absolute so directoryPath is absolute too\r
+            Contract.Assume(Path.IsPathRooted(directoryPath));\r
+            \r
+            if (!Directory.Exists(directoryPath))\r
+                Directory.CreateDirectory(directoryPath);\r
+\r
+            LoadOrphans(directoryPath);\r
+        }\r
+\r
+        private void LoadOrphans(string directoryPath)\r
+        {\r
+            if (string.IsNullOrWhiteSpace(directoryPath))\r
+                throw new ArgumentNullException("directoryPath");\r
+            if (!Path.IsPathRooted(directoryPath))\r
+                throw new ArgumentException("The directoryPath must be rooted", "directoryPath");\r
+            if (ServerHash==null)\r
+                throw new InvalidOperationException("ServerHash wasn't initialized");\r
+            Contract.EndContractBlock();\r
+\r
+            var fileNamename = Path.GetFileName(FilePath);\r
+            var orphans = Directory.GetFiles(directoryPath, fileNamename + ".*");\r
+            foreach (var orphan in orphans)\r
+            {\r
+                using (var hasher = new MessageDigestContext(MessageDigest.CreateByName(ServerHash.BlockHash)))                \r
+                {\r
+                    hasher.Init();\r
+                    var buffer=File.ReadAllBytes(orphan);\r
+                    //The server truncates nulls before calculating hashes, have to do the same\r
+                    //Find the last non-null byte, starting from the end\r
+                    var lastByteIndex = Array.FindLastIndex(buffer, buffer.Length-1, aByte => aByte != 0);\r
+                    //lastByteIndex may be -1 if the file was empty. We don't want to use that block file\r
+                    if (lastByteIndex >= 0)\r
+                    {\r
+                        byte[] block;\r
+                        if (lastByteIndex == buffer.Length - 1)\r
+                            block = buffer;\r
+                        else\r
+                        {\r
+                            block=new byte[lastByteIndex];\r
+                            Buffer.BlockCopy(buffer,0,block,0,lastByteIndex);\r
+                        }\r
+                        var binHash = hasher.Digest(block);\r
+                        var hash = binHash.ToHashString();\r
+                        _orphanBlocks[hash] = orphan;\r
+                    }\r
+                }\r
+            }\r
+        }\r
+\r
+\r
+        public void Commit()\r
+        {\r
+            if (String.IsNullOrWhiteSpace(FilePath))\r
+                throw new InvalidOperationException("FilePath is empty");\r
+            if (String.IsNullOrWhiteSpace(TempPath))\r
+                throw new InvalidOperationException("TempPath is empty");\r
+            Contract.EndContractBlock();\r
+\r
+            //Copy the file to a temporary location. Changes will be made to the\r
+            //temporary file, then it will replace the original file\r
+            if (File.Exists(FilePath))\r
+                File.Copy(FilePath, TempPath, true);\r
+\r
+            //Set the size of the file to the size specified in the treehash\r
+            //This will also create an empty file if the file doesn't exist                        \r
+            \r
+            \r
+            SetFileSize(TempPath, ServerHash.Bytes);\r
+\r
+            //Update the temporary file with the data from the blocks\r
+            using (var stream = File.OpenWrite(TempPath))\r
+            {\r
+                foreach (var block in _blocks)\r
+                {\r
+                    var blockPath = block.Value;\r
+                    var blockIndex = block.Key;\r
+                    using (var blockStream = File.OpenRead(blockPath))\r
+                    {                        \r
+                        long offset = blockIndex*ServerHash.BlockSize;\r
+                        stream.Seek(offset, SeekOrigin.Begin);\r
+                        blockStream.CopyTo(stream);\r
+                    }\r
+                }\r
+            }\r
+            SwapFiles();\r
+\r
+            ClearBlocks();\r
+        }\r
+\r
+        private void SwapFiles()\r
+        {\r
+            if (String.IsNullOrWhiteSpace(FilePath))\r
+                throw new InvalidOperationException("FilePath is empty");\r
+            if (String.IsNullOrWhiteSpace(TempPath))\r
+                throw new InvalidOperationException("TempPath is empty");            \r
+            Contract.EndContractBlock();\r
+\r
+            if (File.Exists(FilePath))\r
+                File.Replace(TempPath, FilePath, null, true);\r
+            else\r
+            {\r
+                var targetDirectory = Path.GetDirectoryName(FilePath);\r
+                if (!Directory.Exists(targetDirectory))\r
+                    Directory.CreateDirectory(targetDirectory);\r
+                File.Move(TempPath, FilePath);\r
+            }\r
+        }\r
+\r
+        private void ClearBlocks()\r
+        {\r
+            if (Log.IsDebugEnabled)\r
+                Log.DebugFormat("Clearing blocks for {0}",this.FilePath);\r
+            //Get all the the block paths, orphan or not\r
+            var paths= _blocks.Select(pair => pair.Value)\r
+                          .Union(_orphanBlocks.Select(pair => pair.Value));\r
+            foreach (var filePath in paths)\r
+            {\r
+                File.Delete(filePath);\r
+            }\r
+\r
+            File.Delete(TempPath);\r
+            _blocks.Clear();\r
+            _orphanBlocks.Clear();\r
+        }\r
+\r
+        //Change the file's size, possibly truncating or adding to it\r
+        private  void SetFileSize(string filePath, long fileSize)\r
+        {\r
+            if (String.IsNullOrWhiteSpace(filePath))\r
+                throw new ArgumentNullException("filePath");\r
+            if (!Path.IsPathRooted(filePath))\r
+                throw new ArgumentException("The filePath must be rooted", "filePath");\r
+            if (fileSize < 0)\r
+                throw new ArgumentOutOfRangeException("fileSize");\r
+            Contract.EndContractBlock();\r
+\r
+            using (var stream = File.Open(filePath, FileMode.OpenOrCreate, FileAccess.Write))\r
+            {\r
+                stream.SetLength(fileSize);\r
+            }\r
+        }\r
+\r
+       /* //Check whether we should copy the local file to a temp path        \r
+        private  bool ShouldCopy(string localPath, string tempPath)\r
+        {\r
+            //No need to copy if there is no file\r
+            if (!File.Exists(localPath))\r
+                return false;\r
+\r
+            //If there is no temp file, go ahead and copy\r
+            if (!File.Exists(tempPath))\r
+                return true;\r
+\r
+            //If there is a temp file and is newer than the actual file, don't copy\r
+            var localLastWrite = File.GetLastWriteTime(localPath);\r
+            var tempLastWrite = File.GetLastWriteTime(tempPath);\r
+\r
+            //This could mean there is an interrupted download in progress\r
+            return (tempLastWrite < localLastWrite);\r
+        }*/\r
+\r
+\r
+        public bool UseOrphan(long blockIndex, string blockHash)\r
+        {\r
+            string blockPath=null;\r
+            if (_orphanBlocks.TryGetValue(blockHash,out blockPath))\r
+            {\r
+                _blocks[blockIndex] = blockPath;\r
+                return true;\r
+            }\r
+            return false;\r
+        }\r
+\r
+        public Task StoreBlock(long blockIndex,byte[] buffer)\r
+        {\r
+            var blockPath = String.Format("{0}.{1:000000}", TempPath, blockIndex);\r
+            _blocks[blockIndex] = blockPath;\r
+            //Remove any orphan files\r
+            if (File.Exists(blockPath))\r
+                File.Delete(blockPath);\r
+\r
+            return FileAsync.WriteAllBytes(blockPath, buffer);\r
+        }\r
+\r
+       \r
+\r
+    }\r
+}\r
index 5bb74ca..fd67e0c 100644 (file)
     <Reference Include="log4net">\r
       <HintPath>..\Libraries\log4net.dll</HintPath>\r
     </Reference>\r
+    <Reference Include="ManagedOpenSsl, Version=0.6.0.0, Culture=neutral, PublicKeyToken=2cc55badaa91f4de, processorArchitecture=x86">\r
+      <SpecificVersion>False</SpecificVersion>\r
+      <HintPath>..\Libraries\OpenSSL\ManagedOpenSsl.dll</HintPath>\r
+    </Reference>\r
     <Reference Include="Microsoft.CompilerServices.AsyncTargetingPack.Net4">\r
       <HintPath>..\packages\Microsoft.CompilerServices.AsyncTargetingPack.1.0.0\lib\net40\Microsoft.CompilerServices.AsyncTargetingPack.Net4.dll</HintPath>\r
     </Reference>\r
index 751b399..f94f45c 100644 (file)
@@ -43,11 +43,11 @@ using System.Collections.Concurrent;
 using System.Diagnostics.Contracts;\r
 using System.IO;\r
 using System.Reflection;\r
-using System.Security.Cryptography;\r
 using System.ServiceModel.Channels;\r
 using System.Threading;\r
 using System.Threading.Tasks;\r
 using System.Threading.Tasks.Dataflow;\r
+using OpenSSL.Crypto;\r
 \r
 namespace Pithos.Network\r
 {\r
@@ -250,19 +250,23 @@ namespace Pithos.Network
             if (size == 0)\r
             {\r
                 var buf = new byte[0];\r
-                var hasher=HashAlgorithm.Create(algorithm);                \r
-                hashes[0]=hasher.ComputeHash(buf);\r
-                return hashes;\r
+                using (var hasher = new MessageDigestContext(MessageDigest.CreateByName(algorithm)))\r
+                {                    \r
+                    hasher.Init();\r
+                    hashes[0] = hasher.Digest(buf);\r
+                    return hashes;\r
+                }\r
             }\r
 \r
 \r
             var buffer = new byte[parallelism][];\r
-            var hashers = new HashAlgorithm[parallelism];\r
+            var hashers = new MessageDigestContext[parallelism];\r
             var bufferManager = GetBufferManager(blockSize, parallelism);\r
             for (var i = 0; i < parallelism; i++)\r
             {\r
                 buffer[i] = bufferManager.TakeBuffer(blockSize);// new byte[blockSize];\r
-                hashers[i] = HashAlgorithm.Create(algorithm);\r
+                hashers[i] = new MessageDigestContext(MessageDigest.CreateByName(algorithm));\r
+                hashers[i].Init();\r
             }\r
             try\r
             {\r
@@ -298,9 +302,19 @@ namespace Pithos.Network
                                                                                                     aByte => aByte != 0);\r
 \r
                                                             var hasher = hashers[idx];\r
+\r
+                                                            byte[] hash;\r
+                                                            if (buffer[idx].Length == lastByteIndex || lastByteIndex==-1)\r
+                                                                hash = hasher.Digest(buffer[idx]);\r
+                                                            else\r
+                                                            {\r
+                                                                var buf=new byte[lastByteIndex];\r
+                                                                Buffer.BlockCopy(buffer[idx],0,buf,0,lastByteIndex);\r
+                                                                hash = hasher.Digest(buf);\r
+                                                            }\r
+\r
+                                                            \r
                                                             \r
-                                                            var hash = hasher.ComputeHash(buffer[idx], 0,\r
-                                                                                          lastByteIndex + 1);\r
                                                             var filePosition = indices[idx];\r
                                                             /*\r
                                                         Trace.TraceInformation("Hashed [{0}] [{1}/{2}] [{3:p}]", path,\r
index 4f32731..b435a86 100644 (file)
@@ -1,73 +1,92 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Security.Cryptography;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Threading.Tasks.Dataflow;
-
-namespace Pithos.Network
-{
-    public class MD5BlockCalculator:IDisposable
-    {
-        private HashAlgorithm _hasher = HashAlgorithm.Create("md5");
-
-        private ActionBlock<Tuple<long, byte[],int>>  _actionBlock;
-
-        private long _currentBlock = 0;
-
-        public MD5BlockCalculator(int capacity)
-        {
-            var opt = new ExecutionDataflowBlockOptions {BoundedCapacity = capacity};
-            _actionBlock=new ActionBlock<Tuple<long, byte[],int>>(t=> ProcessBlock(t),opt);
-        }
-
-        public MD5BlockCalculator()
-        {
-            _actionBlock=new ActionBlock<Tuple<long, byte[],int>>(t=> ProcessBlock(t));
-        }
-
-        private void ProcessBlock(Tuple<long,byte[],int> tuple)
-        {
-            if (tuple.Item1 == _currentBlock)
-            {
-                _hasher.TransformBlock(tuple.Item2, 0, tuple.Item3, null, 0);
-                Interlocked.Increment(ref _currentBlock);
-            }
-            else
-            {
-                _actionBlock.Post(tuple);
-            }
-        }
-
-        public void PostBlock(long blockIndex,byte[] buffer,int size)
-        {
-            _actionBlock.Post(Tuple.Create(blockIndex, buffer, size));
-        }
-
-        public async Task<string> GetHash()
-        {
-            _actionBlock.Complete();
-            await _actionBlock.Completion;
-            Debug.Assert(_actionBlock.InputCount == 0);
-            _hasher.TransformFinalBlock(new byte[0], 0, 0);
-            var hash=_hasher.Hash.ToHashString();
-            return hash;
-        }
-
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        protected virtual void Dispose(bool disposing)
-        {
-            if (disposing && _hasher!=null)
-                _hasher.Dispose();
-            _hasher = null;            
-        }
-    }
-}
+using System;\r
+using System.Collections.Generic;\r
+using System.Diagnostics;\r
+using System.Linq;\r
+using System.Security.Cryptography;\r
+using System.Text;\r
+using System.Threading;\r
+using System.Threading.Tasks;\r
+using System.Threading.Tasks.Dataflow;\r
+using OpenSSL.Core;\r
+using OpenSSL.Crypto;\r
+\r
+\r
+namespace Pithos.Network\r
+{\r
+    public class MD5BlockCalculator:IDisposable\r
+    {\r
+        private MessageDigestContext _hasher ;\r
+\r
+        private ActionBlock<Tuple<long, byte[],int>>  _actionBlock;\r
+\r
+        private long _currentBlock = 0;\r
+\r
+        public MD5BlockCalculator(int capacity)\r
+        {\r
+            var opt = new ExecutionDataflowBlockOptions {BoundedCapacity = capacity};\r
+            _actionBlock=new ActionBlock<Tuple<long, byte[],int>>(t=> ProcessBlock(t),opt);\r
+            _hasher = new MessageDigestContext(MessageDigest.CreateByName("md5"));\r
+            _hasher.Init();\r
+        }\r
+\r
+        public MD5BlockCalculator()\r
+        {\r
+            _actionBlock=new ActionBlock<Tuple<long, byte[],int>>(t=> ProcessBlock(t));\r
+            _hasher = new MessageDigestContext(MessageDigest.CreateByName("md5"));\r
+            _hasher.Init();\r
+        }\r
+\r
+        private void ProcessBlock(Tuple<long,byte[],int> tuple)\r
+        {\r
+            if (tuple.Item1 == _currentBlock)\r
+            {\r
+                var size = tuple.Item3;\r
+\r
+                var buffer= tuple.Item2;\r
+                if (size == buffer.Length)\r
+                {\r
+                    _hasher.Update(buffer);\r
+                }\r
+                else\r
+                {\r
+                    var block = new byte[size];\r
+                    Buffer.BlockCopy(buffer, 0, block, 0, size);\r
+                    _hasher.Update(block);\r
+                }\r
+                Interlocked.Increment(ref _currentBlock);\r
+            }\r
+            else\r
+            {\r
+                _actionBlock.Post(tuple);\r
+            }\r
+        }\r
+\r
+        public void PostBlock(long blockIndex,byte[] buffer,int size)\r
+        {\r
+            _actionBlock.Post(Tuple.Create(blockIndex, buffer, size));\r
+        }\r
+\r
+        public async Task<string> GetHash()\r
+        {\r
+            _actionBlock.Complete();\r
+            await _actionBlock.Completion;\r
+            Debug.Assert(_actionBlock.InputCount == 0);\r
+            var hashBytes=_hasher.DigestFinal();\r
+            var hash=hashBytes.ToHashString();\r
+            return hash;\r
+        }\r
+\r
+        public void Dispose()\r
+        {\r
+            Dispose(true);\r
+            GC.SuppressFinalize(this);\r
+        }\r
+\r
+        protected virtual void Dispose(bool disposing)\r
+        {\r
+            if (disposing && _hasher!=null)\r
+                _hasher.Dispose();\r
+            _hasher = null;            \r
+        }\r
+    }\r
+}\r
index 3c31936..015f325 100644 (file)
@@ -48,6 +48,7 @@
     <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>\r
     <CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>\r
     <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>\r
+    <PlatformTarget>x86</PlatformTarget>\r
   </PropertyGroup>\r
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
     <DebugType>pdbonly</DebugType>\r
     <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>\r
     <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">\r
+    <DebugSymbols>true</DebugSymbols>\r
+    <OutputPath>bin\x86\Debug\</OutputPath>\r
+    <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+    <Optimize>true</Optimize>\r
+    <DebugType>full</DebugType>\r
+    <PlatformTarget>x86</PlatformTarget>\r
+    <ErrorReport>prompt</ErrorReport>\r
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\r
+    <Prefer32Bit>false</Prefer32Bit>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">\r
+    <OutputPath>bin\x86\Release\</OutputPath>\r
+    <DefineConstants>TRACE</DefineConstants>\r
+    <Optimize>true</Optimize>\r
+    <DebugType>pdbonly</DebugType>\r
+    <PlatformTarget>x86</PlatformTarget>\r
+    <ErrorReport>prompt</ErrorReport>\r
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\r
+    <Prefer32Bit>false</Prefer32Bit>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Test|x86'">\r
+    <DebugSymbols>true</DebugSymbols>\r
+    <OutputPath>bin\x86\Test\</OutputPath>\r
+    <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+    <DebugType>full</DebugType>\r
+    <PlatformTarget>x86</PlatformTarget>\r
+    <ErrorReport>prompt</ErrorReport>\r
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\r
+    <Prefer32Bit>false</Prefer32Bit>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Premium Debug|x86'">\r
+    <DebugSymbols>true</DebugSymbols>\r
+    <OutputPath>bin\x86\Premium Debug\</OutputPath>\r
+    <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+    <DebugType>full</DebugType>\r
+    <PlatformTarget>x86</PlatformTarget>\r
+    <ErrorReport>prompt</ErrorReport>\r
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\r
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>\r
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug All|x86'">\r
+    <DebugSymbols>true</DebugSymbols>\r
+    <OutputPath>bin\x86\Debug All\</OutputPath>\r
+    <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+    <DebugType>full</DebugType>\r
+    <PlatformTarget>x86</PlatformTarget>\r
+    <ErrorReport>prompt</ErrorReport>\r
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\r
+    <Prefer32Bit>false</Prefer32Bit>\r
+  </PropertyGroup>\r
   <ItemGroup>\r
     <Reference Include="log4net">\r
       <HintPath>..\Libraries\log4net.dll</HintPath>\r
     </Reference>\r
+    <Reference Include="ManagedOpenSsl">\r
+      <HintPath>..\Libraries\OpenSSL\ManagedOpenSsl.dll</HintPath>\r
+    </Reference>\r
     <Reference Include="Microsoft.CompilerServices.AsyncTargetingPack.Net4">\r
       <HintPath>..\packages\Microsoft.CompilerServices.AsyncTargetingPack.1.0.0\lib\net40\Microsoft.CompilerServices.AsyncTargetingPack.Net4.dll</HintPath>\r
     </Reference>\r
     <None Include="packages.config" />\r
     <None Include="pithos.snk" />\r
   </ItemGroup>\r
+  <ItemGroup>\r
+    <Content Include="libeay32.dll">\r
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
+    </Content>\r
+    <Content Include="ssleay32.dll">\r
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
+    </Content>\r
+  </ItemGroup>\r
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r
        Other similar extension points exist, see Microsoft.Common.targets.\r
index 4a5992b..e04a9c8 100644 (file)
@@ -46,12 +46,13 @@ using System.Diagnostics.Contracts;
 using System.IO;\r
 using System.Reflection;\r
 using System.Runtime.Remoting.Metadata.W3cXsd2001;\r
-using System.Security.Cryptography;\r
 using System.Threading;\r
 using System.Threading.Tasks;\r
 using System.Linq;\r
 using Pithos.Interfaces;\r
 using log4net;\r
+using OpenSSL.Core;\r
+using OpenSSL.Crypto;\r
 \r
 namespace Pithos.Network\r
 {\r
@@ -87,12 +88,29 @@ namespace Pithos.Network
             //DON'T calculate hashes for folders\r
             if (Directory.Exists(path))\r
                 return "";\r
-\r
+            //TODO: Replace with MD5BlockCalculator\r
             string hash;\r
-            using (var hasher = MD5.Create())\r
+            using (var hasher = new MessageDigestContext(MessageDigest.CreateByName("md5")))\r
             using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize, true))\r
             {\r
-                var hashBytes = hasher.ComputeHash(stream);\r
+                var buffer = new byte[BufferSize];\r
+                hasher.Init();\r
+                int read;\r
+                do\r
+                {                    \r
+                    read = stream.Read(buffer, 0, buffer.Length);                    \r
+                    if (read==buffer.Length)\r
+                    {\r
+                        hasher.Update(buffer);    \r
+                    }\r
+                    else\r
+                    {\r
+                        var block = new byte[read];\r
+                        Buffer.BlockCopy(buffer, 0, block, 0, read);\r
+                        hasher.Update(block);                        \r
+                    }\r
+                } while (read>0);\r
+                var hashBytes = hasher.DigestFinal();\r
                 hash = hashBytes.ToHashString();\r
             }\r
             return hash;\r
@@ -234,10 +252,6 @@ namespace Pithos.Network
                 string fileHash;\r
 \r
                 var md5Hash=md5.GetHash().Result;\r
-/*\r
-                var hasher = HashAlgorithm.Create("MD5");\r
-                stream.Position = 0;\r
-*/\r
                 treeHash.MD5= md5Hash;\r
 \r
                 return treeHash;\r
@@ -254,12 +268,14 @@ namespace Pithos.Network
             Contract.EndContractBlock();            \r
 \r
             var hashCount = hashMap.Count;\r
-            //The tophash of an empty hashmap is an empty array\r
+            //TODO: Replace this calculation with a constant\r
+            //The tophash of an empty hashmap is the hash of an empty array\r
             if (hashCount == 0)\r
             {\r
-                using (var hasher = HashAlgorithm.Create(algorithm))\r
+                using (var hasher = new MessageDigestContext(MessageDigest.CreateByName(algorithm)))\r
                 {\r
-                    var emptyHash=hasher.ComputeHash(new byte[0]);\r
+                    hasher.Init();\r
+                    var emptyHash=hasher.Digest(new byte[0]);\r
                     return emptyHash;\r
                 }                \r
             }\r
@@ -284,16 +300,17 @@ namespace Pithos.Network
             Parallel.For(0, leafs/2,\r
                 (step, state) =>\r
                 {\r
-                    using (var hasher = HashAlgorithm.Create(algorithm))\r
+                    using (var hasher = new MessageDigestContext(MessageDigest.CreateByName(algorithm)))\r
                     {\r
+                        hasher.Init();\r
                         var i = step*2;\r
                         var block1 = i <= hashCount - 1 ? hashMap[i] : empty;\r
                         var block2 = i <= hashCount - 2 ? hashMap[i + 1] : empty;\r
 \r
-                        hasher.TransformBlock(block1, 0, block1.Length, null, 0);\r
-                        hasher.TransformFinalBlock(block2, 0, block2.Length);\r
+                        hasher.Update(block1);\r
+                        hasher.Update(block2);\r
 \r
-                        var finalHash = hasher.Hash;\r
+                        var finalHash = hasher.DigestFinal();\r
                         //Store the final value in its proper place\r
                         newHashes[step] = finalHash;\r
                     }\r
@@ -313,9 +330,10 @@ namespace Pithos.Network
                 throw new ArgumentNullException("algorithm");\r
             Contract.EndContractBlock();\r
 \r
-            using (var hasher = HashAlgorithm.Create(algorithm))\r
+            using (var hasher = new MessageDigestContext(MessageDigest.CreateByName(algorithm)))\r
             {\r
-                var hash = hasher.ComputeHash(buffer, 0, buffer.Length);\r
+                hasher.Init();\r
+                var hash = hasher.Digest(buffer);\r
                 return hash;\r
             }        \r
         }\r
index 8606d31..5f2238c 100644 (file)
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.ShellExtensions", "Pithos.ShellExtensions\Pithos.ShellExtensions.csproj", "{240B432F-1030-4623-BCC3-FF351D6C1B63}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.ShellExtensions.Test", "Pithos.ShellExtensions.Test\Pithos.ShellExtensions.Test.csproj", "{2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Interfaces", "Pithos.Interfaces\Pithos.Interfaces.csproj", "{7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common Files", "Common Files", "{E5971C66-D274-4818-B1A2-3F273994027D}"
-       ProjectSection(SolutionItems) = preProject
-               CommonAssemblyVersion.cs = CommonAssemblyVersion.cs
-               Pithos.licenseheader = Pithos.licenseheader
-               pithos.snk = pithos.snk
-       EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Client.Test", "Pithos.Client.Test\Pithos.Client.Test.csproj", "{822F885B-83E8-4A9A-B02E-0FEAE444D960}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParallelExtensionsExtras", "Libraries\ParallelExtensionsExtras\ParallelExtensionsExtras.csproj", "{C45218F8-09E7-4F57-85BC-5D8D2AC736A3}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Core", "Pithos.Core\Pithos.Core.csproj", "{142AF135-DF30-4563-B0AC-B604235AE874}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Network.Test", "Pithos.Network.Test\Pithos.Network.Test.csproj", "{E027200B-C26A-4877-BFD9-1A18CF5DF2F4}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Network", "Pithos.Network\Pithos.Network.csproj", "{C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Core.Test", "Pithos.Core.Test\Pithos.Core.Test.csproj", "{F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newtonsoft.Json", "Libraries\Json40r2\Source\Src\Newtonsoft.Json\Newtonsoft.Json.csproj", "{A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Client.WPF", "Pithos.Client.WPF\Pithos.Client.WPF.csproj", "{4D9406A3-50ED-4672-BB97-A0B3EA4946FE}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NotifyIconWpf", "NotifyIconWpf\NotifyIconWpf.csproj", "{7AC63864-7638-41C4-969C-D3197EF2BED9}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pithos.AppCast", "Pithos.AppCast", "{4ACC38DA-F81B-4DA5-A1AB-CEAAF3B7008A}"
-       ProjectSection(SolutionItems) = preProject
-               Pithos.AppCast\rnotes.css = Pithos.AppCast\rnotes.css
-               Pithos.AppCast\versioninfo.xml = Pithos.AppCast\versioninfo.xml
-       EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetSparkle2010", "NetSparkle\NetSparkle2010.csproj", "{74635A21-2BAD-4522-AB95-E3E5703CD301}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Client.WPF.Test", "Pithos.Client.WPF.Test\Pithos.Client.WPF.Test.csproj", "{7B5BFE77-FC4D-43B3-84A0-9CB457238951}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Interfaces.Test", "Pithos.Interfaces.Test\Pithos.Interfaces.Test.csproj", "{881F7260-CA40-40FD-AEEC-860B346DC2DC}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.IntegrationTests", "Pithos.IntegrationTests\Pithos.IntegrationTests.csproj", "{86524E19-7C1C-4A90-93AA-2316A150DC52}"
-EndProject
-Global
-       GlobalSection(SolutionConfigurationPlatforms) = preSolution
-               Debug All|Any CPU = Debug All|Any CPU
-               Debug All|Mixed Platforms = Debug All|Mixed Platforms
-               Debug All|x64 = Debug All|x64
-               Debug All|x86 = Debug All|x86
-               Debug|Any CPU = Debug|Any CPU
-               Debug|Mixed Platforms = Debug|Mixed Platforms
-               Debug|x64 = Debug|x64
-               Debug|x86 = Debug|x86
-               Premium Debug|Any CPU = Premium Debug|Any CPU
-               Premium Debug|Mixed Platforms = Premium Debug|Mixed Platforms
-               Premium Debug|x64 = Premium Debug|x64
-               Premium Debug|x86 = Premium Debug|x86
-               Release|Any CPU = Release|Any CPU
-               Release|Mixed Platforms = Release|Mixed Platforms
-               Release|x64 = Release|x64
-               Release|x86 = Release|x86
-               Test|Any CPU = Test|Any CPU
-               Test|Mixed Platforms = Test|Mixed Platforms
-               Test|x64 = Test|x64
-               Test|x86 = Test|x86
-       EndGlobalSection
-       GlobalSection(ProjectConfigurationPlatforms) = postSolution
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|Any CPU.Build.0 = Debug All|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|x64.ActiveCfg = Debug All|x64
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|x64.Build.0 = Debug All|x64
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|x86.ActiveCfg = Debug All|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|x64.ActiveCfg = Debug|x64
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|x64.Build.0 = Debug|x64
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|x86.ActiveCfg = Debug|x86
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|x86.Build.0 = Debug|x86
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|x64.ActiveCfg = Premium Debug|x64
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|x64.Build.0 = Premium Debug|x64
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|Any CPU.Build.0 = Release|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|x64.ActiveCfg = Release|x64
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|x64.Build.0 = Release|x64
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|x86.ActiveCfg = Release|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|x86.Build.0 = Release|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Test|Any CPU.ActiveCfg = Test|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Test|Mixed Platforms.Build.0 = Test|Any CPU
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Test|x64.ActiveCfg = Test|x64
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Test|x64.Build.0 = Test|x64
-               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Test|x86.ActiveCfg = Test|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug All|Any CPU.Build.0 = Debug All|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug All|x64.ActiveCfg = Debug All|x64
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug All|x86.ActiveCfg = Debug All|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|x64.Build.0 = Debug|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|x86.Build.0 = Debug|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Premium Debug|x64.ActiveCfg = Premium Debug|x64
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|Any CPU.Build.0 = Release|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|x64.ActiveCfg = Release|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|x64.Build.0 = Release|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|x86.ActiveCfg = Release|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|x86.Build.0 = Release|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Test|Any CPU.ActiveCfg = Test|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Test|Mixed Platforms.Build.0 = Test|Any CPU
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Test|x64.ActiveCfg = Test|x64
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Test|x86.ActiveCfg = Test|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|Any CPU.Build.0 = Debug All|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|x64.ActiveCfg = Debug All|x64
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|x64.Build.0 = Debug All|x64
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|x86.ActiveCfg = Debug All|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|x64.Build.0 = Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|x86.Build.0 = Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|x64.ActiveCfg = Premium Debug|x64
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|x64.Build.0 = Premium Debug|x64
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|Any CPU.Build.0 = Release|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|x64.ActiveCfg = Release|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|x64.Build.0 = Release|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|x86.ActiveCfg = Release|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|x86.Build.0 = Release|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|Any CPU.ActiveCfg = Test|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|Any CPU.Build.0 = Test|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|Mixed Platforms.Build.0 = Test|Any CPU
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|x64.ActiveCfg = Test|x64
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|x64.Build.0 = Test|x64
-               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|x86.ActiveCfg = Test|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|Any CPU.Build.0 = Debug All|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|x64.ActiveCfg = Debug All|x64
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|x64.Build.0 = Debug All|x64
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|x86.ActiveCfg = Debug All|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|x64.Build.0 = Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|x86.Build.0 = Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|x64.ActiveCfg = Premium Debug|x64
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|x64.Build.0 = Premium Debug|x64
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|Any CPU.Build.0 = Release|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|x64.ActiveCfg = Release|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|x64.Build.0 = Release|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|x86.ActiveCfg = Release|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|x86.Build.0 = Release|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|Any CPU.ActiveCfg = Test|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|Any CPU.Build.0 = Test|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|Mixed Platforms.Build.0 = Test|Any CPU
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|x64.ActiveCfg = Test|x64
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|x64.Build.0 = Test|x64
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|x86.ActiveCfg = Test|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|Any CPU.Build.0 = Debug All|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|x64.ActiveCfg = Debug All|x64
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|x64.Build.0 = Debug All|x64
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|x86.ActiveCfg = Debug All|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|x64.Build.0 = Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|x86.Build.0 = Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|x64.ActiveCfg = Premium Debug|x64
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|x64.Build.0 = Premium Debug|x64
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|Any CPU.Build.0 = Release|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|x64.ActiveCfg = Release|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|x64.Build.0 = Release|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|x86.ActiveCfg = Release|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|x86.Build.0 = Release|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|Any CPU.ActiveCfg = Test|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|Any CPU.Build.0 = Test|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|Mixed Platforms.Build.0 = Test|Any CPU
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|x64.ActiveCfg = Test|x64
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|x64.Build.0 = Test|x64
-               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|x86.ActiveCfg = Test|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|Any CPU.Build.0 = Debug All|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|x64.ActiveCfg = Debug All|x64
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|x64.Build.0 = Debug All|x64
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|x86.ActiveCfg = Debug All|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|x64.ActiveCfg = Debug|x86
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|x64.Build.0 = Debug|x86
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|x86.ActiveCfg = Debug|x86
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|x86.Build.0 = Debug|x86
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|x64.ActiveCfg = Premium Debug|x64
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|x64.Build.0 = Premium Debug|x64
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|Any CPU.Build.0 = Release|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|x64.ActiveCfg = Release|x86
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|x64.Build.0 = Release|x86
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|x86.ActiveCfg = Release|x86
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|x86.Build.0 = Release|x86
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|Any CPU.ActiveCfg = Test|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|Any CPU.Build.0 = Test|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|Mixed Platforms.Build.0 = Test|Any CPU
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|x64.ActiveCfg = Test|x64
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|x64.Build.0 = Test|x64
-               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|x86.ActiveCfg = Test|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|Any CPU.Build.0 = Debug All|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|x64.ActiveCfg = Debug All|x64
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|x64.Build.0 = Debug All|x64
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|x86.ActiveCfg = Debug All|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|x64.Build.0 = Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|x86.Build.0 = Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|x64.ActiveCfg = Premium Debug|x64
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|x64.Build.0 = Premium Debug|x64
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|Any CPU.Build.0 = Release|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|x64.ActiveCfg = Release|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|x64.Build.0 = Release|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|x86.ActiveCfg = Release|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|x86.Build.0 = Release|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|Any CPU.ActiveCfg = Test|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|Any CPU.Build.0 = Test|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|Mixed Platforms.Build.0 = Test|Any CPU
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|x64.ActiveCfg = Test|x64
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|x64.Build.0 = Test|x64
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|x86.ActiveCfg = Test|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|Any CPU.Build.0 = Debug All|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|x64.ActiveCfg = Debug All|x64
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|x64.Build.0 = Debug All|x64
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|x86.ActiveCfg = Debug All|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|x64.Build.0 = Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|x86.Build.0 = Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|x64.ActiveCfg = Premium Debug|x64
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|x64.Build.0 = Premium Debug|x64
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|Any CPU.Build.0 = Release|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|x64.ActiveCfg = Release|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|x64.Build.0 = Release|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|x86.ActiveCfg = Release|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|x86.Build.0 = Release|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|Any CPU.ActiveCfg = Test|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|Any CPU.Build.0 = Test|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|Mixed Platforms.Build.0 = Test|Any CPU
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|x64.ActiveCfg = Test|x64
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|x64.Build.0 = Test|x64
-               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|x86.ActiveCfg = Test|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|Any CPU.Build.0 = Debug All|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|x64.ActiveCfg = Debug All|x64
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|x64.Build.0 = Debug All|x64
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|x86.ActiveCfg = Debug All|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|x64.Build.0 = Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|x86.Build.0 = Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|x64.ActiveCfg = Premium Debug|x64
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|x64.Build.0 = Premium Debug|x64
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|Any CPU.Build.0 = Release|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|x64.ActiveCfg = Release|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|x64.Build.0 = Release|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|x86.ActiveCfg = Release|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|x86.Build.0 = Release|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|Any CPU.ActiveCfg = Test|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|Any CPU.Build.0 = Test|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|Mixed Platforms.Build.0 = Test|Any CPU
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|x64.ActiveCfg = Test|x64
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|x64.Build.0 = Test|x64
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|x86.ActiveCfg = Test|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|Any CPU.Build.0 = Debug All|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|x64.ActiveCfg = Debug All|x64
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|x64.Build.0 = Debug All|x64
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|x86.ActiveCfg = Debug All|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|x64.Build.0 = Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|x86.Build.0 = Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|x64.ActiveCfg = Premium Debug|x64
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|x64.Build.0 = Premium Debug|x64
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|Any CPU.Build.0 = Release|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|x64.ActiveCfg = Release|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|x64.Build.0 = Release|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|x86.ActiveCfg = Release|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|x86.Build.0 = Release|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|Any CPU.ActiveCfg = Test|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|Any CPU.Build.0 = Test|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|Mixed Platforms.Build.0 = Test|Any CPU
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|x64.ActiveCfg = Test|x64
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|x64.Build.0 = Test|x64
-               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|x86.ActiveCfg = Test|Any CPU
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|Any CPU.Build.0 = Debug All|Any CPU
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|x64.ActiveCfg = Debug All|x64
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|x64.Build.0 = Debug All|x64
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|x86.ActiveCfg = Debug All|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|x86.Build.0 = Debug All|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|Any CPU.ActiveCfg = Debug|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|Any CPU.Build.0 = Debug|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|Mixed Platforms.Build.0 = Debug|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|x64.ActiveCfg = Debug|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|x64.Build.0 = Debug|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|x86.ActiveCfg = Debug|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|x86.Build.0 = Debug|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|x64.ActiveCfg = Premium Debug|x64
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|x64.Build.0 = Premium Debug|x64
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|x86.ActiveCfg = Premium Debug|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|x86.Build.0 = Premium Debug|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|Any CPU.ActiveCfg = Release|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|Mixed Platforms.ActiveCfg = Release|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|Mixed Platforms.Build.0 = Release|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|x64.ActiveCfg = Release|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|x64.Build.0 = Release|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|x86.ActiveCfg = Release|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|x86.Build.0 = Release|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|Any CPU.ActiveCfg = Release|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|Mixed Platforms.ActiveCfg = Release|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|Mixed Platforms.Build.0 = Release|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|x64.ActiveCfg = Debug All|x64
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|x64.Build.0 = Debug All|x64
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|x86.ActiveCfg = Release|x86
-               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|x86.Build.0 = Release|x86
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|Any CPU.Build.0 = Debug All|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|x64.ActiveCfg = Debug All|x64
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|x64.Build.0 = Debug All|x64
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|x86.ActiveCfg = Debug All|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|x64.Build.0 = Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|x86.Build.0 = Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|x64.ActiveCfg = Premium Debug|x64
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|x64.Build.0 = Premium Debug|x64
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|Any CPU.Build.0 = Release|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|x64.ActiveCfg = Release|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|x64.Build.0 = Release|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|x86.ActiveCfg = Release|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|x86.Build.0 = Release|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|Any CPU.ActiveCfg = Release|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|Any CPU.Build.0 = Release|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|Mixed Platforms.Build.0 = Release|Any CPU
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|x64.ActiveCfg = Debug All|x64
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|x64.Build.0 = Debug All|x64
-               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|x86.ActiveCfg = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug All|Any CPU.ActiveCfg = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug All|Any CPU.Build.0 = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug All|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug All|Mixed Platforms.Build.0 = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug All|x64.ActiveCfg = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug All|x86.ActiveCfg = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|x64.Build.0 = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|x86.Build.0 = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Premium Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Premium Debug|Any CPU.Build.0 = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Premium Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Premium Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Premium Debug|x64.ActiveCfg = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Premium Debug|x86.ActiveCfg = Debug|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|Any CPU.Build.0 = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|x64.ActiveCfg = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|x64.Build.0 = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|x86.ActiveCfg = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|x86.Build.0 = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Test|Any CPU.ActiveCfg = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Test|Any CPU.Build.0 = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Test|Mixed Platforms.Build.0 = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Test|x64.ActiveCfg = Release|Any CPU
-               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Test|x86.ActiveCfg = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug All|Any CPU.ActiveCfg = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug All|Any CPU.Build.0 = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug All|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug All|Mixed Platforms.Build.0 = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug All|x64.ActiveCfg = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug All|x86.ActiveCfg = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Premium Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Premium Debug|Any CPU.Build.0 = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Premium Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Premium Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Premium Debug|x64.ActiveCfg = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Premium Debug|x86.ActiveCfg = Debug|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|Any CPU.Build.0 = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|x64.ActiveCfg = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|x64.Build.0 = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|x86.ActiveCfg = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|x86.Build.0 = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Test|Any CPU.ActiveCfg = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Test|Any CPU.Build.0 = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Test|Mixed Platforms.Build.0 = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Test|x64.ActiveCfg = Release|Any CPU
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Test|x86.ActiveCfg = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug All|Any CPU.ActiveCfg = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug All|Any CPU.Build.0 = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug All|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug All|Mixed Platforms.Build.0 = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug All|x64.ActiveCfg = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug All|x86.ActiveCfg = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Premium Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Premium Debug|Any CPU.Build.0 = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Premium Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Premium Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Premium Debug|x64.ActiveCfg = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Premium Debug|x86.ActiveCfg = Debug|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|Any CPU.Build.0 = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|x64.ActiveCfg = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|x64.Build.0 = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|x86.ActiveCfg = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|x86.Build.0 = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Test|Any CPU.ActiveCfg = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Test|Any CPU.Build.0 = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Test|Mixed Platforms.Build.0 = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Test|x64.ActiveCfg = Release|Any CPU
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Test|x86.ActiveCfg = Release|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug All|Any CPU.ActiveCfg = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug All|Any CPU.Build.0 = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug All|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug All|Mixed Platforms.Build.0 = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug All|x64.ActiveCfg = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug All|x86.ActiveCfg = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|Any CPU.Build.0 = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|x64.ActiveCfg = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|x64.Build.0 = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|x86.ActiveCfg = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Premium Debug|Any CPU.ActiveCfg = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Premium Debug|Any CPU.Build.0 = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Premium Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Premium Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Premium Debug|x64.ActiveCfg = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Premium Debug|x86.ActiveCfg = Debug|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Release|Any CPU.ActiveCfg = Release|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Release|Any CPU.Build.0 = Release|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Release|x64.ActiveCfg = Release|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Release|x86.ActiveCfg = Release|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Test|Any CPU.ActiveCfg = Release|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Test|Any CPU.Build.0 = Release|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Test|Mixed Platforms.Build.0 = Release|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Test|x64.ActiveCfg = Release|Any CPU
-               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Test|x86.ActiveCfg = Release|Any CPU
-       EndGlobalSection
-       GlobalSection(SolutionProperties) = preSolution
-               HideSolutionNode = FALSE
-       EndGlobalSection
-       GlobalSection(NestedProjects) = preSolution
-               {822F885B-83E8-4A9A-B02E-0FEAE444D960} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}
-               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}
-               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}
-               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}
-               {7B5BFE77-FC4D-43B3-84A0-9CB457238951} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}
-               {881F7260-CA40-40FD-AEEC-860B346DC2DC} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}
-               {86524E19-7C1C-4A90-93AA-2316A150DC52} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}
-       EndGlobalSection
-EndGlobal
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Visual Studio 2012\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.ShellExtensions", "Pithos.ShellExtensions\Pithos.ShellExtensions.csproj", "{240B432F-1030-4623-BCC3-FF351D6C1B63}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.ShellExtensions.Test", "Pithos.ShellExtensions.Test\Pithos.ShellExtensions.Test.csproj", "{2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Interfaces", "Pithos.Interfaces\Pithos.Interfaces.csproj", "{7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}"\r
+EndProject\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common Files", "Common Files", "{E5971C66-D274-4818-B1A2-3F273994027D}"\r
+       ProjectSection(SolutionItems) = preProject\r
+               CommonAssemblyVersion.cs = CommonAssemblyVersion.cs\r
+               Pithos.licenseheader = Pithos.licenseheader\r
+               pithos.snk = pithos.snk\r
+       EndProjectSection\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Client.Test", "Pithos.Client.Test\Pithos.Client.Test.csproj", "{822F885B-83E8-4A9A-B02E-0FEAE444D960}"\r
+EndProject\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParallelExtensionsExtras", "Libraries\ParallelExtensionsExtras\ParallelExtensionsExtras.csproj", "{C45218F8-09E7-4F57-85BC-5D8D2AC736A3}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Core", "Pithos.Core\Pithos.Core.csproj", "{142AF135-DF30-4563-B0AC-B604235AE874}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Network.Test", "Pithos.Network.Test\Pithos.Network.Test.csproj", "{E027200B-C26A-4877-BFD9-1A18CF5DF2F4}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Network", "Pithos.Network\Pithos.Network.csproj", "{C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Core.Test", "Pithos.Core.Test\Pithos.Core.Test.csproj", "{F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Newtonsoft.Json", "Libraries\Json40r2\Source\Src\Newtonsoft.Json\Newtonsoft.Json.csproj", "{A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Client.WPF", "Pithos.Client.WPF\Pithos.Client.WPF.csproj", "{4D9406A3-50ED-4672-BB97-A0B3EA4946FE}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NotifyIconWpf", "NotifyIconWpf\NotifyIconWpf.csproj", "{7AC63864-7638-41C4-969C-D3197EF2BED9}"\r
+EndProject\r
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pithos.AppCast", "Pithos.AppCast", "{4ACC38DA-F81B-4DA5-A1AB-CEAAF3B7008A}"\r
+       ProjectSection(SolutionItems) = preProject\r
+               Pithos.AppCast\rnotes.css = Pithos.AppCast\rnotes.css\r
+               Pithos.AppCast\versioninfo.xml = Pithos.AppCast\versioninfo.xml\r
+       EndProjectSection\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetSparkle2010", "NetSparkle\NetSparkle2010.csproj", "{74635A21-2BAD-4522-AB95-E3E5703CD301}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Client.WPF.Test", "Pithos.Client.WPF.Test\Pithos.Client.WPF.Test.csproj", "{7B5BFE77-FC4D-43B3-84A0-9CB457238951}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.Interfaces.Test", "Pithos.Interfaces.Test\Pithos.Interfaces.Test.csproj", "{881F7260-CA40-40FD-AEEC-860B346DC2DC}"\r
+EndProject\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pithos.IntegrationTests", "Pithos.IntegrationTests\Pithos.IntegrationTests.csproj", "{86524E19-7C1C-4A90-93AA-2316A150DC52}"\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug All|Any CPU = Debug All|Any CPU\r
+               Debug All|Mixed Platforms = Debug All|Mixed Platforms\r
+               Debug All|x64 = Debug All|x64\r
+               Debug All|x86 = Debug All|x86\r
+               Debug|Any CPU = Debug|Any CPU\r
+               Debug|Mixed Platforms = Debug|Mixed Platforms\r
+               Debug|x64 = Debug|x64\r
+               Debug|x86 = Debug|x86\r
+               Premium Debug|Any CPU = Premium Debug|Any CPU\r
+               Premium Debug|Mixed Platforms = Premium Debug|Mixed Platforms\r
+               Premium Debug|x64 = Premium Debug|x64\r
+               Premium Debug|x86 = Premium Debug|x86\r
+               Release|Any CPU = Release|Any CPU\r
+               Release|Mixed Platforms = Release|Mixed Platforms\r
+               Release|x64 = Release|x64\r
+               Release|x86 = Release|x86\r
+               Test|Any CPU = Test|Any CPU\r
+               Test|Mixed Platforms = Test|Mixed Platforms\r
+               Test|x64 = Test|x64\r
+               Test|x86 = Test|x86\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|Any CPU.Build.0 = Debug All|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|x64.ActiveCfg = Debug All|x64\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|x64.Build.0 = Debug All|x64\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug All|x86.ActiveCfg = Debug All|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|x64.ActiveCfg = Debug|x86\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|x64.Build.0 = Debug|x86\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|x86.ActiveCfg = Debug|x86\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Debug|x86.Build.0 = Debug|x86\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|x64.ActiveCfg = Premium Debug|x64\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|x64.Build.0 = Premium Debug|x64\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|x64.ActiveCfg = Release|x86\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|x64.Build.0 = Release|x86\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|x86.ActiveCfg = Release|x86\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Release|x86.Build.0 = Release|x86\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|Any CPU.ActiveCfg = Test|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|Any CPU.Build.0 = Test|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|Mixed Platforms.Build.0 = Test|Any CPU\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|x64.ActiveCfg = Test|x64\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|x64.Build.0 = Test|x64\r
+               {142AF135-DF30-4563-B0AC-B604235AE874}.Test|x86.ActiveCfg = Test|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|Any CPU.Build.0 = Debug All|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|x64.ActiveCfg = Debug All|x64\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|x64.Build.0 = Debug All|x64\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug All|x86.ActiveCfg = Debug All|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|x64.ActiveCfg = Debug|x64\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|x64.Build.0 = Debug|x64\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|x86.ActiveCfg = Debug|x86\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Debug|x86.Build.0 = Debug|x86\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|x64.ActiveCfg = Premium Debug|x64\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|x64.Build.0 = Premium Debug|x64\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|x64.ActiveCfg = Release|x64\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|x64.Build.0 = Release|x64\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Release|x86.Build.0 = Release|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Test|Any CPU.ActiveCfg = Test|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Test|Mixed Platforms.Build.0 = Test|Any CPU\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Test|x64.ActiveCfg = Test|x64\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Test|x64.Build.0 = Test|x64\r
+               {240B432F-1030-4623-BCC3-FF351D6C1B63}.Test|x86.ActiveCfg = Test|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug All|Any CPU.Build.0 = Debug All|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug All|x64.ActiveCfg = Debug All|x64\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug All|x86.ActiveCfg = Debug All|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Premium Debug|x64.ActiveCfg = Premium Debug|x64\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|x64.Build.0 = Release|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Release|x86.Build.0 = Release|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Test|Any CPU.ActiveCfg = Test|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Test|Mixed Platforms.Build.0 = Test|Any CPU\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Test|x64.ActiveCfg = Test|x64\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1}.Test|x86.ActiveCfg = Test|Any CPU\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|Any CPU.Build.0 = Debug All|Any CPU\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|x64.ActiveCfg = Debug All|x64\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|x64.Build.0 = Debug All|x64\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|x86.ActiveCfg = Debug All|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug All|x86.Build.0 = Debug All|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|Any CPU.ActiveCfg = Debug|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|Any CPU.Build.0 = Debug|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|Mixed Platforms.Build.0 = Debug|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|x64.ActiveCfg = Debug|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|x64.Build.0 = Debug|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|x86.ActiveCfg = Debug|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Debug|x86.Build.0 = Debug|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|x64.ActiveCfg = Premium Debug|x64\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|x64.Build.0 = Premium Debug|x64\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|x86.ActiveCfg = Premium Debug|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Premium Debug|x86.Build.0 = Premium Debug|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|Any CPU.ActiveCfg = Release|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|Mixed Platforms.ActiveCfg = Release|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|Mixed Platforms.Build.0 = Release|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|x64.ActiveCfg = Release|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|x64.Build.0 = Release|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|x86.ActiveCfg = Release|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Release|x86.Build.0 = Release|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|Any CPU.ActiveCfg = Release|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|Mixed Platforms.ActiveCfg = Release|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|Mixed Platforms.Build.0 = Release|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|x64.ActiveCfg = Debug All|x64\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|x64.Build.0 = Debug All|x64\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|x86.ActiveCfg = Release|x86\r
+               {4D9406A3-50ED-4672-BB97-A0B3EA4946FE}.Test|x86.Build.0 = Release|x86\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug All|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug All|Any CPU.Build.0 = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug All|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug All|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug All|x64.ActiveCfg = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug All|x86.ActiveCfg = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Premium Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Premium Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Premium Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Premium Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Premium Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Premium Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|x64.Build.0 = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Release|x86.Build.0 = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Test|Any CPU.ActiveCfg = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Test|Any CPU.Build.0 = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Test|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Test|x64.ActiveCfg = Release|Any CPU\r
+               {74635A21-2BAD-4522-AB95-E3E5703CD301}.Test|x86.ActiveCfg = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|Any CPU.Build.0 = Debug All|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|x64.ActiveCfg = Debug All|x64\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|x64.Build.0 = Debug All|x64\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug All|x86.ActiveCfg = Debug All|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|x64.ActiveCfg = Premium Debug|x64\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|x64.Build.0 = Premium Debug|x64\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|x64.Build.0 = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Release|x86.Build.0 = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|Any CPU.ActiveCfg = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|Any CPU.Build.0 = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|x64.ActiveCfg = Debug All|x64\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|x64.Build.0 = Debug All|x64\r
+               {7AC63864-7638-41C4-969C-D3197EF2BED9}.Test|x86.ActiveCfg = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug All|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug All|Any CPU.Build.0 = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug All|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug All|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug All|x64.ActiveCfg = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug All|x86.ActiveCfg = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Premium Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Premium Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Premium Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Premium Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Premium Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Premium Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|x64.Build.0 = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Release|x86.Build.0 = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Test|Any CPU.ActiveCfg = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Test|Any CPU.Build.0 = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Test|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Test|x64.ActiveCfg = Release|Any CPU\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951}.Test|x86.ActiveCfg = Release|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|Any CPU.Build.0 = Debug All|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|x64.ActiveCfg = Debug All|x64\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|x64.Build.0 = Debug All|x64\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug All|x86.ActiveCfg = Debug All|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|x64.ActiveCfg = Premium Debug|x64\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|x64.Build.0 = Premium Debug|x64\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|x64.Build.0 = Release|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Release|x86.Build.0 = Release|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|Any CPU.ActiveCfg = Test|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|Any CPU.Build.0 = Test|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|Mixed Platforms.Build.0 = Test|Any CPU\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|x64.ActiveCfg = Test|x64\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|x64.Build.0 = Test|x64\r
+               {7EEFF32F-CCF8-436A-9E0B-F40434C09AF4}.Test|x86.ActiveCfg = Test|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|Any CPU.Build.0 = Debug All|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|x64.ActiveCfg = Debug All|x64\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|x64.Build.0 = Debug All|x64\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug All|x86.ActiveCfg = Debug All|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|x64.ActiveCfg = Premium Debug|x64\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|x64.Build.0 = Premium Debug|x64\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|x64.Build.0 = Release|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Release|x86.Build.0 = Release|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|Any CPU.ActiveCfg = Test|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|Any CPU.Build.0 = Test|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|Mixed Platforms.Build.0 = Test|Any CPU\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|x64.ActiveCfg = Test|x64\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|x64.Build.0 = Test|x64\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960}.Test|x86.ActiveCfg = Test|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug All|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug All|Any CPU.Build.0 = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug All|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug All|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug All|x64.ActiveCfg = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug All|x86.ActiveCfg = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Premium Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Premium Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Premium Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Premium Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Premium Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Premium Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Test|Any CPU.ActiveCfg = Release|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Test|Any CPU.Build.0 = Release|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Test|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Test|x64.ActiveCfg = Release|Any CPU\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52}.Test|x86.ActiveCfg = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug All|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug All|Any CPU.Build.0 = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug All|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug All|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug All|x64.ActiveCfg = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug All|x86.ActiveCfg = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Premium Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Premium Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Premium Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Premium Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Premium Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Premium Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|x64.Build.0 = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Release|x86.Build.0 = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Test|Any CPU.ActiveCfg = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Test|Any CPU.Build.0 = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Test|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Test|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Test|x64.ActiveCfg = Release|Any CPU\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC}.Test|x86.ActiveCfg = Release|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|Any CPU.Build.0 = Debug All|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|x64.ActiveCfg = Debug All|x64\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|x64.Build.0 = Debug All|x64\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug All|x86.ActiveCfg = Debug All|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|x64.ActiveCfg = Premium Debug|x64\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|x64.Build.0 = Premium Debug|x64\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|x64.Build.0 = Release|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Release|x86.Build.0 = Release|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|Any CPU.ActiveCfg = Test|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|Any CPU.Build.0 = Test|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|Mixed Platforms.Build.0 = Test|Any CPU\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|x64.ActiveCfg = Test|x64\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|x64.Build.0 = Test|x64\r
+               {A9AE40FF-1A21-414A-9FE7-3BE13644CC6D}.Test|x86.ActiveCfg = Test|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|Any CPU.Build.0 = Debug All|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|x64.ActiveCfg = Debug All|x64\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|x64.Build.0 = Debug All|x64\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug All|x86.ActiveCfg = Debug All|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|x64.ActiveCfg = Premium Debug|x64\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|x64.Build.0 = Premium Debug|x64\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|x64.Build.0 = Release|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Release|x86.Build.0 = Release|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|Any CPU.ActiveCfg = Test|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|Any CPU.Build.0 = Test|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|Mixed Platforms.Build.0 = Test|Any CPU\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|x64.ActiveCfg = Test|x64\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|x64.Build.0 = Test|x64\r
+               {C45218F8-09E7-4F57-85BC-5D8D2AC736A3}.Test|x86.ActiveCfg = Test|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|Any CPU.Build.0 = Debug All|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|x64.ActiveCfg = Debug All|x64\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|x64.Build.0 = Debug All|x64\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug All|x86.ActiveCfg = Debug All|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|x64.ActiveCfg = Debug|x86\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|x64.Build.0 = Debug|x86\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|x86.ActiveCfg = Debug|x86\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Debug|x86.Build.0 = Debug|x86\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|x64.ActiveCfg = Premium Debug|x64\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|x64.Build.0 = Premium Debug|x64\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|x64.Build.0 = Release|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Release|x86.Build.0 = Release|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|Any CPU.ActiveCfg = Test|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|Any CPU.Build.0 = Test|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|Mixed Platforms.Build.0 = Test|Any CPU\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|x64.ActiveCfg = Test|x64\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|x64.Build.0 = Test|x64\r
+               {C8E2BC8B-C7F1-4222-855C-4B04A57FFDFD}.Test|x86.ActiveCfg = Test|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|Any CPU.Build.0 = Debug All|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|x64.ActiveCfg = Debug All|x64\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|x64.Build.0 = Debug All|x64\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug All|x86.ActiveCfg = Debug All|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|x64.ActiveCfg = Premium Debug|x64\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|x64.Build.0 = Premium Debug|x64\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|x64.Build.0 = Release|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Release|x86.Build.0 = Release|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|Any CPU.ActiveCfg = Test|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|Any CPU.Build.0 = Test|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|Mixed Platforms.Build.0 = Test|Any CPU\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|x64.ActiveCfg = Test|x64\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|x64.Build.0 = Test|x64\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4}.Test|x86.ActiveCfg = Test|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|Any CPU.ActiveCfg = Debug All|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|Any CPU.Build.0 = Debug All|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|Mixed Platforms.ActiveCfg = Debug All|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|Mixed Platforms.Build.0 = Debug All|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|x64.ActiveCfg = Debug All|x64\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|x64.Build.0 = Debug All|x64\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug All|x86.ActiveCfg = Debug All|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|Any CPU.ActiveCfg = Premium Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|Any CPU.Build.0 = Premium Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|Mixed Platforms.ActiveCfg = Premium Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|Mixed Platforms.Build.0 = Premium Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|x64.ActiveCfg = Premium Debug|x64\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|x64.Build.0 = Premium Debug|x64\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|x86.ActiveCfg = Premium Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Premium Debug|x86.Build.0 = Premium Debug|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|x64.Build.0 = Release|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Release|x86.Build.0 = Release|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|Any CPU.ActiveCfg = Test|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|Any CPU.Build.0 = Test|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|Mixed Platforms.ActiveCfg = Test|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|Mixed Platforms.Build.0 = Test|Any CPU\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|x64.ActiveCfg = Test|x64\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|x64.Build.0 = Test|x64\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA}.Test|x86.ActiveCfg = Test|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+       GlobalSection(NestedProjects) = preSolution\r
+               {2CFE2DF1-20AE-47E2-B1BB-36B974600BE1} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}\r
+               {7B5BFE77-FC4D-43B3-84A0-9CB457238951} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}\r
+               {822F885B-83E8-4A9A-B02E-0FEAE444D960} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}\r
+               {86524E19-7C1C-4A90-93AA-2316A150DC52} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}\r
+               {881F7260-CA40-40FD-AEEC-860B346DC2DC} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}\r
+               {E027200B-C26A-4877-BFD9-1A18CF5DF2F4} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}\r
+               {F9AF3E97-BCB7-46B7-8014-7FC858AEE9BA} = {B5DD7C4D-D396-4C55-A8D5-DCFE865AA095}\r
+       EndGlobalSection\r
+EndGlobal\r