Ecng.Interop.Windows 1.0.414

There is a newer version of this package available.
See the version list below for details.
dotnet add package Ecng.Interop.Windows --version 1.0.414
                    
NuGet\Install-Package Ecng.Interop.Windows -Version 1.0.414
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Ecng.Interop.Windows" Version="1.0.414" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ecng.Interop.Windows" Version="1.0.414" />
                    
Directory.Packages.props
<PackageReference Include="Ecng.Interop.Windows" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Ecng.Interop.Windows --version 1.0.414
                    
#r "nuget: Ecng.Interop.Windows, 1.0.414"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Ecng.Interop.Windows@1.0.414
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Ecng.Interop.Windows&version=1.0.414
                    
Install as a Cake Addin
#tool nuget:?package=Ecng.Interop.Windows&version=1.0.414
                    
Install as a Cake Tool

Interop.Windows

A .NET library providing Windows-specific interoperability utilities for working with Windows APIs, DDE (Dynamic Data Exchange), and threading operations.

Overview

Interop.Windows provides essential Windows platform utilities including:

  • Windows API helper methods
  • DDE (Dynamic Data Exchange) client and server for Excel integration
  • Threading helpers for STA/MTA apartment state management
  • Windows security and access control management

Installation

This library is part of the Ecng framework and targets .NET 6.0+ with Windows-specific features.

Components

WinApi

Static utility class providing Windows API helper methods.

Get Screen Parameters

Retrieves screen boundaries for a specific window:

using Ecng.Interop;

IntPtr windowHandle = // ... your window handle
WinApi.GetScreenParams(windowHandle, out int left, out int top, out int width, out int height);

Console.WriteLine($"Screen: Left={left}, Top={top}, Width={width}, Height={height}");
Manage Application Auto-Run

Control whether your application starts automatically with Windows:

using Ecng.Interop;

// Enable auto-run
string appName = "MyApplication";
string exePath = @"C:\Program Files\MyApp\MyApp.exe";
WinApi.UpdateAutoRun(appName, exePath, enabled: true);

// Disable auto-run
WinApi.UpdateAutoRun(appName, exePath, enabled: false);

WindowsThreadingHelper

Extension methods for managing thread apartment states and executing code in specific threading contexts.

Execute Code in STA Thread

Run code that requires Single-Threaded Apartment (e.g., clipboard operations, COM interop):

using Ecng.Interop;

// Execute action in STA thread
Action clipboardOperation = () => {
    Clipboard.SetText("Hello from STA thread");
};
clipboardOperation.InvokeAsSTA();

// Execute function in STA thread and get result
Func<string> getClipboardText = () => {
    return Clipboard.GetText();
};
string text = getClipboardText.InvokeAsSTA();
Console.WriteLine($"Clipboard content: {text}");
Set Thread Apartment State
using System.Threading;
using Ecng.Interop;

var thread = new Thread(() => {
    // Your code here
});

// Set to STA
thread.STA().Start();

// Or set to MTA
var mtaThread = new Thread(() => {
    // Your code here
}).MTA();
mtaThread.Start();

WindowsGrandAccess

Manages Windows security permissions for window stations and desktops.

Grant Access to Window Station and Desktop

Temporarily grant a user access to the current window station and desktop (useful for service scenarios):

using Ecng.Interop;

string username = "DOMAIN\\ServiceAccount";

using (var token = WindowsGrandAccess.GrantAccessToWindowStationAndDesktop(username))
{
    // The specified user now has access to the window station and desktop
    // Perform operations that require this access

    // Access is automatically restored when disposed
}

DDE Integration (Excel)

Classes for integrating with Excel via Dynamic Data Exchange protocol.

XlsDdeClient - Send Data to Excel
using Ecng.Interop.Dde;

// Configure DDE settings
var settings = new DdeSettings
{
    Server = "EXCEL",
    Topic = "[Book1.xlsx]Sheet1",
    RowOffset = 0,      // Start from row 0
    ColumnOffset = 0,   // Start from column 0
    ShowHeaders = true  // Include header row
};

// Create and start client
using var client = new XlsDdeClient(settings);
client.Start();

