Remove duplicate Avalonia.Win32.Interoperability package.

--- packages.cake
+++ packages.cake
@@ -442,22 +442,6 @@
                 BasePath = context.Directory("./"),
                 OutputDirectory = parameters.NugetRoot
             },
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.Win32.Interoperability",
-                Dependencies = new []
-                {
-                    new NuSpecDependency() { Id = "Avalonia.Win32", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "Avalonia.Direct2D1", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "SharpDX.Direct3D9", Version = SharpDXDirect3D9Version },
-                },
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.Win32.Interop/bin/" + parameters.DirSuffix + "/Avalonia.Win32.Interop.dll", Target = "lib/net461" }
-                },
-                BasePath = context.Directory("./src/Windows"),
-                OutputDirectory = parameters.NugetRoot
-            },
             ///////////////////////////////////////////////////////////////////////////////
             // Avalonia.LinuxFramebuffer
             ///////////////////////////////////////////////////////////////////////////////


fixed warnings

fixed warnings

--- Mapsui.Nts/Providers/Wfs/Xml/XPathQueryManager.cs
+++ Mapsui.Nts/Providers/Wfs/Xml/XPathQueryManager.cs
@@ -613,9 +613,9 @@
             /// </summary>
             /// <param name="args">An argument of the function to be resolved</param>
             /// <param name="xsltContext">The Xslt context for namespace resolving</param>
-            private string ResolveNsPrefix(string args, XsltContext xsltContext)
-            {
-                if (args.Contains(":"))
+            private string? ResolveNsPrefix(string? args, XsltContext xsltContext)
+            {
+                if (args?.Contains(":") ?? false)
                 {
                     var prefix = args.Substring(0, args.IndexOf(":", StringComparison.Ordinal));
                     string ns;
@@ -679,9 +679,9 @@
             /// <param name="args">An argument of the function to be resolved</param>
             /// <param name="targetNs"></param>
             /// <param name="docContext"></param>
-            private static string resolveNsPrefix(string args, string targetNs, XPathNavigator docContext)
-            {
-                if (args.Contains(":"))
+            private static string resolveNsPrefix(string? args, string targetNs, XPathNavigator docContext)
+            {
+                if (args?.Contains(":") ?? false)
                 {
                     var prefix = args.Substring(0, args.IndexOf(":", StringComparison.Ordinal));
                     string ns;


Add abort calibration confirmation via DialogWindow OnClosing

--- MatterControlLib/SetupWizard/StagedSetupWindow.cs
+++ MatterControlLib/SetupWizard/StagedSetupWindow.cs
@@ -32,6 +32,7 @@
 using System.Linq;
 using MatterHackers.Agg;
 using MatterHackers.Agg.UI;
+using MatterHackers.Localizations;

 namespace MatterHackers.MatterControl
 {
@@ -46,6 +47,7 @@
 		private Dictionary<ISetupWizard, WizardStageRow> rowsByStage = new Dictionary<ISetupWizard, WizardStageRow>();

 		private IStagedSetupWizard setupWizard;
+		private bool closeConfirmed;

 		public ISetupWizard ActiveStage
 		{
@@ -145,6 +147,24 @@
 			this.UseChildWindowSize = false;

 			this.AddChild(row);
+		}
+
+		public override void OnClosing(ClosingEventArgs eventArgs)
+		{
+			if (this.ActiveStage != null
+				&& !closeConfirmed)
+			{
+				// We need to show an interactive dialog to determine if the original Close request should be honored, thus cancel the current Close request
+				eventArgs.Cancel = true;
+
+				ConditionalAbort("Are you sure you want to abort calibration?".Localize(), () =>
+				{
+					closeConfirmed = true;
+					this.CloseOnIdle();
+				});
+			}
+
+			base.OnClosing(eventArgs);
 		}

 		private void ConditionalAbort(string message, Action exitConfirmedAction)


Update CommandErrorHandler - mark fields as readonly

--- Modix.Services/CommandHelp/CommandErrorHandler.cs
+++ Modix.Services/CommandHelp/CommandErrorHandler.cs
@@ -8,9 +8,9 @@
     public class CommandErrorHandler
     {
         //This relates user messages with errors
-        private Dictionary<ulong, string> _associatedErrors = new Dictionary<ulong, string>();
+        private readonly Dictionary<ulong, string> _associatedErrors = new Dictionary<ulong, string>();
         //This relates user messages to modix messages containing errors
-        private Dictionary<ulong, ulong> _errorReplies = new Dictionary<ulong, ulong>();
+        private readonly Dictionary<ulong, ulong> _errorReplies = new Dictionary<ulong, ulong>();

         private const string _emoji = "⚠";


업데이트 문제 수정

업데이트 문제 수정

--- Grandcypher/Translations.cs
+++ Grandcypher/Translations.cs
@@ -133,9 +133,11 @@
 			}
 			if (TenLists != null)
 			{
-				if (TenLists.Root.Attribute("Version") != null) TenListVersion = WeaponSkills.Root.Attribute("Version").Value;
+				if (TenLists.Root.Attribute("Version") != null) TenListVersion = TenLists.Root.Attribute("Version").Value;
 				else TenListVersion = "알 수 없음";
 			}
+			else
+				TenListVersion = "없음";
 		}
 		private IEnumerable<XElement> GetTranslationList(TranslationType type, TranslateKind sitetype = TranslateKind.Google)
 		{


Add a couple of FIXMEs where Errors should be sent

--- Connection.cs
+++ Connection.cs
@@ -299,6 +299,7 @@
 				dlg.DynamicInvoke (GetDynamicValues (msg, mi.GetParameters ()));

 			} else {
+				//FIXME: send the appropriate Error message
 				Console.Error.WriteLine ("Warning: No signal handler for " + signal.Member);
 			}
 		}
@@ -426,6 +427,7 @@
 					Send (reply);
 				}
 			} else {
+				//FIXME: send the appropriate Error message
 				Console.Error.WriteLine ("Warning: No method handler for " + method_call.Member);
 			}
 		}


Added road attribute

Added road attribute

--- Core/Enums.cs
+++ Core/Enums.cs
@@ -356,7 +356,8 @@
             Ambiguous = 36,
             Slippery = 37,
             Slow = 38,
-            DropShop = 39
+            DropShop = 39,
+            Road = 40
         }

         public enum LoadingType {


Support for cases where entity floats use commas as the decimal point


moved chat enabled setting to global settings


Scrub UUIDs as well.

Scrub UUIDs as well.

--- test/ExRam.Gremlinq.Core.Tests/QueryIntegrationTest.cs
+++ test/ExRam.Gremlinq.Core.Tests/QueryIntegrationTest.cs
@@ -8,7 +8,7 @@
 {
     public abstract class QueryIntegrationTest : QueryExecutionTest
     {
-        private static readonly Regex IdRegex = new ("(\"id\"\\s*[:,]\\s*{\\s*\"@type\"\\s*:\\s*\"g:Int(32|64)\"\\s*,\\s*\"@value\":\\s*)([^\\s{}]+)(\\s*})", RegexOptions.IgnoreCase);
+        private static readonly Regex IdRegex = new ("(\"id\"\\s*[:,]\\s*{\\s*\"@type\"\\s*:\\s*\"g:(Int32|Int64|UUID)\"\\s*,\\s*\"@value\":\\s*)([^\\s{}]+)(\\s*})", RegexOptions.IgnoreCase);

         protected QueryIntegrationTest(IIntegrationTestFixture fixture, ITestOutputHelper testOutputHelper, [CallerFilePath] string callerFilePath = "") : base(
             fixture.GremlinQuerySource


Fixing test

Fixing test

--- test/WebJobs.Script.Tests/WebScriptHostManagerTests.cs
+++ test/WebJobs.Script.Tests/WebScriptHostManagerTests.cs
@@ -7,6 +7,7 @@
 using System.Diagnostics;
 using System.IO;
 using System.Linq;
+using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 using Microsoft.Azure.WebJobs.Script.Description;
 using Microsoft.Azure.WebJobs.Script.Tests;
@@ -201,22 +202,21 @@
                 }).GetAwaiter().GetResult();

                 // verify startup system trace logs
-                string events = string.Join("\r\n", EventGenerator.Events);
-                string[] expectedLogs = new string[]
+                string[] expectedPatterns = new string[]
                 {
                     "Info Reading host configuration file",
-                    "Info Host lock lease acquired by instance ID",
+                    "Info Host lock lease acquired by instance ID '(.+)'",
                     "Info Function 'Excluded' is marked as excluded",
-                    "Info Generating",
-                    "Info Starting Host (HostId=function-tests-node, Version=1.0.0.0",
+                    @"Info Generating ([0-9]+) job function\(s\)",
+                    @"Info Starting Host \(HostId=function-tests-node, Version=(.+), ProcessId=[0-9]+, Debug=False\)",
                     "Info WebJobs.Indexing Found the following functions:",
                     "Verbose The next 5 occurrences of the schedule will be:",
                     "Info WebJobs.Host Job host started",
                     "Error The following 1 functions are in error:"
                 };
-                foreach (string expectedLog in expectedLogs)
-                {
-                    Assert.True(EventGenerator.Events.Any(p => p.StartsWith(expectedLog)), $"Expected trace event {expectedLog} not found.");
+                foreach (string pattern in expectedPatterns)
+                {
+                    Assert.True(EventGenerator.Events.Any(p => Regex.IsMatch(p, pattern)), $"Expected trace event {pattern} not found.");
                 }
             }


Thinko: use the right namespace to fix the build

--- src/ObjCRuntime/Dlfcn.cs
+++ src/ObjCRuntime/Dlfcn.cs
@@ -31,7 +31,7 @@
 using System;
 using System.Runtime.InteropServices;
 using MonoMac.Foundation;
-using MonoMac.ObjCRuntime;
+using MonoMac.CoreFounation;
 using System.Drawing;

 namespace MonoMac.ObjCRuntime {


More using examples for Crate.UI

More using examples for Crate.UI

--- Crate.UI/Program.cs
+++ Crate.UI/Program.cs
@@ -37,9 +37,13 @@
                 CarId = 3
             };

-            DataContext.Pairs.Add("Test", "Test message");
+            DataContext.Pairs.Add("Greeting", "Hello world!");

-            var testPair = DataContext.Pairs.Get("Test");
+            var greeting = DataContext.Pairs.Get("Greeting");
+
+            DataContext.Pairs.Update("Greeting", "=> Hello world <=");
+
+            DataContext.Pairs.Remove("Greeting");

             var crate = new Storage("Crate");

@@ -49,9 +53,11 @@

             Dc.SubmitChanges(crate);

-            var test = Dc.Select<Person>(crate).First(c => c.Age == 54);
-
-            crate.Remove(test);
+            var person = Dc.Select<Person>(crate).First(c => c.Age == 54);
+            crate.Remove(person);
+            Dc.SubmitChanges(crate);
+
+            DataContext.Pairs.ClearAll();
             Dc.SubmitChanges(crate);
         }
     }


text wrapping for bitmap font

text wrapping for bitmap font

--- Nez-PCL/PipelineRuntime/BitmapFonts/BitmapFont.cs
+++ Nez-PCL/PipelineRuntime/BitmapFonts/BitmapFont.cs
@@ -71,6 +71,46 @@

 			this.lineHeight = lineHeight;
 			defaultCharacter = ' ';
+		}
+
+
+		public string wrapText( string text, float maxLineWidth )
+		{
+			var words = text.Split( ' ' );
+			var sb = new StringBuilder();
+			var lineWidth = 0f;
+			var spaceWidth = measureString( " " ).X;
+
+			if( maxLineWidth < spaceWidth )
+				return string.Empty;
+
+			foreach( var word in words )
+			{
+				var size = measureString( word );
+
+				if( lineWidth + size.X < maxLineWidth )
+				{
+					sb.Append( word + " " );
+					lineWidth += size.X + spaceWidth;
+				}
+				else
+				{
+					if( size.X > maxLineWidth )
+					{
+						if( sb.ToString() == "" )
+							sb.Append( wrapText( word.Insert( word.Length / 2, " " ) + " ", maxLineWidth ) );
+						else
+							sb.Append( "\n" + wrapText( word.Insert( word.Length / 2, " " ) + " ", maxLineWidth ) );
+					}
+					else
+					{
+						sb.Append( "\n" + word + " " );
+						lineWidth = size.X + spaceWidth;
+					}
+				}
+			}
+
+			return sb.ToString();
 		}

