diff --git a/Tools/Sentinel/CommandLine.dll b/Tools/Sentinel/CommandLine.dll
new file mode 100644
index 0000000..d5497ef
Binary files /dev/null and b/Tools/Sentinel/CommandLine.dll differ
diff --git a/Tools/Sentinel/Common.Logging.Core.dll b/Tools/Sentinel/Common.Logging.Core.dll
new file mode 100644
index 0000000..94dcb5d
Binary files /dev/null and b/Tools/Sentinel/Common.Logging.Core.dll differ
diff --git a/Tools/Sentinel/Common.Logging.dll b/Tools/Sentinel/Common.Logging.dll
new file mode 100644
index 0000000..5d57ada
Binary files /dev/null and b/Tools/Sentinel/Common.Logging.dll differ
diff --git a/Tools/Sentinel/Newtonsoft.Json.dll b/Tools/Sentinel/Newtonsoft.Json.dll
new file mode 100644
index 0000000..c07a3b2
Binary files /dev/null and b/Tools/Sentinel/Newtonsoft.Json.dll differ
diff --git a/Tools/Sentinel/NodaTime.dll b/Tools/Sentinel/NodaTime.dll
new file mode 100644
index 0000000..3f26875
Binary files /dev/null and b/Tools/Sentinel/NodaTime.dll differ
diff --git a/Tools/Sentinel/Sentinel.FileMonitor.dll b/Tools/Sentinel/Sentinel.FileMonitor.dll
new file mode 100644
index 0000000..d4d7d4e
Binary files /dev/null and b/Tools/Sentinel/Sentinel.FileMonitor.dll differ
diff --git a/Tools/Sentinel/Sentinel.Interfaces.dll b/Tools/Sentinel/Sentinel.Interfaces.dll
new file mode 100644
index 0000000..669e8bb
Binary files /dev/null and b/Tools/Sentinel/Sentinel.Interfaces.dll differ
diff --git a/Tools/Sentinel/Sentinel.Log4Net.dll b/Tools/Sentinel/Sentinel.Log4Net.dll
new file mode 100644
index 0000000..5c52049
Binary files /dev/null and b/Tools/Sentinel/Sentinel.Log4Net.dll differ
diff --git a/Tools/Sentinel/Sentinel.MSBuild.dll b/Tools/Sentinel/Sentinel.MSBuild.dll
new file mode 100644
index 0000000..e24d5de
Binary files /dev/null and b/Tools/Sentinel/Sentinel.MSBuild.dll differ
diff --git a/Tools/Sentinel/Sentinel.NLog.dll b/Tools/Sentinel/Sentinel.NLog.dll
new file mode 100644
index 0000000..fba900a
Binary files /dev/null and b/Tools/Sentinel/Sentinel.NLog.dll differ
diff --git a/Tools/Sentinel/Sentinel.exe b/Tools/Sentinel/Sentinel.exe
new file mode 100644
index 0000000..621e278
Binary files /dev/null and b/Tools/Sentinel/Sentinel.exe differ
diff --git a/Tools/Sentinel/Sentinel.exe.config b/Tools/Sentinel/Sentinel.exe.config
new file mode 100644
index 0000000..6ff5f37
--- /dev/null
+++ b/Tools/Sentinel/Sentinel.exe.config
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/Sentinel/WpfExtras.dll b/Tools/Sentinel/WpfExtras.dll
new file mode 100644
index 0000000..23866f0
Binary files /dev/null and b/Tools/Sentinel/WpfExtras.dll differ
diff --git a/Tools/Sentinel/nlogudp9998.sntl b/Tools/Sentinel/nlogudp9998.sntl
new file mode 100644
index 0000000..5e7ea0c
--- /dev/null
+++ b/Tools/Sentinel/nlogudp9998.sntl
@@ -0,0 +1,424 @@
+{
+ "$type": "Sentinel.Preferences.UserPreferences, Sentinel",
+ "SelectedDateOption": 0,
+ "SelectedTimeFormatOption": 0,
+ "ConvertUtcTimesToLocalTimeZone": true,
+ "UseArrivalDateTime": false,
+ "SelectedTypeOption": 1,
+ "ShowThreadColumn": false,
+ "ShowSourceColumn": false,
+ "ShowExceptionColumn": false,
+ "UseLazyRebuild": false,
+ "UseStackedLayout": true,
+ "UseTighterRows": true,
+ "DoubleClickToShowExceptions": true,
+ "ShowSourceInformationColumns": false
+}
+~
+{
+ "$type": "Sentinel.Filters.SearchFilter, Sentinel",
+ "Name": "SearchFilter",
+ "Enabled": false,
+ "Pattern": "",
+ "Field": "System",
+ "Mode": "Exact",
+ "Description": "Exact match of in the System field"
+}
+~
+{
+ "$type": "Sentinel.Extractors.SearchExtractor, Sentinel",
+ "Name": "SearchExtractor",
+ "Enabled": false,
+ "Pattern": "",
+ "Field": "System",
+ "Mode": "Exact",
+ "Description": "Exact match of in the System field"
+}
+~
+{
+ "$type": "Sentinel.Filters.FilteringService`1[[Sentinel.Filters.Interfaces.IFilter, Sentinel]], Sentinel",
+ "Filters": {
+ "$type": "System.Collections.ObjectModel.ObservableCollection`1[[Sentinel.Filters.Interfaces.IFilter, Sentinel]], System",
+ "$values": [
+ {
+ "$type": "Sentinel.Filters.StandardFilter, Sentinel",
+ "Name": "Trace",
+ "Enabled": true,
+ "Pattern": "TRACE",
+ "Field": "Type",
+ "Mode": "Exact",
+ "Description": "Exact match of TRACE in the Type field"
+ },
+ {
+ "$type": "Sentinel.Filters.StandardFilter, Sentinel",
+ "Name": "Debug",
+ "Enabled": false,
+ "Pattern": "DEBUG",
+ "Field": "Type",
+ "Mode": "Exact",
+ "Description": "Exact match of DEBUG in the Type field"
+ },
+ {
+ "$type": "Sentinel.Filters.StandardFilter, Sentinel",
+ "Name": "Info",
+ "Enabled": false,
+ "Pattern": "INFO",
+ "Field": "Type",
+ "Mode": "Exact",
+ "Description": "Exact match of INFO in the Type field"
+ },
+ {
+ "$type": "Sentinel.Filters.StandardFilter, Sentinel",
+ "Name": "Warn",
+ "Enabled": false,
+ "Pattern": "WARN",
+ "Field": "Type",
+ "Mode": "Exact",
+ "Description": "Exact match of WARN in the Type field"
+ },
+ {
+ "$type": "Sentinel.Filters.StandardFilter, Sentinel",
+ "Name": "Error",
+ "Enabled": false,
+ "Pattern": "ERROR",
+ "Field": "Type",
+ "Mode": "Exact",
+ "Description": "Exact match of ERROR in the Type field"
+ },
+ {
+ "$type": "Sentinel.Filters.StandardFilter, Sentinel",
+ "Name": "Fatal",
+ "Enabled": false,
+ "Pattern": "FATAL",
+ "Field": "Type",
+ "Mode": "Exact",
+ "Description": "Exact match of FATAL in the Type field"
+ }
+ ]
+ }
+}
+~
+{
+ "$type": "Sentinel.Extractors.ExtractingService`1[[Sentinel.Extractors.Interfaces.IExtractor, Sentinel]], Sentinel",
+ "Extractors": {
+ "$type": "System.Collections.ObjectModel.ObservableCollection`1[[Sentinel.Extractors.Interfaces.IExtractor, Sentinel]], System",
+ "$values": []
+ }
+}
+~
+{
+ "$type": "Sentinel.Highlighters.HighlightingService`1[[Sentinel.Highlighters.Interfaces.IHighlighter, Sentinel]], Sentinel",
+ "Highlighters": {
+ "$type": "System.Collections.ObjectModel.ObservableCollection`1[[Sentinel.Highlighters.Interfaces.IHighlighter, Sentinel]], System",
+ "$values": [
+ {
+ "$type": "Sentinel.Highlighters.StandardHighlighter, Sentinel",
+ "Name": "Trace",
+ "Enabled": true,
+ "Field": "Type",
+ "Mode": "Exact",
+ "Description": "Exact match of TRACE in the Type field",
+ "Pattern": "TRACE",
+ "Style": {
+ "$type": "Sentinel.Highlighters.HighlighterStyle, Sentinel",
+ "Background": "#FFD3D3D3"
+ }
+ },
+ {
+ "$type": "Sentinel.Highlighters.StandardHighlighter, Sentinel",
+ "Name": "Debug",
+ "Enabled": true,
+ "Field": "Type",
+ "Mode": "Exact",
+ "Description": "Exact match of DEBUG in the Type field",
+ "Pattern": "DEBUG",
+ "Style": {
+ "$type": "Sentinel.Highlighters.HighlighterStyle, Sentinel",
+ "Background": "#FF90EE90"
+ }
+ },
+ {
+ "$type": "Sentinel.Highlighters.StandardHighlighter, Sentinel",
+ "Name": "Info",
+ "Enabled": true,
+ "Field": "Type",
+ "Mode": "Exact",
+ "Description": "Exact match of INFO in the Type field",
+ "Pattern": "INFO",
+ "Style": {
+ "$type": "Sentinel.Highlighters.HighlighterStyle, Sentinel",
+ "Background": "#FF0000FF",
+ "Foreground": "#FFFFFFFF"
+ }
+ },
+ {
+ "$type": "Sentinel.Highlighters.StandardHighlighter, Sentinel",
+ "Name": "Warn",
+ "Enabled": true,
+ "Field": "Type",
+ "Mode": "Exact",
+ "Description": "Exact match of WARN in the Type field",
+ "Pattern": "WARN",
+ "Style": {
+ "$type": "Sentinel.Highlighters.HighlighterStyle, Sentinel",
+ "Background": "#FFFFFF00"
+ }
+ },
+ {
+ "$type": "Sentinel.Highlighters.StandardHighlighter, Sentinel",
+ "Name": "Error",
+ "Enabled": true,
+ "Field": "Type",
+ "Mode": "Exact",
+ "Description": "Exact match of ERROR in the Type field",
+ "Pattern": "ERROR",
+ "Style": {
+ "$type": "Sentinel.Highlighters.HighlighterStyle, Sentinel",
+ "Background": "#FFFF0000",
+ "Foreground": "#FFFFFFFF"
+ }
+ },
+ {
+ "$type": "Sentinel.Highlighters.StandardHighlighter, Sentinel",
+ "Name": "Fatal",
+ "Enabled": true,
+ "Field": "Type",
+ "Mode": "Exact",
+ "Description": "Exact match of FATAL in the Type field",
+ "Pattern": "FATAL",
+ "Style": {
+ "$type": "Sentinel.Highlighters.HighlighterStyle, Sentinel",
+ "Background": "#FF000000",
+ "Foreground": "#FFFFFF00"
+ }
+ }
+ ]
+ },
+ "SelectedIndex": -1
+}
+~
+{
+ "$type": "Sentinel.Highlighters.SearchHighlighter, Sentinel",
+ "Highlighter": {
+ "$type": "Sentinel.Highlighters.Highlighter, Sentinel",
+ "Name": "Search",
+ "Enabled": false,
+ "Field": "System",
+ "Mode": "CaseSensitive",
+ "Description": "Case sensitive match of in the System field",
+ "Pattern": "",
+ "Style": {
+ "$type": "Sentinel.Highlighters.HighlighterStyle, Sentinel",
+ "Background": "#FF00FF00",
+ "Foreground": "#FFFF00FF"
+ }
+ },
+ "Field": "System",
+ "Enabled": false,
+ "Mode": "CaseSensitive",
+ "Search": ""
+}
+~
+{
+ "$type": "Sentinel.Classification.ClassifyingService`1[[Sentinel.Classification.Interfaces.IClassifier, Sentinel]], Sentinel",
+ "Classifiers": {
+ "$type": "System.Collections.ObjectModel.ObservableCollection`1[[Sentinel.Classification.Interfaces.IClassifier, Sentinel]], System",
+ "$values": [
+ {
+ "$type": "Sentinel.Classification.Classifier, Sentinel",
+ "Description": "RegEx match of ^\\[SimulationTime\\] (?[^$]+)$ in the Description field",
+ "Enabled": true,
+ "Field": "Description",
+ "Mode": "RegularExpression",
+ "Name": "Timing messages",
+ "Pattern": "^\\[SimulationTime\\] (?[^$]+)$",
+ "Type": "TIMING"
+ },
+ {
+ "$type": "Sentinel.Classification.Classifier, Sentinel",
+ "Description": "RegEx match of Src:'(?[^']+)', Msg:'(?.*)'$ in the Description field",
+ "Enabled": true,
+ "Field": "Description",
+ "Mode": "RegularExpression",
+ "Name": "Smp messages",
+ "Pattern": "Src:'(?[^']+)', Msg:'(?.*)'$",
+ "Type": "TIMING"
+ },
+ {
+ "$type": "Sentinel.Classification.Classifier, Sentinel",
+ "Description": "RegEx match of SIMSAT:'(?[^']+)', Msg:'(?.*)'$ in the Description field",
+ "Enabled": true,
+ "Field": "Description",
+ "Mode": "RegularExpression",
+ "Name": "SimSat messages",
+ "Pattern": "SIMSAT:'(?[^']+)', Msg:'(?.*)'$",
+ "Type": "TIMING"
+ }
+ ]
+ }
+}
+~
+{
+ "$type": "Sentinel.Images.TypeToImageService, Sentinel",
+ "ImageMappings": {
+ "$type": "System.Collections.ObjectModel.ObservableCollection`1[[Sentinel.Images.ImageTypeRecord, Sentinel]], System",
+ "$values": [
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "ERROR",
+ "Quality": 0,
+ "Image": "/Resources/Small/Error.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "ERROR",
+ "Quality": 1,
+ "Image": "/Resources/Medium/Error.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "ERROR",
+ "Quality": 2,
+ "Image": "/Resources/Large/Error.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "WARN",
+ "Quality": 0,
+ "Image": "/Resources/Small/Warning.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "WARN",
+ "Quality": 1,
+ "Image": "/Resources/Medium/Warning.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "WARN",
+ "Quality": 2,
+ "Image": "/Resources/Large/Warning.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "TRACE",
+ "Quality": 0,
+ "Image": "/Resources/Small/Trace.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "TRACE",
+ "Quality": 1,
+ "Image": "/Resources/Medium/Trace.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "TRACE",
+ "Quality": 2,
+ "Image": "/Resources/Large/Trace.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "DEBUG",
+ "Quality": 0,
+ "Image": "/Resources/Small/Debug.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "DEBUG",
+ "Quality": 1,
+ "Image": "/Resources/Medium/Debug.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "DEBUG",
+ "Quality": 2,
+ "Image": "/Resources/Large/Debug.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "INFO",
+ "Quality": 0,
+ "Image": "/Resources/Small/Info.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "INFO",
+ "Quality": 1,
+ "Image": "/Resources/Medium/Info.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "INFO",
+ "Quality": 2,
+ "Image": "/Resources/Large/Info.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "FATAL",
+ "Quality": 0,
+ "Image": "/Resources/Small/Fatal.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "FATAL",
+ "Quality": 1,
+ "Image": "/Resources/Medium/Fatal.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "FATAL",
+ "Quality": 2,
+ "Image": "/Resources/Large/Fatal.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "TIMING",
+ "Quality": 0,
+ "Image": "/Resources/Small/Clock.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "UNKNOWN",
+ "Quality": 0,
+ "Image": "/Resources/Small/Unknown.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "UNKNOWN",
+ "Quality": 1,
+ "Image": "/Resources/Medium/Unknown.png"
+ },
+ {
+ "$type": "Sentinel.Images.ImageTypeRecord, Sentinel",
+ "Name": "UNKNOWN",
+ "Quality": 2,
+ "Image": "/Resources/Large/Unknown.png"
+ }
+ ]
+ }
+}
+~
+{
+ "$type": "Sentinel.Services.SessionManager, Sentinel",
+ "Name": "Untitled",
+ "ProviderSettings": {
+ "$type": "Sentinel.Interfaces.Providers.IProviderSettings[], Sentinel.Interfaces",
+ "$values": [
+ {
+ "$type": "Sentinel.NLog.NetworkSettings, Sentinel.NLog",
+ "Protocol": 0,
+ "Port": 9998,
+ "Summary": "Untitled: Listens on Udp port 9998",
+ "Name": "Untitled",
+ "Info": {
+ "$type": "Sentinel.NLog.ProviderInfo, Sentinel.NLog",
+ "Identifier": "f12581a5-64c0-4b35-91fc-81c9a09c1e0b",
+ "Name": "NLog Viewer Provider",
+ "Description": "Handler for nLog's log4j networking protocol log target."
+ }
+ }
+ ]
+ }
+}
+~