// Prepare data
var data = new List<IList<object>>
{
    // Header row
    new List<object> { "Name", "Value", "Date" },
    // Data rows
    new List<object> { "Item 1", 100, DateTime.Now },
    new List<object> { "Item 2", 200, DateTime.Now }
};

// Send data to Excel
client.Poke(data);

// Clean up
client.Stop();
XlsDdeServer - Receive Data from Excel
using Ecng.Interop.Dde;

// Create server with callbacks
var server = new XlsDdeServer(
    service: "MyDdeService",
    poke: (topic, rows) => {
        Console.WriteLine($"Received data for topic: {topic}");
        foreach (var row in rows)
        {
            foreach (var cell in row)
            {
                Console.Write($"{cell}\t");
            }
            Console.WriteLine();
        }
    },
    error: (ex) => {
        Console.WriteLine($"DDE Error: {ex.Message}");
    }
);

// Start the server
server.Start();

// Server is now listening for Excel to send data
// Keep application running...

// When done
server.Dispose();
DdeSettings Configuration
using Ecng.Interop.Dde;
using Ecng.Serialization;

var settings = new DdeSettings
{
    Server = "EXCEL",              // DDE server name
    Topic = "[Book1.xlsx]Sheet1",  // Excel workbook and sheet
    RowOffset = 2,                 // Skip first 2 rows
    ColumnOffset = 1,              // Skip first column
    ShowHeaders = false            // Don't include headers
};

// Settings can be persisted
var storage = new SettingsStorage();
settings.Save(storage);

// And loaded later
var loadedSettings = new DdeSettings();
loadedSettings.Load(storage);

// Clone settings
var clonedSettings = settings.Clone();

Usage Examples

Complete Excel DDE Data Export

using Ecng.Interop.Dde;

public class ExcelExporter
{
    private XlsDdeClient _client;

    public void Initialize()
    {
        var settings = new DdeSettings
        {
            Server = "EXCEL",
            Topic = "[Report.xlsx]Data",
            ShowHeaders = true
        };

        _client = new XlsDdeClient(settings);
        _client.Start();
    }

    public void ExportData(IEnumerable<DataRow> dataRows)
    {
        var excelData = new List<IList<object>>
        {
            // Headers
            new List<object> { "ID", "Name", "Price", "Quantity" }
        };

        // Add data rows
        foreach (var row in dataRows)
        {
            excelData.Add(new List<object>
            {
                row.Id,
                row.Name,
                row.Price,
                row.Quantity
            });
        }

        _client.Poke(excelData);
    }

    public void Cleanup()
    {
        _client?.Stop();
        _client?.Dispose();
    }
}

Windows Service with Clipboard Access

using Ecng.Interop;

public class WindowsService
{
    public string GetClipboardContent()
    {
        // Services run in non-interactive sessions
        // Use STA thread to access clipboard
        return new Func<string>(() =>
        {
            try
            {
                return Clipboard.GetText();
            }
            catch
            {
                return string.Empty;
            }
        }).InvokeAsSTA();
    }

    public void SetClipboardContent(string text)
    {
        new Action(() =>
        {
            Clipboard.SetText(text);
        }).InvokeAsSTA();
    }
}

Requirements

  • .NET 6.0 or later
  • Windows operating system
  • For DDE functionality: Microsoft Excel or compatible DDE server
  • Dependencies:
    • Ecng.Common
    • Ecng.Collections
    • Ecng.Serialization
    • NDde (for DDE support)
    • Windows.Win32 (for P/Invoke)

Platform Support

This library is Windows-specific and requires:

  • Target framework: net6.0-windows or net10.0-windows
  • Windows Forms references for some functionality
  • Windows Registry access for auto-run features

Notes

  • DDE is a legacy protocol; consider modern alternatives for new applications
  • STA thread invocation creates new threads; use sparingly for performance-critical code
  • Window station access modifications require appropriate Windows permissions
  • Always dispose of DDE clients and servers properly to release resources

Thread Safety

  • WinApi: Thread-safe (static methods)
  • WindowsThreadingHelper: Thread-safe (creates new threads)
  • XlsDdeClient: Not thread-safe; use one instance per thread or synchronize access
  • XlsDdeServer: Thread-safe internally; callbacks are dispatched on dedicated threads

