From bd362c218f93cdf49195246b67824ada4ca8cfd6 Mon Sep 17 00:00:00 2001 From: "Aaron (Qilong)" Date: Wed, 9 Oct 2024 16:32:18 -0400 Subject: [PATCH 01/19] update copy location --- src/DynamoCoreWpf/DynamoCoreWpf.csproj | 6 +++--- src/DynamoUtilities/CLIWrapper.cs | 4 ++-- src/Tools/DynamoFeatureFlags/FeatureFlagsClient.cs | 6 ++---- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/DynamoCoreWpf/DynamoCoreWpf.csproj b/src/DynamoCoreWpf/DynamoCoreWpf.csproj index 29eed082f38..cb545c46377 100644 --- a/src/DynamoCoreWpf/DynamoCoreWpf.csproj +++ b/src/DynamoCoreWpf/DynamoCoreWpf.csproj @@ -189,10 +189,10 @@ - + - + @@ -1861,7 +1861,7 @@ - + diff --git a/src/DynamoUtilities/CLIWrapper.cs b/src/DynamoUtilities/CLIWrapper.cs index 3cbf521f23f..dcaa6c77974 100644 --- a/src/DynamoUtilities/CLIWrapper.cs +++ b/src/DynamoUtilities/CLIWrapper.cs @@ -13,8 +13,8 @@ namespace Dynamo.Utilities /// internal abstract class CLIWrapper : IDisposable { - protected const string endOfDataToken = @"<<<<>>>>"; - protected const string startofDataToken = @"<<<<>>>>"; + protected const string endOfDataToken = @"<<<<>>>>"; + protected const string startofDataToken = @"<<<<>>>>"; protected readonly Process process = new Process(); protected bool started; internal event Action MessageLogged; diff --git a/src/Tools/DynamoFeatureFlags/FeatureFlagsClient.cs b/src/Tools/DynamoFeatureFlags/FeatureFlagsClient.cs index ac4e9be3d06..df33796a872 100644 --- a/src/Tools/DynamoFeatureFlags/FeatureFlagsClient.cs +++ b/src/Tools/DynamoFeatureFlags/FeatureFlagsClient.cs @@ -82,7 +82,6 @@ internal FeatureFlagsClient(string userkey, string mobileKey = null, bool testMo { MessageLogged?.Invoke($"LD startup: testmode true, no LD connection. "); MessageLogged?.Invoke($"LD startup time: {sw.ElapsedMilliseconds} "); - MessageLogged?.Invoke("<<<<>>>>"); AllFlags = LdValue.ObjectFrom(new Dictionary { { "TestFlag1",LdValue.Of(true) }, { "TestFlag2", LdValue.Of("I am a string") }, //in tests we want instancing on so we can test it. @@ -96,7 +95,6 @@ internal FeatureFlagsClient(string userkey, string mobileKey = null, bool testMo Init(mobileKey); sw.Stop(); MessageLogged?.Invoke($"LD startup time: {sw.ElapsedMilliseconds} "); - MessageLogged?.Invoke("<<<<>>>>"); //gather all the user's flags and create a top level ldvalue object containing all of them. if (ldClient.Initialized) { @@ -110,11 +108,11 @@ internal void Init(string mobileKey) ldClient = LaunchDarkly.Sdk.Client.LdClient.Init(mobileKey, LaunchDarkly.Sdk.Client.ConfigurationBuilder.AutoEnvAttributes.Disabled, user, TimeSpan.FromSeconds(5)); if (ldClient.Initialized) { - MessageLogged?.Invoke($"launch darkly initalized"); + MessageLogged?.Invoke($"Launch Darkly initalized"); } else { - MessageLogged?.Invoke($"launch darkly failed to initalize"); + MessageLogged?.Invoke($"Launch Darkly failed to initalize"); } } From 3fd7dc3e8e713ce54b838a90dc84d2fd34976550 Mon Sep 17 00:00:00 2001 From: "Aaron (Qilong)" Date: Wed, 9 Oct 2024 16:49:04 -0400 Subject: [PATCH 02/19] Updates --- extern/TuneUp/TuneUp.dll | Bin 74008 -> 0 bytes .../TuneUp_ViewExtensionDefinition.xml | 0 extern/TuneUp/pkg.json | 1 + src/DynamoCoreWpf/DynamoCoreWpf.csproj | 12 ++++++------ .../DynamoPackagesAnalyzer.csproj | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) delete mode 100644 extern/TuneUp/TuneUp.dll rename extern/TuneUp/{ => extra}/TuneUp_ViewExtensionDefinition.xml (100%) create mode 100644 extern/TuneUp/pkg.json diff --git a/extern/TuneUp/TuneUp.dll b/extern/TuneUp/TuneUp.dll deleted file mode 100644 index 6cd15388f0cf9619e7e7b2aa9ad0aa8dfb2e8c60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74008 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 CS=9aj diff --git a/extern/TuneUp/TuneUp_ViewExtensionDefinition.xml b/extern/TuneUp/extra/TuneUp_ViewExtensionDefinition.xml similarity index 100% rename from extern/TuneUp/TuneUp_ViewExtensionDefinition.xml rename to extern/TuneUp/extra/TuneUp_ViewExtensionDefinition.xml diff --git a/extern/TuneUp/pkg.json b/extern/TuneUp/pkg.json new file mode 100644 index 00000000000..063e15637fa --- /dev/null +++ b/extern/TuneUp/pkg.json @@ -0,0 +1 @@ +{"license":"","file_hash":null,"name":"TuneUp","version":"1.0.7","description":"*** THE TUNEUP EXTENSION USES NEW API FEATURES THAT ARE ONLY AVAILABLE IN DYNAMO VERSION 2.5 OR ABOVE ***\r\n\r\nTuneUp is in beta and is a view extension for analyzing the performance of Dynamo graphs. TuneUp allows you to see overall graph execution time, per-node execution time, and other helpful information about what's happening under the hood, e.g. nodes run in the current execution v.s. nodes run in the previous execution (which are skipped this run for optimization/ caching). Read more here: https://dynamobim.org/tuneup-extension-explore-your-node-and-graph-execution-times/ \r\n\r\nKnown issues:\r\n1. TuneUp does not work with .dyfs (custom nodes) yet.\r\n2.TuneUp binaries are not semantically versioned and are not intended to be built on top of as an API. Do not treat these binaries like DynamoCore.\r\n3. TuneUp requires Dynamo 2.5 or higher for access to new extension APIs.\r\n4. When user have TuneUp open, after switching workspace in Dynamo, the first graph run does not give execution time and nodes order.","group":"","keywords":["profiler","tuneup"],"dependencies":[],"contents":"","engine_version":"2.1.0.7733","engine":"dynamo","engine_metadata":"","site_url":"https://dynamobim.org/","repository_url":"https://github.com/DynamoDS/TuneUp","contains_binaries":true,"node_libraries":[]} \ No newline at end of file diff --git a/src/DynamoCoreWpf/DynamoCoreWpf.csproj b/src/DynamoCoreWpf/DynamoCoreWpf.csproj index cb545c46377..5cecb9e8eea 100644 --- a/src/DynamoCoreWpf/DynamoCoreWpf.csproj +++ b/src/DynamoCoreWpf/DynamoCoreWpf.csproj @@ -189,10 +189,10 @@ - + - + @@ -1857,11 +1857,11 @@ - - + + - - + + diff --git a/tools/DynamoPackagesAnalyzer/DynamoPackagesAnalyzer.csproj b/tools/DynamoPackagesAnalyzer/DynamoPackagesAnalyzer.csproj index 386e1603d1b..c35fc3bb33f 100644 --- a/tools/DynamoPackagesAnalyzer/DynamoPackagesAnalyzer.csproj +++ b/tools/DynamoPackagesAnalyzer/DynamoPackagesAnalyzer.csproj @@ -10,7 +10,7 @@ - + From e41dcb50f5333bbf5d6c93fc817cc46d0143eb22 Mon Sep 17 00:00:00 2001 From: "Aaron (Qilong)" Date: Wed, 9 Oct 2024 16:55:00 -0400 Subject: [PATCH 03/19] Update --- src/DynamoCoreWpf/DynamoCoreWpf.csproj | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/DynamoCoreWpf/DynamoCoreWpf.csproj b/src/DynamoCoreWpf/DynamoCoreWpf.csproj index 5cecb9e8eea..736b4031223 100644 --- a/src/DynamoCoreWpf/DynamoCoreWpf.csproj +++ b/src/DynamoCoreWpf/DynamoCoreWpf.csproj @@ -1857,11 +1857,9 @@ - - + - - + From 9ab1f816624c7be713fa51f209bf86173c0f8d69 Mon Sep 17 00:00:00 2001 From: "Aaron (Qilong)" Date: Wed, 9 Oct 2024 17:34:33 -0400 Subject: [PATCH 04/19] Update --- extern/TuneUp/pkg.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/TuneUp/pkg.json b/extern/TuneUp/pkg.json index 063e15637fa..0f8db1adc92 100644 --- a/extern/TuneUp/pkg.json +++ b/extern/TuneUp/pkg.json @@ -1 +1 @@ -{"license":"","file_hash":null,"name":"TuneUp","version":"1.0.7","description":"*** THE TUNEUP EXTENSION USES NEW API FEATURES THAT ARE ONLY AVAILABLE IN DYNAMO VERSION 2.5 OR ABOVE ***\r\n\r\nTuneUp is in beta and is a view extension for analyzing the performance of Dynamo graphs. TuneUp allows you to see overall graph execution time, per-node execution time, and other helpful information about what's happening under the hood, e.g. nodes run in the current execution v.s. nodes run in the previous execution (which are skipped this run for optimization/ caching). Read more here: https://dynamobim.org/tuneup-extension-explore-your-node-and-graph-execution-times/ \r\n\r\nKnown issues:\r\n1. TuneUp does not work with .dyfs (custom nodes) yet.\r\n2.TuneUp binaries are not semantically versioned and are not intended to be built on top of as an API. Do not treat these binaries like DynamoCore.\r\n3. TuneUp requires Dynamo 2.5 or higher for access to new extension APIs.\r\n4. When user have TuneUp open, after switching workspace in Dynamo, the first graph run does not give execution time and nodes order.","group":"","keywords":["profiler","tuneup"],"dependencies":[],"contents":"","engine_version":"2.1.0.7733","engine":"dynamo","engine_metadata":"","site_url":"https://dynamobim.org/","repository_url":"https://github.com/DynamoDS/TuneUp","contains_binaries":true,"node_libraries":[]} \ No newline at end of file +{"license":"MIT","file_hash":null,"name":"TuneUp","version":"1.0.12","description":"*** THE TUNEUP EXTENSION USES NEW API FEATURES THAT ARE ONLY AVAILABLE IN DYNAMO VERSION 2.5 OR ABOVE ***\r\n\r\nTuneUp is in beta and is a view extension for analyzing the performance of Dynamo graphs. TuneUp allows you to see overall graph execution time, per-node execution time, and other helpful information about what\u0027s happening under the hood, e.g. nodes run in the current execution v.s. nodes run in the previous execution (which are skipped this run for optimization/ caching). Read more here: https://dynamobim.org/tuneup-extension-explore-your-node-and-graph-execution-times/ \r\n\r\nKnown issues:\r\n1. TuneUp does not work with .dyfs (custom nodes) yet.\r\n2.TuneUp binaries are not semantically versioned and are not intended to be built on top of as an API. Do not treat these binaries like DynamoCore.\r\n3. TuneUp requires Dynamo 3.0 or higher for access to new extension APIs.\r\n4. When user have TuneUp open, after switching workspace in Dynamo, the first graph run does not give execution time and nodes order.","group":"","keywords":["profiler","tuneup"],"dependencies":[],"host_dependencies":[],"contents":"","engine_version":"3.0.0.7186","engine":"dynamo","engine_metadata":"","site_url":"https://dynamobim.org/","repository_url":"https://github.com/DynamoDS/TuneUp","contains_binaries":true,"node_libraries":[],"copyright_holder":"DynamoTeam","copyright_year":"2024"} \ No newline at end of file From 9326858b68802bbf8b02233f639ecb3005596b25 Mon Sep 17 00:00:00 2001 From: "Aaron (Qilong)" Date: Wed, 9 Oct 2024 17:37:19 -0400 Subject: [PATCH 05/19] Update --- extern/TuneUp/pkg.json | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/extern/TuneUp/pkg.json b/extern/TuneUp/pkg.json index 0f8db1adc92..f8285f1d27c 100644 --- a/extern/TuneUp/pkg.json +++ b/extern/TuneUp/pkg.json @@ -1 +1,24 @@ -{"license":"MIT","file_hash":null,"name":"TuneUp","version":"1.0.12","description":"*** THE TUNEUP EXTENSION USES NEW API FEATURES THAT ARE ONLY AVAILABLE IN DYNAMO VERSION 2.5 OR ABOVE ***\r\n\r\nTuneUp is in beta and is a view extension for analyzing the performance of Dynamo graphs. TuneUp allows you to see overall graph execution time, per-node execution time, and other helpful information about what\u0027s happening under the hood, e.g. nodes run in the current execution v.s. nodes run in the previous execution (which are skipped this run for optimization/ caching). Read more here: https://dynamobim.org/tuneup-extension-explore-your-node-and-graph-execution-times/ \r\n\r\nKnown issues:\r\n1. TuneUp does not work with .dyfs (custom nodes) yet.\r\n2.TuneUp binaries are not semantically versioned and are not intended to be built on top of as an API. Do not treat these binaries like DynamoCore.\r\n3. TuneUp requires Dynamo 3.0 or higher for access to new extension APIs.\r\n4. When user have TuneUp open, after switching workspace in Dynamo, the first graph run does not give execution time and nodes order.","group":"","keywords":["profiler","tuneup"],"dependencies":[],"host_dependencies":[],"contents":"","engine_version":"3.0.0.7186","engine":"dynamo","engine_metadata":"","site_url":"https://dynamobim.org/","repository_url":"https://github.com/DynamoDS/TuneUp","contains_binaries":true,"node_libraries":[],"copyright_holder":"DynamoTeam","copyright_year":"2024"} \ No newline at end of file +{ + "license": "MIT", + "file_hash": null, + "name": "TuneUp", + "version": "1.0.12", + "description": "*** THE TUNEUP EXTENSION USES NEW API FEATURES THAT ARE ONLY AVAILABLE IN DYNAMO VERSION 2.5 OR ABOVE ***\r\n\r\nTuneUp is in beta and is a view extension for analyzing the performance of Dynamo graphs. TuneUp allows you to see overall graph execution time, per-node execution time, and other helpful information about what\u0027s happening under the hood, e.g. nodes run in the current execution v.s. nodes run in the previous execution (which are skipped this run for optimization/ caching). Read more here: https://dynamobim.org/tuneup-extension-explore-your-node-and-graph-execution-times/ \r\n\r\nKnown issues:\r\n1. TuneUp does not work with .dyfs (custom nodes) yet.\r\n2.TuneUp binaries are not semantically versioned and are not intended to be built on top of as an API. Do not treat these binaries like DynamoCore.\r\n3. TuneUp requires Dynamo 3.0 or higher for access to new extension APIs.\r\n4. When user have TuneUp open, after switching workspace in Dynamo, the first graph run does not give execution time and nodes order.", + "group": "", + "keywords": [ + "profiler", + "tuneup" + ], + "dependencies": [], + "host_dependencies": [], + "contents": "", + "engine_version": "3.0.0.7186", + "engine": "dynamo", + "engine_metadata": "", + "site_url": "https://dynamobim.org/", + "repository_url": "https://github.com/DynamoDS/TuneUp", + "contains_binaries": true, + "node_libraries": [], + "copyright_holder": "DynamoTeam", + "copyright_year": "2024" +} \ No newline at end of file From 610dd6c0f8fbef53d47ac890418d90e6982eeeb4 Mon Sep 17 00:00:00 2001 From: "Aaron (Qilong)" Date: Thu, 10 Oct 2024 10:08:47 -0400 Subject: [PATCH 06/19] Update --- src/DynamoUtilities/CLIWrapper.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/DynamoUtilities/CLIWrapper.cs b/src/DynamoUtilities/CLIWrapper.cs index dcaa6c77974..3cbf521f23f 100644 --- a/src/DynamoUtilities/CLIWrapper.cs +++ b/src/DynamoUtilities/CLIWrapper.cs @@ -13,8 +13,8 @@ namespace Dynamo.Utilities /// internal abstract class CLIWrapper : IDisposable { - protected const string endOfDataToken = @"<<<<>>>>"; - protected const string startofDataToken = @"<<<<>>>>"; + protected const string endOfDataToken = @"<<<<>>>>"; + protected const string startofDataToken = @"<<<<>>>>"; protected readonly Process process = new Process(); protected bool started; internal event Action MessageLogged; From d54352882fad14f292c12db5796b8362db62e840 Mon Sep 17 00:00:00 2001 From: "Aaron (Qilong)" Date: Thu, 10 Oct 2024 10:20:10 -0400 Subject: [PATCH 07/19] add time unit --- src/Tools/DynamoFeatureFlags/FeatureFlagsClient.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Tools/DynamoFeatureFlags/FeatureFlagsClient.cs b/src/Tools/DynamoFeatureFlags/FeatureFlagsClient.cs index df33796a872..d13659c533a 100644 --- a/src/Tools/DynamoFeatureFlags/FeatureFlagsClient.cs +++ b/src/Tools/DynamoFeatureFlags/FeatureFlagsClient.cs @@ -81,7 +81,7 @@ internal FeatureFlagsClient(string userkey, string mobileKey = null, bool testMo if (testMode) { MessageLogged?.Invoke($"LD startup: testmode true, no LD connection. "); - MessageLogged?.Invoke($"LD startup time: {sw.ElapsedMilliseconds} "); + MessageLogged?.Invoke($"LD startup time: {sw.ElapsedMilliseconds} ms "); AllFlags = LdValue.ObjectFrom(new Dictionary { { "TestFlag1",LdValue.Of(true) }, { "TestFlag2", LdValue.Of("I am a string") }, //in tests we want instancing on so we can test it. @@ -94,7 +94,7 @@ internal FeatureFlagsClient(string userkey, string mobileKey = null, bool testMo Init(mobileKey); sw.Stop(); - MessageLogged?.Invoke($"LD startup time: {sw.ElapsedMilliseconds} "); + MessageLogged?.Invoke($"LD startup time: {sw.ElapsedMilliseconds} ms"); //gather all the user's flags and create a top level ldvalue object containing all of them. if (ldClient.Initialized) { From 909be15a1168f203d1b75b27ad669b1f3346ae23 Mon Sep 17 00:00:00 2001 From: "Aaron (Qilong)" Date: Thu, 10 Oct 2024 15:13:17 -0400 Subject: [PATCH 08/19] Update --- extern/TuneUp/extra/TuneUp_ViewExtensionDefinition.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/TuneUp/extra/TuneUp_ViewExtensionDefinition.xml b/extern/TuneUp/extra/TuneUp_ViewExtensionDefinition.xml index 111ed9dfec7..d2d10090c56 100644 --- a/extern/TuneUp/extra/TuneUp_ViewExtensionDefinition.xml +++ b/extern/TuneUp/extra/TuneUp_ViewExtensionDefinition.xml @@ -1,4 +1,4 @@  - ..\Built-In Packages\TuneUp.dll + ..\bin\TuneUp.dll TuneUp.TuneUpViewExtension \ No newline at end of file From a4e10b2f57c7762fde46b8ceae8c4b478192635f Mon Sep 17 00:00:00 2001 From: "Aaron (Qilong)" Date: Thu, 10 Oct 2024 16:08:16 -0400 Subject: [PATCH 09/19] add more logging --- src/DynamoCore/Models/DynamoModel.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/DynamoCore/Models/DynamoModel.cs b/src/DynamoCore/Models/DynamoModel.cs index e05a1dadf02..1914c756cc0 100644 --- a/src/DynamoCore/Models/DynamoModel.cs +++ b/src/DynamoCore/Models/DynamoModel.cs @@ -930,6 +930,7 @@ protected DynamoModel(IStartConfiguration config) if (extensions.Any()) { + Logger.Log("\nLoading Dynamo extensions:"); var startupParams = new StartupParams(this); foreach (var ext in extensions) From 519d66ee939a9e4dc763d658f4e12d42e55a5891 Mon Sep 17 00:00:00 2001 From: "Aaron (Qilong)" Date: Thu, 10 Oct 2024 16:47:23 -0400 Subject: [PATCH 10/19] remove the mandate for Built-In package to include node library --- src/DynamoPackages/PackageLoader.cs | 10 +--------- src/DynamoPackages/Properties/Resources.Designer.cs | 13 ++----------- src/DynamoPackages/Properties/Resources.en-US.resx | 8 ++------ src/DynamoPackages/Properties/Resources.resx | 8 ++------ 4 files changed, 7 insertions(+), 32 deletions(-) diff --git a/src/DynamoPackages/PackageLoader.cs b/src/DynamoPackages/PackageLoader.cs index 68a963adddd..2b619fa52e8 100644 --- a/src/DynamoPackages/PackageLoader.cs +++ b/src/DynamoPackages/PackageLoader.cs @@ -643,16 +643,8 @@ private Version CheckAndGetPackageVersion(string version, string name, string di /// /// path to package location /// package object to check - private void CheckPackageNodeLibraryCertificates(string packageDirectoryPath, Package discoveredPkg) + private static void CheckPackageNodeLibraryCertificates(string packageDirectoryPath, Package discoveredPkg) { - var dllfiles = new System.IO.DirectoryInfo(discoveredPkg.BinaryDirectory).EnumerateFiles("*.dll"); - if (discoveredPkg.Header.node_libraries.Count() == 0 && dllfiles.Count() != 0) - { - Log(String.Format( - String.Format(Resources.InvalidPackageNoNodeLibrariesDefinedInPackageJson, - discoveredPkg.Name, discoveredPkg.RootDirectory))); - } - foreach (var nodeLibraryAssembly in discoveredPkg.Header.node_libraries) { diff --git a/src/DynamoPackages/Properties/Resources.Designer.cs b/src/DynamoPackages/Properties/Resources.Designer.cs index 01e80ea776c..44c2d96fe09 100644 --- a/src/DynamoPackages/Properties/Resources.Designer.cs +++ b/src/DynamoPackages/Properties/Resources.Designer.cs @@ -1,4 +1,4 @@ -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 @@ -19,7 +19,7 @@ namespace DynamoPackages.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class Resources { @@ -105,15 +105,6 @@ public static string InvalidPackageNodeLibraryIsNotSigned { } } - /// - /// Looks up a localized string similar to A package called {0} found at {1} includes dll files but none are defined in node libraries in the package manifest. Ignoring it.. - /// - public static string InvalidPackageNoNodeLibrariesDefinedInPackageJson { - get { - return ResourceManager.GetString("InvalidPackageNoNodeLibrariesDefinedInPackageJson", resourceCulture); - } - } - /// /// Looks up a localized string similar to {0} was not scanned for packages because a preference setting disabled loading from that location.". /// diff --git a/src/DynamoPackages/Properties/Resources.en-US.resx b/src/DynamoPackages/Properties/Resources.en-US.resx index 68931e86a17..36b2910a0d1 100644 --- a/src/DynamoPackages/Properties/Resources.en-US.resx +++ b/src/DynamoPackages/Properties/Resources.en-US.resx @@ -1,4 +1,4 @@ - +