changeset 240:fa6cbf4d8841 v3

refactoring, moving to dotnercore, simplifying promises
author cin
date Tue, 23 Jan 2018 19:39:21 +0300
parents eedf4d834e67
children cbe10ac0731e
files .vscode/launch.json .vscode/settings.json .vscode/tasks.json Implab.Playground2.psess Implab.sln Implab.suo Implab.vsmdi Implab/AbstractEvent.cs Implab/Automaton/DFATable.cs Implab/Automaton/EnumAlphabet.cs Implab/Automaton/RegularExpressions/RegularDFA.cs Implab/CancellationToken.cs Implab/IDeferred.cs Implab/IDeferredT.cs Implab/Implab.csproj Implab/Implab.old.csproj Implab/Properties/AssemblyInfo.cs Local.testsettings TraceAndTestImpact.testsettings omnisharp.json
diffstat 20 files changed, 437 insertions(+), 464 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.vscode/launch.json	Tue Jan 23 19:39:21 2018 +0300
@@ -0,0 +1,39 @@
+{
+    "version": "0.2.0",
+    "configurations": [
+    
+        {
+            "name": "Launch webserver",
+            "type": "mono",
+            "request": "launch",
+            "program": "/usr/lib/mono/4.5/xsp4.exe",
+            "args":[
+                "--root=.",
+                "--port=8081",
+                "-v",
+                "--printlog"
+            ],
+            "preLaunchTask": "build",
+            "cwd": "${workspaceRoot}/Pallada.PoiskAvia.Web",
+            "runtimeExecutable": null,
+            "env": {},
+            "console": "integratedTerminal"
+        },{
+            "name": "Launch model tests",
+            "type": "mono",
+            "request": "launch",
+            "program": "${env:HOME}/.nuget/packages/nunit.consolerunner/3.7.0/tools/nunit3-console.exe",
+            "args": [
+                "${workspaceRoot}/Pallada.PoiskAvia.Model.Test/bin/Debug/net45/Pallada.PoiskAvia.Model.Test.mono.dll",
+                "--where=\"cat==Debug\"",
+                "--labels='On'",
+                "--inprocess",
+                "--workers=1"
+            ],
+            "preLaunchTask": "build",
+            "console": "internalConsole",
+            "internalConsoleOptions": "openOnSessionStart",
+            "cwd": "${workspaceRoot}/Pallada.PoiskAvia.Model.Test/"
+        }
+    ]
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.vscode/settings.json	Tue Jan 23 19:39:21 2018 +0300
@@ -0,0 +1,13 @@
+// Поместите параметры в этот файл, чтобы перезаписать параметры по умолчанию и пользовательские параметры.
+{
+    "files.exclude": {
+        "**/.git": true,
+        "**/.svn": true,
+        "**/.hg": true,
+        "**/CVS": true,
+        "**/.DS_Store": true,
+        "**/bin": true,
+        "**/obj": true
+    },
+    "omnisharp.useMono": true
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.vscode/tasks.json	Tue Jan 23 19:39:21 2018 +0300
@@ -0,0 +1,55 @@
+{
+    // See https://go.microsoft.com/fwlink/?LinkId=733558
+    // for the documentation about the tasks.json format
+    "version": "0.1.0",
+    "command": "msbuild",
+    "args": [
+        // Ask msbuild to generate full paths for file names.
+        "/property:GenerateFullPaths=true"
+    ],
+    "taskSelector": "/t:",
+    "showOutput": "silent",
+    "tasks": [
+        {
+            "taskName": "build",
+            "suppressTaskName": true,
+            // Show the output window only if unrecognized errors occur.
+            "showOutput": "always",
+            // Use the standard MS compiler pattern to detect errors, warnings and infos
+            "problemMatcher": "$msCompile",
+
+            "args" : [
+                "/t:restore;build",
+                "/p:Configuration=DebugMono",
+                "Pallada.PoiskAvia.mono.sln"
+            ]
+        },
+        {
+            "taskName": "clean",
+            // Show the output window only if unrecognized errors occur.
+            "showOutput": "always",
+            // Use the standard MS compiler pattern to detect errors, warnings and infos
+            "problemMatcher": "$msCompile",
+
+            "args" : [
+                "/p:Configuration=DebugMono",
+                "Pallada.PoiskAvia.mono.sln"
+            ]
+        },
+        {
+            "taskName": "runtests",
+            "isTestCommand": true,
+            "suppressTaskName": true,
+            // Show the output window only if unrecognized errors occur.
+            "showOutput": "always",
+            // Use the standard MS compiler pattern to detect errors, warnings and infos
+            "problemMatcher": "$msCompile",
+
+            "args" : [
+                "/t:runtests",
+                "/p:Configuration=DebugMono",
+                "Pallada.PoiskAvia.mono.sln"
+            ]
+        }
+    ]
+}
\ No newline at end of file
--- a/Implab.Playground2.psess	Wed Dec 13 19:54:45 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<VSPerformanceSession Version="1.00">
-  <Options>
-    <Solution>Implab.sln</Solution>
-    <CollectionMethod>Sampling</CollectionMethod>
-    <AllocationMethod>None</AllocationMethod>
-    <AddReport>true</AddReport>
-    <ResourceBasedAnalysisSelected>true</ResourceBasedAnalysisSelected>
-    <UniqueReport>Timestamp</UniqueReport>
-    <SamplingMethod>Cycles</SamplingMethod>
-    <CycleCount>50000</CycleCount>
-    <PageFaultCount>10</PageFaultCount>
-    <SysCallCount>10</SysCallCount>
-    <SamplingCounter Name="" ReloadValue="00000000000f4240" DisplayName="" />
-    <RelocateBinaries>false</RelocateBinaries>
-    <HardwareCounters EnableHWCounters="false" />
-    <EtwSettings />
-    <PdhSettings>
-      <PdhCountersEnabled>false</PdhCountersEnabled>
-      <PdhCountersRate>500</PdhCountersRate>
-      <PdhCounters>
-        <PdhCounter>\Память\Обмен страниц/с</PdhCounter>
-        <PdhCounter>\Процессор(_Total)\% загруженности процессора</PdhCounter>
-        <PdhCounter>\Физический диск(_Total)\Средняя длина очереди диска</PdhCounter>
-      </PdhCounters>
-    </PdhSettings>
-  </Options>
-  <ExcludeSmallFuncs>true</ExcludeSmallFuncs>
-  <InteractionProfilingEnabled>false</InteractionProfilingEnabled>
-  <JScriptProfilingEnabled>false</JScriptProfilingEnabled>
-  <PreinstrumentEvent>
-    <InstrEventExclude>false</InstrEventExclude>
-  </PreinstrumentEvent>
-  <PostinstrumentEvent>
-    <InstrEventExclude>false</InstrEventExclude>
-  </PostinstrumentEvent>
-  <Binaries>
-    <ProjBinary>
-      <Path>Implab.Playground\obj\Debug\Implab.Playground.exe</Path>
-      <ArgumentTimestamp>01/01/0001 00:00:00</ArgumentTimestamp>
-      <Instrument>true</Instrument>
-      <Sample>true</Sample>
-      <ExternalWebsite>false</ExternalWebsite>
-      <InteractionProfilingEnabled>false</InteractionProfilingEnabled>
-      <IsLocalJavascript>false</IsLocalJavascript>
-      <IsWindowsStoreApp>false</IsWindowsStoreApp>
-      <IsWWA>false</IsWWA>
-      <LaunchProject>true</LaunchProject>
-      <OverrideProjectSettings>false</OverrideProjectSettings>
-      <LaunchMethod>Executable</LaunchMethod>
-      <ExecutablePath>Implab.Playground\bin\Debug\Implab.Playground.exe</ExecutablePath>
-      <StartupDirectory>Implab.Playground\bin\Debug\</StartupDirectory>
-      <Arguments>
-      </Arguments>
-      <NetAppHost>IIS</NetAppHost>
-      <NetBrowser>InternetExplorer</NetBrowser>
-      <ExcludeSmallFuncs>true</ExcludeSmallFuncs>
-      <JScriptProfilingEnabled>false</JScriptProfilingEnabled>
-      <PreinstrumentEvent>
-        <InstrEventExclude>false</InstrEventExclude>
-      </PreinstrumentEvent>
-      <PostinstrumentEvent>
-        <InstrEventExclude>false</InstrEventExclude>
-      </PostinstrumentEvent>
-      <ProjRef>{100DFEB0-75BE-436F-ADDF-1F46EF433F46}|Implab.Playground\Implab.Playground.csproj</ProjRef>
-      <ProjPath>Implab.Playground\Implab.Playground.csproj</ProjPath>
-      <ProjName>Implab.Playground</ProjName>
-    </ProjBinary>
-  </Binaries>
-</VSPerformanceSession>
\ No newline at end of file
--- a/Implab.sln	Wed Dec 13 19:54:45 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Implab", "Implab\Implab.csproj", "{F550F1F8-8746-4AD0-9614-855F4C4B7F05}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{CE8D8D18-437A-445C-B662-4C2CE79A76F6}"
-	ProjectSection(SolutionItems) = preProject
-		Implab.vsmdi = Implab.vsmdi
-		Local.testsettings = Local.testsettings
-		TraceAndTestImpact.testsettings = TraceAndTestImpact.testsettings
-	EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Implab.Test", "Implab.Test\Implab.Test.csproj", "{63F92C0C-61BF-48C0-A377-8D67C3C661D0}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Implab.Format.Test", "Implab.Format.Test\Implab.Format.Test.csproj", "{4D364996-7ECD-4193-8F90-F223FFEA49DA}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Implab.Playground", "Implab.Playground\Implab.Playground.csproj", "{100DFEB0-75BE-436F-ADDF-1F46EF433F46}"
-EndProject
-Global
-	GlobalSection(Performance) = preSolution
-		HasPerformanceSessions = true
-	EndGlobalSection
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug 4.5|Any CPU = Debug 4.5|Any CPU
-		Debug|Any CPU = Debug|Any CPU
-		Release 4.5|Any CPU = Release 4.5|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{F550F1F8-8746-4AD0-9614-855F4C4B7F05}.Debug 4.5|Any CPU.ActiveCfg = Debug|Any CPU
-		{F550F1F8-8746-4AD0-9614-855F4C4B7F05}.Debug 4.5|Any CPU.Build.0 = Debug|Any CPU
-		{F550F1F8-8746-4AD0-9614-855F4C4B7F05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F550F1F8-8746-4AD0-9614-855F4C4B7F05}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{F550F1F8-8746-4AD0-9614-855F4C4B7F05}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU
-		{F550F1F8-8746-4AD0-9614-855F4C4B7F05}.Release 4.5|Any CPU.Build.0 = Release|Any CPU
-		{F550F1F8-8746-4AD0-9614-855F4C4B7F05}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{F550F1F8-8746-4AD0-9614-855F4C4B7F05}.Release|Any CPU.Build.0 = Release|Any CPU
-		{63F92C0C-61BF-48C0-A377-8D67C3C661D0}.Debug 4.5|Any CPU.ActiveCfg = Debug 4.5|Any CPU
-		{63F92C0C-61BF-48C0-A377-8D67C3C661D0}.Debug 4.5|Any CPU.Build.0 = Debug 4.5|Any CPU
-		{63F92C0C-61BF-48C0-A377-8D67C3C661D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{63F92C0C-61BF-48C0-A377-8D67C3C661D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{63F92C0C-61BF-48C0-A377-8D67C3C661D0}.Release 4.5|Any CPU.ActiveCfg = Release 4.5|Any CPU
-		{63F92C0C-61BF-48C0-A377-8D67C3C661D0}.Release 4.5|Any CPU.Build.0 = Release 4.5|Any CPU
-		{63F92C0C-61BF-48C0-A377-8D67C3C661D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{63F92C0C-61BF-48C0-A377-8D67C3C661D0}.Release|Any CPU.Build.0 = Release|Any CPU
-		{4D364996-7ECD-4193-8F90-F223FFEA49DA}.Debug 4.5|Any CPU.ActiveCfg = Debug|Any CPU
-		{4D364996-7ECD-4193-8F90-F223FFEA49DA}.Debug 4.5|Any CPU.Build.0 = Debug|Any CPU
-		{4D364996-7ECD-4193-8F90-F223FFEA49DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{4D364996-7ECD-4193-8F90-F223FFEA49DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{4D364996-7ECD-4193-8F90-F223FFEA49DA}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU
-		{4D364996-7ECD-4193-8F90-F223FFEA49DA}.Release 4.5|Any CPU.Build.0 = Release|Any CPU
-		{4D364996-7ECD-4193-8F90-F223FFEA49DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{4D364996-7ECD-4193-8F90-F223FFEA49DA}.Release|Any CPU.Build.0 = Release|Any CPU
-		{100DFEB0-75BE-436F-ADDF-1F46EF433F46}.Debug 4.5|Any CPU.ActiveCfg = Debug|Any CPU
-		{100DFEB0-75BE-436F-ADDF-1F46EF433F46}.Debug 4.5|Any CPU.Build.0 = Debug|Any CPU
-		{100DFEB0-75BE-436F-ADDF-1F46EF433F46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{100DFEB0-75BE-436F-ADDF-1F46EF433F46}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{100DFEB0-75BE-436F-ADDF-1F46EF433F46}.Release 4.5|Any CPU.ActiveCfg = Release|Any CPU
-		{100DFEB0-75BE-436F-ADDF-1F46EF433F46}.Release 4.5|Any CPU.Build.0 = Release|Any CPU
-		{100DFEB0-75BE-436F-ADDF-1F46EF433F46}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{100DFEB0-75BE-436F-ADDF-1F46EF433F46}.Release|Any CPU.Build.0 = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-	GlobalSection(TestCaseManagementSettings) = postSolution
-		CategoryFile = Implab.vsmdi
-	EndGlobalSection
-EndGlobal
Binary file Implab.suo has changed
--- a/Implab.vsmdi	Wed Dec 13 19:54:45 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
-  <TestList name="Lists of Tests" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
-    <RunConfiguration id="adaa4751-cfb4-4c5f-85cb-0f017ce09812" name="Local" storage="local.testsettings" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  </TestList>
-</TestLists>
\ No newline at end of file
--- a/Implab/AbstractEvent.cs	Wed Dec 13 19:54:45 2017 +0300
+++ b/Implab/AbstractEvent.cs	Tue Jan 23 19:39:21 2018 +0300
@@ -4,7 +4,7 @@
 using System.Reflection;
 
 namespace Implab {
-    public abstract class AbstractEvent<THandler> : ICancellationToken, ICancellable { 
+    public abstract class AbstractEvent<THandler> : ICancellable { 
 
         const int UNRESOLVED_SATE = 0;
         const int TRANSITIONAL_STATE = 1;
@@ -30,8 +30,6 @@
 
         int m_cancelRequest;
         Exception m_cancelationReason;
-        SimpleAsyncQueue<Action<Exception>> m_cancelationHandlers;
-
 
         #region state managment
         bool BeginTransit() {
--- a/Implab/Automaton/DFATable.cs	Wed Dec 13 19:54:45 2017 +0300
+++ b/Implab/Automaton/DFATable.cs	Tue Jan 23 19:39:21 2018 +0300
@@ -311,7 +311,7 @@
                 optimalDFA.Add(t);
         }
 
-        protected string PrintDFA<TInput, TState>(IAlphabet<TInput> inputAlphabet, IAlphabet<TState> stateAlphabet) {
+        /*protected string PrintDFA<TInput, TState>(IAlphabet<TInput> inputAlphabet, IAlphabet<TState> stateAlphabet) {
             Safe.ArgumentNotNull(inputAlphabet, "inputAlphabet");
             Safe.ArgumentNotNull(stateAlphabet, "stateAlphabet");
 
@@ -343,6 +343,6 @@
                     return writer.ToString();
                 }
             }
-        }
+        }*/
     }
 }
--- a/Implab/Automaton/EnumAlphabet.cs	Wed Dec 13 19:54:45 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Globalization;
-using System.Linq;
-using System.Diagnostics.CodeAnalysis;
-
-namespace Implab.Automaton {
-    /// <summary>
-    /// Алфавит символами которого являются элементы перечислений.
-    /// </summary>
-    /// <typeparam name="T">Тип перечислений</typeparam>
-    public class EnumAlphabet<T> : IndexedAlphabetBase<T> where T : struct, IConvertible {
-        [SuppressMessage("Microsoft.Design", "CA1000:DoNotDeclareStaticMembersOnGenericTypes")]
-        static readonly Lazy<T[]> _symbols = new Lazy<T[]>(GetSymbols);
-
-        [SuppressMessage("Microsoft.Design", "CA1000:DoNotDeclareStaticMembersOnGenericTypes")]
-        static readonly Lazy<EnumAlphabet<T>> _fullAlphabet = new Lazy<EnumAlphabet<T>>(CreateEnumAlphabet);
-
-        static EnumAlphabet<T> CreateEnumAlphabet() {
-            var symbols = _symbols.Value;
-
-            if (
-                symbols[symbols.Length - 1].ToInt32(CultureInfo.InvariantCulture) >= symbols.Length
-                || symbols[0].ToInt32(CultureInfo.InvariantCulture) != 0
-            )
-                throw new InvalidOperationException("The specified enumeration must be zero-based and continuously numbered");
-
-            return new EnumAlphabet<T>(symbols.Select(x => x.ToInt32(CultureInfo.InvariantCulture)).ToArray());
-        }
-
-        static T[] GetSymbols() {
-            if (!typeof(T).IsEnum)
-                throw new InvalidOperationException("Invalid generic parameter, enumeration is required");
-
-            if (Enum.GetUnderlyingType(typeof(T)) != typeof(Int32))
-                throw new InvalidOperationException("Only enums based on Int32 are supported");
-            
-            return ((T[])Enum.GetValues(typeof(T)))
-                .OrderBy(x => x.ToInt32(CultureInfo.InvariantCulture))
-                .ToArray();
-        }
-
-        public static EnumAlphabet<T> FullAlphabet {
-            get {
-                return _fullAlphabet.Value;
-            }
-        }
-
-
-        public EnumAlphabet()
-            : base(_symbols.Value.Length) {
-        }
-
-        public EnumAlphabet(int[] map)
-            : base(map) {
-            Debug.Assert(map.Length == _symbols.Value.Length);
-        }
-
-
-        public override int GetSymbolIndex(T symbol) {
-            return symbol.ToInt32(CultureInfo.InvariantCulture);
-        }
-
-    }
-}
--- a/Implab/Automaton/RegularExpressions/RegularDFA.cs	Wed Dec 13 19:54:45 2017 +0300
+++ b/Implab/Automaton/RegularExpressions/RegularDFA.cs	Tue Jan 23 19:39:21 2018 +0300
@@ -77,14 +77,14 @@
             return states.GroupBy(x => m_tags[x] ?? new TTag[0], arrayComparer).Select(g => new HashSet<int>(g));
         }
 
-        public override string ToString() {
+        /*public override string ToString() {
             var states = new MapAlphabet<string>(false, null);
 
             for (int i = 0; i < StateCount; i++)
                 states.DefineSymbol(string.Format("s{0}", i), i);
 
             return string.Format("//[RegularDFA {1} x {2}]\n{0}", PrintDFA(InputAlphabet, states),StateCount, AlphabetSize);
-        }
+        }*/
 
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Implab/CancellationToken.cs	Tue Jan 23 19:39:21 2018 +0300
@@ -0,0 +1,65 @@
+using System;
+using System.Threading;
+using Implab.Parallels;
+
+namespace Implab {
+    public class CancellationToken : ICancellationToken {
+        const int CANCEL_NOT_REQUESTED = 0;
+        const int CANCEL_REQUESTING = 1;
+        const int CANCEL_REQUESTED = 2;
+
+        volatile int m_state = CANCEL_NOT_REQUESTED;
+
+        Action<Exception> m_handler;
+
+        Parallels.SimpleAsyncQueue<Action<Exception>> m_handlers;
+
+        public bool IsCancellationRequested {
+            get { return m_state == CANCEL_REQUESTED; }
+        }
+
+        public Exception CancellationReason {
+            get; set;
+        }
+
+        public void CancellationRequested(Action<Exception> handler) {
+            Safe.ArgumentNotNull(handler, nameof(handler));
+            if (IsCancellationRequested) {
+                handler(CancellationReason);
+            } else {
+                EnqueueHandler(handler);
+                if (IsCancellationRequested && TryDequeueHandler(out handler))
+                    handler(CancellationReason);
+            }
+        }
+
+        bool TryDequeueHandler(out Action<Exception> handler) {
+            handler = Interlocked.Exchange(ref m_handler, null);
+            if (handler != null)
+                return true;
+            else if (m_handlers != null)
+                return m_handlers.TryDequeue(out handler);
+            else
+                return false;
+        }
+
+        void EnqueueHandler(Action<Exception> handler) {
+            if (Interlocked.CompareExchange(ref m_handler, handler, null) != null) {
+                if (m_handlers == null)
+                    // compare-exchange will fprotect from loosing already created queue
+                    Interlocked.CompareExchange(ref m_handlers, new SimpleAsyncQueue<Action<Exception>>(), null);
+                m_handlers.Enqueue(handler);
+            }
+        }
+
+        void RequestCancellation(Exception reason) {
+            if (Interlocked.CompareExchange(ref m_state, CANCEL_REQUESTING, CANCEL_NOT_REQUESTED) == CANCEL_NOT_REQUESTED) {
+                if (reason == null)
+                    reason = new OperationCanceledException();
+                CancellationReason = reason;
+                m_state = CANCEL_REQUESTED;
+            }
+        }
+        
+    }
+}
\ No newline at end of file
--- a/Implab/IDeferred.cs	Wed Dec 13 19:54:45 2017 +0300
+++ b/Implab/IDeferred.cs	Tue Jan 23 19:39:21 2018 +0300
@@ -4,7 +4,7 @@
     /// <summary>
     /// Deferred result, usually used by asynchronous services as the service part of the promise.
     /// </summary>
-    public interface IDeferred : ICancellationToken {
+    public interface IDeferred {
 
         void Resolve();
 
@@ -19,6 +19,13 @@
         /// <see cref="PromiseTransientException.InnerException"> is used as the reason to reject promise.
         /// </remarks>
         void Reject(Exception error);
+
+        /// <summary>
+        /// Marks current instance as cencelled with the specified reason.
+        /// </summary>
+        /// <param name="reason">The reason for the operation cancellation,
+        /// if not specified the new <see cref="OperationCanceledException"> will be created</param>
+        void SetCancelled(Exception reason);
     }
 }
 
--- a/Implab/IDeferredT.cs	Wed Dec 13 19:54:45 2017 +0300
+++ b/Implab/IDeferredT.cs	Tue Jan 23 19:39:21 2018 +0300
@@ -1,10 +1,12 @@
 using System;
 
 namespace Implab {
-    public interface IDeferred<in T> : ICancellationToken {
+    public interface IDeferred<in T> {
         void Resolve(T value);
 
         void Reject(Exception error);
+
+        void SetCancelled(Exception error);
     }
 }
 
--- a/Implab/Implab.csproj	Wed Dec 13 19:54:45 2017 +0300
+++ b/Implab/Implab.csproj	Tue Jan 23 19:39:21 2018 +0300
@@ -1,189 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project Sdk="Microsoft.NET.Sdk">
+
   <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{F550F1F8-8746-4AD0-9614-855F4C4B7F05}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <RootNamespace>Implab</RootNamespace>
-    <AssemblyName>Implab</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <TargetFrameworkProfile />
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Debug</OutputPath>
-    <DefineConstants>TRACE;DEBUG;NET_4_5</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-    <RunCodeAnalysis>true</RunCodeAnalysis>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>full</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release</OutputPath>
-    <DefineConstants>NET_4_5</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>false</ConsolePause>
-  </PropertyGroup>
-  <PropertyGroup>
-    <SignAssembly>false</SignAssembly>
-  </PropertyGroup>
-  <PropertyGroup>
-    <AssemblyOriginatorKeyFile>implab.snk</AssemblyOriginatorKeyFile>
+    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
+    <FrameworkPathOverride Condition="'$(TargetFramework)'=='net45' and '$(OSTYPE)'=='linux'">/usr/lib/mono/4.5/</FrameworkPathOverride>
   </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Xml" />
-    <Reference Include="mscorlib" />
-    <Reference Include="System.Xml.Linq" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Components\StateChangeEventArgs.cs" />
-    <Compile Include="CustomEqualityComparer.cs" />
-    <Compile Include="Diagnostics\ConsoleTraceListener.cs" />
-    <Compile Include="Diagnostics\LogChannel.cs" />
-    <Compile Include="Diagnostics\LogicalOperation.cs" />
-    <Compile Include="Diagnostics\TextFileListener.cs" />
-    <Compile Include="Diagnostics\Trace.cs" />
-    <Compile Include="Diagnostics\TraceLog.cs" />
-    <Compile Include="Diagnostics\TraceEvent.cs" />
-    <Compile Include="Diagnostics\TraceEventType.cs" />
-    <Compile Include="Diagnostics\TraceSourceAttribute.cs" />
-    <Compile Include="Formats\CharMap.cs" />
-    <Compile Include="Formats\FastInpurScanner.cs" />
-    <Compile Include="Formats\InputScanner.cs" />
-    <Compile Include="Formats\Json\JsonStringScanner.cs" />
-    <Compile Include="Formats\Json\JsonTextScanner.cs" />
-    <Compile Include="ICancellable.cs" />
-    <Compile Include="IProgressHandler.cs" />
-    <Compile Include="IProgressNotifier.cs" />
-    <Compile Include="IPromiseT.cs" />
-    <Compile Include="IPromise.cs" />
-    <Compile Include="IServiceLocator.cs" />
-    <Compile Include="ITaskController.cs" />
-    <Compile Include="Parallels\DispatchPool.cs" />
-    <Compile Include="Parallels\ArrayTraits.cs" />
-    <Compile Include="Parallels\SimpleAsyncQueue.cs" />
-    <Compile Include="Parallels\WorkerPool.cs" />
-    <Compile Include="ProgressInitEventArgs.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Parallels\AsyncPool.cs" />
-    <Compile Include="Safe.cs" />
-    <Compile Include="SyncContextPromise.cs" />
-    <Compile Include="ValueEventArgs.cs" />
-    <Compile Include="PromiseExtensions.cs" />
-    <Compile Include="SyncContextPromiseT.cs" />
-    <Compile Include="Diagnostics\OperationContext.cs" />
-    <Compile Include="Diagnostics\TraceContext.cs" />
-    <Compile Include="Diagnostics\LogEventArgs.cs" />
-    <Compile Include="Diagnostics\LogEventArgsT.cs" />
-    <Compile Include="Diagnostics\Extensions.cs" />
-    <Compile Include="PromiseEventType.cs" />
-    <Compile Include="Parallels\AsyncQueue.cs" />
-    <Compile Include="PromiseT.cs" />
-    <Compile Include="IDeferred.cs" />
-    <Compile Include="IDeferredT.cs" />
-    <Compile Include="Promise.cs" />
-    <Compile Include="PromiseTransientException.cs" />
-    <Compile Include="Parallels\Signal.cs" />
-    <Compile Include="Parallels\SharedLock.cs" />
-    <Compile Include="Diagnostics\ILogWriter.cs" />
-    <Compile Include="Diagnostics\ListenerBase.cs" />
-    <Compile Include="Parallels\BlockingQueue.cs" />
-    <Compile Include="AbstractEvent.cs" />
-    <Compile Include="AbstractPromise.cs" />
-    <Compile Include="AbstractPromiseT.cs" />
-    <Compile Include="FuncTask.cs" />
-    <Compile Include="FuncTaskBase.cs" />
-    <Compile Include="FuncTaskT.cs" />
-    <Compile Include="ActionChainTaskBase.cs" />
-    <Compile Include="ActionChainTask.cs" />
-    <Compile Include="ActionChainTaskT.cs" />
-    <Compile Include="FuncChainTaskBase.cs" />
-    <Compile Include="FuncChainTask.cs" />
-    <Compile Include="FuncChainTaskT.cs" />
-    <Compile Include="ActionTaskBase.cs" />
-    <Compile Include="ActionTask.cs" />
-    <Compile Include="ActionTaskT.cs" />
-    <Compile Include="ICancellationToken.cs" />
-    <Compile Include="SuccessPromise.cs" />
-    <Compile Include="SuccessPromiseT.cs" />
-    <Compile Include="PromiseAwaiterT.cs" />
-    <Compile Include="PromiseAwaiter.cs" />
-    <Compile Include="Components\ComponentContainer.cs" />
-    <Compile Include="Components\Disposable.cs" />
-    <Compile Include="Components\DisposablePool.cs" />
-    <Compile Include="Components\ObjectPool.cs" />
-    <Compile Include="Components\ServiceLocator.cs" />
-    <Compile Include="Components\IInitializable.cs" />
-    <Compile Include="TaskController.cs" />
-    <Compile Include="Components\App.cs" />
-    <Compile Include="Components\IRunnable.cs" />
-    <Compile Include="Components\ExecutionState.cs" />
-    <Compile Include="Components\RunnableComponent.cs" />
-    <Compile Include="Components\IFactory.cs" />
-    <Compile Include="Automaton\IAlphabet.cs" />
-    <Compile Include="Automaton\ParserException.cs" />
-    <Compile Include="Automaton\IndexedAlphabetBase.cs" />
-    <Compile Include="Automaton\IAlphabetBuilder.cs" />
-    <Compile Include="Automaton\RegularExpressions\AltToken.cs" />
-    <Compile Include="Automaton\RegularExpressions\BinaryToken.cs" />
-    <Compile Include="Automaton\RegularExpressions\CatToken.cs" />
-    <Compile Include="Automaton\RegularExpressions\StarToken.cs" />
-    <Compile Include="Automaton\RegularExpressions\SymbolToken.cs" />
-    <Compile Include="Automaton\RegularExpressions\EmptyToken.cs" />
-    <Compile Include="Automaton\RegularExpressions\Token.cs" />
-    <Compile Include="Automaton\RegularExpressions\IVisitor.cs" />
-    <Compile Include="Automaton\AutomatonTransition.cs" />
-    <Compile Include="Formats\Json\JsonElementContext.cs" />
-    <Compile Include="Formats\Json\JsonElementType.cs" />
-    <Compile Include="Formats\Json\JsonGrammar.cs" />
-    <Compile Include="Formats\Json\JsonReader.cs" />
-    <Compile Include="Formats\Json\JsonScanner.cs" />
-    <Compile Include="Formats\Json\JsonTokenType.cs" />
-    <Compile Include="Formats\Json\JsonWriter.cs" />
-    <Compile Include="Formats\Json\StringTranslator.cs" />
-    <Compile Include="Automaton\MapAlphabet.cs" />
-    <Compile Include="Formats\CharAlphabet.cs" />
-    <Compile Include="Formats\ByteAlphabet.cs" />
-    <Compile Include="Automaton\IDFATable.cs" />
-    <Compile Include="Automaton\IDFATableBuilder.cs" />
-    <Compile Include="Automaton\DFATable.cs" />
-    <Compile Include="Automaton\RegularExpressions\RegularExpressionVisitor.cs" />
-    <Compile Include="Automaton\RegularExpressions\ITaggedDFABuilder.cs" />
-    <Compile Include="Formats\Grammar.cs" />
-    <Compile Include="Automaton\RegularExpressions\EndTokenT.cs" />
-    <Compile Include="Automaton\RegularExpressions\EndToken.cs" />
-    <Compile Include="Automaton\RegularExpressions\RegularExpressionVisitorT.cs" />
-    <Compile Include="Automaton\AutomatonConst.cs" />
-    <Compile Include="Automaton\RegularExpressions\RegularDFA.cs" />
-    <Compile Include="Components\LazyAndWeak.cs" />
-    <Compile Include="AbstractTask.cs" />
-    <Compile Include="AbstractTaskT.cs" />
-    <Compile Include="FailedPromise.cs" />
-    <Compile Include="FailedPromiseT.cs" />
-    <Compile Include="Components\PollingComponent.cs" />
-    <Compile Include="Xml\JsonXmlReader.cs" />
-    <Compile Include="Xml\JsonXmlReaderOptions.cs" />
-    <Compile Include="Xml\JsonXmlReaderPosition.cs" />
-    <Compile Include="Xml\SerializationHelpers.cs" />
-    <Compile Include="Xml\SerializersPool.cs" />
-    <Compile Include="Xml\XmlSimpleAttribute.cs" />
-    <Compile Include="Xml\XmlNameContext.cs" />
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <ItemGroup>
-    <None Include="Implab.nuspec">
-      <SubType>Designer</SubType>
-    </None>
-    <None Include="implab.snk" />
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="license.txt" />
-  </ItemGroup>
-</Project>
\ No newline at end of file
+
+</Project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Implab/Implab.old.csproj	Tue Jan 23 19:39:21 2018 +0300
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{F550F1F8-8746-4AD0-9614-855F4C4B7F05}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <RootNamespace>Implab</RootNamespace>
+    <AssemblyName>Implab</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Debug</OutputPath>
+    <DefineConstants>TRACE;DEBUG;NET_4_5</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+    <RunCodeAnalysis>true</RunCodeAnalysis>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>full</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release</OutputPath>
+    <DefineConstants>NET_4_5</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>false</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>implab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Xml" />
+    <Reference Include="mscorlib" />
+    <Reference Include="System.Xml.Linq" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Components\StateChangeEventArgs.cs" />
+    <Compile Include="CustomEqualityComparer.cs" />
+    <Compile Include="Diagnostics\ConsoleTraceListener.cs" />
+    <Compile Include="Diagnostics\LogChannel.cs" />
+    <Compile Include="Diagnostics\LogicalOperation.cs" />
+    <Compile Include="Diagnostics\TextFileListener.cs" />
+    <Compile Include="Diagnostics\Trace.cs" />
+    <Compile Include="Diagnostics\TraceLog.cs" />
+    <Compile Include="Diagnostics\TraceEvent.cs" />
+    <Compile Include="Diagnostics\TraceEventType.cs" />
+    <Compile Include="Diagnostics\TraceSourceAttribute.cs" />
+    <Compile Include="Formats\CharMap.cs" />
+    <Compile Include="Formats\FastInpurScanner.cs" />
+    <Compile Include="Formats\InputScanner.cs" />
+    <Compile Include="Formats\Json\JsonStringScanner.cs" />
+    <Compile Include="Formats\Json\JsonTextScanner.cs" />
+    <Compile Include="ICancellable.cs" />
+    <Compile Include="IProgressHandler.cs" />
+    <Compile Include="IProgressNotifier.cs" />
+    <Compile Include="IPromiseT.cs" />
+    <Compile Include="IPromise.cs" />
+    <Compile Include="IServiceLocator.cs" />
+    <Compile Include="ITaskController.cs" />
+    <Compile Include="Parallels\DispatchPool.cs" />
+    <Compile Include="Parallels\ArrayTraits.cs" />
+    <Compile Include="Parallels\SimpleAsyncQueue.cs" />
+    <Compile Include="Parallels\WorkerPool.cs" />
+    <Compile Include="ProgressInitEventArgs.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Parallels\AsyncPool.cs" />
+    <Compile Include="Safe.cs" />
+    <Compile Include="SyncContextPromise.cs" />
+    <Compile Include="ValueEventArgs.cs" />
+    <Compile Include="PromiseExtensions.cs" />
+    <Compile Include="SyncContextPromiseT.cs" />
+    <Compile Include="Diagnostics\OperationContext.cs" />
+    <Compile Include="Diagnostics\TraceContext.cs" />
+    <Compile Include="Diagnostics\LogEventArgs.cs" />
+    <Compile Include="Diagnostics\LogEventArgsT.cs" />
+    <Compile Include="Diagnostics\Extensions.cs" />
+    <Compile Include="PromiseEventType.cs" />
+    <Compile Include="Parallels\AsyncQueue.cs" />
+    <Compile Include="PromiseT.cs" />
+    <Compile Include="IDeferred.cs" />
+    <Compile Include="IDeferredT.cs" />
+    <Compile Include="Promise.cs" />
+    <Compile Include="PromiseTransientException.cs" />
+    <Compile Include="Parallels\Signal.cs" />
+    <Compile Include="Parallels\SharedLock.cs" />
+    <Compile Include="Diagnostics\ILogWriter.cs" />
+    <Compile Include="Diagnostics\ListenerBase.cs" />
+    <Compile Include="Parallels\BlockingQueue.cs" />
+    <Compile Include="AbstractEvent.cs" />
+    <Compile Include="AbstractPromise.cs" />
+    <Compile Include="AbstractPromiseT.cs" />
+    <Compile Include="FuncTask.cs" />
+    <Compile Include="FuncTaskBase.cs" />
+    <Compile Include="FuncTaskT.cs" />
+    <Compile Include="ActionChainTaskBase.cs" />
+    <Compile Include="ActionChainTask.cs" />
+    <Compile Include="ActionChainTaskT.cs" />
+    <Compile Include="FuncChainTaskBase.cs" />
+    <Compile Include="FuncChainTask.cs" />
+    <Compile Include="FuncChainTaskT.cs" />
+    <Compile Include="ActionTaskBase.cs" />
+    <Compile Include="ActionTask.cs" />
+    <Compile Include="ActionTaskT.cs" />
+    <Compile Include="ICancellationToken.cs" />
+    <Compile Include="SuccessPromise.cs" />
+    <Compile Include="SuccessPromiseT.cs" />
+    <Compile Include="PromiseAwaiterT.cs" />
+    <Compile Include="PromiseAwaiter.cs" />
+    <Compile Include="Components\ComponentContainer.cs" />
+    <Compile Include="Components\Disposable.cs" />
+    <Compile Include="Components\DisposablePool.cs" />
+    <Compile Include="Components\ObjectPool.cs" />
+    <Compile Include="Components\ServiceLocator.cs" />
+    <Compile Include="Components\IInitializable.cs" />
+    <Compile Include="TaskController.cs" />
+    <Compile Include="Components\App.cs" />
+    <Compile Include="Components\IRunnable.cs" />
+    <Compile Include="Components\ExecutionState.cs" />
+    <Compile Include="Components\RunnableComponent.cs" />
+    <Compile Include="Components\IFactory.cs" />
+    <Compile Include="Automaton\IAlphabet.cs" />
+    <Compile Include="Automaton\ParserException.cs" />
+    <Compile Include="Automaton\IndexedAlphabetBase.cs" />
+    <Compile Include="Automaton\IAlphabetBuilder.cs" />
+    <Compile Include="Automaton\RegularExpressions\AltToken.cs" />
+    <Compile Include="Automaton\RegularExpressions\BinaryToken.cs" />
+    <Compile Include="Automaton\RegularExpressions\CatToken.cs" />
+    <Compile Include="Automaton\RegularExpressions\StarToken.cs" />
+    <Compile Include="Automaton\RegularExpressions\SymbolToken.cs" />
+    <Compile Include="Automaton\RegularExpressions\EmptyToken.cs" />
+    <Compile Include="Automaton\RegularExpressions\Token.cs" />
+    <Compile Include="Automaton\RegularExpressions\IVisitor.cs" />
+    <Compile Include="Automaton\AutomatonTransition.cs" />
+    <Compile Include="Formats\Json\JsonElementContext.cs" />
+    <Compile Include="Formats\Json\JsonElementType.cs" />
+    <Compile Include="Formats\Json\JsonGrammar.cs" />
+    <Compile Include="Formats\Json\JsonReader.cs" />
+    <Compile Include="Formats\Json\JsonScanner.cs" />
+    <Compile Include="Formats\Json\JsonTokenType.cs" />
+    <Compile Include="Formats\Json\JsonWriter.cs" />
+    <Compile Include="Formats\Json\StringTranslator.cs" />
+    <Compile Include="Automaton\MapAlphabet.cs" />
+    <Compile Include="Formats\CharAlphabet.cs" />
+    <Compile Include="Formats\ByteAlphabet.cs" />
+    <Compile Include="Automaton\IDFATable.cs" />
+    <Compile Include="Automaton\IDFATableBuilder.cs" />
+    <Compile Include="Automaton\DFATable.cs" />
+    <Compile Include="Automaton\RegularExpressions\RegularExpressionVisitor.cs" />
+    <Compile Include="Automaton\RegularExpressions\ITaggedDFABuilder.cs" />
+    <Compile Include="Formats\Grammar.cs" />
+    <Compile Include="Automaton\RegularExpressions\EndTokenT.cs" />
+    <Compile Include="Automaton\RegularExpressions\EndToken.cs" />
+    <Compile Include="Automaton\RegularExpressions\RegularExpressionVisitorT.cs" />
+    <Compile Include="Automaton\AutomatonConst.cs" />
+    <Compile Include="Automaton\RegularExpressions\RegularDFA.cs" />
+    <Compile Include="Components\LazyAndWeak.cs" />
+    <Compile Include="AbstractTask.cs" />
+    <Compile Include="AbstractTaskT.cs" />
+    <Compile Include="FailedPromise.cs" />
+    <Compile Include="FailedPromiseT.cs" />
+    <Compile Include="Components\PollingComponent.cs" />
+    <Compile Include="Xml\JsonXmlReader.cs" />
+    <Compile Include="Xml\JsonXmlReaderOptions.cs" />
+    <Compile Include="Xml\JsonXmlReaderPosition.cs" />
+    <Compile Include="Xml\SerializationHelpers.cs" />
+    <Compile Include="Xml\SerializersPool.cs" />
+    <Compile Include="Xml\XmlSimpleAttribute.cs" />
+    <Compile Include="Xml\XmlNameContext.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <ItemGroup>
+    <None Include="Implab.nuspec">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="implab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="license.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
--- a/Implab/Properties/AssemblyInfo.cs	Wed Dec 13 19:54:45 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// Information about this assembly is defined by the following attributes. 
-// Change them to the values specific to your project.
-
-[assembly: AssemblyTitle("Implab")]
-[assembly: AssemblyDescription("Tools")]
-[assembly: AssemblyCompany("Implab.org")]
-[assembly: AssemblyCopyright("Implab")]
-[assembly: AssemblyTrademark("Implab")]
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// The form "{Major}.{Minor}.*" will automatically update the build and revision,
-// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-
-[assembly: AssemblyVersion("2.1.*")]
-[assembly: ComVisible(false)]
-
-// The following attributes are used to specify the signing key for the assembly, 
-// if desired. See the Mono documentation for more information about signing.
-
-//[assembly: AssemblyDelaySign(false)]
-//[assembly: AssemblyKeyFile("")]
-
--- a/Local.testsettings	Wed Dec 13 19:54:45 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<TestSettings name="Local" id="adaa4751-cfb4-4c5f-85cb-0f017ce09812" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
-  <Description>These are default test settings for a local test run.</Description>
-  <Deployment enabled="false" />
-  <Execution>
-    <TestTypeSpecific />
-    <AgentRule name="Execution Agents">
-    </AgentRule>
-  </Execution>
-</TestSettings>
\ No newline at end of file
--- a/TraceAndTestImpact.testsettings	Wed Dec 13 19:54:45 2017 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<TestSettings name="Trace and Test Impact" id="8057bc26-bca1-4225-a128-52e89dd1b7d3" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
-  <Description>These are test settings for Trace and Test Impact.</Description>
-  <Execution>
-    <TestTypeSpecific />
-    <AgentRule name="Execution Agents">
-      <DataCollectors>
-        <DataCollector uri="datacollector://microsoft/SystemInfo/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo.SystemInfoDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="System Information">
-        </DataCollector>
-        <DataCollector uri="datacollector://microsoft/ActionLog/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.ManualTest.ActionLog.ActionLogPlugin, Microsoft.VisualStudio.TestTools.ManualTest.ActionLog, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Actions">
-        </DataCollector>
-        <DataCollector uri="datacollector://microsoft/HttpProxy/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.HttpProxyCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="ASP.NET Client Proxy for IntelliTrace and Test Impact">
-        </DataCollector>
-        <DataCollector uri="datacollector://microsoft/TestImpact/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TestImpactDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Test Impact">
-        </DataCollector>
-        <DataCollector uri="datacollector://microsoft/TraceDebugger/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TraceDebuggerDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="IntelliTrace">
-        </DataCollector>
-      </DataCollectors>
-    </AgentRule>
-  </Execution>
-</TestSettings>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omnisharp.json	Tue Jan 23 19:39:21 2018 +0300
@@ -0,0 +1,54 @@
+{
+    "FormattingOptions": {
+        "NewLine": "\n",
+        "UseTabs": false,
+        "TabSize": 4,
+        "IndentationSize": 4,
+        "SpacingAfterMethodDeclarationName": false,
+        "SpaceWithinMethodDeclarationParenthesis": false,
+        "SpaceBetweenEmptyMethodDeclarationParentheses": false,
+        "SpaceAfterMethodCallName": false,
+        "SpaceWithinMethodCallParentheses": false,
+        "SpaceBetweenEmptyMethodCallParentheses": false,
+        "SpaceAfterControlFlowStatementKeyword": true,
+        "SpaceWithinExpressionParentheses": false,
+        "SpaceWithinCastParentheses": false,
+        "SpaceWithinOtherParentheses": false,
+        "SpaceAfterCast": false,
+        "SpacesIgnoreAroundVariableDeclaration": false,
+        "SpaceBeforeOpenSquareBracket": false,
+        "SpaceBetweenEmptySquareBrackets": false,
+        "SpaceWithinSquareBrackets": false,
+        "SpaceAfterColonInBaseTypeDeclaration": true,
+        "SpaceAfterComma": true,
+        "SpaceAfterDot": false,
+        "SpaceAfterSemicolonsInForStatement": true,
+        "SpaceBeforeColonInBaseTypeDeclaration": true,
+        "SpaceBeforeComma": false,
+        "SpaceBeforeDot": false,
+        "SpaceBeforeSemicolonsInForStatement": false,
+        "SpacingAroundBinaryOperator": "single",
+        "IndentBraces": false,
+        "IndentBlock": true,
+        "IndentSwitchSection": true,
+        "IndentSwitchCaseSection": true,
+        "LabelPositioning": "oneLess",
+        "WrappingPreserveSingleLine": true,
+        "WrappingKeepStatementsOnSingleLine": true,
+        "NewLinesForBracesInTypes": false,
+        "NewLinesForBracesInMethods": false,
+        "NewLinesForBracesInProperties": false,
+        "NewLinesForBracesInAccessors": false,
+        "NewLinesForBracesInAnonymousMethods": false,
+        "NewLinesForBracesInControlBlocks": false,
+        "NewLinesForBracesInAnonymousTypes": false,
+        "NewLinesForBracesInObjectCollectionArrayInitializers": false,
+        "NewLinesForBracesInLambdaExpressionBody": false,
+        "NewLineForElse": false,
+        "NewLineForCatch": false,
+        "NewLineForFinally": false,
+        "NewLineForMembersInObjectInit": false,
+        "NewLineForMembersInAnonymousTypes": false,
+        "NewLineForClausesInQuery": false
+    }
+}
\ No newline at end of file