@@ -235,10 +275,10 @@

 				var destRect = RectangleExt.fromFloats
 				(
-					p.X, p.Y,
-					currentFontRegion.width * scale.X,
-					currentFontRegion.height * scale.Y
-				);
+					               p.X, p.Y,
+					               currentFontRegion.width * scale.X,
+					               currentFontRegion.height * scale.Y
+				               );

 				spriteBatch.Draw( currentFontRegion.subtexture, destRect, currentFontRegion.subtexture.sourceRect, color, rotation, Vector2.Zero, effect, depth );
 			}


Renamed FullTermination to AllowFormClose.

--- NotificationWebView.ChromiumUI/MainWindow.xaml.cs
+++ NotificationWebView.ChromiumUI/MainWindow.xaml.cs
@@ -26,7 +26,7 @@
 		private ChromiumWebBrowser Browser = null;
 		private CefSettings WebViewSettings = null;

-		private bool FullTermination = false;
+		private bool AllowFormClose = false;

 		public MainWindow()
 		{
@@ -50,7 +50,7 @@

 			Closing += new CancelEventHandler(delegate (object sender, CancelEventArgs e)
 			{
-				if(!FullTermination)
+				if(!AllowFormClose)
 				{
 					e.Cancel = true;
 				}
@@ -141,7 +141,7 @@
 		{
 			if (Browser == null) return;

-			FullTermination = true;
+			AllowFormClose = true;
 			Close();
 			Browser.Dispose();
 			SubProcessManager.KillSubProcesses();


Attempted fix for http://opensimulator.org/mantis/view.php?id=551

--- OpenSim/Framework/Data.SQLite/SQLiteRegionData.cs
+++ OpenSim/Framework/Data.SQLite/SQLiteRegionData.cs
@@ -1515,8 +1515,6 @@
             SqliteCommand lcmd = new SqliteCommand(createLand, conn);
             SqliteCommand lalcmd = new SqliteCommand(createLandAccessList, conn);

-            conn.Open();
-
             try
             {
                 pcmd.ExecuteNonQuery();
@@ -1573,7 +1571,6 @@
             {
                 m_log.Warn("[SQLITE]: LandAccessList Table Already Exists");
             }
-            conn.Close();
         }

         private bool TestTables(SqliteConnection conn)


More improvements to look of scan

More improvements to look of scan

--- src/PowerPing/Display.cs
+++ src/PowerPing/Display.cs
@@ -109,11 +109,9 @@
         const string REPLY_TIME_TXT = " time=";

         // Scan messages
-        const string SCAN_RANGE_TXT = "Scanning range [ {0} ]";
-        const string SCAN_HOSTS_TXT = "Sent: {0} Found Hosts: {1}";
-        const string SCAN_CUR_ADDR_TXT = "Pinging ";
-        const string SCAN_ELPS_TIME_TXT = "Ellapsed: ";
-        const string SCAN_PROG_TXT = "Progress: ";
+        const string SCAN_RANGE_TXT = "Scanning range [ {0} ] . . . ";
+        const string SCAN_HOSTS_TXT = " Sent: {0} Found Hosts: {1}";
+        const string SCAN_CUR_ADDR_TXT = " Pinging ";
         const string SCAN_RESULT_MSG = "Scan complete. {0} addresses scanned. {1} hosts active:";
         const string SCAN_RESULT_ENTRY = "-- {0} [{1:0.0}ms] [{2}]";
         const string SCAN_CONNECTOR_CHAR = "|";
@@ -662,7 +660,7 @@
                 scanTimePos.SetToPosition();
                 Console.Write("{0:hh\\:mm\\:ss}", curTime);
                 curAddrPos.SetToPosition();
-                Console.Write("{0} ...", curAddr);
+                Console.Write(curAddr);
                 progBarPos.SetToPosition();
                 double s = scanned;
                 double tot = total;
@@ -678,18 +676,16 @@

                 // Setup labels
                 Console.WriteLine(SCAN_RANGE_TXT, range);
-                scanInfoPos = new CursorPosition(Console.CursorLeft, Console.CursorTop);
-                Console.WriteLine();
                 Console.Write(SCAN_CUR_ADDR_TXT);
                 curAddrPos = new CursorPosition(Console.CursorLeft, Console.CursorTop);
                 Console.WriteLine(curAddr);
-                Console.Write(SCAN_ELPS_TIME_TXT);
+                scanInfoPos = new CursorPosition(Console.CursorLeft, Console.CursorTop);
+                Console.WriteLine();
+                Console.Write(" ");
                 scanTimePos = new CursorPosition(Console.CursorLeft, Console.CursorTop);
-                Console.WriteLine("12:00:00");
-                Console.Write(SCAN_PROG_TXT);
-				Console.Write("[");
+                Console.Write("00:00:00 [");
                 progBarPos = new CursorPosition(Console.CursorLeft, Console.CursorTop);
-				Console.Write("                              ] ");
+				Console.Write("                               ] ");
                 perComplPos = new CursorPosition(Console.CursorLeft, Console.CursorTop);
                 Console.WriteLine();
             }
@@ -700,7 +696,15 @@
             Console.CursorVisible = true;

             Console.WriteLine();
-            Console.WriteLine(SCAN_RESULT_MSG, scanned, foundHosts.Count);
+            Console.Write("Scan complete. ");
+            Console.ForegroundColor = ConsoleColor.Yellow;
+            Console.Write(scanned);
+            Console.ForegroundColor = DefaultForegroundColor;
+            Console.Write(" addresses scanned. ");
+            Console.ForegroundColor = ConsoleColor.Green;
+            Console.Write(foundHosts.Count);
+            Console.ForegroundColor = DefaultForegroundColor;
+            Console.WriteLine(" hosts found.");
             if (foundHosts.Count != 0) {
                 for (int i = 0; i < foundHosts.Count; i++) {
                     string hostName = Helper.ReverseLookup(foundHosts[i]);


Tweaking the specification test runner

Tweaking the specification test runner

--- PactNet.Tests/Specification/SpecificationTests.cs
+++ PactNet.Tests/Specification/SpecificationTests.cs
@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
+using System.Linq;
 using Newtonsoft.Json;
 using PactNet.Tests.Specification.Models;
 using Xunit;
@@ -15,7 +16,6 @@
         public void Request()
         {
             var failedTestCases = new List<string>();
-            var passedTestCases = new List<string>();

             foreach (var testCaseSubDirectory in Directory.EnumerateDirectories(RequestTestCaseBasePath))
             {
@@ -27,21 +27,20 @@
                     var testCaseJson = File.ReadAllText(testCaseFileName);
                     var testCase = JsonConvert.DeserializeObject<RequestTestCase>(testCaseJson);

-                    if (testCase.Verify())
-                    {
-                        passedTestCases.Add(String.Format("[Passed] {0}", testCaseFileName));
-                    }
-                    else
+                    if (!testCase.Verify())
                     {
                         failedTestCases.Add(String.Format("[Failed] {0}", testCaseFileName));
                     }
                 }
             }

-            Console.WriteLine("### FAILED ###");
-            foreach (var failedTestCase in failedTestCases)
+            if (failedTestCases.Any())
             {
-                Console.WriteLine(failedTestCase);
+                Console.WriteLine("### FAILED ###");
+                foreach (var failedTestCase in failedTestCases)
+                {
+                    Console.WriteLine(failedTestCase);
+                }
             }

             Assert.Equal(0, failedTestCases.Count);


Rev Version

Rev Version

--- Pandaros.Settlers/Pandaros.Settlers/GameLoader.cs
+++ Pandaros.Settlers/Pandaros.Settlers/GameLoader.cs
@@ -25,7 +25,7 @@
         public const string SETTLER_INV = "Pandaros.Settlers.Inventory";
         public const string ALL_SKILLS = "Pandaros.Settlers.ALLSKILLS";

-        public static readonly Version MOD_VER = new Version(0, 5, 6, 0);
+        public static readonly Version MOD_VER = new Version(0, 5, 6, 1);
         public static bool RUNNING { get; private set; }
         public static bool WorldLoaded { get; private set; }


Duplicate asset usage descriptions in search results page are now omitted (i.e. "[Usage information][Usage information] Some asset" becomes "[Usage information] Some asset")

--- Plugins/AssetUsageDetector/Editor/SearchResult.cs
+++ Plugins/AssetUsageDetector/Editor/SearchResult.cs
@@ -924,7 +924,11 @@
 						if( !string.IsNullOrEmpty( description ) )
 						{
 							if( !string.IsNullOrEmpty( links[i].description ) )
-								links[i] = new Link( links[i].targetNode, string.Concat( links[i].description, Environment.NewLine, description ) );
+							{
+								// Avoid duplicate descriptions
+								if( !links[i].description.Contains( description ) )
+									links[i] = new Link( links[i].targetNode, string.Concat( links[i].description, Environment.NewLine, description ) );
+							}
 							else
 								links[i] = new Link( links[i].targetNode, description );
 						}


rename ExpandSubContainers method

rename ExpandSubContainers method

--- PsISEProjectExplorer/UI/Helpers/TreeViewHelper.cs
+++ PsISEProjectExplorer/UI/Helpers/TreeViewHelper.cs
@@ -17,7 +17,7 @@
         /// <param name="treeView">The TreeView whose children will be expanded</param>
         public static void ExpandAll(this TreeView treeView)
         {
-            ExpandSubContainers(treeView, true);
+            ToggleSubContainers(treeView, true);
         }

         /// <summary>
@@ -26,7 +26,7 @@
         /// <param name="treeView">The TreeView whose children will be collapsed</param>
         public static void CollapseAll(this TreeView treeView)
         {
-            ExpandSubContainers(treeView, false);
+            ToggleSubContainers(treeView, false);
         }

         /// <summary>
@@ -34,14 +34,13 @@
         /// </summary>
         /// <param name="parentContainer">The TreeView or TreeViewItem containing the children to expand or collaps</param>
         /// <param name="isExpanded"><c>true</c> to expand items, <c>false</c> to collapse items.</param>
-        private static void ExpandSubContainers(ItemsControl parentContainer, bool isExpanded)
+        private static void ToggleSubContainers(ItemsControl parentContainer, bool isExpanded)
         {
             foreach (Object item in parentContainer.Items)
             {
                 var currentContainer = parentContainer.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;
                 if (currentContainer != null && currentContainer.Items.Count > 0)
                 {
-                    //expand the item
                     currentContainer.IsExpanded = isExpanded;

                     //if the item's children are not generated, they must be expanded
@@ -54,16 +53,16 @@
                             //once the children have been generated, expand those children's children then remove the event handler
                             if (currentContainer.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
                             {
-                                ExpandSubContainers(currentContainer, isExpanded);
+                                ToggleSubContainers(currentContainer, isExpanded);
                                 currentContainer.ItemContainerGenerator.StatusChanged -= eh;
                             }
                         };

                         currentContainer.ItemContainerGenerator.StatusChanged += eh;
                     }
-                    else //otherwise the children have already been generated, so we can now expand those children
-                    {
-                        ExpandSubContainers(currentContainer, isExpanded);
+                    else //otherwise the children have already been generated, so we can now toggle those children
+                    {
+                        ToggleSubContainers(currentContainer, isExpanded);
                     }
                 }
             }


wip landing page

wip landing page

--- Purchasing.Web/Views/JamesTest/LandingPage.cshtml
+++ Purchasing.Web/Views/JamesTest/LandingPage.cshtml
@@ -94,12 +94,12 @@

-    @Html.Partial("_Orders", Model.OldestFOLM)
+

+    @Html.Partial("_Orders", Model.OldestFOLM)
+    @Html.Partial("_Orders", Model.NewestFOLM)

-

-    @Html.Partial("_Orders", Model.NewestFOLM)
-

+
 @*

     Workgroup People


add test commit

add test commit

--- QbChat.UWP/ViewModels/AddOccupantsIdsViewModel.cs
+++ QbChat.UWP/ViewModels/AddOccupantsIdsViewModel.cs
@@ -13,6 +13,10 @@
         private List<SelectedUser> users;
         private bool isLoading;

+        /// <summary>
+        /// Initializes a new instance of the <see cref="AddOccupantsIdsViewModel"/> class.
+        /// </summary>
+        /// <param name="dialogId">The dialog identifier.</param>
         public AddOccupantsIdsViewModel(string dialogId)
         {
             this.dialogId = dialogId;


Return empty string if YearBegin is undefined and  YearEnd equals to 0

--- R7.University/entities/EmployeeAchievementInfo.cs
+++ R7.University/entities/EmployeeAchievementInfo.cs
@@ -96,8 +96,11 @@
 					return YearBegin.ToString ();

 				if (YearBegin == null && YearEnd != null)
-					return "? - " + YearEnd;
-
+				{
+					if (YearEnd.Value != 0)
+						return "? - " + YearEnd;
+				}
+
 				if (YearBegin != null && YearEnd != null)
 				{
 					if (YearEnd.Value != 0)


#65 Optimize new depth logics of property paths

--- RDFSharp/Query/Mirella/Algebra/RDFPropertyPath.cs
+++ RDFSharp/Query/Mirella/Algebra/RDFPropertyPath.cs
@@ -121,16 +121,18 @@
         /// </summary>
         public RDFPropertyPath AddAlternativeSteps(List<RDFPropertyPathStep> alternativeSteps)
         {
-            //Avoid chaining of alternative steps
-            if (this.Steps.LastOrDefault()?.StepFlavor == RDFQueryEnums.RDFPropertyPathStepFlavors.Alternative)
-            {
-                RDFQueryEvents.RaiseGENERICQueryEvaluation("AddAlternativeSteps: chaining of alternative steps detected, discarding last ones.");
-                return this;
-            }
-
             if (alternativeSteps != null && alternativeSteps.Any())
             {
-                this.Depth++;
+                #region Depth Guard
+                if (this.Steps.Count == 0
+                        || alternativeSteps.Count == 1
+                            || this.Steps.LastOrDefault()?.StepFlavor == RDFQueryEnums.RDFPropertyPathStepFlavors.Sequence)
+                {
+                    this.Depth++;
+                }
+                #endregion
+
+                #region Steps Update
                 if (alternativeSteps.Count == 1)
                 {
                     this.Steps.Add(alternativeSteps[0].SetOrdinal(this.Steps.Count)
@@ -144,8 +146,9 @@
                                                       .SetFlavor(RDFQueryEnums.RDFPropertyPathStepFlavors.Alternative));
                     });
                 }
-
-                //Avoid evaluability of ground property paths
+                #endregion
+
+                #region Evaluability Guard
                 if (this.Start is RDFVariable || this.End is RDFVariable || this.Depth > 1)
                 {
                     this.IsEvaluable = true;
@@ -155,6 +158,7 @@
                 {
                     RDFQueryEvents.RaiseGENERICQueryEvaluation("AddAlternativeSteps: ground property path detected, evaluability not granted.");
                 }
+                #endregion
             }
             return this;
         }
@@ -166,11 +170,13 @@
         {
             if (sequenceStep != null)
             {
+                #region Steps Update
                 this.Depth++;
                 this.Steps.Add(sequenceStep.SetOrdinal(this.Steps.Count)
                                            .SetFlavor(RDFQueryEnums.RDFPropertyPathStepFlavors.Sequence));
-
-                //Avoid evaluability of ground property paths
+                #endregion
+
+                #region Evaluability Guard
                 if (this.Start is RDFVariable || this.End is RDFVariable || this.Depth > 1)
                 {
                     this.IsEvaluable = true;
@@ -180,6 +186,7 @@
                 {
                     RDFQueryEvents.RaiseGENERICQueryEvaluation("AddSequenceStep: ground property path detected, evaluability not granted.");
                 }
+                #endregion
             }
             return this;
         }


Fix card text test

Fix card text test

--- HearthDb.Tests/UnitTest1.cs
+++ HearthDb.Tests/UnitTest1.cs
@@ -89,7 +89,7 @@
 			Assert.IsTrue(demonicPortal.Text.Contains("30 left!"));

 			var summoningRitual = Cards.All[CardIds.NonCollectible.Demonhunter.SummoningRitual2];
-			Assert.IsTrue(summoningRitual.Text.Contains("Summon 3 demons"));
+			Assert.IsTrue(summoningRitual.Text.Contains("Summon 3 Demons"));
 			Assert.IsTrue(summoningRitual.Text.Contains("for 2 turns"));

 			var hatredReactor = Cards.All[CardIds.NonCollectible.Warlock.HatredReactorToken];


Marked LineInterruptPending and FrameInterruptPending as publicly settable.

--- Sega/Hardware/VideoDisplayProcessor/Interrupts.cs
+++ Sega/Hardware/VideoDisplayProcessor/Interrupts.cs
@@ -4,13 +4,13 @@
 		/// <summary>
 		/// Gets whether a line interrupt is pending or not.
 		/// </summary>
-		public bool LineInterruptPending { get { return this.lineInterruptPending; } }
+		public bool LineInterruptPending { get { return this.lineInterruptPending; } set { this.lineInterruptPending = value; } }
 		private bool lineInterruptPending;

 		/// <summary>
 		/// Gets whether a frame interrupt is pending or not.
 		/// </summary>
-		public bool FrameInterruptPending { get { return this.frameInterruptPending; } }
+		public bool FrameInterruptPending { get { return this.frameInterruptPending; } set { this.frameInterruptPending = value; } }
 		private bool frameInterruptPending;

 		/// <summary>


Added off-screen sprite collision; now passes FluBBa's "Offscreen Y, col" VDP test.

--- Sega/Hardware/VideoDisplayProcessor/Rasteriser.cs
+++ Sega/Hardware/VideoDisplayProcessor/Rasteriser.cs
@@ -808,6 +808,21 @@
 						for (int i = 0; i < 8; i++) PixelBuffer[startPixel + i] = lastBackdropColour;
 					}
 				}
+			} else if (this.beamLocation == BeamRegion.TopBorder || this.beamLocation == BeamRegion.BottomBorder) {
+				bool oldSpriteOverflow = this.spriteOverflow;
+				switch (this.CurrentMode) {
+					case Mode.Mode4:
+					case Mode.Mode4Resolution224:
+					case Mode.Mode4Resolution240:
+						this.RenderMode4Sprites(255 * 256, false, new bool[256]);
+						break;
+					case Mode.Graphic1:
+					case Mode.Graphic2:
+					case Mode.Multicolor:
+						this.RenderTms9918Sprites(255 * 256, FixedPaletteMasterSystem);
+						break;
+				}
+				this.spriteOverflow = oldSpriteOverflow;
 			}

 			#endregion
@@ -1020,8 +1035,6 @@
 				int y = vram[SAT + i] + 1;
 				if (y == 0xD1 && this.activeFrameHeight == 192) break;

-				if (y >= 224) y -= 256;
-
 				if (y > this.scanlinesDrawn || (y + sh) <= this.scanlinesDrawn) continue;

 				if (maxSprites-- == 0) {


Updated CDN path in Assembly.info file to 0911 release

--HG--
extra : convert_revision : svn%3Ae6b3c636-de15-0940-aca3-4844ac488b3a%4022

--- Server/System.Web.Ajax/Properties/AssemblyInfo.cs
+++ Server/System.Web.Ajax/Properties/AssemblyInfo.cs
@@ -81,4 +81,4 @@
 [assembly: NeutralResourcesLanguage("en-US")]

 // CDN Path
-// http[s]://ajax.microsoft.com/ajax/beta/0910/*
+// http[s]://ajax.microsoft.com/ajax/beta/0911/*


- v4.0.1

- v4.0.1

--- Shuttle.Core.Data.Http/Properties/AssemblyInfo.cs
+++ Shuttle.Core.Data.Http/Properties/AssemblyInfo.cs
@@ -25,10 +25,10 @@
 [assembly: AssemblyTitle("Shuttle.Core.Data.Http for .NET Framework 4.6.1")]
 #endif

-[assembly: AssemblyVersion("4.0.0.0")]
+[assembly: AssemblyVersion("4.0.1.0")]
 [assembly: AssemblyCopyright("Copyright © Eben Roux 2010-2015")]
 [assembly: AssemblyProduct("Shuttle.Core")]
 [assembly: AssemblyCompany("Shuttle")]
 [assembly: AssemblyConfiguration("Release")]
-[assembly: AssemblyInformationalVersion("4.0.0")]
+[assembly: AssemblyInformationalVersion("4.0.1")]
 [assembly: ComVisible(false)]


fix ToStringBrackets

fix ToStringBrackets

--- Signum.Engine.Extensions/Templating/Conditions.cs
+++ Signum.Engine.Extensions/Templating/Conditions.cs
@@ -1,5 +1,6 @@
-using Signum.Entities.DynamicQuery;
+using Signum.Entities.DynamicQuery;
 using Signum.Entities.UserAssets;
+using Signum.Utilities;
 using Signum.Utilities.DataStructures;
 using System;
 using System.Collections;
@@ -248,7 +249,7 @@
             sb.Append("[");
             this.ToStringInternal(sb, variables);
             sb.Append("]");
-            if (this.ValueProvider.Variable != null)
+            if (this.ValueProvider.Variable.HasText())
                 sb.Append(" as " + this.ValueProvider.Variable);
         }
         public override IEnumerable<object> GetFilteredRows(TemplateParameters p)


WidgetContainer.AlertsAre

WidgetContainer.AlertsAre

--- Signum.Web.Extensions.Selenium/WidgetContainer.cs
+++ Signum.Web.Extensions.Selenium/WidgetContainer.cs
@@ -125,6 +125,15 @@
             throw new InvalidOperationException("Unexpected state {0}".Formato(state));
         }

+        public static bool AlertsAre(this IWidgetContainer container, int attended, int alerted, int future)
+        {
+            return
+                attended == container.AlertCount(AlertCurrentState.Attended) &&
+                alerted == container.AlertCount(AlertCurrentState.Alerted) &&
+                future == container.AlertCount(AlertCurrentState.Future);
+        }
+
+
         public static int AlertCount(this IWidgetContainer container, AlertCurrentState state)
         {
             var result = container.Selenium.GetEval("window.$('{0} .sf-alerts-toggler .sf-widget-count.{1}').html()".Formato(


Refs #4878 - Abonnementen moeten niet meer verwijderd worden bij jaarovergang.

Want ze expiren in Civi als ze niet worden verlengd.

--- Solution/Chiro.Gap.Services/GroepenService.svc.cs
+++ Solution/Chiro.Gap.Services/GroepenService.svc.cs
@@ -1,5 +1,5 @@
 /*
- * Copyright 2008-2015 the GAP developers. See the NOTICE file at the
+ * Copyright 2008-2016 the GAP developers. See the NOTICE file at the
  * top-level directory of this distribution, and at
  * https://gapwiki.chiro.be/copyright
  *
@@ -1363,12 +1363,6 @@
             {
 #endif
                 _groepenRepo.SaveChanges();
-                foreach (var ab in vorigGwj.Abonnement)
-                {
-                    // In GAP mogen de oude abonnementen blijven staan, want
-                    // die zijn daar aan het werkjaar gekoppeld. Voor Mailchimp
-                    _abonnementenSync.AlleAbonnementenVerwijderen(ab.GelieerdePersoon);
-                }

 #if KIPDORP
                 tx.Complete();


DBG #1

DBG #1

--- Solution/Michonne.Tests/SequencerCertification.cs
+++ Solution/Michonne.Tests/SequencerCertification.cs
@@ -168,7 +168,7 @@
         /// <summary>
         /// The should_ use_ provided_ unit_ of_ execution.
         /// </summary>
- //       [Test]
+        [Test]
         public void Should_Use_Provided_Unit_Of_Execution()
         {
             var synchExec = new SynchroCall();


Fixed a race condition when getting a tree node parent

--- Source/Engine/AGS.Engine/Misc/Tree/AGSTreeNode.cs
+++ Source/Engine/AGS.Engine/Misc/Tree/AGSTreeNode.cs
@@ -45,8 +45,9 @@
 		{
 			get
 			{
-				if (_parent == null) return null;
-				return _parent.Node;
+                var parent = _parent;
+				if (parent == null) return null;
+				return parent.Node;
 			}
 		}


Cosmetic: removed unused property.

Cosmetic: removed unused property.

--- Source/Lokad.Cloud.Framework/StorageExtensions.cs
+++ Source/Lokad.Cloud.Framework/StorageExtensions.cs
@@ -14,11 +14,6 @@
 	/// Helper extensions methods for storage providers.
 	public static class StorageExtensions
 	{
-		static readonly char[] HexDigits = "0123456789abcdef".ToCharArray();
-
-		/// Delimiter used for prefixing iterations on Blob Storage.
-		const string Delimiter = "/";
-
 		static readonly Random _rand = new Random();

 		public static void AtomicUpdate<T>(this IBlobStorageProvider provider, string containerName, string blobName, Func<Maybe<T>, Result<T>> updater, out Result<T> result)


fixed string capitalization.

fixed string capitalization.

--- DataManipulation.cs
+++ DataManipulation.cs
@@ -43,7 +43,7 @@
                     Console.Write("\nYear of Election (Example: 2012) ");
                     var yearString = Console.ReadLine();
                     int year;
-                    if(int.TryParse(yearString, out year) &&
+                    if (int.TryParse(yearString, out year) &&
                        year > 0)
                     {
                         Display.GetMainHeader();
@@ -75,16 +75,16 @@
             do
             {
                 Console.Write("Select State: "); //get the input from the user
-                state = Console.ReadLine();
+                state = ElectionData.TitleCase(Console.ReadLine());
                 result = Data.Where(results => results.State == state).ToList();
-                if(!result.Any())
+                if (!result.Any())
                     Console.WriteLine("Warning: State not in the Data set");
-            } while(!result.Any());
+            } while (!result.Any());

             do
             {
                 Console.Write("Select County: ");
-                county = Console.ReadLine();
+                county = ElectionData.TitleCase(Console.ReadLine());
                 result = Data.Where(results => results.State == state && results.Area == county).ToList();
                 if (!result.Any())
                     Console.WriteLine("Warning: No county in {0} named {1}", state, county);
@@ -93,7 +93,7 @@
             do
             {
                 Console.Write("Select Office: ");
-                office = Console.ReadLine();
+                office = ElectionData.TitleCase(Console.ReadLine());
                 result =
                     Data.Where(results => results.Office == office && results.State == state && results.Area == county).
                         ToList();
@@ -108,16 +108,15 @@
                 var yearString = Console.ReadLine();

                 isValid = int.TryParse(yearString, out year);
-                if(isValid == false)
+                if (isValid == false)
                     Console.WriteLine("Year format is wrong. Ex. 2008");
-                if(year < 0)
+                if (year < 0)
                     Console.WriteLine("Year must be greater than zero.");

                 result =
                     Data.Where(results => results.Office == office && results.State == state && results.Area == county && results.Date.Year == year).ToList();
                 if (!result.Any())
                     Console.WriteLine("Warning: We have no {0} election for {1}, {2} in {3}", office, county, state, year);
-

             } while (year < 0 || isValid == false || !result.Any());

@@ -156,7 +155,7 @@
                         badInput = true;
                     }
                 } while (badInput);
-                                                        //if the input is good, we edit the entry
+                //if the input is good, we edit the entry
                 EditSingleElection(newRepublicanVotes, newDemocraticVotes, state, county, year, office);

                 Console.WriteLine("\n {0} {1} election data for {2} County, {3} has been edited.", year, office, county, state);
@@ -202,7 +201,7 @@

                     Console.WriteLine(e.Message);
                 }
-
+

                 Console.Write("County name: ");
                 area = Console.ReadLine();
@@ -270,14 +269,14 @@
         private void EditSingleElection(int rVotes, int dVotes, string state, string county, int year, string office)
         {
             var index = GetIndex(state, county, year, office);    //get the index of the entry to modify
-            if(index < 0)
+            if (index < 0)
             {
                 Console.WriteLine("Sorry, we have no data for that election");
                 return;
             }
             var beforeUpdate = GetSingleRow(state, county, year, office); //get the row to modify

-                                                            //create a new object with the modified data
+            //create a new object with the modified data
             var afterUpdate = new ElectionData(
                                                 beforeUpdate.Office,
                                                 beforeUpdate.State,


Fix: trying to extract framerate from empty line in MicroDvd parser

--- SubtitlesParser/Classes/Parsers/MicroDvdParser.cs
+++ SubtitlesParser/Classes/Parsers/MicroDvdParser.cs
@@ -25,7 +25,7 @@
     {
         // Properties -----------------------------------------------------------------------

-        private readonly float _defaultFrameRate = 25;
+        private readonly float defaultFrameRate = 25;
         private readonly char[] _lineSeparators = {'|'};

@@ -35,7 +35,7 @@

         public MicroDvdParser(float defaultFrameRate)
         {
-            this._defaultFrameRate = defaultFrameRate;
+            this.defaultFrameRate = defaultFrameRate;
         }

@@ -68,16 +68,23 @@
             {
                 float frameRate;
                 // try to extract the framerate from the first line
-                var firstItem = ParseLine(line, _defaultFrameRate);
-                var success = TryExtractFrameRate(firstItem.Lines[0], out frameRate);
-                if (!success)
+                var firstItem = ParseLine(line, defaultFrameRate);
+                if (firstItem.Lines != null && firstItem.Lines.Any())
                 {
-                    Console.WriteLine("Couldn't extract frame rate of sub file with first line {0}. " +
-                                      "We use the default frame rate: {1}", line, _defaultFrameRate);
-                    frameRate = _defaultFrameRate;
-
-                    // treat it as a regular line
-                    items.Add(firstItem);
+                    var success = TryExtractFrameRate(firstItem.Lines[0], out frameRate);
+                    if (!success)
+                    {
+                        Console.WriteLine("Couldn't extract frame rate of sub file with first line {0}. " +
+                                          "We use the default frame rate: {1}", line, defaultFrameRate);
+                        frameRate = defaultFrameRate;
+
+                        // treat it as a regular line
+                        items.Add(firstItem);
+                    }
+                }
+                else
+                {
+                    frameRate = defaultFrameRate;
                 }

                 // parse other lines
@@ -103,7 +110,7 @@
             }
         }

-        const string lineRegex = @"^[{\[](-?\d+)[}\]][{\[](-?\d+)[}\]](.*)";
+        private const string lineRegex = @"^[{\[](-?\d+)[}\]][{\[](-?\d+)[}\]](.*)";

         private bool IsMicroDvdLine(string line)
         {
@@ -160,8 +167,17 @@
         /// <returns>True if the parsing was successful, false otherwise</returns>
         private bool TryExtractFrameRate(string text, out float frameRate)
         {
-            var success = float.TryParse(text, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out frameRate);
-            return success;
+            if (!string.IsNullOrEmpty(text))
+            {
+                var success = float.TryParse(text, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture,
+                                             out frameRate);
+                return success;
+            }
+            else
+            {
+                frameRate = defaultFrameRate;
+                return false;
+            }
         }

     }


Remove unnecessary console output

Remove unnecessary console output

--- Sync/Source/BiliBili/Bilibili_dm/DanmakuLoader.cs
+++ Sync/Source/BiliBili/Bilibili_dm/DanmakuLoader.cs
@@ -139,7 +139,7 @@
                     var typeId = BitConverter.ToInt32(stableBuffer, 0);
                     typeId = IPAddress.NetworkToHostOrder(typeId);

-                    Console.WriteLine(typeId);
+                    //Console.WriteLine(typeId);
                     NetStream.ReadB(stableBuffer, 0, 4);//magic, params?
                     var playloadlength = packetlength - 16;
                     if (playloadlength == 0)
@@ -159,7 +159,7 @@

                             var viewer = BitConverter.ToUInt32(buffer.Take(4).Reverse().ToArray(), 0); //观众人数
-                            Console.WriteLine(viewer);
+                            //Console.WriteLine(viewer);
                             if (ReceivedRoomCount != null)
                             {
                                 ReceivedRoomCount(this, new ReceivedRoomCountArgs() { UserCount = viewer });
@@ -171,11 +171,6 @@
                         {

                             var json = Encoding.UTF8.GetString(buffer, 0, playloadlength);
-                            if (debuglog)
-                            {
-                                Console.WriteLine(json);
-
-                            }
                             try
                             {
                                 DanmakuModel dama = new DanmakuModel(json, 2);
@@ -270,7 +265,7 @@
         {
             if (Connected)
             {
-                Debug.WriteLine("Disconnected");
+                //Debug.WriteLine("Disconnected");

                 Connected = false;

@@ -288,7 +283,7 @@
         private void SendHeartbeatAsync()
         {
             SendSocketData(2);
-            Debug.WriteLine("Message Sent: Heartbeat");
+            //Debug.WriteLine("Message Sent: Heartbeat");
         }

         void SendSocketData(int action, string body = "")


Updated Project IO tests

Updated Project IO tests

--- Tests/Core2D.UnitTests/Project/ProjectTests_IO.cs
+++ Tests/Core2D.UnitTests/Project/ProjectTests_IO.cs
@@ -8,70 +8,56 @@
     {
         [Fact(Skip = "Need to write test.")]
         [Trait("Core2D", "Project")]
-        public void Open_From_Path()
+        public void Open_From_Path_Using_IStreamSerializer()
         {

         }

         [Fact(Skip = "Need to write test.")]
         [Trait("Core2D", "Project")]
-        public void Open_From_Stream()
+        public void Open_From_Stream_Using_IStreamSerializer()
         {

         }

         [Fact(Skip = "Need to write test.")]
         [Trait("Core2D", "Project")]
-        public void Save_To_Path()
+        public void Save_To_Path_Using_IStreamSerializer()
         {

         }

         [Fact(Skip = "Need to write test.")]
         [Trait("Core2D", "Project")]
-        public void Save_To_Stream()
+        public void Save_To_Stream_Using_IStreamSerializer()
         {

         }

         [Fact(Skip = "Need to write test.")]
         [Trait("Core2D", "Project")]
-        public void ReadBinary_Read_All_Bytes_From_Stream()
+        public void Open_From_Path_Using_ITextSerializer()
         {

         }

         [Fact(Skip = "Need to write test.")]
         [Trait("Core2D", "Project")]
-        public void WriteBinary_Write_All_Bytes_To_Stream()
+        public void Open_From_Stream_Using_ITextSerializer()
         {

         }

         [Fact(Skip = "Need to write test.")]
         [Trait("Core2D", "Project")]
-        public void ReadUtf8Text_Read_String_From_Stream()
+        public void Save_To_Path_Using_ITextSerializer()
         {

         }

         [Fact(Skip = "Need to write test.")]
         [Trait("Core2D", "Project")]
-        public void WriteUtf8Text_Write_String_To_Stream()
-        {
-
-        }
-
-        [Fact(Skip = "Need to write test.")]
-        [Trait("Core2D", "Project")]
-        public void ReadUtf8Text_Read_String_From_Path()
-        {
-
-        }
-
-        [Fact(Skip = "Need to write test.")]
-        [Trait("Core2D", "Project")]
-        public void WriteUtf8Text_Write_String_To_Path()
+        public void Save_To_Stream_Using_ITextSerializer()
         {

         }


updates to creature

updates to creature

--- hybrasyl/Objects/Creature.cs
+++ hybrasyl/Objects/Creature.cs
@@ -871,6 +871,7 @@

         public virtual void Damage(double damage, Xml.Element element = Xml.Element.None, Xml.DamageType damageType = Xml.DamageType.Direct, Xml.DamageFlags damageFlags = Xml.DamageFlags.None, Creature attacker = null, bool onDeath=true)
         {
+            if (this is Monster ms && !Condition.Alive) return;
             if (attacker is User && this is Monster)
             {
                 if (FirstHitter == null || !World.UserConnected(FirstHitter.Name) || ((DateTime.Now - LastHitTime).TotalSeconds > Constants.MONSTER_TAGGING_TIMEOUT)) FirstHitter = attacker;
@@ -911,10 +912,13 @@
             Stats.Hp -= normalized;

             SendDamageUpdate(this);
-
+
             // TODO: Separate this out into a control message
             if (Stats.Hp == 0 && onDeath)
+            {
+                if (this is Monster) Condition.Alive = false;
                 OnDeath();
+            }
         }

         private void SendDamageUpdate(Creature creature)


Updated tests with public servers. (#1223)

* Updated tests with public servers.

* Separated tests with TLS12 and TLS13.

--- Tests/MQTTnet.TestApp.NetCore/PublicBrokerTest.cs
+++ Tests/MQTTnet.TestApp.NetCore/PublicBrokerTest.cs
@@ -1,4 +1,4 @@
-using MQTTnet.Client;
+using MQTTnet.Client;
 using System;
 using System.IO;
 using System.Net;
@@ -7,10 +7,8 @@
 using System.Threading.Tasks;
 using MQTTnet.Client.Options;
 using MQTTnet.Client.Receiving;
-using MQTTnet.Extensions.WebSocket4Net;
 using MQTTnet.Formatter;
 using MQTTnet.Protocol;
-using Newtonsoft.Json;

 namespace MQTTnet.TestApp.NetCore
 {
@@ -18,57 +16,114 @@
     {
         public static async Task RunAsync()
         {
-            //MqttNetConsoleLogger.ForwardToConsole();
+            // MqttNetConsoleLogger.ForwardToConsole();

-            // iot.eclipse.org
-            await ExecuteTestAsync("iot.eclipse.org TCP",
-                new MqttClientOptionsBuilder().WithTcpServer("iot.eclipse.org", 1883).WithProtocolVersion(MqttProtocolVersion.V311).Build());
+            // For most of these connections to work, set output target to Net5.0.

-            await ExecuteTestAsync("iot.eclipse.org WS",
-                new MqttClientOptionsBuilder().WithWebSocketServer("iot.eclipse.org:80/mqtt").WithProtocolVersion(MqttProtocolVersion.V311).Build());
+#if NET5_0_OR_GREATER
+            // TLS13 is only available in Net5.0
+            var unsafeTls13 = new MqttClientOptionsBuilderTlsParameters
+            {
+                UseTls = true,
+                SslProtocol = SslProtocols.Tls13,
+                // Don't use this in production code. This handler simply allows any invalid certificate to work.
+                CertificateValidationHandler = (w) => true
+            };
+#endif

-            await ExecuteTestAsync("iot.eclipse.org WS TLS",
-                new MqttClientOptionsBuilder().WithWebSocketServer("iot.eclipse.org:443/mqtt").WithProtocolVersion(MqttProtocolVersion.V311).WithTls().Build());
+            // Also defining TLS12 for servers that don't seem no to support TLS13.
+            var unsafeTls12 = new MqttClientOptionsBuilderTlsParameters
+            {
+                UseTls = true,
+                SslProtocol = SslProtocols.Tls12,
+                // Don't use this in production code. This handler simply allows any invalid certificate to work.
+                CertificateValidationHandler = (w) => true
+            };
+
+            // mqtt.eclipseprojects.io
+            await ExecuteTestAsync("mqtt.eclipseprojects.io TCP",
+                    new MqttClientOptionsBuilder().WithTcpServer("mqtt.eclipseprojects.io", 1883)
+                        .WithProtocolVersion(MqttProtocolVersion.V311).Build());
+
+            await ExecuteTestAsync("mqtt.eclipseprojects.io WS",
+                new MqttClientOptionsBuilder().WithWebSocketServer("mqtt.eclipseprojects.io:80/mqtt")
+                    .WithProtocolVersion(MqttProtocolVersion.V311).Build());
+
+#if NET5_0_OR_GREATER
+            await ExecuteTestAsync("mqtt.eclipseprojects.io WS TLS13",
+                new MqttClientOptionsBuilder().WithWebSocketServer("mqtt.eclipseprojects.io:443/mqtt")
+                    .WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls13).Build());
+#endif

             // test.mosquitto.org
             await ExecuteTestAsync("test.mosquitto.org TCP",
-                new MqttClientOptionsBuilder().WithTcpServer("test.mosquitto.org", 1883).WithProtocolVersion(MqttProtocolVersion.V311).Build());
+                new MqttClientOptionsBuilder().WithTcpServer("test.mosquitto.org", 1883)
+                    .WithProtocolVersion(MqttProtocolVersion.V311).Build());

-            await ExecuteTestAsync("test.mosquitto.org TCP TLS",
-                new MqttClientOptionsBuilder().WithTcpServer("test.mosquitto.org", 8883).WithProtocolVersion(MqttProtocolVersion.V311).WithTls().Build());
+            await ExecuteTestAsync("test.mosquitto.org TCP - Authenticated",
+                new MqttClientOptionsBuilder().WithTcpServer("test.mosquitto.org", 1884)
+                    .WithCredentials("rw", "readwrite")
+                    .WithProtocolVersion(MqttProtocolVersion.V311).Build());
+
+            await ExecuteTestAsync("test.mosquitto.org TCP TLS12",
+                new MqttClientOptionsBuilder().WithTcpServer("test.mosquitto.org", 8883)
+                    .WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls12).Build());
+
+#if NET5_0_OR_GREATER
+            await ExecuteTestAsync("test.mosquitto.org TCP TLS13",
+                new MqttClientOptionsBuilder().WithTcpServer("test.mosquitto.org", 8883)
+                    .WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls13).Build());
+#endif
+
+            await ExecuteTestAsync("test.mosquitto.org TCP TLS12 - Authenticated",
+                new MqttClientOptionsBuilder().WithTcpServer("test.mosquitto.org", 8885)
+                    .WithCredentials("rw", "readwrite")
+                    .WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls12).Build());

             await ExecuteTestAsync("test.mosquitto.org WS",
-                new MqttClientOptionsBuilder().WithWebSocketServer("test.mosquitto.org:8080/mqtt").WithProtocolVersion(MqttProtocolVersion.V311).Build());
+                new MqttClientOptionsBuilder().WithWebSocketServer("test.mosquitto.org:8080/mqtt")
+                    .WithProtocolVersion(MqttProtocolVersion.V311).Build());

-            await ExecuteTestAsync("test.mosquitto.org WS TLS",
-                new MqttClientOptionsBuilder().WithWebSocketServer("test.mosquitto.org:8081/mqtt").WithProtocolVersion(MqttProtocolVersion.V311).WithTls().Build());
+            await ExecuteTestAsync("test.mosquitto.org WS TLS12",
+                new MqttClientOptionsBuilder().WithWebSocketServer("test.mosquitto.org:8081/mqtt")
+                    .WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls12).Build());
+
+            // broker.emqx.io
+            await ExecuteTestAsync("broker.emqx.io TCP",
+                new MqttClientOptionsBuilder().WithTcpServer("broker.emqx.io", 1883)
+                     .WithProtocolVersion(MqttProtocolVersion.V311).Build());
+
+            await ExecuteTestAsync("broker.emqx.io TCP TLS12",
+                new MqttClientOptionsBuilder().WithTcpServer("broker.emqx.io", 8083)
+                    .WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls12).Build());
+
+#if NET5_0_OR_GREATER
+            await ExecuteTestAsync("broker.emqx.io TCP TLS13",
+                new MqttClientOptionsBuilder().WithTcpServer("broker.emqx.io", 8083)
+                    .WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls13).Build());
+#endif
+
+            await ExecuteTestAsync("broker.emqx.io WS",
+                new MqttClientOptionsBuilder().WithWebSocketServer("broker.emqx.io:8083/mqtt")
+                    .WithProtocolVersion(MqttProtocolVersion.V311).Build());
+
+            await ExecuteTestAsync("broker.emqx.io WS TLS12",
+                new MqttClientOptionsBuilder().WithWebSocketServer("broker.emqx.io:8084/mqtt")
+                    .WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls12).Build());
+

             // broker.hivemq.com
             await ExecuteTestAsync("broker.hivemq.com TCP",
-                new MqttClientOptionsBuilder().WithTcpServer("broker.hivemq.com", 1883).WithProtocolVersion(MqttProtocolVersion.V311).Build());
+                new MqttClientOptionsBuilder().WithTcpServer("broker.hivemq.com", 1883)
+                    .WithProtocolVersion(MqttProtocolVersion.V311).Build());

             await ExecuteTestAsync("broker.hivemq.com WS",
-                new MqttClientOptionsBuilder().WithWebSocketServer("broker.hivemq.com:8000/mqtt").WithProtocolVersion(MqttProtocolVersion.V311).Build());
+                new MqttClientOptionsBuilder().WithWebSocketServer("broker.hivemq.com:8000/mqtt")
+                    .WithProtocolVersion(MqttProtocolVersion.V311).Build());

-            // mqtt.swifitch.cz
-            await ExecuteTestAsync("mqtt.swifitch.cz",
-                new MqttClientOptionsBuilder().WithTcpServer("mqtt.swifitch.cz", 1883).WithProtocolVersion(MqttProtocolVersion.V311).Build());
+            // mqtt.swifitch.cz: Does not seem to operate any more

-            // CloudMQTT
-            var configFile = Path.Combine("E:\\CloudMqttTestConfig.json");
-            if (File.Exists(configFile))
-            {
-                var config = JsonConvert.DeserializeObject<MqttConfig>(File.ReadAllText(configFile));
-
-                await ExecuteTestAsync("CloudMQTT TCP",
-                    new MqttClientOptionsBuilder().WithTcpServer(config.Server, config.Port).WithCredentials(config.Username, config.Password).WithProtocolVersion(MqttProtocolVersion.V311).Build());
-
-                await ExecuteTestAsync("CloudMQTT TCP TLS",
-                    new MqttClientOptionsBuilder().WithTcpServer(config.Server, config.SslPort).WithCredentials(config.Username, config.Password).WithTls().WithProtocolVersion(MqttProtocolVersion.V311).Build());
-
-                await ExecuteTestAsync("CloudMQTT WS TLS",
-                    new MqttClientOptionsBuilder().WithWebSocketServer(config.Server + ":" + config.SslWebSocketPort + "/mqtt").WithCredentials(config.Username, config.Password).WithTls().WithProtocolVersion(MqttProtocolVersion.V311).Build());
-            }
+            // cloudmqtt.com: Cannot test because it does not offer a free plan any more.

             Write("Finished.", ConsoleColor.White);
             Console.ReadLine();
@@ -115,21 +170,5 @@
             Console.Write(message);
         }

-        public class MqttConfig
-        {
-            public string Server { get; set; }
-
-            public string Username { get; set; }
-
-            public string Password { get; set; }
-
-            public int Port { get; set; }
-
-            public int SslPort { get; set; }
-
-            public int WebSocketPort { get; set; }
-
-            public int SslWebSocketPort { get; set; }
-        }
     }
 }


Fix TryGetRootDirectoryFrom stop condition

--- source/Nuke.Common/Constants.cs
+++ source/Nuke.Common/Constants.cs
@@ -57,7 +57,7 @@
                 predicate: x =>
                     x.GetDirectories(NukeDirectoryName).Any() ||
                     includeLegacy && x.GetFiles(NukeFileName).Any());
-            return rootDirectory != GlobalNukeDirectory ? rootDirectory : null;
+            return rootDirectory != GlobalNukeDirectory.Parent ? rootDirectory : null;
         }

         internal static bool IsLegacy(AbsolutePath rootDirectory)


Fix for digest: now including announcements.

--- yafsrc/YetAnotherForum.NET/controls/emaildigest.ascx.cs
+++ yafsrc/YetAnotherForum.NET/controls/emaildigest.ascx.cs
@@ -5,8 +5,8 @@
   using System;
   using System.Collections.Generic;
   using System.Linq;
-
-  using YAF.Classes;
+  using System.Web.UI;
+
   using YAF.Classes.Core;
   using YAF.Classes.Data;
   using YAF.Classes.Utils;
@@ -21,27 +21,32 @@
     #region Constants and Fields

     /// <summary>
-    /// The _combined user data.
+    ///   The _combined user data.
     /// </summary>
     private CombinedUserDataHelper _combinedUserData;

     /// <summary>
-    /// The _forum data.
+    ///   The _forum data.
     /// </summary>
     private List<SimpleForum> _forumData;

     /// <summary>
-    /// The _language file.
+    ///   The _language file.
     /// </summary>
     private string _languageFile;

     /// <summary>
-    /// The _theme.
+    ///   The _theme.
     /// </summary>
     private YafTheme _theme;

     /// <summary>
-    /// The _yaf localization.
+    ///   Numbers of hours to compute digest for...
+    /// </summary>
+    private int _topicHours = -24;
+
+    /// <summary>
+    ///   The _yaf localization.
     /// </summary>
     private YafLocalization _yafLocalization;

@@ -50,47 +55,49 @@
     #region Properties

     /// <summary>
-    /// Gets or sets BoardID.
-    /// </summary>
-    public int BoardID { get; set; }
-
-    /// <summary>
-    /// Gets or sets CurrentUserID.
-    /// </summary>
-    public int CurrentUserID { get; set; }
-
-    /// <summary>
-    /// Numbers of hours to compute digest for...
-    /// </summary>
-    private int _topicHours = -24;
-
-    /// <summary>
-    /// Gets NewTopics.
-    /// </summary>
-    public IEnumerable<IGrouping<SimpleForum, SimpleTopic>> NewTopics
+    /// Gets ActiveTopics.
+    /// </summary>
+    public IEnumerable<IGrouping<SimpleForum, SimpleTopic>> ActiveTopics
     {
       get
       {
         // flatten...
         var topicsFlattened = this._forumData.SelectMany(x => x.Topics);

-        return topicsFlattened.Where(t => t.CreatedDate > DateTime.Now.AddHours(this._topicHours)).GroupBy(x => x.Forum);
-      }
-    }
-
-    public IEnumerable<IGrouping<SimpleForum, SimpleTopic>> ActiveTopics
+        return
+          topicsFlattened.Where(
+            t =>
+            t.LastPostDate > DateTime.Now.AddHours(this._topicHours) &&
+            t.CreatedDate < DateTime.Now.AddHours(this._topicHours)).GroupBy(x => x.Forum);
+      }
+    }
+
+    /// <summary>
+    ///   Gets or sets BoardID.
+    /// </summary>
+    public int BoardID { get; set; }
+
+    /// <summary>
+    ///   Gets or sets CurrentUserID.
+    /// </summary>
+    public int CurrentUserID { get; set; }
+
+    /// <summary>
+    ///   Gets NewTopics.
+    /// </summary>
+    public IEnumerable<IGrouping<SimpleForum, SimpleTopic>> NewTopics
     {
       get
       {
         // flatten...
         var topicsFlattened = this._forumData.SelectMany(x => x.Topics);

-        return topicsFlattened.Where(t => t.LastPostDate > DateTime.Now.AddHours(this._topicHours) && t.CreatedDate < DateTime.Now.AddHours(this._topicHours)).GroupBy(x => x.Forum);
-      }
-    }
-
-    /// <summary>
-    /// Gets UserData.
+        return topicsFlattened.Where(t => t.CreatedDate > DateTime.Now.AddHours(this._topicHours)).GroupBy(x => x.Forum);
+      }
+    }
+
+    /// <summary>
+    ///   Gets UserData.
     /// </summary>
     public CombinedUserDataHelper UserData
     {
@@ -135,7 +142,7 @@

     #endregion

-  #region Methods
+    #region Methods

     /// <summary>
     /// The get message formatted and truncated.
@@ -171,22 +178,22 @@
     {
       YafServices.InitializeDb.Run();

-      var token = Request.QueryString.GetFirstOrDefault("token");
+      var token = this.Request.QueryString.GetFirstOrDefault("token");

       if (token.IsNotSet() || !token.Equals(YafContext.Current.BoardSettings.WebServiceToken))
       {
-        Response.End();
+        this.Response.End();
         return;
       }

       if (this.CurrentUserID == 0)
       {
-        this.CurrentUserID = Request.QueryString.GetFirstOrDefault("UserID").ToType<int>();
+        this.CurrentUserID = this.Request.QueryString.GetFirstOrDefault("UserID").ToType<int>();
       }

       if (this.BoardID == 0)
       {
-        this.BoardID = Request.QueryString.GetFirstOrDefault("BoardID").ToType<int>();
+        this.BoardID = this.Request.QueryString.GetFirstOrDefault("BoardID").ToType<int>();
       }

       this._forumData = YafServices.DBBroker.GetSimpleForumTopic(
@@ -194,7 +201,7 @@

       if (!this.NewTopics.Any() && !this.ActiveTopics.Any())
       {
-        Response.End();
+        this.Response.End();
         return;
       }

@@ -207,7 +214,7 @@

       if (digestHead.IsSet())
       {
-        this.YafHead.Controls.Add(new System.Web.UI.LiteralControl(digestHead));
+        this.YafHead.Controls.Add(new LiteralControl(digestHead));
       }

       if (subject.IsSet())


Change LastModified to readonly

Change LastModified to readonly

--- src/Tasks/SystemState.cs
+++ src/Tasks/SystemState.cs
@@ -130,8 +130,9 @@
             /// <summary>
             /// Default construct.
             /// </summary>
-            internal FileState()
-            {
+            internal FileState(DateTime lastModified)
+            {
+                this.lastModified = lastModified;
             }

             /// <summary>
@@ -166,13 +167,12 @@
             }

             /// <summary>
-            /// Get or set the assemblyName.
+            /// Gets the last modified date.
             /// </summary>
             /// <value></value>
             internal DateTime LastModified
             {
                 get { return lastModified; }
-                set { lastModified = value; }
             }

             /// <summary>
@@ -364,8 +364,7 @@
             // Still no--need to create.
             if (cacheFileState == null) // Or check time stamp
             {
-                cacheFileState = new FileState();
-                cacheFileState.LastModified = getLastWriteTime(path);
+                cacheFileState = new FileState(getLastWriteTime(path));
                 instanceLocalFileStateCache[path] = cacheFileState;
                 SystemState.s_processWideFileStateCache.TryAdd(path, cacheFileState);
                 isDirty = true;
@@ -376,8 +375,7 @@
                 DateTime lastModified = getLastWriteTime(path);
                 if (lastModified != cacheFileState.LastModified)
                 {
-                    cacheFileState = new FileState();
-                    cacheFileState.LastModified = getLastWriteTime(path);
+                    cacheFileState = new FileState(getLastWriteTime(path));
                     instanceLocalFileStateCache[path] = cacheFileState;
                     SystemState.s_processWideFileStateCache.TryAdd(path, cacheFileState);
                     isDirty = true;


LWDEV-4529: fixed tests

LWDEV-4529: fixed tests

--- tests/MarginTradingTests/SwapCommissionServiceTests.cs
+++ tests/MarginTradingTests/SwapCommissionServiceTests.cs
@@ -76,8 +76,8 @@

             var swapsFor2Days = _swapService.GetSwaps(twoDayOrder);

-            Assert.AreEqual(5.69863, swapsForDay);
-            Assert.AreEqual(11.39726, swapsFor2Days);
+            Assert.AreEqual(5.69863014m, swapsForDay);
+            Assert.AreEqual(11.39726027m, swapsFor2Days);
         }
     }
 }


feat: Listのpaddingを自動調整する謎仕様削除

feat: Listのpaddingを自動調整する謎仕様削除

--- Unity/Assets/Baum2/Editor/Scripts/BaumElements.cs
+++ Unity/Assets/Baum2/Editor/Scripts/BaumElements.cs
@@ -387,19 +387,6 @@
             var items = CreateItems(renderer, go);
             SetupList(go, items);

-            var itemMinWidth = items.Select(x => x.GetComponent<LayoutElement>().minWidth).Min();
-            var itemMinHeight = items.Select(x => x.GetComponent<LayoutElement>().minHeight).Min();
-            if (content.GetComponent<VerticalLayoutGroup>())
-            {
-                var layoutGroup = content.GetComponent<VerticalLayoutGroup>();
-                layoutGroup.padding.bottom = (int) (go.GetComponent<RectTransform>().sizeDelta.y - itemMinHeight);
-            }
-            else
-            {
-                var layoutGroup = content.GetComponent<HorizontalLayoutGroup>();
-                layoutGroup.padding.right = (int) (go.GetComponent<RectTransform>().sizeDelta.x - itemMinWidth);
-            }
-
             return go;
         }


Improve status

Improve status

--- WalletWasabi.Gui/ViewModels/StatusBarViewModel.cs
+++ WalletWasabi.Gui/ViewModels/StatusBarViewModel.cs
@@ -82,15 +82,24 @@

 			this.WhenAnyValue(x => x.BlocksLeft).Subscribe(blocks =>
 			{
-				if (blocks > 0)
-				{
-					Status = "Synchronizing...";
-				}
-				else
-				{
-					Status = "Ready";
-				}
+				SetStatus();
 			});
+			this.WhenAnyValue(x => x.FiltersLeft).Subscribe(filters =>
+			{
+				SetStatus();
+			});
+		}
+
+		private void SetStatus()
+		{
+			if (FiltersLeft != 0 || BlocksLeft != 0)
+			{
+				Status = "Synchronizing...";
+			}
+			else
+			{
+				Status = "Ready";
+			}
 		}

 		private void IndexDownloader_NewFilter(object sender, Backend.Models.FilterModel e)


Fixed arr loadbalancer to use correct server when taking servers offline/online

--- ConDep.Dsl.LoadBalancer.Arr/ApplicationRequestRoutingLoadBalancer.cs
+++ ConDep.Dsl.LoadBalancer.Arr/ApplicationRequestRoutingLoadBalancer.cs
@@ -35,9 +35,8 @@
         {
             var webDepDef = CreateWebDeployDefinition();

-            var provider = new ApplicationRequestRoutingProvider(state, _settings.Name);
-            //todo: provide user??
-            provider.Configure(new DeploymentServer(serverName, _user));
+            var provider = new ApplicationRequestRoutingProvider(state, serverName);
+            provider.Configure(new DeploymentServer(_settings.Name, _user));
             //Todo: Why is the child providers in the wrong order by default??
             provider.ChildProviders.ToList().Reverse();
             webDepDef.Providers.Add(provider);


Prevent epilepsy seizures from lights running out of power.

--- Content.Server/GameObjects/Components/Power/PoweredLightComponent.cs
+++ Content.Server/GameObjects/Components/Power/PoweredLightComponent.cs
@@ -140,9 +140,9 @@
             switch (LightBulb.State)
             {
                 case LightBulbState.Normal:
+                    device.Load = Load;
                     if (device.Powered)
                     {
-                        device.Load = Load;
                         sprite.LayerSetState(0, "on");
                         light.State = LightState.On;
                         light.Color = LightBulb.Color;
@@ -156,7 +156,6 @@
                     }
                     else
                     {
-                        device.Load = 0;
                         sprite.LayerSetState(0, "off");
                         light.State = LightState.Off;
                     }


--- Examples/CSharp/Articles/SettingTextEffectsShadowOfShapeOrTextbox.cs
+++ Examples/CSharp/Articles/SettingTextEffectsShadowOfShapeOrTextbox.cs
@@ -10,9 +10,8 @@
     {
         public static void Run()
         {
-            // ExStart:SettingTextEffectsShadowOfShapeOrTextbox
-            // The path to the documents directory.
-            string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //Output directory
+            string outputDir = RunExamples.Get_OutputDirectory();

             // Create workbook object
             Workbook wb = new Workbook();
@@ -31,8 +30,9 @@
             tb.Font.Size = 16;

             // Save the output file
-            wb.Save(dataDir + "SettingTextEffectsShadowOfShapeOrTextbox_out.xlsx", SaveFormat.Xlsx);
-            // ExEnd:SettingTextEffectsShadowOfShapeOrTextbox
+            wb.Save(outputDir + "outputSettingTextEffectsShadowOfShapeOrTextbox.xlsx", SaveFormat.Xlsx);
+
+            Console.WriteLine("SettingTextEffectsShadowOfShapeOrTextbox executed successfully.");
         }
     }
 }


fix test

fix test

--- Fetcher.Core.Tests/Services/Fetcher/FetcherRepositoryServiceTests.cs
+++ Fetcher.Core.Tests/Services/Fetcher/FetcherRepositoryServiceTests.cs
@@ -162,7 +162,7 @@

             IUrlCacheInfo hero1 = await sut.PreloadUrlAsync(request1, FetcherStubFactory.FetcherWebResponseSuccessFactory());
             IUrlCacheInfo hero2 = await sut.PreloadUrlAsync(request2, FetcherStubFactory.FetcherWebResponseSuccessFactory());
-            hero1.LastAccessed = DateTimeOffset.MinValue;
+            hero1.LastUpdated = DateTimeOffset.MinValue;
             await sut.UpdateAsync(hero1);

             await sut.DeleteEntriesOlderThan(400);


Better null reference handling for

Better null reference handling for

--- Framework/Azure/Cqrs.Azure.ConfigurationManager/TelemetryCoreHost.cs
+++ Framework/Azure/Cqrs.Azure.ConfigurationManager/TelemetryCoreHost.cs
@@ -24,7 +24,7 @@
 		/// <summary>
 		/// Gets or sets the <see cref="IConfigurationManager"/>. This must be set manually as dependency injection may not be ready in-time.
 		/// </summary>
-		protected static readonly IConfigurationManager _configurationManager = null;
+		protected static IConfigurationManager _configurationManager = null;
 #endif
 #if NET472
 		/// <summary>
@@ -62,7 +62,9 @@
 		protected override void ConfigureTelemetry()
 		{
 #if NETSTANDARD2_0
-			TelemetryConfiguration config = GetTelemetryConfigurationDelegate() ?? TelemetryConfiguration.CreateDefault();
+			TelemetryConfiguration config = GetTelemetryConfigurationDelegate == null
+				? TelemetryConfiguration.CreateDefault()
+				: GetTelemetryConfigurationDelegate() ?? TelemetryConfiguration.CreateDefault();
 			config.InstrumentationKey = ConfigurationManager.GetSetting("Cqrs.Hosts.ApplicationInsightsInstrumentationKey");
 #endif
 #if NET472


More error handling for iptables-restore adapter

--- IPTables.Net/Iptables/Adapter/Client/IPTablesRestoreAdapterClient.cs
+++ IPTables.Net/Iptables/Adapter/Client/IPTablesRestoreAdapterClient.cs
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
+using System.Text.RegularExpressions;
 using SystemInteract;
 using IPTables.Net.Iptables.Adapter.Client.Helper;
 using IPTables.Net.Netfilter;
@@ -176,6 +177,11 @@

         public override void EndTransactionCommit()
         {
+            if (!_inTransaction)
+            {
+                return;
+            }
+
             ISystemProcess process = StartProcess(_iptablesRestoreBinary, NoFlushOption + " " + NoClearOption);
             if (_builder.WriteOutput(process.StandardInput))
             {
@@ -203,6 +209,28 @@
                     //ERR: GENERAL ERROR
                     if (process.ExitCode == 1)
                     {
+                        String error = process.StandardError.ReadToEnd();
+                        Console.WriteLine(error);
+
+                        MemoryStream ms = new MemoryStream();
+                        var sw = new StreamWriter(ms);
+                        _builder.WriteOutput(sw);
+                        sw.Flush();
+                        ms.Seek(0, SeekOrigin.Begin);
+                        var sr = new StreamReader(ms);
+                        var rules = sr.ReadToEnd();
+
+                        var r = new Regex("line ([0-9]+) failed");
+                        if (r.IsMatch(error))
+                        {
+                            var m = r.Match(error);
+                            var g = m.Groups[1];
+                            var i = int.Parse(g.Value);
+
+                            throw new Exception("IpTables-Restore failed to parse rule: " +
+                                                rules.Split(new char[] {'\n'}).Skip(i - 1).FirstOrDefault());
+                        }
+
                         throw new Exception("IpTables-Restore execution failed: Error");
                     }


Added support for filepath Uri with no scheme

--- InTheHand.Forms/InTheHand.Forms.Platform.iOS/MediaElementRenderer.cs
+++ InTheHand.Forms/InTheHand.Forms.Platform.iOS/MediaElementRenderer.cs
@@ -131,7 +131,12 @@
             if (Element.Source != null)
             {
                 AVAsset asset = null;
-                if (Element.Source.Scheme == "ms-appx")
+                if(Element.Source.Scheme == null)
+                {
+                    // file path
+                    asset = AVAsset.FromUrl(NSUrl.FromFilename(Element.Source.OriginalString));
+                }
+                else if (Element.Source.Scheme == "ms-appx")
                 {
                     // used for a file embedded in the application package
                     asset = AVAsset.FromUrl(NSUrl.FromFilename(Element.Source.LocalPath.Substring(1)));


no longer starts the background timer for non-slideshow fullscreen

--- src/Widgets/SlideShow.cs
+++ src/Widgets/SlideShow.cs
@@ -20,6 +20,7 @@
 {
 	public class SlideShow : DrawingArea
 	{
+		bool running;
 		BrowsablePointer item;
 #region Public API
 		public SlideShow (BrowsablePointer item) : base ()
@@ -60,11 +61,13 @@
 		Delay flip;
 		public void Start ()
 		{
+			running = true;
 			flip.Start ();
 		}

 		public void Stop ()
 		{
+			running = false;
 			flip.Stop ();
 		}
 #endregion
@@ -75,7 +78,8 @@
 		void HandleItemChanged (object sender, EventArgs e)
 		{
 			flip.Stop ();
-			flip.Start ();
+			if (running)
+				flip.Start ();
 			lock (sync_handle) {
 				if (prev != null)
 					prev.Dispose ();


print exception stack trace

print exception stack trace

--- src/Wiki2Dict/Program.cs
+++ src/Wiki2Dict/Program.cs
@@ -63,6 +63,7 @@
             catch (Exception ex)
             {
                 Console.WriteLine(ex.Message);
+                Console.WriteLine(ex.StackTrace);
             }
         }
     }


Wireshark 1.12.8

Wireshark 1.12.8

--- PcapDotNet/src/PcapDotNet.Core.Test/WiresharkDatagramComparerIpV6.cs
+++ PcapDotNet/src/PcapDotNet.Core.Test/WiresharkDatagramComparerIpV6.cs
@@ -1,10 +1,10 @@
 using System;
-using System.Collections.Generic;
 using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
 using System.Linq;
 using System.Xml.Linq;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
+using PcapDotNet.Base;
 using PcapDotNet.Packets;
 using PcapDotNet.Packets.IpV4;
 using PcapDotNet.Packets.IpV6;
@@ -196,7 +196,14 @@

                             case "ipv6.routing_hdr.rpl.address":
                                 headerField.AssertNoFields();
-                                // TODO: Implement when https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=10560 is fixed.
+                                // TODO: Remove this condition when https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=11803 is fixed.
+                                if (routingProtocolLowPowerAndLossyNetworks.Addresses.Count > 0)
+                                {
+                                    IpV6Address actualAddress =
+                                        new IpV6Address(UInt128.Parse(headerField.Value(), NumberStyles.HexNumber, CultureInfo.InvariantCulture));
+                                    Assert.AreEqual(routingProtocolLowPowerAndLossyNetworks.Addresses[routingProtocolLowPowerAndLossyNetworksAddressIndex],
+                                                    actualAddress);
+                                }
                                 break;

                             case "ipv6.routing_hdr.rpl.full_address":


Fix textinfo observable collection not subscribe event issue.

--- Source/HelixToolkit.SharpDX.Shared/Model/Geometry/BillboardText3D.cs
+++ Source/HelixToolkit.SharpDX.Shared/Model/Geometry/BillboardText3D.cs
@@ -141,6 +141,11 @@
                 }
             }
             get { return textInfo; }
+        }
+
+        public BillboardText3D()
+        {
+            textInfo.CollectionChanged += CollectionChanged;
         }

         private void CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)


WithCacheIf  BUG

WithCacheIf  BUG

--- Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs
+++ Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs
@@ -628,7 +628,7 @@
         }
         public ISugarQueryable<T> WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue)
         {
-            if (IsCache)
+            if (isCache)
             {
                 this.IsCache = true;
                 this.CacheTime = cacheDurationInSeconds;


remove datapackage item - harmonize format in url

--- Terradue.Tep/Terradue/Tep/WebServer/Catalogue/DataPackage.Service.cs
+++ Terradue.Tep/Terradue/Tep/WebServer/Catalogue/DataPackage.Service.cs
@@ -200,8 +200,12 @@
                 DataPackage def = DataPackage.GetTemporaryForCurrentUser(context);

                 foreach(RemoteResource res in def.Resources){
-                    var reqDPUri = new UriBuilder(request.Url.Replace("format=atom", "format=json")).Uri.AbsoluteUri;
-                    var localDPUri = new UriBuilder(res.Location.Replace("format=atom", "format=json")).Uri.AbsoluteUri;
+                    var reqDPUri = new UriBuilder(HttpUtility.UrlDecode(request.Url)).Uri.AbsoluteUri;
+                    var localDPUri = new UriBuilder(HttpUtility.UrlDecode(res.Location)).Uri.AbsoluteUri;
+
+                    reqDPUri = reqDPUri.SetQueryParam("format","atom");
+                    localDPUri = localDPUri.SetQueryParam("format", "atom");
+
                     if(reqDPUri.Equals(localDPUri)){
                         res.Delete();
                         break;


Revert wrong commit

Revert wrong commit

--- Windows/Projects/Egs/EgsDeviceControlCore/Properties/AssemblyInfo.cs
+++ Windows/Projects/Egs/EgsDeviceControlCore/Properties/AssemblyInfo.cs
@@ -33,7 +33,7 @@
 [assembly: AssemblyVersion(Egs.ApplicationCommonSettings.HostAppCoreDllAssemblyVersionMajorMinorBuildRevisionString)]
 [assembly: AssemblyFileVersion(Egs.ApplicationCommonSettings.HostAppCoreDllAssemblyVersionMajorMinorBuildRevisionString)]

-#if DEBUG
+
 [assembly: InternalsVisibleTo("EgsHostAppCore")]
 [assembly: InternalsVisibleTo("EgsHostAppCore.Test")]
 [assembly: InternalsVisibleTo("ZkooTutorial")]
@@ -46,19 +46,3 @@
 [assembly: InternalsVisibleTo("ZkooDeviceQualityAssurance")]
 [assembly: InternalsVisibleTo("ZkooHostServiceApp")]
 // NOTE: set "uiAccess="false"" in Projects/Egs/ZkooHostApp/Properties/app.manifest
-#else
-[assembly: InternalsVisibleTo("EgsHostAppCore,               PublicKey=00240000048000009400000006020000002400005253413100040000010001003fbaf90361cc3521105256fec77b237721692f51604583e0f15e8e91e4d6d2dcb35359c09eaca8576d9741379dc5756db079ea3960c09fb708c51f6a52c1a84fb7352302e8c8d43a68b363bd51bf865dba92c64b06502455248aaafcac4fa31e7dd0dd3c83d25ac77bc21512df6b9cc499bd595db97e58c7d868c62ab52a45c4")]
-[assembly: InternalsVisibleTo("EgsHostAppCore.Test,          PublicKey=002400000480000094000000060200000024000052534131000400000100010073c9d91c5b8d6472c6b39ad6ed5e860429e5b5985eeb11eec38b9a0c677b90cd5207d487994e7196b97dd204a85511e866797860b904d977cdf076e65822ed3ca5efa070ac6bf38875dd2b58b86937ef302a73ef707a2170d39646761d256ecc86cd4f16cc6f940f75fa280a699259dd1757505ecdbbc9e11d988b3305913298")]
-[assembly: InternalsVisibleTo("ZkooTutorial,                 PublicKey=00240000048000009400000006020000002400005253413100040000010001007bc3abf24182b4678d5f3100b54e7bc5ffbf62a726bc8cbfbeb39edc5990117fd42be13541e4e5141bc4374aa9bbaa75f3e8d2b33410fdbf202038b1a73b9c2197d293e585ed01532537ee7be0cbe7ceca1f7effcb306b05200f9d6da042fc7e4db993257330530f29b1316ac0065567c0d647d019ba94dde6a6a88fa60ac4c0")]
-[assembly: InternalsVisibleTo("ZkooHostApp,                  PublicKey=0024000004800000140100000602000000240000525341310008000001000100c95036aaaef33488d831ca13647c63079f2bf2207bb6d0d9f7d826077726ca1005bd6e64f4becf48438adae921ba8c68d70e5108287263e6a456c507b41ba05f0c5e98336d43c6df57c5319e867292d4bd4146922bfb1d4208a8eefdbb7f66005efa5e327b4f1e6a5d83d9eb22b075980c73356b9006518dba2f39d0af2336a330ead210e2f9384e43017a4f3a1bee1a1e29ce75de5c5c34130533ef3b7b4511023c260d5b317d87be397ade8917adac0606f281d0e0488c33ae02a0e6b0774d86a795460dbfe90ec457cfdcadc7c5d9c6ac77df22ef976e08fbff2f4e8b3319be2d5cf9142891e7aa8d49ab823da0e1bf5bac8aa8a1a4f435e9ed7435b4dde8")]
-[assembly: InternalsVisibleTo("EgsInternalHostAppExtensions, PublicKey=002400000480000094000000060200000024000052534131000400000100010073c9d91c5b8d6472c6b39ad6ed5e860429e5b5985eeb11eec38b9a0c677b90cd5207d487994e7196b97dd204a85511e866797860b904d977cdf076e65822ed3ca5efa070ac6bf38875dd2b58b86937ef302a73ef707a2170d39646761d256ecc86cd4f16cc6f940f75fa280a699259dd1757505ecdbbc9e11d988b3305913298")]
-[assembly: InternalsVisibleTo("ZkooHostAppInternal,          PublicKey=0024000004800000140100000602000000240000525341310008000001000100c95036aaaef33488d831ca13647c63079f2bf2207bb6d0d9f7d826077726ca1005bd6e64f4becf48438adae921ba8c68d70e5108287263e6a456c507b41ba05f0c5e98336d43c6df57c5319e867292d4bd4146922bfb1d4208a8eefdbb7f66005efa5e327b4f1e6a5d83d9eb22b075980c73356b9006518dba2f39d0af2336a330ead210e2f9384e43017a4f3a1bee1a1e29ce75de5c5c34130533ef3b7b4511023c260d5b317d87be397ade8917adac0606f281d0e0488c33ae02a0e6b0774d86a795460dbfe90ec457cfdcadc7c5d9c6ac77df22ef976e08fbff2f4e8b3319be2d5cf9142891e7aa8d49ab823da0e1bf5bac8aa8a1a4f435e9ed7435b4dde8")]
-[assembly: InternalsVisibleTo("EgsHost,                      PublicKey=0024000004800000140100000602000000240000525341310008000001000100c95036aaaef33488d831ca13647c63079f2bf2207bb6d0d9f7d826077726ca1005bd6e64f4becf48438adae921ba8c68d70e5108287263e6a456c507b41ba05f0c5e98336d43c6df57c5319e867292d4bd4146922bfb1d4208a8eefdbb7f66005efa5e327b4f1e6a5d83d9eb22b075980c73356b9006518dba2f39d0af2336a330ead210e2f9384e43017a4f3a1bee1a1e29ce75de5c5c34130533ef3b7b4511023c260d5b317d87be397ade8917adac0606f281d0e0488c33ae02a0e6b0774d86a795460dbfe90ec457cfdcadc7c5d9c6ac77df22ef976e08fbff2f4e8b3319be2d5cf9142891e7aa8d49ab823da0e1bf5bac8aa8a1a4f435e9ed7435b4dde8")]
-[assembly: InternalsVisibleTo("PowerPointViewer,             PublicKey=0024000004800000140100000602000000240000525341310008000001000100c95036aaaef33488d831ca13647c63079f2bf2207bb6d0d9f7d826077726ca1005bd6e64f4becf48438adae921ba8c68d70e5108287263e6a456c507b41ba05f0c5e98336d43c6df57c5319e867292d4bd4146922bfb1d4208a8eefdbb7f66005efa5e327b4f1e6a5d83d9eb22b075980c73356b9006518dba2f39d0af2336a330ead210e2f9384e43017a4f3a1bee1a1e29ce75de5c5c34130533ef3b7b4511023c260d5b317d87be397ade8917adac0606f281d0e0488c33ae02a0e6b0774d86a795460dbfe90ec457cfdcadc7c5d9c6ac77df22ef976e08fbff2f4e8b3319be2d5cf9142891e7aa8d49ab823da0e1bf5bac8aa8a1a4f435e9ed7435b4dde8")]
-[assembly: InternalsVisibleTo("ZkooDeviceFirmwareUpdate,     PublicKey=002400000480000094000000060200000024000052534131000400000100010073c9d91c5b8d6472c6b39ad6ed5e860429e5b5985eeb11eec38b9a0c677b90cd5207d487994e7196b97dd204a85511e866797860b904d977cdf076e65822ed3ca5efa070ac6bf38875dd2b58b86937ef302a73ef707a2170d39646761d256ecc86cd4f16cc6f940f75fa280a699259dd1757505ecdbbc9e11d988b3305913298")]
-[assembly: InternalsVisibleTo("ZkooDeviceQualityAssurance,   PublicKey=002400000480000094000000060200000024000052534131000400000100010073c9d91c5b8d6472c6b39ad6ed5e860429e5b5985eeb11eec38b9a0c677b90cd5207d487994e7196b97dd204a85511e866797860b904d977cdf076e65822ed3ca5efa070ac6bf38875dd2b58b86937ef302a73ef707a2170d39646761d256ecc86cd4f16cc6f940f75fa280a699259dd1757505ecdbbc9e11d988b3305913298")]
-[assembly: InternalsVisibleTo("ZkooHostServiceApp,           PublicKey=0024000004800000140100000602000000240000525341310008000001000100c95036aaaef33488d831ca13647c63079f2bf2207bb6d0d9f7d826077726ca1005bd6e64f4becf48438adae921ba8c68d70e5108287263e6a456c507b41ba05f0c5e98336d43c6df57c5319e867292d4bd4146922bfb1d4208a8eefdbb7f66005efa5e327b4f1e6a5d83d9eb22b075980c73356b9006518dba2f39d0af2336a330ead210e2f9384e43017a4f3a1bee1a1e29ce75de5c5c34130533ef3b7b4511023c260d5b317d87be397ade8917adac0606f281d0e0488c33ae02a0e6b0774d86a795460dbfe90ec457cfdcadc7c5d9c6ac77df22ef976e08fbff2f4e8b3319be2d5cf9142891e7aa8d49ab823da0e1bf5bac8aa8a1a4f435e9ed7435b4dde8")]
-// NOTE: Relative path is available!  But if the (checked out/cloned) path is too deep, too long path can cause some errors!
-[assembly: AssemblyKeyFile(@"..\..\..\..\..\..\..\Exvision\CodeSigning\EgsHostAppCoreKeyPairByExvision.snk")]
-[assembly: AssemblyDelaySign(false)]
-#endif


Add property for disabling command line.

--- ConsoleBase.cs
+++ ConsoleBase.cs
@@ -122,6 +122,7 @@
         private IntRange renderedLines;
         private bool forceRedraw = false;
         private readonly ILineColorProvider colorProvider;
+        private bool commandLineEnabled = true;

         public ConsoleBase(ILineColorProvider colorProvider, ILogger logger = null)
         {
@@ -190,7 +191,20 @@
             }
             return _logger;
         }
-
+
+        public bool CommandLineEnabled
+        {
+            get { return commandLineEnabled; }
+            set
+            {
+                if (value == commandLineEnabled)
+                    return;
+                commandLineEnabled = value;
+                forceRedraw = true;
+                Invalidate();
+            }
+        }
+
         private void InitFont(Font font)
         {
             if (hFont)
@@ -459,7 +473,8 @@
             DrawCounter();
             WinAPI.SetTextAlign(hdcBackBuffer, alignLeft);
             DrawHeader();
-            DrawCommandLine();
+            if (commandLineEnabled)
+                DrawCommandLine();
             DrawLog();
             RedrawWindow();
         }
@@ -563,7 +578,11 @@

         private int GetLogRectBottom()
         {
-            return ClientSize.Height - 2 * textMetric.tmHeight - ContentPadding.Height;
+            var lineHeight = textMetric.tmHeight;
+            var result = ClientSize.Height - lineHeight - ContentPadding.Height;
+            if (commandLineEnabled)
+                result -= lineHeight;
+            return result;
         }

         private string GetLineByIndex(int i)
@@ -715,7 +734,9 @@

         private void DrawCounter()
         {
-            var posY = ClientSize.Height - textMetric.tmHeight - ContentPadding.Height;
+            var posY = ClientSize.Height - ContentPadding.Height;
+            if (commandLineEnabled)
+                posY -= textMetric.tmHeight;
             var formatString = DesignMode ? "[0/0]" : String.Format("[{0}/{1}]", lineIndex + 1, lineCount);
             var lineWidth = GetLineWidth();
             WinAPI.SetBkColor(hdcBackBuffer, ConsoleColors.Black);
@@ -758,6 +779,11 @@

         protected override void OnKeyPress(KeyPressEventArgs e)
         {
+            if (!commandLineEnabled)
+            {
+                base.OnKeyPress(e);
+                return;
+            }
             switch (e.KeyChar)
             {
                 case '\t': // tab
@@ -806,6 +832,8 @@
             switch (e.KeyCode)
             {
                 case Keys.Up:
+                    if (!commandLineEnabled)
+                        goto default;
                     string prevCmd;
                     if (Editor.Text == "")
                     {
@@ -823,6 +851,8 @@
                     break;

                 case Keys.Down:
+                    if (!commandLineEnabled)
+                        goto default;
                     var nextCmd = CmdCache.GetNext();
                     if (nextCmd != null)
                     {
@@ -831,18 +861,26 @@
                     break;

                 case Keys.Left:
+                    if (!commandLineEnabled)
+                        goto default;
                     Editor.MoveCaretLeft(shiftKey, ctrlKey);
                     break;

                 case Keys.Right:
+                    if (!commandLineEnabled)
+                        goto default;
                     Editor.MoveCaretRight(shiftKey, ctrlKey);
                     break;

                 case Keys.Home:
+                    if (!commandLineEnabled)
+                        goto default;
                     Editor.Home(shiftKey);
                     break;

                 case Keys.End:
+                    if (!commandLineEnabled)
+                        goto default;
                     Editor.End(shiftKey);
                     break;

@@ -863,6 +901,8 @@
                     break;

                 case Keys.Enter:
+                    if (!commandLineEnabled)
+                        goto default;
                     var command = Editor.Text;
                     Editor.Reset();
                     if (command.Length > 0)
@@ -877,6 +917,8 @@
                     break;

                 case Keys.A:
+                    if (!commandLineEnabled)
+                        goto default;
                     if (!ctrlKey)
                     {
                         goto default;
@@ -886,6 +928,8 @@
                     break;

                 case Keys.C:
+                    if (!commandLineEnabled)
+                        goto default;
                     if (!ctrlKey)
                     {
                         goto default;
@@ -895,6 +939,8 @@
                     break;

                 case Keys.X:
+                    if (!commandLineEnabled)
+                        goto default;
                     if (!ctrlKey)
                     {
                         goto default;
@@ -904,6 +950,8 @@
                     break;

                 case Keys.V:
+                    if (!commandLineEnabled)
+                        goto default;
                     if (!ctrlKey)
                     {
                         goto default;
@@ -913,21 +961,29 @@
                     break;

                 case Keys.Escape:
+                    if (!commandLineEnabled)
+                        goto default;
                     Editor.ResetSelection();
                     e.SuppressKeyPress = true;
                     break;

                 case Keys.Back:
+                    if (!commandLineEnabled)
+                        goto default;
                     Editor.Backspace(ctrlKey);
                     e.SuppressKeyPress = true;
                     break;

                 case Keys.Delete:
+                    if (!commandLineEnabled)
+                        goto default;
                     Editor.Delete(ctrlKey);
                     e.SuppressKeyPress = true;
                     break;

                 case Keys.Insert:
+                    if (!commandLineEnabled)
+                        goto default;
                     Editor.ToggleEditMode();
                     break;


Fix typo in lock-file extension.

Fix typo in lock-file extension.

Check for .compiling instead of .compile.

--- Core/RcCore.cs
+++ Core/RcCore.cs
@@ -505,7 +505,7 @@
 							do
 							{
 								Thread.Sleep(500);
-								still_compiling = Directory.EnumerateFiles(RcCore.It.DataUserPath, "*.compile").Any();
+								still_compiling = Directory.EnumerateFiles(RcCore.It.DataUserPath, "*.compiling").Any();
 							}
 							while (!stopCheckingForOpenClCompileFinished && still_compiling);
 						} /* end of using named pipe server stream */


exclude launch clamps and strutconnectors

--- CraftLoader.cs
+++ CraftLoader.cs
@@ -30,15 +30,19 @@
                     referenceFrame.rotation = vessel.transform.rotation;
                     foreach (Part part in vessel.parts)
                     {
-                        PartValue newPartValue = new PartValue();
-                        newPartValue.scale = 1f / part.scaleFactor;
-                        localTransform.rotation = part.transform.rotation;
-                        localTransform.position = part.transform.position;
-                        newPartValue.position = localTransform.localPosition;
-                        newPartValue.rotation = localTransform.localRotation;
-                        newPartValue.partName = part.name.Split(' ')[0];
-                        if (fetchModel) newPartValue.model = findPartModel(newPartValue.partName);
-                        partList.Add(newPartValue);
+                        if (part.name != "launchClamp1" && part.partName != "StrutConnector")
+                        {
+                            Debug.Log("getParts: part.partName " + part.partName);
+                            PartValue newPartValue = new PartValue();
+                            newPartValue.scale = 1f / part.scaleFactor;
+                            localTransform.rotation = part.transform.rotation;
+                            localTransform.position = part.transform.position;
+                            newPartValue.position = localTransform.localPosition;
+                            newPartValue.rotation = localTransform.localRotation;
+                            newPartValue.partName = part.name.Split(' ')[0];
+                            if (fetchModel) newPartValue.model = findPartModel(newPartValue.partName);
+                            partList.Add(newPartValue);
+                        }
                     }
                     //Debug.Log("partList count: " + partList.Count);
                 }
@@ -115,7 +119,7 @@
             }
             foreach (PartValue pv in pvList)
             {
-                //Debug.Log("pv.name is " + pv.partName);
+                //Debug.Log("pv.partName is " + pv.partName);
                 pv.model.SetActive(true);
                 //Debug.Log("pv.model exists");
                 pv.model.transform.parent = craft.transform;