License

Part of the Ecng framework. See the main repository for licensing information.

Product Compatible and additional computed target framework versions.
.NET net6.0-windows7.0 is compatible.  net7.0-windows was computed.  net8.0-windows was computed.  net9.0-windows was computed.  net10.0-windows was computed.  net10.0-windows7.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Ecng.Interop.Windows:

Package Downloads
StockSharp.Xaml

Misc graphical components. More info on web site https://stocksharp.com/store/

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.419 86 2/1/2026
1.0.418 92 1/26/2026
1.0.417 85 1/26/2026
1.0.416 92 1/22/2026
1.0.415 98 1/22/2026
1.0.414 92 1/19/2026
1.0.413 93 1/19/2026
1.0.412 88 1/18/2026
1.0.411 88 1/18/2026
1.0.410 97 1/16/2026
1.0.409 97 1/14/2026
1.0.408 96 1/13/2026
1.0.407 93 1/13/2026
1.0.406 106 1/9/2026
1.0.405 102 1/9/2026
1.0.404 99 1/9/2026
1.0.403 102 1/8/2026
1.0.402 100 1/4/2026
1.0.401 102 1/1/2026
1.0.400 108 12/31/2025
1.0.399 113 12/30/2025
1.0.398 99 12/30/2025
1.0.397 101 12/29/2025
1.0.396 107 12/26/2025
1.0.395 102 12/26/2025
1.0.394 105 12/26/2025
1.0.393 123 12/26/2025
1.0.392 190 12/25/2025
1.0.391 194 12/25/2025
1.0.390 190 12/22/2025
1.0.389 171 12/21/2025
1.0.388 217 12/19/2025
1.0.387 254 12/19/2025
1.0.386 282 12/17/2025
1.0.385 265 12/15/2025
1.0.384 260 12/15/2025
1.0.383 234 12/14/2025
1.0.382 138 12/12/2025
1.0.381 143 12/12/2025
1.0.380 134 12/12/2025
1.0.379 138 12/12/2025
1.0.378 150 12/12/2025
1.0.377 693 12/2/2025
1.0.376 706 12/2/2025
1.0.375 693 12/2/2025
1.0.374 283 11/30/2025
1.0.373 151 11/29/2025
1.0.372 150 11/28/2025
1.0.371 159 11/28/2025
1.0.370 212 11/27/2025
1.0.369 219 11/24/2025
1.0.368 221 11/24/2025
1.0.367 216 11/23/2025
1.0.366 194 11/23/2025
1.0.365 234 11/22/2025
1.0.364 436 11/20/2025
1.0.363 436 11/18/2025
1.0.362 425 11/18/2025
1.0.361 319 11/13/2025
1.0.360 309 11/13/2025
1.0.359 272 11/10/2025
1.0.358 175 11/1/2025
1.0.357 218 10/28/2025
1.0.356 222 10/27/2025
1.0.355 216 10/27/2025
1.0.354 145 10/25/2025
1.0.353 176 10/11/2025
1.0.352 187 10/3/2025
1.0.351 224 9/28/2025
1.0.350 225 9/25/2025
1.0.349 2,367 9/2/2025
1.0.348 515 8/30/2025
1.0.347 258 8/30/2025
1.0.346 229 8/19/2025
1.0.345 207 8/15/2025
1.0.344 228 8/14/2025
1.0.343 854 7/16/2025
1.0.342 451 7/14/2025
1.0.341 238 7/13/2025
1.0.340 235 7/13/2025
1.0.339 207 7/12/2025
1.0.338 350 7/8/2025
1.0.337 332 7/4/2025
1.0.336 250 7/2/2025
1.0.335 711 6/16/2025
1.0.334 392 6/9/2025
1.0.333 307 6/8/2025
1.0.332 463 5/21/2025
1.0.331 251 5/17/2025
1.0.330 543 5/12/2025
1.0.329 343 5/12/2025
1.0.328 333 5/12/2025
1.0.327 264 5/11/2025
1.0.326 281 5/11/2025
1.0.325 281 5/11/2025
1.0.324 265 5/11/2025
1.0.323 271 5/11/2025
1.0.322 263 5/11/2025
1.0.321 206 5/10/2025
1.0.320 192 5/10/2025
1.0.319 253 5/6/2025
1.0.318 265 5/2/2025
1.0.317 332 4/17/2025
1.0.316 322 4/15/2025
1.0.315 272 4/12/2025
1.0.314 243 4/12/2025
1.0.313 862 3/22/2025
1.0.312 297 3/20/2025
1.0.311 299 3/20/2025
1.0.310 284 3/19/2025
1.0.309 731 2/26/2025
1.0.308 250 2/26/2025
1.0.307 634 2/6/2025
1.0.306 240 2/6/2025
1.0.305 244 2/6/2025
1.0.304 270 2/6/2025
1.0.303 255 2/5/2025
1.0.302 260 2/5/2025
1.0.301 248 2/5/2025
1.0.300 268 2/3/2025
1.0.299 254 2/2/2025
1.0.298 240 2/1/2025
1.0.297 259 1/31/2025
1.0.296 246 1/30/2025
1.0.295 252 1/26/2025
1.0.294 238 1/21/2025
1.0.293 263 1/20/2025
1.0.292 228 1/20/2025
1.0.291 245 1/19/2025
1.0.290 233 1/19/2025
1.0.289 240 1/14/2025
1.0.288 244 1/12/2025
1.0.287 216 1/12/2025
1.0.286 238 1/12/2025
1.0.285 226 1/12/2025
1.0.284 234 1/10/2025
1.0.283 906 12/30/2024
1.0.282 244 12/27/2024
1.0.281 257 12/19/2024
1.0.280 252 11/20/2024
1.0.279 259 11/19/2024
1.0.278 263 11/19/2024
1.0.277 881 11/18/2024
1.0.276 343 11/7/2024
1.0.275 253 10/31/2024
1.0.274 296 10/19/2024
1.0.273 285 10/19/2024
1.0.272 291 10/19/2024
1.0.271 750 10/13/2024
1.0.270 255 10/12/2024
1.0.269 345 10/9/2024
1.0.268 228 10/9/2024
1.0.267 282 10/5/2024
1.0.266 537 9/18/2024
1.0.265 265 9/17/2024
1.0.264 454 9/4/2024
1.0.263 266 9/3/2024
1.0.262 272 9/3/2024
1.0.261 270 9/1/2024
1.0.260 507 8/23/2024
1.0.259 283 8/22/2024
1.0.258 507 8/8/2024
1.0.257 925 6/12/2024
1.0.256 255 6/12/2024
1.0.255 362 5/28/2024
1.0.254 630 5/4/2024
1.0.253 370 4/23/2024
1.0.252 260 4/21/2024
1.0.251 276 4/14/2024
1.0.250 467 3/28/2024
1.0.249 261 3/17/2024
1.0.248 508 3/9/2024
1.0.247 423 2/23/2024
1.0.246 282 2/23/2024
1.0.245 394 2/18/2024
1.0.244 273 2/18/2024
1.0.243 252 2/16/2024
1.0.242 282 2/16/2024
1.0.241 341 2/13/2024
1.0.240 331 2/8/2024
1.0.239 321 2/5/2024
1.0.238 269 2/4/2024
1.0.237 378 1/23/2024
1.0.236 268 1/23/2024
1.0.235 444 1/12/2024
1.0.234 509 1/2/2024
1.0.233 310 12/29/2023
1.0.232 316 12/17/2023
1.0.231 625 12/15/2023
1.0.230 304 12/15/2023
1.0.229 287 12/15/2023
1.0.228 293 12/13/2023
1.0.227 261 12/13/2023
1.0.226 301 12/10/2023
1.0.225 544 11/18/2023
1.0.224 248 11/18/2023
1.0.223 232 11/18/2023
1.0.222 264 11/17/2023
1.0.221 234 11/12/2023
1.0.220 217 11/12/2023
1.0.219 229 11/10/2023
1.0.218 208 11/10/2023
1.0.217 249 11/9/2023
1.0.216 228 11/9/2023
1.0.215 230 11/9/2023
1.0.214 232 11/3/2023
1.0.213 247 11/1/2023
1.0.212 254 11/1/2023
1.0.211 1,142 9/8/2023
1.0.210 324 9/8/2023
1.0.209 316 9/8/2023
1.0.208 291 9/6/2023
1.0.207 305 9/6/2023
1.0.206 291 9/3/2023
1.0.205 305 8/27/2023
1.0.204 306 8/24/2023
1.0.203 286 8/21/2023
1.0.202 311 8/15/2023
1.0.201 315 8/14/2023
1.0.200 313 8/14/2023
1.0.199 321 8/10/2023
1.0.198 882 7/29/2023
1.0.197 678 7/1/2023
1.0.196 343 6/29/2023
1.0.195 571 5/27/2023
1.0.194 358 5/21/2023
1.0.193 371 5/19/2023
1.0.192 765 5/14/2023
1.0.191 499 5/8/2023
1.0.190 395 5/1/2023
1.0.189 409 4/22/2023
1.0.188 385 4/21/2023
1.0.187 1,075 4/3/2023
1.0.186 462 3/27/2023
1.0.185 465 3/21/2023
1.0.184 471 3/17/2023
1.0.183 431 3/13/2023
1.0.182 1,052 3/6/2023
1.0.181 472 2/26/2023
1.0.180 694 2/21/2023
1.0.179 483 2/20/2023
1.0.178 484 2/15/2023
1.0.177 473 2/14/2023
1.0.176 453 2/14/2023
1.0.175 791 2/9/2023
1.0.174 576 2/7/2023
1.0.173 503 2/4/2023
1.0.172 538 2/3/2023
1.0.171 627 2/2/2023
1.0.170 590 1/30/2023
1.0.169 539 1/18/2023
1.0.168 1,168 12/30/2022
1.0.167 525 12/23/2022
1.0.166 531 12/14/2022
1.0.165 518 12/14/2022
1.0.164 546 12/14/2022
1.0.163 542 12/14/2022
1.0.162 529 12/14/2022
1.0.161 884 12/12/2022
1.0.160 670 12/8/2022
1.0.159 595 12/4/2022
1.0.158 542 12/4/2022
1.0.157 569 11/30/2022
1.0.156 559 11/29/2022
1.0.155 559 11/28/2022
1.0.154 589 11/18/2022
1.0.153 1,085 11/11/2022
1.0.152 591 11/11/2022
1.0.151 581 11/10/2022
1.0.150 617 11/5/2022
1.0.149 623 11/4/2022
1.0.148 801 11/1/2022
1.0.147 943 10/16/2022
1.0.146 704 9/25/2022
1.0.145 688 9/10/2022
1.0.144 690 9/10/2022
1.0.143 1,409 9/8/2022
1.0.142 683 9/8/2022
1.0.141 707 9/8/2022
1.0.140 673 9/4/2022
1.0.139 664 9/4/2022
1.0.138 998 8/24/2022
1.0.137 677 8/8/2022
1.0.136 695 8/8/2022
1.0.135 690 7/26/2022
1.0.134 676 7/26/2022
1.0.133 1,443 7/19/2022
1.0.132 987 7/18/2022
1.0.131 749 7/13/2022
1.0.130 710 7/8/2022
1.0.129 672 6/30/2022
1.0.128 717 6/18/2022
1.0.127 755 6/6/2022
1.0.126 2,346 4/30/2022
1.0.125 757 4/20/2022
1.0.124 746 4/10/2022
1.0.123 726 4/7/2022
1.0.122 744 4/7/2022
1.0.121 728 4/2/2022
1.0.120 1,354 3/29/2022
1.0.119 734 3/27/2022
1.0.118 700 3/27/2022
1.0.117 1,137 2/20/2022
1.0.116 738 2/20/2022
1.0.115 739 2/20/2022
1.0.114 747 2/20/2022
1.0.113 758 2/20/2022
1.0.112 756 2/20/2022
1.0.111 752 2/20/2022
1.0.110 740 2/20/2022
1.0.109 756 2/20/2022
1.0.108 743 2/19/2022
1.0.107 1,675 1/24/2022
1.0.106 1,205 12/29/2021
1.0.105 805 12/20/2021
1.0.104 638 12/13/2021
1.0.103 835 12/7/2021
1.0.102 597 12/7/2021
1.0.101 1,014 12/6/2021
1.0.100 623 12/6/2021
1.0.99 619 12/5/2021
1.0.98 619 12/2/2021
1.0.97 1,316 11/29/2021
1.0.96 813 11/22/2021
1.0.95 662 11/17/2021
1.0.94 630 11/14/2021
1.0.93 872 11/13/2021
1.0.92 676 11/11/2021
1.0.91 587 11/11/2021
1.0.90 580 11/10/2021
1.0.89 606 11/9/2021
1.0.88 907 11/5/2021
1.0.87 668 11/5/2021
1.0.86 637 11/4/2021
1.0.85 624 11/4/2021
1.0.84 694 11/3/2021
1.0.83 714 10/30/2021
1.0.82 973 10/21/2021
1.0.81 768 10/17/2021
1.0.80 798 10/14/2021
1.0.79 673 10/13/2021
1.0.78 637 10/12/2021
1.0.77 714 10/11/2021
1.0.76 632 10/9/2021
1.0.75 751 10/7/2021
1.0.74 694 10/7/2021
1.0.73 612 10/7/2021
1.0.72 681 10/6/2021
1.0.71 678 9/28/2021
1.0.70 1,043 9/23/2021
1.0.69 708 9/11/2021
1.0.68 701 9/10/2021
1.0.67 695 9/9/2021
1.0.66 653 9/8/2021
1.0.65 676 9/8/2021
1.0.64 1,084 9/6/2021
1.0.63 659 8/31/2021
1.0.62 624 8/30/2021
1.0.61 1,827 7/31/2021
1.0.60 691 7/30/2021
1.0.59 729 7/26/2021
1.0.58 1,268 7/5/2021
1.0.57 641 7/1/2021
1.0.56 1,606 6/4/2021
1.0.55 2,034 4/26/2021
1.0.54 1,033 4/19/2021
1.0.53 1,203 4/7/2021
1.0.52 692 4/3/2021
1.0.51 1,327 3/22/2021
1.0.50 1,535 3/4/2021
1.0.49 908 2/26/2021
1.0.48 2,082 2/2/2021
1.0.47 1,013 1/26/2021
1.0.46 834 1/24/2021
1.0.45 714 1/24/2021
1.0.44 758 1/23/2021
1.0.43 1,055 1/20/2021
1.0.42 768 1/20/2021
1.0.41 824 1/18/2021
1.0.40 676 1/18/2021
1.0.39 890 1/16/2021
1.0.38 10,980 12/17/2020
1.0.37 3,026 12/16/2020
1.0.36 4,831 12/14/2020
1.0.35 6,001 12/9/2020
1.0.34 890 12/7/2020
1.0.33 1,070 12/6/2020
1.0.32 951 12/2/2020
1.0.31 903 12/2/2020
1.0.30 3,339 12/1/2020
1.0.29 12,622 11/12/2020
1.0.29-atestpub 676 11/11/2020
1.0.28 2,813 10/11/2020
1.0.27 6,964 9/9/2020
1.0.26 2,194 9/3/2020
1.0.25 2,437 8/20/2020
1.0.24 5,326 8/9/2020
1.0.23 2,292 7/28/2020
1.0.22 2,267 7/19/2020
1.0.21 3,244 7/6/2020
1.0.20 4,702 6/6/2020
1.0.19 2,164 6/4/2020
1.0.18 3,282 5/29/2020
1.0.17 3,323 5/21/2020
1.0.16 1,034 5/17/2020
1.0.15 3,586 5/12/2020
1.0.14 5,779 5/4/2020
1.0.13 1,681 4/24/2020
1.0.12 1,252 4/22/2020
1.0.11 1,236 4/22/2020
1.0.10 1,235 4/21/2020
1.0.9 2,791 4/18/2020
1.0.8 2,441 4/16/2020
1.0.7 1,249 4/16/2020
1.0.6 2,320 4/15/2020
1.0.5 2,563 4/11/2020
1.0.4 2,535 4/3/2020
1.0.3 1,297 4/1/2020
1.0.2 2,454 3/27/2020
1.0.1 2,648 3/22/2020
1.0.0 1,908 3/22/2020