From 5de39273fc6ee64b0b86e52878f769f32ee6a7be Mon Sep 17 00:00:00 2001 From: Pam Lahoud Date: Mon, 23 Sep 2019 11:18:37 -0700 Subject: [PATCH] Restructuring to reflect In-Memory Database --- samples/features/in-memory-database/README.md | 3 + .../in-memory-oltp}/README.md | 0 .../benchmark-order-processing/README.md | 0 .../Disk-Based/Create_Database_DiskBased.sql | 0 .../Disk-Based/Create_Indexes_DiskBased.sql | 0 .../Disk-Based/Create_Tables_DiskBased.sql | 0 .../In-Memory/Create_Database_InMem.sql | 0 .../In-Memory/Create_Tables_InMem.sql | 0 .../DiskBased_StoredProcedures.sql | 0 .../InMem_StoredProcedures.sql | 0 .../in-memory-oltp}/iot-smart-grid/README.md | 0 .../in-memory-oltp}/t-sql-scripts/README.md | 0 .../clustered_columnstore_sample_queries.sql | 0 .../t-sql-scripts/enable-in-memory-oltp.sql | 0 .../sql_in-memory_analytics_sample.sql | 0 .../sql_in-memory_oltp_sample.sql | 0 .../DemoWorkload/App.Config | 68 +- .../DemoWorkload/DemoWorkload.csproj | 412 +++--- .../DemoWorkload/DemoWorkload.ruleset | 472 +++---- .../DemoWorkload/FrmConfig.Designer.cs | 652 ++++----- .../DemoWorkload/FrmConfig.cs | 136 +- .../DemoWorkload/FrmConfig.resx | 998 +++++++------- .../DemoWorkload/FrmMain.Designer.cs | 924 ++++++------- .../DemoWorkload/FrmMain.cs | 1172 ++++++++--------- .../DemoWorkload/FrmMain.resx | 1010 +++++++------- .../DemoWorkload/Program.cs | 60 +- .../DemoWorkload/Properties/AssemblyInfo.cs | 78 +- .../Properties/Resources.Designer.cs | 186 +-- .../DemoWorkload/Properties/Resources.resx | 258 ++-- .../Properties/Settings.Designer.cs | 52 +- .../Properties/Settings.settings | 0 .../DemoWorkload/Resources/SQLBackground.jpg | Bin .../DemoWorkload/Resources/sqlserver.ico | Bin .../DemoWorkload/UIControls.cs | 120 +- .../DemoWorkload/packages.config | 6 +- .../ticket-reservations/InMemoryOLTPDemo.sln | 76 +- .../ticket-reservations/README.md | 158 +-- .../ticket-reservations/Screenshots/1.png | Bin .../TicketReservations.sqlproj | 150 +-- .../Sequences/TicketReservationSequence.sql | 12 +- .../BatchInsertReservations.sql | 56 +- .../dbo/Stored Procedures/Demo_Reset.sql | 22 +- .../InsertReservationDetails.sql | 62 +- .../ReadMultipleReservations.sql | 56 +- .../dbo/Tables/TicketReservationDetail.sql | 44 +- .../wwi-sales-orders/App.config | 0 .../DataGenerator/CancellableTask.cs | 0 .../DataGenerator/DataGenerator.csproj | 0 .../DataGenerator/Properties/AssemblyInfo.cs | 0 .../DataGenerator/SqlDataGenerator.cs | 0 .../SqlDataGeneratorException.cs | 0 .../wwi-sales-orders/README.md | 0 .../wwi-sales-orders/Screenshots/InMemory.png | Bin .../Screenshots/InMemoryWith CCI.png | Bin .../wwi-sales-orders/Screenshots/OnDisk.png | Bin .../WinFormsClient/FrmMain.Designer.cs | 0 .../WinFormsClient/FrmMain.cs | 0 .../WinFormsClient/FrmMain.resx | 0 .../WinFormsClient/Program.cs | 0 .../WinFormsClient/Properties/AssemblyInfo.cs | 0 .../Properties/Resources.Designer.cs | 0 .../WinFormsClient/Properties/Resources.resx | 0 .../Properties/Settings.Designer.cs | 0 .../Properties/Settings.settings | 14 +- .../WinFormsClient/WinFormsClient.csproj | 0 .../scripts/CustomerOrders.sql | Bin .../README.md | 4 + .../DemoWorkload/DemoWorkload.csproj.user | 14 - 68 files changed, 3634 insertions(+), 3641 deletions(-) create mode 100644 samples/features/in-memory-database/README.md rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/README.md (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/benchmark-order-processing/README.md (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Database_DiskBased.sql (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Indexes_DiskBased.sql (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Tables_DiskBased.sql (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/benchmark-order-processing/create-database-and-tables/In-Memory/Create_Database_InMem.sql (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/benchmark-order-processing/create-database-and-tables/In-Memory/Create_Tables_InMem.sql (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/benchmark-order-processing/stored-procedures/DiskBased_StoredProcedures.sql (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/benchmark-order-processing/stored-procedures/InMem_StoredProcedures.sql (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/iot-smart-grid/README.md (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/t-sql-scripts/README.md (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/t-sql-scripts/clustered_columnstore_sample_queries.sql (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/t-sql-scripts/enable-in-memory-oltp.sql (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/t-sql-scripts/sql_in-memory_analytics_sample.sql (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/t-sql-scripts/sql_in-memory_oltp_sample.sql (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/App.Config (98%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/DemoWorkload.csproj (97%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/DemoWorkload.ruleset (97%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/FrmConfig.Designer.cs (97%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/FrmConfig.cs (97%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/FrmConfig.resx (98%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/FrmMain.Designer.cs (98%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/FrmMain.cs (97%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/FrmMain.resx (98%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/Program.cs (98%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/Properties/AssemblyInfo.cs (97%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/Properties/Resources.Designer.cs (97%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/Properties/Resources.resx (98%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/Properties/Settings.Designer.cs (97%) rename samples/features/{in-memory/wwi-sales-orders/WinFormsClient => in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload}/Properties/Settings.settings (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/Resources/SQLBackground.jpg (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/Resources/sqlserver.ico (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/UIControls.cs (97%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/DemoWorkload/packages.config (97%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/InMemoryOLTPDemo.sln (98%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/README.md (98%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/Screenshots/1.png (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/TicketReservations/TicketReservations.sqlproj (98%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/TicketReservations/dbo/Sequences/TicketReservationSequence.sql (95%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/TicketReservations/dbo/Stored Procedures/BatchInsertReservations.sql (96%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/TicketReservations/dbo/Stored Procedures/Demo_Reset.sql (96%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/TicketReservations/dbo/Stored Procedures/InsertReservationDetails.sql (96%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/TicketReservations/dbo/Stored Procedures/ReadMultipleReservations.sql (96%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/ticket-reservations/TicketReservations/dbo/Tables/TicketReservationDetail.sql (97%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/App.config (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/DataGenerator/CancellableTask.cs (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/DataGenerator/DataGenerator.csproj (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/DataGenerator/Properties/AssemblyInfo.cs (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/DataGenerator/SqlDataGenerator.cs (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/DataGenerator/SqlDataGeneratorException.cs (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/README.md (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/Screenshots/InMemory.png (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/Screenshots/InMemoryWith CCI.png (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/Screenshots/OnDisk.png (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/WinFormsClient/FrmMain.Designer.cs (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/WinFormsClient/FrmMain.cs (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/WinFormsClient/FrmMain.resx (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/WinFormsClient/Program.cs (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/WinFormsClient/Properties/AssemblyInfo.cs (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/WinFormsClient/Properties/Resources.Designer.cs (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/WinFormsClient/Properties/Resources.resx (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/WinFormsClient/Properties/Settings.Designer.cs (100%) rename samples/features/{in-memory/ticket-reservations/DemoWorkload => in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient}/Properties/Settings.settings (97%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/WinFormsClient/WinFormsClient.csproj (100%) rename samples/features/{in-memory => in-memory-database/in-memory-oltp}/wwi-sales-orders/scripts/CustomerOrders.sql (100%) create mode 100644 samples/features/in-memory-database/memory-optimized-tempdb-metadata/README.md delete mode 100644 samples/features/in-memory/ticket-reservations/DemoWorkload/DemoWorkload.csproj.user diff --git a/samples/features/in-memory-database/README.md b/samples/features/in-memory-database/README.md new file mode 100644 index 0000000000..317996dd3d --- /dev/null +++ b/samples/features/in-memory-database/README.md @@ -0,0 +1,3 @@ +# In-Memory Database + +[In-Memory Database](https://docs.microsoft.com/sql/relational-databases/in-memory-database) refers to the various features within SQL Server that leverage in-memory technologies. This includes features such as Memory-Optimized TempDB Metadata, Hybrid Buffer Pool, and In-Memory OLTP. diff --git a/samples/features/in-memory/README.md b/samples/features/in-memory-database/in-memory-oltp/README.md similarity index 100% rename from samples/features/in-memory/README.md rename to samples/features/in-memory-database/in-memory-oltp/README.md diff --git a/samples/features/in-memory/benchmark-order-processing/README.md b/samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/README.md similarity index 100% rename from samples/features/in-memory/benchmark-order-processing/README.md rename to samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/README.md diff --git a/samples/features/in-memory/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Database_DiskBased.sql b/samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Database_DiskBased.sql similarity index 100% rename from samples/features/in-memory/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Database_DiskBased.sql rename to samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Database_DiskBased.sql diff --git a/samples/features/in-memory/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Indexes_DiskBased.sql b/samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Indexes_DiskBased.sql similarity index 100% rename from samples/features/in-memory/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Indexes_DiskBased.sql rename to samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Indexes_DiskBased.sql diff --git a/samples/features/in-memory/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Tables_DiskBased.sql b/samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Tables_DiskBased.sql similarity index 100% rename from samples/features/in-memory/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Tables_DiskBased.sql rename to samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/create-database-and-tables/Disk-Based/Create_Tables_DiskBased.sql diff --git a/samples/features/in-memory/benchmark-order-processing/create-database-and-tables/In-Memory/Create_Database_InMem.sql b/samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/create-database-and-tables/In-Memory/Create_Database_InMem.sql similarity index 100% rename from samples/features/in-memory/benchmark-order-processing/create-database-and-tables/In-Memory/Create_Database_InMem.sql rename to samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/create-database-and-tables/In-Memory/Create_Database_InMem.sql diff --git a/samples/features/in-memory/benchmark-order-processing/create-database-and-tables/In-Memory/Create_Tables_InMem.sql b/samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/create-database-and-tables/In-Memory/Create_Tables_InMem.sql similarity index 100% rename from samples/features/in-memory/benchmark-order-processing/create-database-and-tables/In-Memory/Create_Tables_InMem.sql rename to samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/create-database-and-tables/In-Memory/Create_Tables_InMem.sql diff --git a/samples/features/in-memory/benchmark-order-processing/stored-procedures/DiskBased_StoredProcedures.sql b/samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/stored-procedures/DiskBased_StoredProcedures.sql similarity index 100% rename from samples/features/in-memory/benchmark-order-processing/stored-procedures/DiskBased_StoredProcedures.sql rename to samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/stored-procedures/DiskBased_StoredProcedures.sql diff --git a/samples/features/in-memory/benchmark-order-processing/stored-procedures/InMem_StoredProcedures.sql b/samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/stored-procedures/InMem_StoredProcedures.sql similarity index 100% rename from samples/features/in-memory/benchmark-order-processing/stored-procedures/InMem_StoredProcedures.sql rename to samples/features/in-memory-database/in-memory-oltp/benchmark-order-processing/stored-procedures/InMem_StoredProcedures.sql diff --git a/samples/features/in-memory/iot-smart-grid/README.md b/samples/features/in-memory-database/in-memory-oltp/iot-smart-grid/README.md similarity index 100% rename from samples/features/in-memory/iot-smart-grid/README.md rename to samples/features/in-memory-database/in-memory-oltp/iot-smart-grid/README.md diff --git a/samples/features/in-memory/t-sql-scripts/README.md b/samples/features/in-memory-database/in-memory-oltp/t-sql-scripts/README.md similarity index 100% rename from samples/features/in-memory/t-sql-scripts/README.md rename to samples/features/in-memory-database/in-memory-oltp/t-sql-scripts/README.md diff --git a/samples/features/in-memory/t-sql-scripts/clustered_columnstore_sample_queries.sql b/samples/features/in-memory-database/in-memory-oltp/t-sql-scripts/clustered_columnstore_sample_queries.sql similarity index 100% rename from samples/features/in-memory/t-sql-scripts/clustered_columnstore_sample_queries.sql rename to samples/features/in-memory-database/in-memory-oltp/t-sql-scripts/clustered_columnstore_sample_queries.sql diff --git a/samples/features/in-memory/t-sql-scripts/enable-in-memory-oltp.sql b/samples/features/in-memory-database/in-memory-oltp/t-sql-scripts/enable-in-memory-oltp.sql similarity index 100% rename from samples/features/in-memory/t-sql-scripts/enable-in-memory-oltp.sql rename to samples/features/in-memory-database/in-memory-oltp/t-sql-scripts/enable-in-memory-oltp.sql diff --git a/samples/features/in-memory/t-sql-scripts/sql_in-memory_analytics_sample.sql b/samples/features/in-memory-database/in-memory-oltp/t-sql-scripts/sql_in-memory_analytics_sample.sql similarity index 100% rename from samples/features/in-memory/t-sql-scripts/sql_in-memory_analytics_sample.sql rename to samples/features/in-memory-database/in-memory-oltp/t-sql-scripts/sql_in-memory_analytics_sample.sql diff --git a/samples/features/in-memory/t-sql-scripts/sql_in-memory_oltp_sample.sql b/samples/features/in-memory-database/in-memory-oltp/t-sql-scripts/sql_in-memory_oltp_sample.sql similarity index 100% rename from samples/features/in-memory/t-sql-scripts/sql_in-memory_oltp_sample.sql rename to samples/features/in-memory-database/in-memory-oltp/t-sql-scripts/sql_in-memory_oltp_sample.sql diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/App.Config b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/App.Config similarity index 98% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/App.Config rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/App.Config index 71429d91b0..9f74cd91a6 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/App.Config +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/App.Config @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/DemoWorkload.csproj b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/DemoWorkload.csproj similarity index 97% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/DemoWorkload.csproj rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/DemoWorkload.csproj index 922dbce92a..81c1270799 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/DemoWorkload.csproj +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/DemoWorkload.csproj @@ -1,207 +1,207 @@ - - - - Debug - x86 - 8.0.30703 - 2.0 - {2881A3C4-9153-46F2-8196-9929ED9C17D6} - WinExe - Properties - DemoWorkload - DemoWorkload - v4.6 - - - 512 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - DemoWorkload.ruleset - - - x86 - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - DemoWorkload.ruleset - - - true - bin\Debug\ - DEBUG;TRACE - full - AnyCPU - bin\Debug\WindowsFormsApplication2.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - DemoWorkload.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules - false - false - true - - - bin\Release\ - TRACE - true - pdbonly - AnyCPU - bin\Release\WindowsFormsApplication2.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - DemoWorkload.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules - false - false - - - Resources\sqlserver.ico - - - false - - - false - - - - - - - - ..\packages\CircularGauge.1.0.0\Lib\Net40-Client\CircularGauge.dll - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - Form - - - FrmConfig.cs - - - Form - - - FrmMain.cs - - - - - FrmConfig.cs - - - FrmMain.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - - - - - False - Microsoft .NET Framework 4.6 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 - false - - - - - + + + + Debug + x86 + 8.0.30703 + 2.0 + {2881A3C4-9153-46F2-8196-9929ED9C17D6} + WinExe + Properties + DemoWorkload + DemoWorkload + v4.6 + + + 512 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + DemoWorkload.ruleset + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + DemoWorkload.ruleset + + + true + bin\Debug\ + DEBUG;TRACE + full + AnyCPU + bin\Debug\WindowsFormsApplication2.exe.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + DemoWorkload.ruleset + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + true + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + false + true + + + bin\Release\ + TRACE + true + pdbonly + AnyCPU + bin\Release\WindowsFormsApplication2.exe.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + DemoWorkload.ruleset + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + true + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + false + + + Resources\sqlserver.ico + + + false + + + false + + + + + + + + ..\packages\CircularGauge.1.0.0\Lib\Net40-Client\CircularGauge.dll + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + Form + + + FrmConfig.cs + + + Form + + + FrmMain.cs + + + + + FrmConfig.cs + + + FrmMain.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + False + Microsoft .NET Framework 4.6 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + + \ No newline at end of file diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/DemoWorkload.ruleset b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/DemoWorkload.ruleset similarity index 97% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/DemoWorkload.ruleset rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/DemoWorkload.ruleset index 447fe4cb52..579ebe3611 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/DemoWorkload.ruleset +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/DemoWorkload.ruleset @@ -1,237 +1,237 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/FrmConfig.Designer.cs b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmConfig.Designer.cs similarity index 97% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/FrmConfig.Designer.cs rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmConfig.Designer.cs index d51b5199cd..62af6158f4 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/FrmConfig.Designer.cs +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmConfig.Designer.cs @@ -1,327 +1,327 @@ -namespace DemoWorkload -{ - partial class FrmConfig - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmConfig)); - this.LabelReadsPerWrite = new System.Windows.Forms.Label(); - this.ReadsPerWrite = new System.Windows.Forms.NumericUpDown(); - this.LabelRowsPerTran = new System.Windows.Forms.Label(); - this.RowCount = new System.Windows.Forms.NumericUpDown(); - this.LabelRPT = new System.Windows.Forms.Label(); - this.RequestCount = new System.Windows.Forms.NumericUpDown(); - this.lblInstance = new System.Windows.Forms.Label(); - this.tbConnectionString = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.txtMaxTPS = new System.Windows.Forms.TextBox(); - this.lblRunningThread = new System.Windows.Forms.Label(); - this.txtMaxLatch = new System.Windows.Forms.TextBox(); - this.lblServerTran = new System.Windows.Forms.Label(); - this.TransactionCount = new System.Windows.Forms.NumericUpDown(); - this.lblThreadCnt = new System.Windows.Forms.Label(); - this.ThreadCount = new System.Windows.Forms.NumericUpDown(); - this.btnSave = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.ReadsPerWrite)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.RowCount)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.RequestCount)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.TransactionCount)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ThreadCount)).BeginInit(); - this.SuspendLayout(); - // - // LabelReadsPerWrite - // - this.LabelReadsPerWrite.AutoSize = true; - this.LabelReadsPerWrite.BackColor = System.Drawing.Color.Transparent; - this.LabelReadsPerWrite.Location = new System.Drawing.Point(14, 75); - this.LabelReadsPerWrite.Name = "LabelReadsPerWrite"; - this.LabelReadsPerWrite.Size = new System.Drawing.Size(84, 13); - this.LabelReadsPerWrite.TabIndex = 48; - this.LabelReadsPerWrite.Text = "Reads per Write"; - // - // ReadsPerWrite - // - this.ReadsPerWrite.Location = new System.Drawing.Point(152, 73); - this.ReadsPerWrite.Name = "ReadsPerWrite"; - this.ReadsPerWrite.Size = new System.Drawing.Size(99, 20); - this.ReadsPerWrite.TabIndex = 47; - this.ReadsPerWrite.Value = new decimal(new int[] { - 1, - 0, - 0, - 0}); - // - // LabelRowsPerTran - // - this.LabelRowsPerTran.AutoSize = true; - this.LabelRowsPerTran.BackColor = System.Drawing.Color.Transparent; - this.LabelRowsPerTran.Location = new System.Drawing.Point(14, 179); - this.LabelRowsPerTran.Name = "LabelRowsPerTran"; - this.LabelRowsPerTran.Size = new System.Drawing.Size(111, 13); - this.LabelRowsPerTran.TabIndex = 46; - this.LabelRowsPerTran.Text = "Rows per Transaction"; - // - // RowCount - // - this.RowCount.Location = new System.Drawing.Point(151, 177); - this.RowCount.Maximum = new decimal(new int[] { - 5000000, - 0, - 0, - 0}); - this.RowCount.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.RowCount.Name = "RowCount"; - this.RowCount.Size = new System.Drawing.Size(100, 20); - this.RowCount.TabIndex = 45; - this.RowCount.Value = new decimal(new int[] { - 100, - 0, - 0, - 0}); - // - // LabelRPT - // - this.LabelRPT.AutoSize = true; - this.LabelRPT.BackColor = System.Drawing.Color.Transparent; - this.LabelRPT.Location = new System.Drawing.Point(14, 101); - this.LabelRPT.Name = "LabelRPT"; - this.LabelRPT.Size = new System.Drawing.Size(107, 13); - this.LabelRPT.TabIndex = 44; - this.LabelRPT.Text = "Requests per Thread"; - // - // RequestCount - // - this.RequestCount.Location = new System.Drawing.Point(152, 99); - this.RequestCount.Maximum = new decimal(new int[] { - 5000000, - 0, - 0, - 0}); - this.RequestCount.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.RequestCount.Name = "RequestCount"; - this.RequestCount.Size = new System.Drawing.Size(99, 20); - this.RequestCount.TabIndex = 43; - this.RequestCount.Value = new decimal(new int[] { - 100000, - 0, - 0, - 0}); - // - // lblInstance - // - this.lblInstance.AutoSize = true; - this.lblInstance.BackColor = System.Drawing.Color.Transparent; - this.lblInstance.Location = new System.Drawing.Point(14, 217); - this.lblInstance.Name = "lblInstance"; - this.lblInstance.Size = new System.Drawing.Size(91, 13); - this.lblInstance.TabIndex = 42; - this.lblInstance.Text = "Connection String"; - // - // tbConnectionString - // - this.tbConnectionString.Location = new System.Drawing.Point(16, 243); - this.tbConnectionString.Name = "tbConnectionString"; - this.tbConnectionString.Size = new System.Drawing.Size(271, 20); - this.tbConnectionString.TabIndex = 40; - this.tbConnectionString.TextChanged += new System.EventHandler(this.tbInstance_TextChanged); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.BackColor = System.Drawing.Color.Transparent; - this.label3.Location = new System.Drawing.Point(14, 25); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(109, 13); - this.label3.TabIndex = 38; - this.label3.Text = "Max TPS (thousands)"; - // - // txtMaxTPS - // - this.txtMaxTPS.Location = new System.Drawing.Point(152, 22); - this.txtMaxTPS.Name = "txtMaxTPS"; - this.txtMaxTPS.Size = new System.Drawing.Size(99, 20); - this.txtMaxTPS.TabIndex = 37; - this.txtMaxTPS.TabStop = false; - // - // lblRunningThread - // - this.lblRunningThread.AutoSize = true; - this.lblRunningThread.BackColor = System.Drawing.Color.Transparent; - this.lblRunningThread.Location = new System.Drawing.Point(14, 50); - this.lblRunningThread.Name = "lblRunningThread"; - this.lblRunningThread.Size = new System.Drawing.Size(83, 13); - this.lblRunningThread.TabIndex = 36; - this.lblRunningThread.Text = "Max Latch Time"; - // - // txtMaxLatch - // - this.txtMaxLatch.Location = new System.Drawing.Point(152, 47); - this.txtMaxLatch.Name = "txtMaxLatch"; - this.txtMaxLatch.Size = new System.Drawing.Size(99, 20); - this.txtMaxLatch.TabIndex = 35; - this.txtMaxLatch.TabStop = false; - this.txtMaxLatch.Text = "10000"; - // - // lblServerTran - // - this.lblServerTran.AutoSize = true; - this.lblServerTran.BackColor = System.Drawing.Color.Transparent; - this.lblServerTran.Location = new System.Drawing.Point(14, 153); - this.lblServerTran.Name = "lblServerTran"; - this.lblServerTran.Size = new System.Drawing.Size(102, 13); - this.lblServerTran.TabIndex = 34; - this.lblServerTran.Text = "Server Transactions"; - // - // TransactionCount - // - this.TransactionCount.Location = new System.Drawing.Point(152, 151); - this.TransactionCount.Maximum = new decimal(new int[] { - 5000000, - 0, - 0, - 0}); - this.TransactionCount.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.TransactionCount.Name = "TransactionCount"; - this.TransactionCount.Size = new System.Drawing.Size(99, 20); - this.TransactionCount.TabIndex = 29; - this.TransactionCount.Value = new decimal(new int[] { - 1, - 0, - 0, - 0}); - // - // lblThreadCnt - // - this.lblThreadCnt.AutoSize = true; - this.lblThreadCnt.BackColor = System.Drawing.Color.Transparent; - this.lblThreadCnt.Location = new System.Drawing.Point(14, 127); - this.lblThreadCnt.Name = "lblThreadCnt"; - this.lblThreadCnt.Size = new System.Drawing.Size(46, 13); - this.lblThreadCnt.TabIndex = 31; - this.lblThreadCnt.Text = "Threads"; - // - // ThreadCount - // - this.ThreadCount.Location = new System.Drawing.Point(152, 125); - this.ThreadCount.Maximum = new decimal(new int[] { - 200, - 0, - 0, - 0}); - this.ThreadCount.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.ThreadCount.Name = "ThreadCount"; - this.ThreadCount.Size = new System.Drawing.Size(99, 20); - this.ThreadCount.TabIndex = 28; - this.ThreadCount.Value = new decimal(new int[] { - 80, - 0, - 0, - 0}); - // - // btnSave - // - this.btnSave.Location = new System.Drawing.Point(16, 293); - this.btnSave.Name = "btnSave"; - this.btnSave.Size = new System.Drawing.Size(149, 23); - this.btnSave.TabIndex = 49; - this.btnSave.Text = "Save Configuration Values"; - this.btnSave.UseVisualStyleBackColor = true; - this.btnSave.Click += new System.EventHandler(this.btnSave_Click); - // - // FrmConfig - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(310, 332); - this.Controls.Add(this.btnSave); - this.Controls.Add(this.LabelReadsPerWrite); - this.Controls.Add(this.ReadsPerWrite); - this.Controls.Add(this.LabelRowsPerTran); - this.Controls.Add(this.RowCount); - this.Controls.Add(this.LabelRPT); - this.Controls.Add(this.RequestCount); - this.Controls.Add(this.lblInstance); - this.Controls.Add(this.tbConnectionString); - this.Controls.Add(this.label3); - this.Controls.Add(this.txtMaxTPS); - this.Controls.Add(this.lblRunningThread); - this.Controls.Add(this.txtMaxLatch); - this.Controls.Add(this.lblServerTran); - this.Controls.Add(this.TransactionCount); - this.Controls.Add(this.lblThreadCnt); - this.Controls.Add(this.ThreadCount); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "FrmConfig"; - this.Text = "Configuration Settings"; - this.Load += new System.EventHandler(this.ConfigForm_Load); - ((System.ComponentModel.ISupportInitialize)(this.ReadsPerWrite)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.RowCount)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.RequestCount)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.TransactionCount)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ThreadCount)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label LabelReadsPerWrite; - private System.Windows.Forms.NumericUpDown ReadsPerWrite; - private System.Windows.Forms.Label LabelRowsPerTran; - private System.Windows.Forms.NumericUpDown RowCount; - private System.Windows.Forms.Label LabelRPT; - private System.Windows.Forms.NumericUpDown RequestCount; - private System.Windows.Forms.Label lblInstance; - private System.Windows.Forms.TextBox tbConnectionString; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox txtMaxTPS; - private System.Windows.Forms.Label lblRunningThread; - private System.Windows.Forms.TextBox txtMaxLatch; - private System.Windows.Forms.Label lblServerTran; - private System.Windows.Forms.NumericUpDown TransactionCount; - private System.Windows.Forms.Label lblThreadCnt; - private System.Windows.Forms.NumericUpDown ThreadCount; - private System.Windows.Forms.Button btnSave; - } +namespace DemoWorkload +{ + partial class FrmConfig + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmConfig)); + this.LabelReadsPerWrite = new System.Windows.Forms.Label(); + this.ReadsPerWrite = new System.Windows.Forms.NumericUpDown(); + this.LabelRowsPerTran = new System.Windows.Forms.Label(); + this.RowCount = new System.Windows.Forms.NumericUpDown(); + this.LabelRPT = new System.Windows.Forms.Label(); + this.RequestCount = new System.Windows.Forms.NumericUpDown(); + this.lblInstance = new System.Windows.Forms.Label(); + this.tbConnectionString = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.txtMaxTPS = new System.Windows.Forms.TextBox(); + this.lblRunningThread = new System.Windows.Forms.Label(); + this.txtMaxLatch = new System.Windows.Forms.TextBox(); + this.lblServerTran = new System.Windows.Forms.Label(); + this.TransactionCount = new System.Windows.Forms.NumericUpDown(); + this.lblThreadCnt = new System.Windows.Forms.Label(); + this.ThreadCount = new System.Windows.Forms.NumericUpDown(); + this.btnSave = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.ReadsPerWrite)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RowCount)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RequestCount)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.TransactionCount)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ThreadCount)).BeginInit(); + this.SuspendLayout(); + // + // LabelReadsPerWrite + // + this.LabelReadsPerWrite.AutoSize = true; + this.LabelReadsPerWrite.BackColor = System.Drawing.Color.Transparent; + this.LabelReadsPerWrite.Location = new System.Drawing.Point(14, 75); + this.LabelReadsPerWrite.Name = "LabelReadsPerWrite"; + this.LabelReadsPerWrite.Size = new System.Drawing.Size(84, 13); + this.LabelReadsPerWrite.TabIndex = 48; + this.LabelReadsPerWrite.Text = "Reads per Write"; + // + // ReadsPerWrite + // + this.ReadsPerWrite.Location = new System.Drawing.Point(152, 73); + this.ReadsPerWrite.Name = "ReadsPerWrite"; + this.ReadsPerWrite.Size = new System.Drawing.Size(99, 20); + this.ReadsPerWrite.TabIndex = 47; + this.ReadsPerWrite.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // LabelRowsPerTran + // + this.LabelRowsPerTran.AutoSize = true; + this.LabelRowsPerTran.BackColor = System.Drawing.Color.Transparent; + this.LabelRowsPerTran.Location = new System.Drawing.Point(14, 179); + this.LabelRowsPerTran.Name = "LabelRowsPerTran"; + this.LabelRowsPerTran.Size = new System.Drawing.Size(111, 13); + this.LabelRowsPerTran.TabIndex = 46; + this.LabelRowsPerTran.Text = "Rows per Transaction"; + // + // RowCount + // + this.RowCount.Location = new System.Drawing.Point(151, 177); + this.RowCount.Maximum = new decimal(new int[] { + 5000000, + 0, + 0, + 0}); + this.RowCount.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.RowCount.Name = "RowCount"; + this.RowCount.Size = new System.Drawing.Size(100, 20); + this.RowCount.TabIndex = 45; + this.RowCount.Value = new decimal(new int[] { + 100, + 0, + 0, + 0}); + // + // LabelRPT + // + this.LabelRPT.AutoSize = true; + this.LabelRPT.BackColor = System.Drawing.Color.Transparent; + this.LabelRPT.Location = new System.Drawing.Point(14, 101); + this.LabelRPT.Name = "LabelRPT"; + this.LabelRPT.Size = new System.Drawing.Size(107, 13); + this.LabelRPT.TabIndex = 44; + this.LabelRPT.Text = "Requests per Thread"; + // + // RequestCount + // + this.RequestCount.Location = new System.Drawing.Point(152, 99); + this.RequestCount.Maximum = new decimal(new int[] { + 5000000, + 0, + 0, + 0}); + this.RequestCount.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.RequestCount.Name = "RequestCount"; + this.RequestCount.Size = new System.Drawing.Size(99, 20); + this.RequestCount.TabIndex = 43; + this.RequestCount.Value = new decimal(new int[] { + 100000, + 0, + 0, + 0}); + // + // lblInstance + // + this.lblInstance.AutoSize = true; + this.lblInstance.BackColor = System.Drawing.Color.Transparent; + this.lblInstance.Location = new System.Drawing.Point(14, 217); + this.lblInstance.Name = "lblInstance"; + this.lblInstance.Size = new System.Drawing.Size(91, 13); + this.lblInstance.TabIndex = 42; + this.lblInstance.Text = "Connection String"; + // + // tbConnectionString + // + this.tbConnectionString.Location = new System.Drawing.Point(16, 243); + this.tbConnectionString.Name = "tbConnectionString"; + this.tbConnectionString.Size = new System.Drawing.Size(271, 20); + this.tbConnectionString.TabIndex = 40; + this.tbConnectionString.TextChanged += new System.EventHandler(this.tbInstance_TextChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.BackColor = System.Drawing.Color.Transparent; + this.label3.Location = new System.Drawing.Point(14, 25); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(109, 13); + this.label3.TabIndex = 38; + this.label3.Text = "Max TPS (thousands)"; + // + // txtMaxTPS + // + this.txtMaxTPS.Location = new System.Drawing.Point(152, 22); + this.txtMaxTPS.Name = "txtMaxTPS"; + this.txtMaxTPS.Size = new System.Drawing.Size(99, 20); + this.txtMaxTPS.TabIndex = 37; + this.txtMaxTPS.TabStop = false; + // + // lblRunningThread + // + this.lblRunningThread.AutoSize = true; + this.lblRunningThread.BackColor = System.Drawing.Color.Transparent; + this.lblRunningThread.Location = new System.Drawing.Point(14, 50); + this.lblRunningThread.Name = "lblRunningThread"; + this.lblRunningThread.Size = new System.Drawing.Size(83, 13); + this.lblRunningThread.TabIndex = 36; + this.lblRunningThread.Text = "Max Latch Time"; + // + // txtMaxLatch + // + this.txtMaxLatch.Location = new System.Drawing.Point(152, 47); + this.txtMaxLatch.Name = "txtMaxLatch"; + this.txtMaxLatch.Size = new System.Drawing.Size(99, 20); + this.txtMaxLatch.TabIndex = 35; + this.txtMaxLatch.TabStop = false; + this.txtMaxLatch.Text = "10000"; + // + // lblServerTran + // + this.lblServerTran.AutoSize = true; + this.lblServerTran.BackColor = System.Drawing.Color.Transparent; + this.lblServerTran.Location = new System.Drawing.Point(14, 153); + this.lblServerTran.Name = "lblServerTran"; + this.lblServerTran.Size = new System.Drawing.Size(102, 13); + this.lblServerTran.TabIndex = 34; + this.lblServerTran.Text = "Server Transactions"; + // + // TransactionCount + // + this.TransactionCount.Location = new System.Drawing.Point(152, 151); + this.TransactionCount.Maximum = new decimal(new int[] { + 5000000, + 0, + 0, + 0}); + this.TransactionCount.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.TransactionCount.Name = "TransactionCount"; + this.TransactionCount.Size = new System.Drawing.Size(99, 20); + this.TransactionCount.TabIndex = 29; + this.TransactionCount.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // lblThreadCnt + // + this.lblThreadCnt.AutoSize = true; + this.lblThreadCnt.BackColor = System.Drawing.Color.Transparent; + this.lblThreadCnt.Location = new System.Drawing.Point(14, 127); + this.lblThreadCnt.Name = "lblThreadCnt"; + this.lblThreadCnt.Size = new System.Drawing.Size(46, 13); + this.lblThreadCnt.TabIndex = 31; + this.lblThreadCnt.Text = "Threads"; + // + // ThreadCount + // + this.ThreadCount.Location = new System.Drawing.Point(152, 125); + this.ThreadCount.Maximum = new decimal(new int[] { + 200, + 0, + 0, + 0}); + this.ThreadCount.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.ThreadCount.Name = "ThreadCount"; + this.ThreadCount.Size = new System.Drawing.Size(99, 20); + this.ThreadCount.TabIndex = 28; + this.ThreadCount.Value = new decimal(new int[] { + 80, + 0, + 0, + 0}); + // + // btnSave + // + this.btnSave.Location = new System.Drawing.Point(16, 293); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(149, 23); + this.btnSave.TabIndex = 49; + this.btnSave.Text = "Save Configuration Values"; + this.btnSave.UseVisualStyleBackColor = true; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // FrmConfig + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(310, 332); + this.Controls.Add(this.btnSave); + this.Controls.Add(this.LabelReadsPerWrite); + this.Controls.Add(this.ReadsPerWrite); + this.Controls.Add(this.LabelRowsPerTran); + this.Controls.Add(this.RowCount); + this.Controls.Add(this.LabelRPT); + this.Controls.Add(this.RequestCount); + this.Controls.Add(this.lblInstance); + this.Controls.Add(this.tbConnectionString); + this.Controls.Add(this.label3); + this.Controls.Add(this.txtMaxTPS); + this.Controls.Add(this.lblRunningThread); + this.Controls.Add(this.txtMaxLatch); + this.Controls.Add(this.lblServerTran); + this.Controls.Add(this.TransactionCount); + this.Controls.Add(this.lblThreadCnt); + this.Controls.Add(this.ThreadCount); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FrmConfig"; + this.Text = "Configuration Settings"; + this.Load += new System.EventHandler(this.ConfigForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.ReadsPerWrite)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RowCount)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RequestCount)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.TransactionCount)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ThreadCount)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label LabelReadsPerWrite; + private System.Windows.Forms.NumericUpDown ReadsPerWrite; + private System.Windows.Forms.Label LabelRowsPerTran; + private System.Windows.Forms.NumericUpDown RowCount; + private System.Windows.Forms.Label LabelRPT; + private System.Windows.Forms.NumericUpDown RequestCount; + private System.Windows.Forms.Label lblInstance; + private System.Windows.Forms.TextBox tbConnectionString; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox txtMaxTPS; + private System.Windows.Forms.Label lblRunningThread; + private System.Windows.Forms.TextBox txtMaxLatch; + private System.Windows.Forms.Label lblServerTran; + private System.Windows.Forms.NumericUpDown TransactionCount; + private System.Windows.Forms.Label lblThreadCnt; + private System.Windows.Forms.NumericUpDown ThreadCount; + private System.Windows.Forms.Button btnSave; + } } \ No newline at end of file diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/FrmConfig.cs b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmConfig.cs similarity index 97% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/FrmConfig.cs rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmConfig.cs index 53d64e1957..c40551316b 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/FrmConfig.cs +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmConfig.cs @@ -1,68 +1,68 @@ -using System; -using System.Configuration; -using System.Windows.Forms; - -namespace DemoWorkload -{ - public partial class FrmConfig : Form - { - - public FrmConfig() - { - InitializeComponent(); - } - - private void ConfigForm_Load(object sender, EventArgs e) - { - tbConnectionString.Text = Program.CONN_STR; - TransactionCount.Value = Program.TRANSACTION_COUNT; - ThreadCount.Value = Program.THREAD_COUNT; - ReadsPerWrite.Value = Program.READS_PER_WRITE; - RequestCount.Value = Program.REQUEST_COUNT; - RowCount.Value = Program.ROW_COUNT; - txtMaxLatch.Text = Program.MAX_LATCH_WAIT.ToString(); - txtMaxTPS.Text = Program.MAX_TPS.ToString(); - } - - private void btnSave_Click(object sender, EventArgs e) - { - Program.THREAD_COUNT = (int)this.ThreadCount.Value; - Program.READS_PER_WRITE = (int)this.ReadsPerWrite.Value; - Program.REQUEST_COUNT = (int)this.RequestCount.Value; - Program.ROW_COUNT = (int)this.RowCount.Value; - Program.TRANSACTION_COUNT = (int)this.TransactionCount.Value; - Program.CONN_STR = this.tbConnectionString.Text; - Program.MAX_TPS = Convert.ToInt32(this.txtMaxTPS.Text); - Program.MAX_LATCH_WAIT = Convert.ToInt32(this.txtMaxLatch.Text); - - // also persist changes in app config - Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); - KeyValueConfigurationCollection settings = config.AppSettings.Settings; - ConnectionStringSettingsCollection connStrs = config.ConnectionStrings.ConnectionStrings; - - // update SaveBeforeExit - settings["ThreadCount"].Value = Program.THREAD_COUNT.ToString(); - settings["ReadsPerWrite"].Value = Program.READS_PER_WRITE.ToString(); - settings["RequestCount"].Value = Program.REQUEST_COUNT.ToString(); - settings["RowCount"].Value = Program.ROW_COUNT.ToString(); - settings["TransactionCount"].Value = Program.TRANSACTION_COUNT.ToString(); - settings["MaxTps"].Value = Program.MAX_TPS.ToString(); - settings["MaxLatchWaits"].Value = Program.MAX_LATCH_WAIT.ToString(); - connStrs["TicketReservations"].ConnectionString = Program.CONN_STR; - - //save the file - config.Save(ConfigurationSaveMode.Modified); - - } - - private void tbInstance_TextChanged(object sender, EventArgs e) - { - - } - - private void label1_Click(object sender, EventArgs e) - { - - } - } -} +using System; +using System.Configuration; +using System.Windows.Forms; + +namespace DemoWorkload +{ + public partial class FrmConfig : Form + { + + public FrmConfig() + { + InitializeComponent(); + } + + private void ConfigForm_Load(object sender, EventArgs e) + { + tbConnectionString.Text = Program.CONN_STR; + TransactionCount.Value = Program.TRANSACTION_COUNT; + ThreadCount.Value = Program.THREAD_COUNT; + ReadsPerWrite.Value = Program.READS_PER_WRITE; + RequestCount.Value = Program.REQUEST_COUNT; + RowCount.Value = Program.ROW_COUNT; + txtMaxLatch.Text = Program.MAX_LATCH_WAIT.ToString(); + txtMaxTPS.Text = Program.MAX_TPS.ToString(); + } + + private void btnSave_Click(object sender, EventArgs e) + { + Program.THREAD_COUNT = (int)this.ThreadCount.Value; + Program.READS_PER_WRITE = (int)this.ReadsPerWrite.Value; + Program.REQUEST_COUNT = (int)this.RequestCount.Value; + Program.ROW_COUNT = (int)this.RowCount.Value; + Program.TRANSACTION_COUNT = (int)this.TransactionCount.Value; + Program.CONN_STR = this.tbConnectionString.Text; + Program.MAX_TPS = Convert.ToInt32(this.txtMaxTPS.Text); + Program.MAX_LATCH_WAIT = Convert.ToInt32(this.txtMaxLatch.Text); + + // also persist changes in app config + Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); + KeyValueConfigurationCollection settings = config.AppSettings.Settings; + ConnectionStringSettingsCollection connStrs = config.ConnectionStrings.ConnectionStrings; + + // update SaveBeforeExit + settings["ThreadCount"].Value = Program.THREAD_COUNT.ToString(); + settings["ReadsPerWrite"].Value = Program.READS_PER_WRITE.ToString(); + settings["RequestCount"].Value = Program.REQUEST_COUNT.ToString(); + settings["RowCount"].Value = Program.ROW_COUNT.ToString(); + settings["TransactionCount"].Value = Program.TRANSACTION_COUNT.ToString(); + settings["MaxTps"].Value = Program.MAX_TPS.ToString(); + settings["MaxLatchWaits"].Value = Program.MAX_LATCH_WAIT.ToString(); + connStrs["TicketReservations"].ConnectionString = Program.CONN_STR; + + //save the file + config.Save(ConfigurationSaveMode.Modified); + + } + + private void tbInstance_TextChanged(object sender, EventArgs e) + { + + } + + private void label1_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/FrmConfig.resx b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmConfig.resx similarity index 98% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/FrmConfig.resx rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmConfig.resx index 6130a991cd..6d7dc61e14 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/FrmConfig.resx +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmConfig.resx @@ -1,500 +1,500 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - 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 - zwD45t8A++/qAO3j3wDSsaIA89XHAPTWyQDz1skA9NjLAPPXygD129AA9dzRAPXd0gD239UA9+HXAPjo - 4QD56uMA+OniAPrs5gD56+UA/PPvAPz18gDGo5IAx6aWANW0pADava4AyrCjAPXazQD02cwA5Mu/APbf - 0wD13tMA9+PZAPjl3AD88u0A+/HsAPz28wD9+fcA/vz7AMirmwDz2csAzbmuAOfZ0QDe080A+/LtAOXe - 2gDi29cA28/IANzRygD67+gA+/HrAOHZ1AD89O8A+/PuAPPr5gD9+PUAg29hAJB+cgCNfHAA8O3rAHpl - VQB7ZlcAfmlaAH5qWwB/a1wAgW1eAIBsXQCCbl8Ag3BiAI17bgCUhHgAk4N3AJeHewCcjoQApZiOAKeb - kgCrn5YAraKaAKyhmQCuo5sA4NjSAMG6tQDo5OEA5+PgAHxoWAB9aVkAhXJjAIFvYACFc2UAh3VnAIl3 - aQCLeWsAi3psAI5+cQCRgXQAj39yAJWGegCYiX0Am42CAJ+RhgChlIkAoJOIAKebkQCpnpUAq6CXAK+l - nQC4r6gA39bPAOXg3ACRgnUAlYZ5AJmLfgCekIQAm42BAKOXjACilosAoZWKALGnngCupJsAtaykALKp - oQC2raUAwLmzAL+4sgC9trAApZqPAKedkwC5sakAt6+nALOrowC8ta4AurOsAL+4sQC+t7AAwry2AP36 - 9wD9+/kA6eflAP79/ACyqqEAsamgALy1rQC6s6sAubKqALy2rwC7ta0Awby1APb08QD9/PoAOcEAADHJ - AAAuzAAAJ9UAANP4/ADd+/4A2/n8ANv6/gDV8/cA0Pb9AM/s8QC77/kAvO/5AMTx+gDM6e8Atez5ALbs - +QC16vYAve76AMXj6gDe6+4ApuX3AKfm9wCo5vcAsNrmAMDc5ACZ4PYAqOb5AKfj9gC10tsAu9jhAMrg - 5wB70/QAe9T0AJDc9gCN1fAAkt32AJHY8QCY3fQAsczVAMPX3gDA09oA2eLlANDY2wBqzPIAaszxAGrL - 8QBqyO4AasjtAGvF6gBrxekAfs3rAJ/J2QCryNMAq8fSAG7B5QB2v94Am73NAK3J1QCsxtEAtc/aALfN - 1wB9tM4AoLzKAKS/zACnws8ApsHOAJ63xACpxNEApL3KAKK7yACqxNEAts3YAMfP0wCRs8YAj62+AKK+ - zgCIqb0Am7PBAKC4xgCasb8Ap7/NAJKpuACYr74AlKq5AJWrugCRprYAl629AI2hsgCQpLQAjaCxAP// - /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAGRjYU9DTkxNTUpJYF9ISEdHAAAAAAAAAAAAAAAAAAAAZQoP - ISEhISEhISEhISEhIkgAAAAAAAAAAAAAAAAAAABmCicTExMTExMSFBESEhAyXwAAAAAAAAAAAAAAAAAA - AFAKCwsnJicnJycTFKKgEjJgAAAAAAAAAAAAAAAAAAAAaDELCwsLCwsmJycTo6EUMksAAAAAAAAAAAAA - AAAAAABpMRYWFhYVFRULCwsmJzMyTAAAAAAAAAAAAAAAAAAAAFIxKSrL3d/18uvq7OkLJjJiAAAAAAAA - AAAAAAAAAAAAazEY3NnUuLHG09je7fELMk8AAAAAAAAAAAAAAAAAAABsMRnjxbWrsLrBztDX+hUyYwAA - AAAAAAAAAAAAAAAAAHwxK+/CtquwusHN0NL4FzJkAAAAAAAAAAAAAAAAAAAAVJUs5sS2q6+6wc3P0fkp - MmUAAAAAAAAAAAAAAAAAAABulQzlxLassLrBzs/R9hgyZwAAAAAAAAAAAAAAAAAAAG+VGuDEt6yvusHO - 0NHyGTJFAAAAAAAAAAAAAAAAAAAAfZUb4sS3rLC6wM7P0vQZImoAAAAAAAAAAAAAAAAAAACIlR7hxLes - sLrBzNDS9SwkeAAAAAAAAAAAAAAAAAAAAIkBCuTEt6ywusHN0NL3AwJRAAAAAAAAAAAAAAAAAAAAV0YO - 1sS2q7C6wc7Q0vM1NVMAAAAAAAAAAAAAAAAAAABZkYbVu62kpaepsrzD8ExgegAAAAAAAAAAAAAAAAAA - AIEBN9qlpaWlpaWlpaXuGiV8AAAAAAAAAAAAAAAAAAAAgAEfv76zqqamqK65x8kcNHsAAAAAAAAAAAAA - AAAAAACWAQeetL+95+Hb6MjKQRs0cAAAAAAAAAAAAAAAAAAAAIIBBS8vIAcfQDc9DTwdHiV+AAAAAAAA - AAAAAAAAAAAAi/v7+/v7+/v7+/v7+/v7lVUAAAAAAAAAAAAAAAAAAACKkYaci4NYVn9teURmYUxgcQAA - AAAAAAAAAAAAAAAAAJmUXV1eCXc4ODk+W3Y2OzpyAAAAAAAAAAAAAAAAAAAAmPsKkwSSMEIvIAhALg08 - I3MAAAAAAAAAAAAAAAAAAACH+zEKnwQDMAUgBx83PTwjWgAAAAAAAAAAAAAAAAAAAIb7lZUKBAMwQi8H - Bi09PCN0AAAAAAAAAAAAAAAAAAAAhfsBAZUKBDACBQc/LT08KJcAAAAAAAAAAAAAAAAAAABc+/v7AQEB - AQGVlZUxMTEFjAAAAAAAAAAAAAAAAAAAAJGdXFyFho+Qm42cjpqKdYuEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A - AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A - AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP//////KAAAACAAAABAAAAAAQAgAAAAAACAEAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAId0Zv+Fc2X/hXJj/4Nw - Yv+Db2H/gm5f/4FtXv+AbF3/gGxc/35qW/9+aVr/fWlZ/3xnWP97Z1f/e2ZW/3pmVv96ZVX/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiXdp//77 - +v/SsaL/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/x6aW/3tm - V/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACLeWv//vv6//TZzP/02Mz/9NjM//TYy//02Mv/9NfL//TYyv/z18n/89fK//TWyf/z1sn/89bI//PV - x//Iq5v/fGhY/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - q//p5+X/6OTh/+jk4f/n4+D/5+Hf/+Xg3P/l3tv/5N3Z/+Lb1//h2dT/4NjS/9/Wz//e083/3NHK/9vP - yP+pnpX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAvLWt///////++/r//fv5//76+f/9+vf//fj3//349f/89/P//PXy//vz8P/78+7/+/Hs//vv - 6v/67uj/1bSk/6ugl/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC9trD////////8+////Pr//fz6//77+f/++fj//fn2//329P/89fL//PTx//zz - 7//78u3/+/Dr//vv6P/VtKT/rqOb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+4sv////////38//79/P/+/Pr//vv5//75+P/9+fb//fj1//z2 - 8//89PH//PPw//zy7f/78ev/+u/p/9W0pP+vpZ3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwLmz///////+/v3///39//79/P/+/Pr//vr5//35 - 9//99/b//ffz//z08f/89O///PLt//vw6//67+n/5Mu//7GpoP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBurX///////////////////7+///+ - /v///v7///79///+/f/+/f3//v38//79/P/+/Pz//vz7//78+//99vT/s6uj/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK8tv/BvLX/wbu1/8C6 - tP/AubP/v7iy/7+4sf++t7D/vLav/7y1rv+7tK3/urOs/7myqv+5sKn/uK+o/7evp/+2raX/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A - AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A - AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA/ygAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAA - AAAAAAAAAAEAAAABAAAAAAAA/vn4AP349wD++vkA/PHtAPzz8AD78/AA/ff1AP77+gD12s8A9+HYAPjm - 3wD56uQA++/qAO3j3wDn4uAA0rGiAPPVxwD01skA89bJAPTYywDz18oA9dvQAPbd0gD13NEA9t7TAPXd - 0gD239UA9+HXAPfj2gD45NsA+erjAPjp4gD67OYA+/DrAPzz7wDl3tsA/PXyAMajkgDHppYA1bSkAMqw - owD12s0A9NnMAPbd0QD13tMA9uDVAPXf1AD24tgA9+TbAPjl3AD46OAA+u7oAPzy7QD78ewA4trWAPz2 - 8wDu6ugA/vz7AMirmwDz2csA59nRAN7TzQD78u0A/PXxAOnc1ADc0MkA/PTvAPvz7gD9+PUAkH5yAI18 - cADw7esAemVVAHtmVwB+aVoAfmpbAH9rXACBbV4AgGxdAIJuXwCDcGIAgm9hAI17bgCUhHgAloZ6AJyO - hACtopoA9vLvAOjk4QB8aFgAfWlZAIVyYwCFc2UAh3VnAIl3aQCLemwAjn5xAJGBdACPf3IAmYp+AJuN - ggCgk4gApZmPAKqflgCroJcAr6WdALivqACKeWoAkYJ1AJuNgQCfkYUAo5eMAKGVigCnnJIAsaeeAK6k - mwC1rKQAtq2lAODY0QDAubMAv7iyALmxqQC3r6cAvLWuALqzrAC/uLEAvrewAMK8tgDAurQA/fr3AP37 - +QDp5+UA//79AP79/ACyqqEAvLWtALy2rwC7ta0A/fz6ADXFAAAr0QAA2/v9ANP4/ADd+/4A3Pr9ANv5 - /ADb+v4A1vT4AMjz+gDB6fAAz+zxANHt8gC77/kAvO/5AMLw+gDS9v0A2+rtALXs+QC27PkAter2AKbl - 9wCn5vcAqOb3AKvm9wDG4egAl971AJjg9gCo5vkAttnkAGvN8QBszvEAbc3xAG7O8gBvzvEAcM7xAHTP - 8QB40vMAetP0AHvU9AB81PQAfNPzAJDc9gCN1fAAkt32AJHY8QCe3/UAydvhAGzO8wBtzPIAb8zzAG3K - 7gBtyO0Aa8XqAHDO8gBwzfEAb8zwAG/M7wBvy+8Ab8ntAG7H7ABuyOsAbsfqAHLO8QBxy+8AcMnsAG3E - 5gBwx+kAd9HzAHLG6ABxxecAccHiAHXH5wByv94AeszsAHjC4QCfydkAq8jTALfR2wC2ztgAbsLmAG/A - 4wB0wOIAfLnUAJm8zAChvssArMnWAKzG0gCxy9YAjrXJAKS/zACnws8AnrfEAKnE0QCkvcoAorvIAKrE - 0QCFqb0AjbLGAI6uwACrxdMAnrbDAJuzwQCasb8AobnHAJKpuACYr74Alau6AJGnuACQpbUAl629AI2h - sgCPo7MAjaCxAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABeXVxcUVFRUVJQTk9PTEtbW1tbWkpKSUkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfCBAQJiYm - JiYmJiYmJiYmJiYmJiYmJ0oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgCCsrFBQUFBQUFBQUExUSEhIS - ExMRO1oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTCAkJCQkJCSsqKysrKxQVFRUVjYwTO1sAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABhOgkJCQkJCQkJCQkqKysUFBQUjYwVO00AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABiOhgYGBgYGBgYFhYWCQkJCQkJKis8O04AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUOhkZLS0t - LS0aGhoYGBYJCQkJCQkqO1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVOhsbLi4uLhsuLy0ZGRcsLCws - FhYJO1EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkOhwcCrvi4fHx9/Xv5e7l5fAtGhgWO10AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABuOh0d2uDYqZaWoKbW0dTX3+3uGS0aO14AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABWhjIy6LmhmZWVn6bQxsbH0t39LhsZO18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvhgsL9Lai - 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 - AAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB// - AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/g - AAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB// - AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD///////8AAP// - /////wAAKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAId0 - Zv+Fc2X/hXJj/4VyY/+DcGL/g3Bi/4NwYv+DcGL/g29h/4JuX/+BbV7/gGxd/4BsXP9+alv/fmla/31p - Wf99aVn/fWlZ/31pWf98Z1j/e2dX/3tmVv96Zlb/emVV/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAIl3af/++/r/0rGi/9Kxov/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8aj - kv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Hppb/e2ZX/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIt5a//++/r/9NnM//TZzP/02Mz/9NjM//TYzP/02Mz/9NjM//TY - y//02Mv/9NfL//TYyv/z18n/89fK//TWyf/01sn/9NbJ//TWyf/z1sn/89bI//PVx//Iq5v/fGhY/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI17bv/+/Pr/9NrO//Tazv/12s7/9drO//Xa - zv/12s7/9NnN//Tazf/02c3/9NnN//TZzP/02cz/9NjL//PXyv/z18r/89fK//PXyv8uzAD/OcEA//PW - yP/Iq5v/fWlZ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5+cf/+/Pv/9dvP//Xb - z//028//9NvP//Tbz//028//9dvP//Taz//12s7/9drO//Xazf/02c3/9NnM//TYzP/02Mz/9NjM//TY - zP8n1QD/MckA//PYyv/Iq5v/f2tc/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJGB - dP/+/Pv/9dzS//Xc0v/13NH/9dzR//Xc0f/13NH/9d3R//Xd0f/13ND/9dzQ//Xb0P/028//9NvP//Xa - zv/12s7/9drO//Xazv/12c3/9NnM//PZy//Iq5v/gW1e/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAJODd//+/Pv/9t7T//be0//13tP/9d7T//Xe0//13tP/9d7T//Xe0v/13dL/9d3S//Xc - 0v/13dH/9dvQ//Tbz//028//9NvP//Tbz//1287/9drO//Xazf/Iq5v/gW9g/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJWGev/+/Pv/9t/V//bf1f/24NX/9uDV//bg1f/24NX/9t/V//bg - 1f/139T/9d7U//bf0//23tP/9t3S//bd0f/23dH/9t3R//bd0f/13ND/9dvQ//Xaz//Iq5v/g3Bi/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiJff/+/Pv/9+HX//fh1//34dj/0dnd/6vJ - 1v+hvsv/nbXD/562w/+Vq7r/kqm4/46uwP+Ptsr/jrLE/4+1yP+MtMr/q8XT//Xe0//13dL/9d3R//Xc - 0P/Iq5v/hXNl/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqMgP/+/Pz/9+PZ//fj - 2f+10Nv/mbzM/5/J2f+w2ub/wenw/8Hp8P+16vb/l930/3rM7P9yxuj/dcfn/3jC4f98udT/ham9/4yy - x//23tT/9d7T//Xd0v/Iq5v/h3Vn/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyO - hP/+/fz/+OXc//jl3P+et8T/kdjx/6bl9/+77/n/yPP6/8jz+v+27Pn/l9/2/3fR8/9uy+//b8ru/2/J - 7f9xxef/b8Dj/42gsf/24Nb/9t/V//bf0//Iq5v/iXdp/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAJ+Rhv/+/fz/+Obf//jm3/+guMb/kNz2/6fm9/+77/n/yPP6/8jz+v+27Pn/mOD2/3nT - 9P9tzfH/b8vv/3DJ7P9ux+r/bcTm/42hsv/34df/9uDW//bf1f/Iq5v/i3ps/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKGUif/+/fz/+Ojh//jo4f+husf/kNz2/6bm9/+87/n/yPP6/8jz - +v+17Pj/meD2/3zU9P9szvP/b83w/2/L7v9uyOv/bcTm/4+js//34tn/9+HY//fh1v/Iq5v/jXxw/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOXjP/+/fz/+erj//nq4/+iu8j/kt32/6fm - 9/+77/n/yPP6/8jz+v+17Pn/meD2/3vU9P9tzPL/b83x/27L7/9tyOz/bcHn/5CktP/35Nv/9+Pa//bi - 2P/Hppb/j39y/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOXjP/+/fz/+erj//nq - 4/+kvcr/kt32/6fm9/+87/n/yPP6/8jz+v+27Pn/mOD2/3vU9P9tzPL/b87x/2/L7/9tx+z/b8Pm/5Gm - tv/35Nv/9+Pa//bi2P/Hppb/j39y/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOX - jP/+/fz/+erj//nq4/+et8T/kdjx/6bl9/+77/n/yPP6/8jz+v+27Pn/mOD2/3vU9P9szfP/cc7x/2/L - 7/9ux+z/ccDi/42gsf/35Nv/9+Pa//bi2P/Hppb/j39y/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKOXjP/+/fz/+erj//nq4/+guMb/kNz2/6fm9/+77/n/yPP6/8jz+v+27Pn/mOD2/3vU - 9P9rzPH/cM7y/2/M7/9tyOr/b8Hl/42hsv/35Nv/9+Pa//bi2P/Hppb/kYJ1/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOXjP/+/fz/+erj//nq4/+husf/kNz2/6bm9/+87/n/yPP6/8jz - +v+17Pj/meD2/3vU9P9szvH/bs7x/3DL7/9vx+n/ccLi/5Cltv/35Nv/9+Pa//bi2P/Hppb/kYJ1/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKWaj//+/f3/+evl//nr5f+iu8j/kt32/6fm - 9/+77/n/yPP6/8jz+v+17Pn/meD2/3vV9P9rzvH/b87w/3DL7v9wx+n/cr7d/5KouP/45d3/9+Tc//jk - 2//Hppb/kYJ1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKedk////v7//vv6//77 - +v+kvcr/kt32/6fm9/+87/n/yPP6/8jz+v+27Pn/mOD2/3vU9P9tzPL/b87x/3HL7v9vx+r/c7/f/5Gn - uP/++vn//vr4//76+P/99/X/lIR4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKuf - lv/w7ev/7ePf/+3j3/+kv8z/kt32/6jm9/+87/n/yPP6/8jz+v+17Pn/mOD2/3vU9P9vzPP/cM3x/3HL - 7/9vx+r/ccDf/5KpuP/p3NX/6NvT/+fa0v/m2ND/l4d7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKyhmf/CvLb/v7iy/7+4sv+mwc7/kt32/6jm9/+87/n/yPP6/8jz+v+27Pn/meD2/3vT - 9P9uzvH/cM7x/3HL7/9ux+r/dMDi/5Squv+KeGr/hXNk/4BtXv99aFn/mYt+/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy7f+nws//kt32/6jm9/+87/n/yPP6/8jz - +v+27Pn/mOD2/3vT9P9uzvL/cM7x/2/M7/9ux+v/ccLi/5Wruv/56uT/+eri//jo4P/KsKP/m42B/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy7f+pxNH/kt32/6jm - 9/+87/n/yPP6/8jz+v+27Pn/l9/2/3jS8/9uzPD/cs7x/3DM8P9tyO3/bcTn/5etvf/56uT/+eri//jo - 4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy - 7f+rx9L/kt32/6fm9/+77/n/yPP6/8jz+v+27Pn/mOD2/3zT8/9vzPD/dM/x/2/M8P9tyu7/a8Xq/5iv - vv/56uT/+eri//jo4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6k - m////v3/+/Lt//vy7f+ryNP/qOb5/8Tx+v/T+Pz/2/v9/9v7/f/c+/7/2/r+/9L2/f/B7/r/we/6/6vm - 9/+e3/X/jdXw/5qxv//56uT/+eri//jo4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAK6km////v3/+/Lt//vy7f+tydX/3fv+/937/v/d+/7/3fv+/937/v/d+/7/3Pv9/9z6 - /f/c+v3/3Pr9/9v6/f/b+v3/3fv+/5uzwf/56uT/+eri//jo4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy7f/K4Of/u9jh/8Xj6v/P7PH/1vT4/9b0 - +P/b+fz/2/n8/9b0+P/R7fL/1/X5/9Dt8v/C3+b/sszW/7PM1v/56uT/+eri//jo4P/KsKP/m42B/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALGnnv///v7//PPv//zz7//28u//2+rt/8Pd - 5f+4093/r8vW/7HL1v+qxNH/p8LP/6zG0v+2ztj/q8bS/7DL1v+30dr/yNzh/+7q6P/56+X/+evk//jp - 4v/KsKP/npCE/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALKqof///v7//PXx//z1 - 8f/89fH//PXx//z18f/89fH//PTx//z08P/88+///PLu//zx7f/78Oz/+vDq//ru6P/67uj/+u7o//ru - 6P/67Of/+ezl//nq4//KsKP/oJOI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWs - pP///v7//fbz//328//89vP//Pbz//z28//89vP//Pbz//z18v/89fD//PPv//vz7v/78u3/+vHr//vv - 6v/77+r/++/q//vv6v/67uj/+uzm//nr5P/KsKP/opaL/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAALeup/////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////+/fz/pZiO/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALixqf/CvLb/v7my/7+5sv+7ta3/u7Wt/7u1rf+7ta3/t6+n/7Kp - of+topr/p5uS/6GViv+bjYL/lYZ5/5B+cv+QfnL/kH5y/5B+cv+KeWr/hXJj/4BtXv99aFn/p5uR/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALqzq//p5+X/6OTh/+jk4f/o5OH/6OTh/+jk - 4f/o5OH/5+Pg/+fh3//l4Nz/5d7b/+Td2f/i29f/4dnU/+DY0v/g2NL/4NjS/+DY0v/f1s//3tPN/9zR - yv/bz8j/qZ6V/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1rf///////vv6//77 - +v/9+/n//fv5//37+f/9+/n//vr5//369//9+Pf//fj1//z38//89fL/+/Pw//vz7v/78+7/+/Pu//vz - 7v/78ez/++/q//ru6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1 - rf///////vv6//77+v/9+/n//fv5//37+f/9+/n//vr5//369//9+Pf//fj1//z38//89fL/+/Pw//vz - 7v/78+7/+/Pu//vz7v/78ez/++/q//ru6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAALy1rf///////vv6//77+v/9+/n//fv5//37+f/9+/n//vr5//369//9+Pf//fj1//z3 - 8//89fL/+/Pw//vz7v/78+7/+/Pu//vz7v/78ez/++/q//ru6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1rf///////vv6//77+v/9+/n//fv5//37+f/9+/n//vr5//36 - 9//9+Pf//fj1//z38//89fL/+/Pw//vz7v/78+7/+/Pu//vz7v/78ez/++/q//ru6P/VtKT/q6CX/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1rf///////vv6//77+v/9+/n//fv5//37 - +f/9+/n//vr5//369//9+Pf//fj1//z38//89fL/+/Pw//vz7v/78+7/+/Pu//vz7v/78ez/++/q//ru - 6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL22sP////////z7///8 - +////Pr///z6///8+v///Pr//fz6//77+f/++fj//fn2//329P/89fL//PTx//zz7//88+///PPv//zz - 7//78u3/+/Dr//vv6P/VtKT/rqOb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+4 - sv////////38///9/P/+/fz//v38//79/P/+/fz//vz6//77+f/++fj//fn2//349f/89vP//PTx//zz - 8P/88/D//PPw//zz8P/88u3/+/Hr//rv6f/VtKT/r6Wd/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMC5s////////v79//7+/f///f3///39///9/f///f3//v38//78+v/++vn//fn3//33 - 9v/99/P//PTx//z07//89O///PTv//z07//88u3/+/Dr//rv6f/VtKT/samg/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMG6tf////////////////////////////////////////7+///+ - /v///v7///79///+/f/+/f3//v38//79/P/+/fz//v38//79/P/+/Pz//vz7//78+//99vT/s6uj/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK8tv/BvLX/wbu1/8G7tf/AurT/wLq0/8C6 - tP/AurT/wLmz/7+4sv+/uLH/vrew/7y2r/+8ta7/u7St/7qzrP+6s6z/urOs/7qzrP+5sqr/ubCp/7iv - qP+3r6f/tq2l/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD/8AAAD/8AAP/wAAAP/wAA//AAAA// - AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/w - AAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA// - AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/w - AAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA// - AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/w - AAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA////////AAD///////8AAA== - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + zwD45t8A++/qAO3j3wDSsaIA89XHAPTWyQDz1skA9NjLAPPXygD129AA9dzRAPXd0gD239UA9+HXAPjo + 4QD56uMA+OniAPrs5gD56+UA/PPvAPz18gDGo5IAx6aWANW0pADava4AyrCjAPXazQD02cwA5Mu/APbf + 0wD13tMA9+PZAPjl3AD88u0A+/HsAPz28wD9+fcA/vz7AMirmwDz2csAzbmuAOfZ0QDe080A+/LtAOXe + 2gDi29cA28/IANzRygD67+gA+/HrAOHZ1AD89O8A+/PuAPPr5gD9+PUAg29hAJB+cgCNfHAA8O3rAHpl + VQB7ZlcAfmlaAH5qWwB/a1wAgW1eAIBsXQCCbl8Ag3BiAI17bgCUhHgAk4N3AJeHewCcjoQApZiOAKeb + kgCrn5YAraKaAKyhmQCuo5sA4NjSAMG6tQDo5OEA5+PgAHxoWAB9aVkAhXJjAIFvYACFc2UAh3VnAIl3 + aQCLeWsAi3psAI5+cQCRgXQAj39yAJWGegCYiX0Am42CAJ+RhgChlIkAoJOIAKebkQCpnpUAq6CXAK+l + nQC4r6gA39bPAOXg3ACRgnUAlYZ5AJmLfgCekIQAm42BAKOXjACilosAoZWKALGnngCupJsAtaykALKp + oQC2raUAwLmzAL+4sgC9trAApZqPAKedkwC5sakAt6+nALOrowC8ta4AurOsAL+4sQC+t7AAwry2AP36 + 9wD9+/kA6eflAP79/ACyqqEAsamgALy1rQC6s6sAubKqALy2rwC7ta0Awby1APb08QD9/PoAOcEAADHJ + AAAuzAAAJ9UAANP4/ADd+/4A2/n8ANv6/gDV8/cA0Pb9AM/s8QC77/kAvO/5AMTx+gDM6e8Atez5ALbs + +QC16vYAve76AMXj6gDe6+4ApuX3AKfm9wCo5vcAsNrmAMDc5ACZ4PYAqOb5AKfj9gC10tsAu9jhAMrg + 5wB70/QAe9T0AJDc9gCN1fAAkt32AJHY8QCY3fQAsczVAMPX3gDA09oA2eLlANDY2wBqzPIAaszxAGrL + 8QBqyO4AasjtAGvF6gBrxekAfs3rAJ/J2QCryNMAq8fSAG7B5QB2v94Am73NAK3J1QCsxtEAtc/aALfN + 1wB9tM4AoLzKAKS/zACnws8ApsHOAJ63xACpxNEApL3KAKK7yACqxNEAts3YAMfP0wCRs8YAj62+AKK+ + zgCIqb0Am7PBAKC4xgCasb8Ap7/NAJKpuACYr74AlKq5AJWrugCRprYAl629AI2hsgCQpLQAjaCxAP// + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAGRjYU9DTkxNTUpJYF9ISEdHAAAAAAAAAAAAAAAAAAAAZQoP + ISEhISEhISEhISEhIkgAAAAAAAAAAAAAAAAAAABmCicTExMTExMSFBESEhAyXwAAAAAAAAAAAAAAAAAA + AFAKCwsnJicnJycTFKKgEjJgAAAAAAAAAAAAAAAAAAAAaDELCwsLCwsmJycTo6EUMksAAAAAAAAAAAAA + AAAAAABpMRYWFhYVFRULCwsmJzMyTAAAAAAAAAAAAAAAAAAAAFIxKSrL3d/18uvq7OkLJjJiAAAAAAAA + AAAAAAAAAAAAazEY3NnUuLHG09je7fELMk8AAAAAAAAAAAAAAAAAAABsMRnjxbWrsLrBztDX+hUyYwAA + AAAAAAAAAAAAAAAAAHwxK+/CtquwusHN0NL4FzJkAAAAAAAAAAAAAAAAAAAAVJUs5sS2q6+6wc3P0fkp + MmUAAAAAAAAAAAAAAAAAAABulQzlxLassLrBzs/R9hgyZwAAAAAAAAAAAAAAAAAAAG+VGuDEt6yvusHO + 0NHyGTJFAAAAAAAAAAAAAAAAAAAAfZUb4sS3rLC6wM7P0vQZImoAAAAAAAAAAAAAAAAAAACIlR7hxLes + sLrBzNDS9SwkeAAAAAAAAAAAAAAAAAAAAIkBCuTEt6ywusHN0NL3AwJRAAAAAAAAAAAAAAAAAAAAV0YO + 1sS2q7C6wc7Q0vM1NVMAAAAAAAAAAAAAAAAAAABZkYbVu62kpaepsrzD8ExgegAAAAAAAAAAAAAAAAAA + AIEBN9qlpaWlpaWlpaXuGiV8AAAAAAAAAAAAAAAAAAAAgAEfv76zqqamqK65x8kcNHsAAAAAAAAAAAAA + AAAAAACWAQeetL+95+Hb6MjKQRs0cAAAAAAAAAAAAAAAAAAAAIIBBS8vIAcfQDc9DTwdHiV+AAAAAAAA + AAAAAAAAAAAAi/v7+/v7+/v7+/v7+/v7lVUAAAAAAAAAAAAAAAAAAACKkYaci4NYVn9teURmYUxgcQAA + AAAAAAAAAAAAAAAAAJmUXV1eCXc4ODk+W3Y2OzpyAAAAAAAAAAAAAAAAAAAAmPsKkwSSMEIvIAhALg08 + I3MAAAAAAAAAAAAAAAAAAACH+zEKnwQDMAUgBx83PTwjWgAAAAAAAAAAAAAAAAAAAIb7lZUKBAMwQi8H + Bi09PCN0AAAAAAAAAAAAAAAAAAAAhfsBAZUKBDACBQc/LT08KJcAAAAAAAAAAAAAAAAAAABc+/v7AQEB + AQGVlZUxMTEFjAAAAAAAAAAAAAAAAAAAAJGdXFyFho+Qm42cjpqKdYuEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A + AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A + AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP//////KAAAACAAAABAAAAAAQAgAAAAAACAEAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAId0Zv+Fc2X/hXJj/4Nw + Yv+Db2H/gm5f/4FtXv+AbF3/gGxc/35qW/9+aVr/fWlZ/3xnWP97Z1f/e2ZW/3pmVv96ZVX/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiXdp//77 + +v/SsaL/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/x6aW/3tm + V/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACLeWv//vv6//TZzP/02Mz/9NjM//TYy//02Mv/9NfL//TYyv/z18n/89fK//TWyf/z1sn/89bI//PV + x//Iq5v/fGhY/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + q//p5+X/6OTh/+jk4f/n4+D/5+Hf/+Xg3P/l3tv/5N3Z/+Lb1//h2dT/4NjS/9/Wz//e083/3NHK/9vP + yP+pnpX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAvLWt///////++/r//fv5//76+f/9+vf//fj3//349f/89/P//PXy//vz8P/78+7/+/Hs//vv + 6v/67uj/1bSk/6ugl/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC9trD////////8+////Pr//fz6//77+f/++fj//fn2//329P/89fL//PTx//zz + 7//78u3/+/Dr//vv6P/VtKT/rqOb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+4sv////////38//79/P/+/Pr//vv5//75+P/9+fb//fj1//z2 + 8//89PH//PPw//zy7f/78ev/+u/p/9W0pP+vpZ3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwLmz///////+/v3///39//79/P/+/Pr//vr5//35 + 9//99/b//ffz//z08f/89O///PLt//vw6//67+n/5Mu//7GpoP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBurX///////////////////7+///+ + /v///v7///79///+/f/+/f3//v38//79/P/+/Pz//vz7//78+//99vT/s6uj/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK8tv/BvLX/wbu1/8C6 + tP/AubP/v7iy/7+4sf++t7D/vLav/7y1rv+7tK3/urOs/7myqv+5sKn/uK+o/7evp/+2raX/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A + AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A + AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA/ygAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAA + AAAAAAAAAAEAAAABAAAAAAAA/vn4AP349wD++vkA/PHtAPzz8AD78/AA/ff1AP77+gD12s8A9+HYAPjm + 3wD56uQA++/qAO3j3wDn4uAA0rGiAPPVxwD01skA89bJAPTYywDz18oA9dvQAPbd0gD13NEA9t7TAPXd + 0gD239UA9+HXAPfj2gD45NsA+erjAPjp4gD67OYA+/DrAPzz7wDl3tsA/PXyAMajkgDHppYA1bSkAMqw + owD12s0A9NnMAPbd0QD13tMA9uDVAPXf1AD24tgA9+TbAPjl3AD46OAA+u7oAPzy7QD78ewA4trWAPz2 + 8wDu6ugA/vz7AMirmwDz2csA59nRAN7TzQD78u0A/PXxAOnc1ADc0MkA/PTvAPvz7gD9+PUAkH5yAI18 + cADw7esAemVVAHtmVwB+aVoAfmpbAH9rXACBbV4AgGxdAIJuXwCDcGIAgm9hAI17bgCUhHgAloZ6AJyO + hACtopoA9vLvAOjk4QB8aFgAfWlZAIVyYwCFc2UAh3VnAIl3aQCLemwAjn5xAJGBdACPf3IAmYp+AJuN + ggCgk4gApZmPAKqflgCroJcAr6WdALivqACKeWoAkYJ1AJuNgQCfkYUAo5eMAKGVigCnnJIAsaeeAK6k + mwC1rKQAtq2lAODY0QDAubMAv7iyALmxqQC3r6cAvLWuALqzrAC/uLEAvrewAMK8tgDAurQA/fr3AP37 + +QDp5+UA//79AP79/ACyqqEAvLWtALy2rwC7ta0A/fz6ADXFAAAr0QAA2/v9ANP4/ADd+/4A3Pr9ANv5 + /ADb+v4A1vT4AMjz+gDB6fAAz+zxANHt8gC77/kAvO/5AMLw+gDS9v0A2+rtALXs+QC27PkAter2AKbl + 9wCn5vcAqOb3AKvm9wDG4egAl971AJjg9gCo5vkAttnkAGvN8QBszvEAbc3xAG7O8gBvzvEAcM7xAHTP + 8QB40vMAetP0AHvU9AB81PQAfNPzAJDc9gCN1fAAkt32AJHY8QCe3/UAydvhAGzO8wBtzPIAb8zzAG3K + 7gBtyO0Aa8XqAHDO8gBwzfEAb8zwAG/M7wBvy+8Ab8ntAG7H7ABuyOsAbsfqAHLO8QBxy+8AcMnsAG3E + 5gBwx+kAd9HzAHLG6ABxxecAccHiAHXH5wByv94AeszsAHjC4QCfydkAq8jTALfR2wC2ztgAbsLmAG/A + 4wB0wOIAfLnUAJm8zAChvssArMnWAKzG0gCxy9YAjrXJAKS/zACnws8AnrfEAKnE0QCkvcoAorvIAKrE + 0QCFqb0AjbLGAI6uwACrxdMAnrbDAJuzwQCasb8AobnHAJKpuACYr74Alau6AJGnuACQpbUAl629AI2h + sgCPo7MAjaCxAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABeXVxcUVFRUVJQTk9PTEtbW1tbWkpKSUkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfCBAQJiYm + JiYmJiYmJiYmJiYmJiYmJ0oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgCCsrFBQUFBQUFBQUExUSEhIS + ExMRO1oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTCAkJCQkJCSsqKysrKxQVFRUVjYwTO1sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABhOgkJCQkJCQkJCQkqKysUFBQUjYwVO00AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABiOhgYGBgYGBgYFhYWCQkJCQkJKis8O04AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUOhkZLS0t + LS0aGhoYGBYJCQkJCQkqO1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVOhsbLi4uLhsuLy0ZGRcsLCws + FhYJO1EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkOhwcCrvi4fHx9/Xv5e7l5fAtGhgWO10AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABuOh0d2uDYqZaWoKbW0dTX3+3uGS0aO14AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABWhjIy6LmhmZWVn6bQxsbH0t39LhsZO18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvhgsL9Lai + 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 + AAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB// + AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/g + AAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB// + AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD///////8AAP// + /////wAAKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAId0 + Zv+Fc2X/hXJj/4VyY/+DcGL/g3Bi/4NwYv+DcGL/g29h/4JuX/+BbV7/gGxd/4BsXP9+alv/fmla/31p + Wf99aVn/fWlZ/31pWf98Z1j/e2dX/3tmVv96Zlb/emVV/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIl3af/++/r/0rGi/9Kxov/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8aj + kv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Hppb/e2ZX/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIt5a//++/r/9NnM//TZzP/02Mz/9NjM//TYzP/02Mz/9NjM//TY + y//02Mv/9NfL//TYyv/z18n/89fK//TWyf/01sn/9NbJ//TWyf/z1sn/89bI//PVx//Iq5v/fGhY/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI17bv/+/Pr/9NrO//Tazv/12s7/9drO//Xa + zv/12s7/9NnN//Tazf/02c3/9NnN//TZzP/02cz/9NjL//PXyv/z18r/89fK//PXyv8uzAD/OcEA//PW + yP/Iq5v/fWlZ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5+cf/+/Pv/9dvP//Xb + z//028//9NvP//Tbz//028//9dvP//Taz//12s7/9drO//Xazf/02c3/9NnM//TYzP/02Mz/9NjM//TY + zP8n1QD/MckA//PYyv/Iq5v/f2tc/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJGB + dP/+/Pv/9dzS//Xc0v/13NH/9dzR//Xc0f/13NH/9d3R//Xd0f/13ND/9dzQ//Xb0P/028//9NvP//Xa + zv/12s7/9drO//Xazv/12c3/9NnM//PZy//Iq5v/gW1e/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJODd//+/Pv/9t7T//be0//13tP/9d7T//Xe0//13tP/9d7T//Xe0v/13dL/9d3S//Xc + 0v/13dH/9dvQ//Tbz//028//9NvP//Tbz//1287/9drO//Xazf/Iq5v/gW9g/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJWGev/+/Pv/9t/V//bf1f/24NX/9uDV//bg1f/24NX/9t/V//bg + 1f/139T/9d7U//bf0//23tP/9t3S//bd0f/23dH/9t3R//bd0f/13ND/9dvQ//Xaz//Iq5v/g3Bi/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiJff/+/Pv/9+HX//fh1//34dj/0dnd/6vJ + 1v+hvsv/nbXD/562w/+Vq7r/kqm4/46uwP+Ptsr/jrLE/4+1yP+MtMr/q8XT//Xe0//13dL/9d3R//Xc + 0P/Iq5v/hXNl/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqMgP/+/Pz/9+PZ//fj + 2f+10Nv/mbzM/5/J2f+w2ub/wenw/8Hp8P+16vb/l930/3rM7P9yxuj/dcfn/3jC4f98udT/ham9/4yy + x//23tT/9d7T//Xd0v/Iq5v/h3Vn/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyO + hP/+/fz/+OXc//jl3P+et8T/kdjx/6bl9/+77/n/yPP6/8jz+v+27Pn/l9/2/3fR8/9uy+//b8ru/2/J + 7f9xxef/b8Dj/42gsf/24Nb/9t/V//bf0//Iq5v/iXdp/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJ+Rhv/+/fz/+Obf//jm3/+guMb/kNz2/6fm9/+77/n/yPP6/8jz+v+27Pn/mOD2/3nT + 9P9tzfH/b8vv/3DJ7P9ux+r/bcTm/42hsv/34df/9uDW//bf1f/Iq5v/i3ps/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKGUif/+/fz/+Ojh//jo4f+husf/kNz2/6bm9/+87/n/yPP6/8jz + +v+17Pj/meD2/3zU9P9szvP/b83w/2/L7v9uyOv/bcTm/4+js//34tn/9+HY//fh1v/Iq5v/jXxw/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOXjP/+/fz/+erj//nq4/+iu8j/kt32/6fm + 9/+77/n/yPP6/8jz+v+17Pn/meD2/3vU9P9tzPL/b83x/27L7/9tyOz/bcHn/5CktP/35Nv/9+Pa//bi + 2P/Hppb/j39y/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOXjP/+/fz/+erj//nq + 4/+kvcr/kt32/6fm9/+87/n/yPP6/8jz+v+27Pn/mOD2/3vU9P9tzPL/b87x/2/L7/9tx+z/b8Pm/5Gm + tv/35Nv/9+Pa//bi2P/Hppb/j39y/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOX + jP/+/fz/+erj//nq4/+et8T/kdjx/6bl9/+77/n/yPP6/8jz+v+27Pn/mOD2/3vU9P9szfP/cc7x/2/L + 7/9ux+z/ccDi/42gsf/35Nv/9+Pa//bi2P/Hppb/j39y/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAKOXjP/+/fz/+erj//nq4/+guMb/kNz2/6fm9/+77/n/yPP6/8jz+v+27Pn/mOD2/3vU + 9P9rzPH/cM7y/2/M7/9tyOr/b8Hl/42hsv/35Nv/9+Pa//bi2P/Hppb/kYJ1/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOXjP/+/fz/+erj//nq4/+husf/kNz2/6bm9/+87/n/yPP6/8jz + +v+17Pj/meD2/3vU9P9szvH/bs7x/3DL7/9vx+n/ccLi/5Cltv/35Nv/9+Pa//bi2P/Hppb/kYJ1/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKWaj//+/f3/+evl//nr5f+iu8j/kt32/6fm + 9/+77/n/yPP6/8jz+v+17Pn/meD2/3vV9P9rzvH/b87w/3DL7v9wx+n/cr7d/5KouP/45d3/9+Tc//jk + 2//Hppb/kYJ1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKedk////v7//vv6//77 + +v+kvcr/kt32/6fm9/+87/n/yPP6/8jz+v+27Pn/mOD2/3vU9P9tzPL/b87x/3HL7v9vx+r/c7/f/5Gn + uP/++vn//vr4//76+P/99/X/lIR4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKuf + lv/w7ev/7ePf/+3j3/+kv8z/kt32/6jm9/+87/n/yPP6/8jz+v+17Pn/mOD2/3vU9P9vzPP/cM3x/3HL + 7/9vx+r/ccDf/5KpuP/p3NX/6NvT/+fa0v/m2ND/l4d7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAKyhmf/CvLb/v7iy/7+4sv+mwc7/kt32/6jm9/+87/n/yPP6/8jz+v+27Pn/meD2/3vT + 9P9uzvH/cM7x/3HL7/9ux+r/dMDi/5Squv+KeGr/hXNk/4BtXv99aFn/mYt+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy7f+nws//kt32/6jm9/+87/n/yPP6/8jz + +v+27Pn/mOD2/3vT9P9uzvL/cM7x/2/M7/9ux+v/ccLi/5Wruv/56uT/+eri//jo4P/KsKP/m42B/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy7f+pxNH/kt32/6jm + 9/+87/n/yPP6/8jz+v+27Pn/l9/2/3jS8/9uzPD/cs7x/3DM8P9tyO3/bcTn/5etvf/56uT/+eri//jo + 4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy + 7f+rx9L/kt32/6fm9/+77/n/yPP6/8jz+v+27Pn/mOD2/3zT8/9vzPD/dM/x/2/M8P9tyu7/a8Xq/5iv + vv/56uT/+eri//jo4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6k + m////v3/+/Lt//vy7f+ryNP/qOb5/8Tx+v/T+Pz/2/v9/9v7/f/c+/7/2/r+/9L2/f/B7/r/we/6/6vm + 9/+e3/X/jdXw/5qxv//56uT/+eri//jo4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAK6km////v3/+/Lt//vy7f+tydX/3fv+/937/v/d+/7/3fv+/937/v/d+/7/3Pv9/9z6 + /f/c+v3/3Pr9/9v6/f/b+v3/3fv+/5uzwf/56uT/+eri//jo4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy7f/K4Of/u9jh/8Xj6v/P7PH/1vT4/9b0 + +P/b+fz/2/n8/9b0+P/R7fL/1/X5/9Dt8v/C3+b/sszW/7PM1v/56uT/+eri//jo4P/KsKP/m42B/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALGnnv///v7//PPv//zz7//28u//2+rt/8Pd + 5f+4093/r8vW/7HL1v+qxNH/p8LP/6zG0v+2ztj/q8bS/7DL1v+30dr/yNzh/+7q6P/56+X/+evk//jp + 4v/KsKP/npCE/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALKqof///v7//PXx//z1 + 8f/89fH//PXx//z18f/89fH//PTx//z08P/88+///PLu//zx7f/78Oz/+vDq//ru6P/67uj/+u7o//ru + 6P/67Of/+ezl//nq4//KsKP/oJOI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWs + pP///v7//fbz//328//89vP//Pbz//z28//89vP//Pbz//z18v/89fD//PPv//vz7v/78u3/+vHr//vv + 6v/77+r/++/q//vv6v/67uj/+uzm//nr5P/KsKP/opaL/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALeup/////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/fz/pZiO/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAALixqf/CvLb/v7my/7+5sv+7ta3/u7Wt/7u1rf+7ta3/t6+n/7Kp + of+topr/p5uS/6GViv+bjYL/lYZ5/5B+cv+QfnL/kH5y/5B+cv+KeWr/hXJj/4BtXv99aFn/p5uR/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALqzq//p5+X/6OTh/+jk4f/o5OH/6OTh/+jk + 4f/o5OH/5+Pg/+fh3//l4Nz/5d7b/+Td2f/i29f/4dnU/+DY0v/g2NL/4NjS/+DY0v/f1s//3tPN/9zR + yv/bz8j/qZ6V/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1rf///////vv6//77 + +v/9+/n//fv5//37+f/9+/n//vr5//369//9+Pf//fj1//z38//89fL/+/Pw//vz7v/78+7/+/Pu//vz + 7v/78ez/++/q//ru6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1 + rf///////vv6//77+v/9+/n//fv5//37+f/9+/n//vr5//369//9+Pf//fj1//z38//89fL/+/Pw//vz + 7v/78+7/+/Pu//vz7v/78ez/++/q//ru6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALy1rf///////vv6//77+v/9+/n//fv5//37+f/9+/n//vr5//369//9+Pf//fj1//z3 + 8//89fL/+/Pw//vz7v/78+7/+/Pu//vz7v/78ez/++/q//ru6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1rf///////vv6//77+v/9+/n//fv5//37+f/9+/n//vr5//36 + 9//9+Pf//fj1//z38//89fL/+/Pw//vz7v/78+7/+/Pu//vz7v/78ez/++/q//ru6P/VtKT/q6CX/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1rf///////vv6//77+v/9+/n//fv5//37 + +f/9+/n//vr5//369//9+Pf//fj1//z38//89fL/+/Pw//vz7v/78+7/+/Pu//vz7v/78ez/++/q//ru + 6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL22sP////////z7///8 + +////Pr///z6///8+v///Pr//fz6//77+f/++fj//fn2//329P/89fL//PTx//zz7//88+///PPv//zz + 7//78u3/+/Dr//vv6P/VtKT/rqOb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+4 + sv////////38///9/P/+/fz//v38//79/P/+/fz//vz6//77+f/++fj//fn2//349f/89vP//PTx//zz + 8P/88/D//PPw//zz8P/88u3/+/Hr//rv6f/VtKT/r6Wd/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMC5s////////v79//7+/f///f3///39///9/f///f3//v38//78+v/++vn//fn3//33 + 9v/99/P//PTx//z07//89O///PTv//z07//88u3/+/Dr//rv6f/VtKT/samg/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMG6tf////////////////////////////////////////7+///+ + /v///v7///79///+/f/+/f3//v38//79/P/+/fz//v38//79/P/+/Pz//vz7//78+//99vT/s6uj/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK8tv/BvLX/wbu1/8G7tf/AurT/wLq0/8C6 + tP/AurT/wLmz/7+4sv+/uLH/vrew/7y2r/+8ta7/u7St/7qzrP+6s6z/urOs/7qzrP+5sqr/ubCp/7iv + qP+3r6f/tq2l/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD/8AAAD/8AAP/wAAAP/wAA//AAAA// + AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/w + AAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA// + AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/w + AAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA// + AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/w + AAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA////////AAD///////8AAA== + + \ No newline at end of file diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/FrmMain.Designer.cs b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmMain.Designer.cs similarity index 98% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/FrmMain.Designer.cs rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmMain.Designer.cs index 018a5f7a6b..43b0740f3a 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/FrmMain.Designer.cs +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmMain.Designer.cs @@ -1,462 +1,462 @@ -namespace DemoWorkload -{ - partial class FrmMain - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); - System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); - System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint1 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(0D, 0D); - System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); - System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint2 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(0D, 1D); - System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea3 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); - System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series(); - System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint3 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(0D, 1D); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmMain)); - this.btnRun = new System.Windows.Forms.Button(); - this.btnStop = new System.Windows.Forms.Button(); - this.lbResults = new System.Windows.Forms.Label(); - this.menuStrip1 = new System.Windows.Forms.MenuStrip(); - this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.configurationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ErrorMessages = new System.Windows.Forms.TextBox(); - this.chtTPS = new System.Windows.Forms.DataVisualization.Charting.Chart(); - this.statusStrip1 = new System.Windows.Forms.StatusStrip(); - this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); - this.lblTime = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel(); - this.lblThreads = new System.Windows.Forms.ToolStripStatusLabel(); - this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.label4 = new System.Windows.Forms.Label(); - this.speedDialPanel = new System.Windows.Forms.Panel(); - this.label2 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.btnToggle = new System.Windows.Forms.Button(); - this.chtLatches = new System.Windows.Forms.DataVisualization.Charting.Chart(); - this.chtCPU = new System.Windows.Forms.DataVisualization.Charting.Chart(); - this.label3 = new System.Windows.Forms.Label(); - this.menuStrip1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.chtTPS)).BeginInit(); - this.statusStrip1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); - this.splitContainer1.Panel1.SuspendLayout(); - this.splitContainer1.Panel2.SuspendLayout(); - this.splitContainer1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.chtLatches)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.chtCPU)).BeginInit(); - this.SuspendLayout(); - // - // btnRun - // - this.btnRun.BackColor = System.Drawing.Color.White; - this.btnRun.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnRun.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnRun.ForeColor = System.Drawing.SystemColors.ControlDarkDark; - this.btnRun.Location = new System.Drawing.Point(601, 16); - this.btnRun.Name = "btnRun"; - this.btnRun.Size = new System.Drawing.Size(84, 30); - this.btnRun.TabIndex = 3; - this.btnRun.Text = "Start"; - this.btnRun.UseVisualStyleBackColor = false; - this.btnRun.Click += new System.EventHandler(this.OnRunClick); - // - // btnStop - // - this.btnStop.BackColor = System.Drawing.Color.White; - this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnStop.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnStop.ForeColor = System.Drawing.SystemColors.ControlDarkDark; - this.btnStop.Location = new System.Drawing.Point(692, 16); - this.btnStop.Name = "btnStop"; - this.btnStop.Size = new System.Drawing.Size(82, 30); - this.btnStop.TabIndex = 25; - this.btnStop.Tag = "Data"; - this.btnStop.Text = "Stop"; - this.btnStop.UseVisualStyleBackColor = false; - this.btnStop.Click += new System.EventHandler(this.btnStop_Click); - // - // lbResults - // - this.lbResults.BackColor = System.Drawing.Color.Transparent; - this.lbResults.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lbResults.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(166))))); - this.lbResults.Location = new System.Drawing.Point(-35, 3); - this.lbResults.Name = "lbResults"; - this.lbResults.Size = new System.Drawing.Size(235, 53); - this.lbResults.TabIndex = 31; - this.lbResults.Text = "Baseline"; - this.lbResults.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // menuStrip1 - // - this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); - this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.optionsToolStripMenuItem}); - this.menuStrip1.Location = new System.Drawing.Point(0, 0); - this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Padding = new System.Windows.Forms.Padding(6, 1, 0, 1); - this.menuStrip1.Size = new System.Drawing.Size(815, 24); - this.menuStrip1.TabIndex = 32; - this.menuStrip1.Text = "menuStrip1"; - // - // optionsToolStripMenuItem - // - this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.configurationToolStripMenuItem, - this.exitToolStripMenuItem}); - this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; - this.optionsToolStripMenuItem.Size = new System.Drawing.Size(61, 22); - this.optionsToolStripMenuItem.Text = "Options"; - // - // configurationToolStripMenuItem - // - this.configurationToolStripMenuItem.Name = "configurationToolStripMenuItem"; - this.configurationToolStripMenuItem.Size = new System.Drawing.Size(148, 22); - this.configurationToolStripMenuItem.Text = "Configuration"; - this.configurationToolStripMenuItem.Click += new System.EventHandler(this.configurationToolStripMenuItem_Click); - // - // exitToolStripMenuItem - // - this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.Size = new System.Drawing.Size(148, 22); - this.exitToolStripMenuItem.Text = "Exit"; - this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); - // - // ErrorMessages - // - this.ErrorMessages.Location = new System.Drawing.Point(846, 79); - this.ErrorMessages.Multiline = true; - this.ErrorMessages.Name = "ErrorMessages"; - this.ErrorMessages.ReadOnly = true; - this.ErrorMessages.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.ErrorMessages.Size = new System.Drawing.Size(360, 272); - this.ErrorMessages.TabIndex = 5; - this.ErrorMessages.TabStop = false; - // - // chtTPS - // - this.chtTPS.BackColor = System.Drawing.Color.Transparent; - chartArea1.AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Seconds; - chartArea1.AxisX.MajorGrid.Enabled = false; - chartArea1.AxisX.MajorGrid.Interval = 0D; - chartArea1.AxisX.MajorGrid.IntervalOffset = 0D; - chartArea1.AxisX.MajorGrid.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Auto; - chartArea1.AxisX.MajorTickMark.Enabled = false; - chartArea1.AxisX.Maximum = 100D; - chartArea1.AxisX.Minimum = 0D; - chartArea1.AxisY.MajorGrid.Enabled = false; - chartArea1.AxisY.Minimum = 0D; - chartArea1.BackColor = System.Drawing.Color.Transparent; - chartArea1.Name = "ChartArea1"; - this.chtTPS.ChartAreas.Add(chartArea1); - legend1.BackColor = System.Drawing.Color.Transparent; - legend1.Enabled = false; - legend1.Name = "Legend1"; - this.chtTPS.Legends.Add(legend1); - this.chtTPS.Location = new System.Drawing.Point(337, 89); - this.chtTPS.Name = "chtTPS"; - this.chtTPS.Palette = System.Windows.Forms.DataVisualization.Charting.ChartColorPalette.None; - series1.ChartArea = "ChartArea1"; - series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Area; - series1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(166))))); - series1.Legend = "Legend1"; - series1.MarkerBorderWidth = 3; - series1.Name = "TPS"; - series1.Points.Add(dataPoint1); - this.chtTPS.Series.Add(series1); - this.chtTPS.Size = new System.Drawing.Size(348, 268); - this.chtTPS.TabIndex = 33; - this.chtTPS.Text = "chart1"; - // - // statusStrip1 - // - this.statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); - this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripStatusLabel1, - this.lblTime, - this.toolStripStatusLabel3, - this.lblThreads}); - this.statusStrip1.Location = new System.Drawing.Point(0, 645); - this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Size = new System.Drawing.Size(815, 22); - this.statusStrip1.TabIndex = 35; - this.statusStrip1.Text = "statusStrip1"; - // - // toolStripStatusLabel1 - // - this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; - this.toolStripStatusLabel1.Size = new System.Drawing.Size(80, 17); - this.toolStripStatusLabel1.Text = "Elapsed Time:"; - // - // lblTime - // - this.lblTime.Name = "lblTime"; - this.lblTime.Size = new System.Drawing.Size(13, 17); - this.lblTime.Text = "0"; - // - // toolStripStatusLabel3 - // - this.toolStripStatusLabel3.Name = "toolStripStatusLabel3"; - this.toolStripStatusLabel3.Size = new System.Drawing.Size(100, 17); - this.toolStripStatusLabel3.Text = "Running Threads:"; - // - // lblThreads - // - this.lblThreads.Name = "lblThreads"; - this.lblThreads.Size = new System.Drawing.Size(13, 17); - this.lblThreads.Text = "0"; - // - // splitContainer1 - // - this.splitContainer1.BackColor = System.Drawing.Color.Transparent; - this.splitContainer1.Location = new System.Drawing.Point(0, 25); - this.splitContainer1.Name = "splitContainer1"; - this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // splitContainer1.Panel1 - // - this.splitContainer1.Panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; - this.splitContainer1.Panel1.Controls.Add(this.label4); - this.splitContainer1.Panel1.Controls.Add(this.speedDialPanel); - this.splitContainer1.Panel1.Controls.Add(this.label2); - this.splitContainer1.Panel1.Controls.Add(this.label1); - this.splitContainer1.Panel1.Controls.Add(this.btnToggle); - this.splitContainer1.Panel1.Controls.Add(this.chtTPS); - this.splitContainer1.Panel1.Controls.Add(this.btnRun); - this.splitContainer1.Panel1.Controls.Add(this.btnStop); - this.splitContainer1.Panel1.Controls.Add(this.lbResults); - // - // splitContainer1.Panel2 - // - this.splitContainer1.Panel2.Controls.Add(this.chtLatches); - this.splitContainer1.Panel2.Controls.Add(this.chtCPU); - this.splitContainer1.Size = new System.Drawing.Size(786, 655); - this.splitContainer1.SplitterDistance = 398; - this.splitContainer1.TabIndex = 39; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label4.ForeColor = System.Drawing.SystemColors.ControlDarkDark; - this.label4.Location = new System.Drawing.Point(117, 325); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(122, 13); - this.label4.TabIndex = 45; - this.label4.Text = "Transactions/sec x1000"; - // - // speedDialPanel - // - this.speedDialPanel.Location = new System.Drawing.Point(21, 86); - this.speedDialPanel.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.speedDialPanel.Name = "speedDialPanel"; - this.speedDialPanel.Size = new System.Drawing.Size(319, 260); - this.speedDialPanel.TabIndex = 43; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label2.ForeColor = System.Drawing.SystemColors.ControlDarkDark; - this.label2.Location = new System.Drawing.Point(354, 69); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(124, 17); - this.label2.TabIndex = 42; - this.label2.Text = "Transactions / sec"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label1.ForeColor = System.Drawing.SystemColors.ControlDarkDark; - this.label1.Location = new System.Drawing.Point(20, 68); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(260, 17); - this.label1.TabIndex = 41; - this.label1.Text = "Increase in performance since last reset"; - // - // btnToggle - // - this.btnToggle.BackColor = System.Drawing.Color.White; - this.btnToggle.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnToggle.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnToggle.ForeColor = System.Drawing.SystemColors.ControlDarkDark; - this.btnToggle.Location = new System.Drawing.Point(18, 362); - this.btnToggle.Name = "btnToggle"; - this.btnToggle.Size = new System.Drawing.Size(149, 30); - this.btnToggle.TabIndex = 39; - this.btnToggle.Text = "Show diagnostics "; - this.btnToggle.UseVisualStyleBackColor = false; - this.btnToggle.Click += new System.EventHandler(this.btnToggle_Click); - // - // chtLatches - // - chartArea2.AxisX.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.False; - chartArea2.AxisX.LabelStyle.Enabled = false; - chartArea2.AxisX.LineColor = System.Drawing.Color.White; - chartArea2.AxisX.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.NotSet; - chartArea2.AxisX.LineWidth = 0; - chartArea2.AxisX.MajorGrid.Enabled = false; - chartArea2.AxisX.MajorTickMark.Enabled = false; - chartArea2.AxisY.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.NotSet; - chartArea2.AxisY.MajorGrid.Enabled = false; - chartArea2.AxisY.MajorTickMark.Enabled = false; - chartArea2.AxisY.Maximum = 170000D; - chartArea2.AxisY.Minimum = 0D; - chartArea2.AxisY.Title = "Current latches / sec"; - chartArea2.AxisY.TitleFont = new System.Drawing.Font("Microsoft Sans Serif", 10F); - chartArea2.AxisY.TitleForeColor = System.Drawing.SystemColors.ControlDarkDark; - chartArea2.BorderWidth = 0; - chartArea2.Name = "ChartArea1"; - this.chtLatches.ChartAreas.Add(chartArea2); - this.chtLatches.Location = new System.Drawing.Point(0, 120); - this.chtLatches.Name = "chtLatches"; - series2.ChartArea = "ChartArea1"; - series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bar; - series2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(73)))), ((int)(((byte)(0))))); - series2.Name = "Latches"; - series2.Points.Add(dataPoint2); - this.chtLatches.Series.Add(series2); - this.chtLatches.Size = new System.Drawing.Size(685, 84); - this.chtLatches.TabIndex = 42; - this.chtLatches.Text = "chart1"; - // - // chtCPU - // - this.chtCPU.BackColor = System.Drawing.Color.Transparent; - chartArea3.AxisX.LabelStyle.Enabled = false; - chartArea3.AxisX.LineColor = System.Drawing.Color.White; - chartArea3.AxisX.MajorGrid.Enabled = false; - chartArea3.AxisX.MajorTickMark.Enabled = false; - chartArea3.AxisX.MaximumAutoSize = 10F; - chartArea3.AxisY.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.NotSet; - chartArea3.AxisY.MajorGrid.Enabled = false; - chartArea3.AxisY.MajorTickMark.Enabled = false; - chartArea3.AxisY.Maximum = 100D; - chartArea3.AxisY.Minimum = 0D; - chartArea3.AxisY.Title = "Current % CPU Usage"; - chartArea3.AxisY.TitleForeColor = System.Drawing.SystemColors.ControlDarkDark; - chartArea3.BackColor = System.Drawing.Color.White; - chartArea3.BorderColor = System.Drawing.Color.White; - chartArea3.Name = "ChartArea1"; - chartArea3.Position.Auto = false; - chartArea3.Position.Height = 30F; - chartArea3.Position.Width = 77.49682F; - chartArea3.Position.X = 3F; - chartArea3.Position.Y = 1F; - this.chtCPU.ChartAreas.Add(chartArea3); - this.chtCPU.Dock = System.Windows.Forms.DockStyle.Fill; - this.chtCPU.Location = new System.Drawing.Point(0, 0); - this.chtCPU.Name = "chtCPU"; - this.chtCPU.Palette = System.Windows.Forms.DataVisualization.Charting.ChartColorPalette.None; - series3.ChartArea = "ChartArea1"; - series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bar; - series3.Color = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(198)))), ((int)(((byte)(0))))); - series3.Name = "CPUUsage"; - series3.Points.Add(dataPoint3); - this.chtCPU.Series.Add(series3); - this.chtCPU.Size = new System.Drawing.Size(786, 253); - this.chtCPU.TabIndex = 41; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.BackColor = System.Drawing.Color.Transparent; - this.label3.Location = new System.Drawing.Point(843, 40); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(83, 13); - this.label3.TabIndex = 11; - this.label3.Text = "Error Messages:"; - // - // FrmMain - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.Color.White; - this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.ClientSize = new System.Drawing.Size(815, 667); - this.Controls.Add(this.statusStrip1); - this.Controls.Add(this.splitContainer1); - this.Controls.Add(this.label3); - this.Controls.Add(this.ErrorMessages); - this.Controls.Add(this.menuStrip1); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MainMenuStrip = this.menuStrip1; - this.Name = "FrmMain"; - this.Text = "Blue Yonder Ticket Reservation Simulator"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmMain_FormClosing); - this.Load += new System.EventHandler(this.FrmMain_Load); - this.menuStrip1.ResumeLayout(false); - this.menuStrip1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.chtTPS)).EndInit(); - this.statusStrip1.ResumeLayout(false); - this.statusStrip1.PerformLayout(); - this.splitContainer1.Panel1.ResumeLayout(false); - this.splitContainer1.Panel1.PerformLayout(); - this.splitContainer1.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); - this.splitContainer1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.chtLatches)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.chtCPU)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button btnRun; - private System.Windows.Forms.Button btnStop; - private System.Windows.Forms.Label lbResults; - private System.Windows.Forms.MenuStrip menuStrip1; - private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem configurationToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; - private System.Windows.Forms.TextBox ErrorMessages; - private System.Windows.Forms.DataVisualization.Charting.Chart chtTPS; - private System.Windows.Forms.StatusStrip statusStrip1; - private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; - private System.Windows.Forms.ToolStripStatusLabel lblTime; - private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3; - private System.Windows.Forms.ToolStripStatusLabel lblThreads; - private System.Windows.Forms.SplitContainer splitContainer1; - private System.Windows.Forms.Button btnToggle; - private System.Windows.Forms.DataVisualization.Charting.Chart chtCPU; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.DataVisualization.Charting.Chart chtLatches; - private System.Windows.Forms.Panel speedDialPanel; - private System.Windows.Forms.Label label4; - } -} - +namespace DemoWorkload +{ + partial class FrmMain + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); + System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint1 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(0D, 0D); + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint2 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(0D, 1D); + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea3 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.DataPoint dataPoint3 = new System.Windows.Forms.DataVisualization.Charting.DataPoint(0D, 1D); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmMain)); + this.btnRun = new System.Windows.Forms.Button(); + this.btnStop = new System.Windows.Forms.Button(); + this.lbResults = new System.Windows.Forms.Label(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.configurationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ErrorMessages = new System.Windows.Forms.TextBox(); + this.chtTPS = new System.Windows.Forms.DataVisualization.Charting.Chart(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lblTime = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lblThreads = new System.Windows.Forms.ToolStripStatusLabel(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.label4 = new System.Windows.Forms.Label(); + this.speedDialPanel = new System.Windows.Forms.Panel(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.btnToggle = new System.Windows.Forms.Button(); + this.chtLatches = new System.Windows.Forms.DataVisualization.Charting.Chart(); + this.chtCPU = new System.Windows.Forms.DataVisualization.Charting.Chart(); + this.label3 = new System.Windows.Forms.Label(); + this.menuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.chtTPS)).BeginInit(); + this.statusStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.chtLatches)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.chtCPU)).BeginInit(); + this.SuspendLayout(); + // + // btnRun + // + this.btnRun.BackColor = System.Drawing.Color.White; + this.btnRun.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnRun.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnRun.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.btnRun.Location = new System.Drawing.Point(601, 16); + this.btnRun.Name = "btnRun"; + this.btnRun.Size = new System.Drawing.Size(84, 30); + this.btnRun.TabIndex = 3; + this.btnRun.Text = "Start"; + this.btnRun.UseVisualStyleBackColor = false; + this.btnRun.Click += new System.EventHandler(this.OnRunClick); + // + // btnStop + // + this.btnStop.BackColor = System.Drawing.Color.White; + this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnStop.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnStop.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.btnStop.Location = new System.Drawing.Point(692, 16); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(82, 30); + this.btnStop.TabIndex = 25; + this.btnStop.Tag = "Data"; + this.btnStop.Text = "Stop"; + this.btnStop.UseVisualStyleBackColor = false; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // lbResults + // + this.lbResults.BackColor = System.Drawing.Color.Transparent; + this.lbResults.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lbResults.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(166))))); + this.lbResults.Location = new System.Drawing.Point(-35, 3); + this.lbResults.Name = "lbResults"; + this.lbResults.Size = new System.Drawing.Size(235, 53); + this.lbResults.TabIndex = 31; + this.lbResults.Text = "Baseline"; + this.lbResults.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // menuStrip1 + // + this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.optionsToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Padding = new System.Windows.Forms.Padding(6, 1, 0, 1); + this.menuStrip1.Size = new System.Drawing.Size(815, 24); + this.menuStrip1.TabIndex = 32; + this.menuStrip1.Text = "menuStrip1"; + // + // optionsToolStripMenuItem + // + this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.configurationToolStripMenuItem, + this.exitToolStripMenuItem}); + this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; + this.optionsToolStripMenuItem.Size = new System.Drawing.Size(61, 22); + this.optionsToolStripMenuItem.Text = "Options"; + // + // configurationToolStripMenuItem + // + this.configurationToolStripMenuItem.Name = "configurationToolStripMenuItem"; + this.configurationToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.configurationToolStripMenuItem.Text = "Configuration"; + this.configurationToolStripMenuItem.Click += new System.EventHandler(this.configurationToolStripMenuItem_Click); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.exitToolStripMenuItem.Text = "Exit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); + // + // ErrorMessages + // + this.ErrorMessages.Location = new System.Drawing.Point(846, 79); + this.ErrorMessages.Multiline = true; + this.ErrorMessages.Name = "ErrorMessages"; + this.ErrorMessages.ReadOnly = true; + this.ErrorMessages.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.ErrorMessages.Size = new System.Drawing.Size(360, 272); + this.ErrorMessages.TabIndex = 5; + this.ErrorMessages.TabStop = false; + // + // chtTPS + // + this.chtTPS.BackColor = System.Drawing.Color.Transparent; + chartArea1.AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Seconds; + chartArea1.AxisX.MajorGrid.Enabled = false; + chartArea1.AxisX.MajorGrid.Interval = 0D; + chartArea1.AxisX.MajorGrid.IntervalOffset = 0D; + chartArea1.AxisX.MajorGrid.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Auto; + chartArea1.AxisX.MajorTickMark.Enabled = false; + chartArea1.AxisX.Maximum = 100D; + chartArea1.AxisX.Minimum = 0D; + chartArea1.AxisY.MajorGrid.Enabled = false; + chartArea1.AxisY.Minimum = 0D; + chartArea1.BackColor = System.Drawing.Color.Transparent; + chartArea1.Name = "ChartArea1"; + this.chtTPS.ChartAreas.Add(chartArea1); + legend1.BackColor = System.Drawing.Color.Transparent; + legend1.Enabled = false; + legend1.Name = "Legend1"; + this.chtTPS.Legends.Add(legend1); + this.chtTPS.Location = new System.Drawing.Point(337, 89); + this.chtTPS.Name = "chtTPS"; + this.chtTPS.Palette = System.Windows.Forms.DataVisualization.Charting.ChartColorPalette.None; + series1.ChartArea = "ChartArea1"; + series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Area; + series1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(166))))); + series1.Legend = "Legend1"; + series1.MarkerBorderWidth = 3; + series1.Name = "TPS"; + series1.Points.Add(dataPoint1); + this.chtTPS.Series.Add(series1); + this.chtTPS.Size = new System.Drawing.Size(348, 268); + this.chtTPS.TabIndex = 33; + this.chtTPS.Text = "chart1"; + // + // statusStrip1 + // + this.statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel1, + this.lblTime, + this.toolStripStatusLabel3, + this.lblThreads}); + this.statusStrip1.Location = new System.Drawing.Point(0, 645); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(815, 22); + this.statusStrip1.TabIndex = 35; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(80, 17); + this.toolStripStatusLabel1.Text = "Elapsed Time:"; + // + // lblTime + // + this.lblTime.Name = "lblTime"; + this.lblTime.Size = new System.Drawing.Size(13, 17); + this.lblTime.Text = "0"; + // + // toolStripStatusLabel3 + // + this.toolStripStatusLabel3.Name = "toolStripStatusLabel3"; + this.toolStripStatusLabel3.Size = new System.Drawing.Size(100, 17); + this.toolStripStatusLabel3.Text = "Running Threads:"; + // + // lblThreads + // + this.lblThreads.Name = "lblThreads"; + this.lblThreads.Size = new System.Drawing.Size(13, 17); + this.lblThreads.Text = "0"; + // + // splitContainer1 + // + this.splitContainer1.BackColor = System.Drawing.Color.Transparent; + this.splitContainer1.Location = new System.Drawing.Point(0, 25); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.splitContainer1.Panel1.Controls.Add(this.label4); + this.splitContainer1.Panel1.Controls.Add(this.speedDialPanel); + this.splitContainer1.Panel1.Controls.Add(this.label2); + this.splitContainer1.Panel1.Controls.Add(this.label1); + this.splitContainer1.Panel1.Controls.Add(this.btnToggle); + this.splitContainer1.Panel1.Controls.Add(this.chtTPS); + this.splitContainer1.Panel1.Controls.Add(this.btnRun); + this.splitContainer1.Panel1.Controls.Add(this.btnStop); + this.splitContainer1.Panel1.Controls.Add(this.lbResults); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.chtLatches); + this.splitContainer1.Panel2.Controls.Add(this.chtCPU); + this.splitContainer1.Size = new System.Drawing.Size(786, 655); + this.splitContainer1.SplitterDistance = 398; + this.splitContainer1.TabIndex = 39; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.label4.Location = new System.Drawing.Point(117, 325); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(122, 13); + this.label4.TabIndex = 45; + this.label4.Text = "Transactions/sec x1000"; + // + // speedDialPanel + // + this.speedDialPanel.Location = new System.Drawing.Point(21, 86); + this.speedDialPanel.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.speedDialPanel.Name = "speedDialPanel"; + this.speedDialPanel.Size = new System.Drawing.Size(319, 260); + this.speedDialPanel.TabIndex = 43; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.label2.Location = new System.Drawing.Point(354, 69); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(124, 17); + this.label2.TabIndex = 42; + this.label2.Text = "Transactions / sec"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.label1.Location = new System.Drawing.Point(20, 68); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(260, 17); + this.label1.TabIndex = 41; + this.label1.Text = "Increase in performance since last reset"; + // + // btnToggle + // + this.btnToggle.BackColor = System.Drawing.Color.White; + this.btnToggle.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnToggle.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnToggle.ForeColor = System.Drawing.SystemColors.ControlDarkDark; + this.btnToggle.Location = new System.Drawing.Point(18, 362); + this.btnToggle.Name = "btnToggle"; + this.btnToggle.Size = new System.Drawing.Size(149, 30); + this.btnToggle.TabIndex = 39; + this.btnToggle.Text = "Show diagnostics "; + this.btnToggle.UseVisualStyleBackColor = false; + this.btnToggle.Click += new System.EventHandler(this.btnToggle_Click); + // + // chtLatches + // + chartArea2.AxisX.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.False; + chartArea2.AxisX.LabelStyle.Enabled = false; + chartArea2.AxisX.LineColor = System.Drawing.Color.White; + chartArea2.AxisX.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.NotSet; + chartArea2.AxisX.LineWidth = 0; + chartArea2.AxisX.MajorGrid.Enabled = false; + chartArea2.AxisX.MajorTickMark.Enabled = false; + chartArea2.AxisY.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.NotSet; + chartArea2.AxisY.MajorGrid.Enabled = false; + chartArea2.AxisY.MajorTickMark.Enabled = false; + chartArea2.AxisY.Maximum = 170000D; + chartArea2.AxisY.Minimum = 0D; + chartArea2.AxisY.Title = "Current latches / sec"; + chartArea2.AxisY.TitleFont = new System.Drawing.Font("Microsoft Sans Serif", 10F); + chartArea2.AxisY.TitleForeColor = System.Drawing.SystemColors.ControlDarkDark; + chartArea2.BorderWidth = 0; + chartArea2.Name = "ChartArea1"; + this.chtLatches.ChartAreas.Add(chartArea2); + this.chtLatches.Location = new System.Drawing.Point(0, 120); + this.chtLatches.Name = "chtLatches"; + series2.ChartArea = "ChartArea1"; + series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bar; + series2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(73)))), ((int)(((byte)(0))))); + series2.Name = "Latches"; + series2.Points.Add(dataPoint2); + this.chtLatches.Series.Add(series2); + this.chtLatches.Size = new System.Drawing.Size(685, 84); + this.chtLatches.TabIndex = 42; + this.chtLatches.Text = "chart1"; + // + // chtCPU + // + this.chtCPU.BackColor = System.Drawing.Color.Transparent; + chartArea3.AxisX.LabelStyle.Enabled = false; + chartArea3.AxisX.LineColor = System.Drawing.Color.White; + chartArea3.AxisX.MajorGrid.Enabled = false; + chartArea3.AxisX.MajorTickMark.Enabled = false; + chartArea3.AxisX.MaximumAutoSize = 10F; + chartArea3.AxisY.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.NotSet; + chartArea3.AxisY.MajorGrid.Enabled = false; + chartArea3.AxisY.MajorTickMark.Enabled = false; + chartArea3.AxisY.Maximum = 100D; + chartArea3.AxisY.Minimum = 0D; + chartArea3.AxisY.Title = "Current % CPU Usage"; + chartArea3.AxisY.TitleForeColor = System.Drawing.SystemColors.ControlDarkDark; + chartArea3.BackColor = System.Drawing.Color.White; + chartArea3.BorderColor = System.Drawing.Color.White; + chartArea3.Name = "ChartArea1"; + chartArea3.Position.Auto = false; + chartArea3.Position.Height = 30F; + chartArea3.Position.Width = 77.49682F; + chartArea3.Position.X = 3F; + chartArea3.Position.Y = 1F; + this.chtCPU.ChartAreas.Add(chartArea3); + this.chtCPU.Dock = System.Windows.Forms.DockStyle.Fill; + this.chtCPU.Location = new System.Drawing.Point(0, 0); + this.chtCPU.Name = "chtCPU"; + this.chtCPU.Palette = System.Windows.Forms.DataVisualization.Charting.ChartColorPalette.None; + series3.ChartArea = "ChartArea1"; + series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bar; + series3.Color = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(198)))), ((int)(((byte)(0))))); + series3.Name = "CPUUsage"; + series3.Points.Add(dataPoint3); + this.chtCPU.Series.Add(series3); + this.chtCPU.Size = new System.Drawing.Size(786, 253); + this.chtCPU.TabIndex = 41; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.BackColor = System.Drawing.Color.Transparent; + this.label3.Location = new System.Drawing.Point(843, 40); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(83, 13); + this.label3.TabIndex = 11; + this.label3.Text = "Error Messages:"; + // + // FrmMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.BackColor = System.Drawing.Color.White; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.ClientSize = new System.Drawing.Size(815, 667); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.label3); + this.Controls.Add(this.ErrorMessages); + this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MainMenuStrip = this.menuStrip1; + this.Name = "FrmMain"; + this.Text = "Blue Yonder Ticket Reservation Simulator"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmMain_FormClosing); + this.Load += new System.EventHandler(this.FrmMain_Load); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.chtTPS)).EndInit(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.chtLatches)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.chtCPU)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnRun; + private System.Windows.Forms.Button btnStop; + private System.Windows.Forms.Label lbResults; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem configurationToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.TextBox ErrorMessages; + private System.Windows.Forms.DataVisualization.Charting.Chart chtTPS; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel lblTime; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3; + private System.Windows.Forms.ToolStripStatusLabel lblThreads; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.Button btnToggle; + private System.Windows.Forms.DataVisualization.Charting.Chart chtCPU; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.DataVisualization.Charting.Chart chtLatches; + private System.Windows.Forms.Panel speedDialPanel; + private System.Windows.Forms.Label label4; + } +} + diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/FrmMain.cs b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmMain.cs similarity index 97% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/FrmMain.cs rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmMain.cs index 2d9704b45f..41663bd429 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/FrmMain.cs +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmMain.cs @@ -1,586 +1,586 @@ -//---------------------------------------------------------------------------------- -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, -// EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES -// OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. -//---------------------------------------------------------------------------------- -// The example companies, organizations, products, domain names, -// e-mail addresses, logos, people, places, and events depicted -// herein are fictitious. No association with any real company, -// organization, product, domain name, email address, logo, person, -// places, or events is intended or should be inferred. - -using System; -using System.Collections.Generic; -using System.Data; -using System.Data.SqlClient; -using System.Diagnostics; -using System.Linq; -using System.Threading; -using System.Windows.Forms; -using System.Windows.Forms.DataVisualization.Charting; -using System.Windows.Forms.Integration; - -/// -/// -/// Documentation References: -/// In-Memory OLTP (In-Memory Optimization): https://msdn.microsoft.com/en-us/library/dn133186.aspx -/// OLTP and database management: https://www.microsoft.com/en-us/server-cloud/solutions/oltp-database-management.aspx -/// -/// - -namespace DemoWorkload -{ - public partial class FrmMain : Form - { - delegate void SetTextCallback(string text); - - public Object ErrorLock = new Object(); - public Object StopLock = new Object(); - - List RunningThreads = new List(); - Thread MonitorThread; - - bool Stopped = true; - long BaselineTPS = 1; - int Height_2Panels = 0; - int Height_1Panel = 0; - int TPSChartTime = 0; - - UIControls uiControls = new UIControls(); - - public FrmMain() - { - InitializeComponent(); - uiControls.speedDial.MaxValue = Program.MAX_TPS; - } - - delegate void SetInt64Callback(Int64 value); - delegate void SetIntCallback(int value); - - /// - /// Adds a line of text into the message box - /// - private void AddText(string text) - { - // InvokeRequired required compares the thread ID of the - // calling thread to the thread ID of the creating thread. - // If these threads are different, it returns true. - if (this.ErrorMessages.InvokeRequired) - { - SetTextCallback d = new SetTextCallback(AddText); - this.Invoke(d, new object[] { text }); - } - else - { - this.ErrorMessages.AppendText("\r\n" + text); - } - - } - /// - /// Updates the thread count display - /// - private void UpdateCount(string TC) - { - try { this.lblThreads.Text = TC.ToString(); } - catch (Exception ex) { ShowThreadExceptionDialog("UpdateCount", ex); } - } - - /// - /// Updates the elapsed time display - /// - private void UpdateElapsed(string Elapsed) - { - this.lblTime.Text = Elapsed.ToString(); - } - - /// - /// Updates the CPU% bar in the chart - /// Note that this proc does NOT cause the chart to refresh. - /// that is done in UpdateTPS(), which should be called after this proc. - /// - private void UpdateCPUChart(int CPU) - { - try { - if (this.statusStrip1.InvokeRequired) - { - SetIntCallback d = new SetIntCallback(UpdateCPUChart); - this.Invoke(d, new object[] { CPU }); - } - else - { - CPU = (CPU == 0) ? 1 : CPU; - this.chtCPU.Series["CPUUsage"].Points.Clear(); - this.chtCPU.Series["CPUUsage"].Points.Add(new DataPoint(0, CPU)); - this.chtCPU.Update(); - } - } - catch (Exception ex) { ShowThreadExceptionDialog("UpdateCPUChart", ex); } - } - - /// - /// Updates Latches in the Chart - /// - private void UpdateLatchChart(Int64 Latches) - { - try { - if (this.statusStrip1.InvokeRequired) - { - SetInt64Callback d = new SetInt64Callback(UpdateLatchChart); - this.Invoke(d, new object[] { Latches }); - } - else - { - Latches = (Latches == 0) ? 1 : Latches; - this.chtLatches.Series["Latches"].Points.Clear(); - this.chtLatches.Series["Latches"].Points.Add(new DataPoint(0, Latches)); - this.chtLatches.Update(); - } - } - catch (Exception ex) { ShowThreadExceptionDialog("UpdateLatchChart", ex); } - } - - /// - /// Updates the TPS bar in the chart, and causes the whole chart to be re-drawn with the new data. - /// - private void UpdateTPSChart(Int64 TPS) - { - try { - if (this.statusStrip1.InvokeRequired) - { - SetInt64Callback d = new SetInt64Callback(UpdateTPSChart); - this.Invoke(d, new object[] { TPS }); - } - else - { - // Updating Speedometer - if (TPS >= 0) - { - double normalizedTPS = (double)TPS / 1000; - uiControls.speedDial.CurrentValue = normalizedTPS; - uiControls.speedDial.DialText = normalizedTPS.ToString("#.##"); - - // Updating TPS chart - TPSChartTime++; - - // X Axis Overflow - if (TPSChartTime > this.chtTPS.ChartAreas[0].AxisX.Maximum) - { - this.chtTPS.ChartAreas[0].AxisX.Maximum += 100; - } - - this.chtTPS.Series[0].Points.Add(new System.Windows.Forms.DataVisualization.Charting.DataPoint(TPSChartTime, TPS)); - } - else - { - this.chtTPS.Series[0].Points.Clear(); - TPSChartTime = 0; - } - this.chtTPS.Update(); - } - } - catch (Exception ex) { ShowThreadExceptionDialog("UpdateTPSChart", ex); } - } - - /// - /// Updates Results - /// - private void UpdateResults(string Results) - { - try - { - lock (StopLock) - { - if (Stopped) - { - return; - } - } - if (this.statusStrip1.InvokeRequired) - { - SetTextCallback d = new SetTextCallback(UpdateResults); - this.Invoke(d, new object[] { Results }); - } - else - { - this.lbResults.Text = Results; - this.lbResults.Refresh(); - } - } - catch (Exception ex) { ShowThreadExceptionDialog("UpdateResults", ex); } - } - - /// - /// Executes Write/Read Commands - /// - void OnRunClick(object sender, EventArgs e) - { - try - { - string ReadCommand; - string WriteCommand; - lock (StopLock) - { - Stopped = false; - } - - WriteCommand = "EXEC BatchInsertReservations @ServerTransactions, @RowsPerTransaction, @ThreadID"; - ReadCommand = "EXEC ReadMultipleReservations @ServerTransactions, @RowsPerTransaction, @ThreadID"; - this.ErrorMessages.Clear(); - - ThreadParams tp = new ThreadParams(Program.REQUEST_COUNT, Program.TRANSACTION_COUNT, Program.ROW_COUNT, - Program.READS_PER_WRITE, ReadCommand, WriteCommand); - for (int j = 0; j < Program.THREAD_COUNT; j++) - { - int Threads = RunningThreads.Count(); - // Create a thread with parameters. - ParameterizedThreadStart pts = new ParameterizedThreadStart(ThreadWorker); - RunningThreads.Add(new Thread(pts)); - RunningThreads.ElementAt(Threads).Start(tp); - } - ThreadStart ts1 = new ThreadStart(ThreadMonitor); - this.MonitorThread = new Thread(ts1); - this.MonitorThread.Start(); - } - catch (Exception ex) { ShowThreadExceptionDialog("OnRunClick", ex); } - } - - /// - /// Executes Transactions on the target server - /// - void ThreadWorker(object tp) - { - //////////////////////////////////////////////////////////////////////////////// - // Connect to the data source. - //////////////////////////////////////////////////////////////////////////////// - - System.Data.SqlClient.SqlConnection conn = new SqlConnection(Program.CONN_STR); - - ThreadParams MyTP = (ThreadParams)tp; - SqlCommand WriteCmd = new SqlCommand(); - WriteCmd.Connection = conn; - WriteCmd.CommandTimeout = 600; - WriteCmd.CommandText = MyTP.WriteCommandText; - WriteCmd.Parameters.Add("@ServerTransactions", SqlDbType.Int, 4).Value = (int)MyTP.serverTransactions; - WriteCmd.Parameters.Add("@RowsPerTransaction", SqlDbType.Int, 4).Value = (int)MyTP.rowsPerTransaction; - WriteCmd.Parameters.Add("@ThreadID", SqlDbType.Int, 4).Value = (int)Thread.CurrentThread.ManagedThreadId; - - SqlCommand ReadCmd = new SqlCommand(); - ReadCmd.Connection = conn; - ReadCmd.CommandTimeout = 600; - ReadCmd.CommandText = MyTP.ReadCommandText; - ReadCmd.Parameters.Add("@ServerTransactions", SqlDbType.Int, 4).Value = (int)MyTP.serverTransactions; - ReadCmd.Parameters.Add("@RowsPerTransaction", SqlDbType.Int, 4).Value = (int)MyTP.rowsPerTransaction; - ReadCmd.Parameters.Add("@ThreadID", SqlDbType.Int, 4).Value = (int)Thread.CurrentThread.ManagedThreadId; - - // Executing transactions on the target server - try - { - conn.Open(); - for (int i = 0; i < MyTP.requestsPerThread; i++) - { - lock (StopLock) - { - if (Stopped) - { - break; - } - } - WriteCmd.ExecuteNonQuery(); - for (int j = 0; j < MyTP.readsPerWrite && !Stopped; j++) - { - ReadCmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - lock (this.ErrorLock) - { - this.AddText(ex.Message + " " + Thread.CurrentThread.ManagedThreadId.ToString()); - } - } - finally - { - conn.Close(); - } - } - - /// - /// Thread Monitor - /// - void ThreadMonitor() - { - //Set-up & initialization - DateTime Start = DateTime.Now; - DateTime PerfCounterStart = DateTime.Now, PerfCounterEnd; - Int64 LastPerfCounterValue = 0, ThisPerfCounterValue = 0, TPS = 0; - Int64 LatchCounterValue = 0, LastLatchCounter = 0, ThisLatchCounter = 0; - int CPU_Usage = 0; - int mo_tables = 0; - PerformanceCounter CPUCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); - Int64 TotalTPS = 0, TotalIterations = 0; - - // Open the connection - System.Data.SqlClient.SqlConnection conn = new SqlConnection(Program.CONN_STR); - - string cmdStr = string.Format("select max(cntr_value) FROM sys.dm_os_performance_counters WHERE counter_name = 'Transactions/sec'"); - - string LatchcmdStr = string.Format("select max(cntr_value) FROM sys.dm_os_performance_counters WHERE counter_name = 'Latch Waits/sec'"); - SqlCommand Perfcmd = new SqlCommand(); - Perfcmd.Connection = conn; - Perfcmd.CommandTimeout = 600; - Perfcmd.CommandText = cmdStr; - - //query to determine which stage we're in - SqlCommand Latchcmd = new SqlCommand(); - Latchcmd.Connection = conn; - Latchcmd.CommandTimeout = 600; - Latchcmd.CommandText = LatchcmdStr; - string ConfigSelect = string.Format("select count(*) from sys.tables where is_memory_optimized = 1 and object_id=object_id('dbo.TicketReservationDetail')"); - - SqlCommand ConfigQuery = new SqlCommand(); - ConfigQuery.Connection = conn; - ConfigQuery.CommandTimeout = 600; - ConfigQuery.CommandText = ConfigSelect; - - try - { - conn.Open(); - } - catch (Exception ex) - { - lock (this.ErrorLock) - { - this.AddText(ex.Message + " " + Thread.CurrentThread.ManagedThreadId.ToString()); - } - } - - if (conn.State != ConnectionState.Open) - { - MessageBox.Show("Monitor failed to connect to server.", "Error", MessageBoxButtons.OK); - return; - } - - mo_tables = (int)ConfigQuery.ExecuteScalar(); - if (mo_tables == 0) - { - //This is the case where there are no Memory Optimized tables, so we're running in pure SQL mode. - UpdateResults("Baseline"); - //Calling UpdateTPSChart with a negative value causes it to clear the current chart and reset. - UpdateTPSChart(-1); - } - else - { - UpdateResults(""); - } - - while (RunningThreads.Count > 0) - { - List DeadThreads = new List(); - foreach (Thread MyThread in RunningThreads) - { - if (!MyThread.IsAlive) - { - DeadThreads.Add(MyThread); - } - } - foreach (Thread DThread in DeadThreads) - { - RunningThreads.Remove(DThread); - } - DeadThreads.Clear(); - PerfCounterEnd = DateTime.Now; - - try - { - ThisPerfCounterValue = (Int64)Perfcmd.ExecuteScalar(); - ThisLatchCounter = (Int64)Latchcmd.ExecuteScalar(); - } - catch (Exception ex) - { - lock (this.ErrorLock) - { - this.AddText(ex.Message + " " + Thread.CurrentThread.ManagedThreadId.ToString()); - } - } - - if (LastLatchCounter == 0) - { - LastLatchCounter = ThisLatchCounter; - } - - if (LastPerfCounterValue != 0) - { - CPU_Usage = (int)CPUCounter.NextValue(); - - TimeSpan PerfCounterInterval = PerfCounterEnd - PerfCounterStart; - if (PerfCounterInterval.Milliseconds > 0) - { - TPS = (Int64)((ThisPerfCounterValue - LastPerfCounterValue) / (float)(PerfCounterInterval.Seconds + (PerfCounterInterval.Milliseconds / 1000))); - LatchCounterValue = (Int64)((ThisLatchCounter - LastLatchCounter) / (float)(PerfCounterInterval.Seconds + (PerfCounterInterval.Milliseconds / 1000))); - UpdateCPUChart(CPU_Usage); - UpdateLatchChart(LatchCounterValue); - UpdateTPSChart(TPS); - } - if (mo_tables == 0) - { - TotalTPS += TPS; - TotalIterations += 1; - BaselineTPS = TotalTPS / TotalIterations; - } - else - { - string UpdateString = string.Format("{0}X", TPS / BaselineTPS); - UpdateResults(UpdateString); - } - } - - PerfCounterStart = PerfCounterEnd; - LastPerfCounterValue = ThisPerfCounterValue; - LastLatchCounter = ThisLatchCounter; - PerfCounterStart = PerfCounterEnd; - this.UpdateCount(RunningThreads.Count.ToString()); - Thread.Sleep(1000); - TimeSpan Elapsed = DateTime.Now - Start; - UpdateElapsed(Elapsed.ToString(@"hh\:mm\:ss")); - } - - TPS = 0; - CPU_Usage = 0; - LatchCounterValue = 0; - UpdateLatchChart(LatchCounterValue); - UpdateCPUChart(CPU_Usage); - UpdateTPSChart(TPS); - } - - /// - /// Stop Button - /// - private void btnStop_Click(object sender, EventArgs e) - { - lock (StopLock) - { - Stopped = true; - } - } - /// - /// Application Exit - /// - private void exitToolStripMenuItem_Click(object sender, EventArgs e) - { - Application.Exit(); - } - - /// - /// Configuratino Settings - /// - private void configurationToolStripMenuItem_Click(object sender, EventArgs e) - { - try - { - FrmConfig cf = new FrmConfig(); - cf.ShowDialog(); - uiControls.speedDial.MaxValue = Program.MAX_TPS; - } - catch (Exception ex) { ShowThreadExceptionDialog("configurationToolStripMenuItem_Click", ex); } - } - - /// - /// Show Diagnostics - /// - private void btnToggle_Click(object sender, EventArgs e) - { - try - { - splitContainer1.Panel2Collapsed = !splitContainer1.Panel2Collapsed; - if (splitContainer1.Panel2Collapsed) - { - this.Height = this.Height_1Panel; - btnToggle.Text = "Show diagnostics"; - } - else - { - this.Height = this.Height_2Panels; - btnToggle.Text = "Hide diagnostics"; - } - } - catch (Exception ex) { ShowThreadExceptionDialog("btnToggle_Click", ex); } - } - - /// - /// Frm Main Load - /// - private void FrmMain_Load(object sender, EventArgs e) - { - try { - ElementHost host = new ElementHost(); - - host.Dock = DockStyle.Fill; - host.Child = uiControls.speedDial; - speedDialPanel.Controls.Add(host); - - this.Height_1Panel = splitContainer1.Panel1.Height + 100; - this.Height_2Panels = this.Height; - splitContainer1.Panel2Collapsed = true; - this.Height = Height_1Panel; - } - catch (Exception ex) { ShowThreadExceptionDialog("FrmMain_Load", ex);} - } - - /// - /// Frm Main Closing - /// - private void FrmMain_FormClosing(object sender, FormClosingEventArgs e) - { - lock (StopLock) - { - Stopped = true; - } - Thread.Sleep(1000); - if (MonitorThread != null && MonitorThread.ThreadState == System.Threading.ThreadState.Running) - { - MonitorThread.Abort(); - } - } - - /// - /// Creates an error message and displays it. - /// - private static DialogResult ShowThreadExceptionDialog(string title, Exception e) - { - string errorMsg = "An application error occurred"; - errorMsg = errorMsg + e.Message + "\n\nStack Trace:\n" + e.StackTrace; - return MessageBox.Show(errorMsg, title, MessageBoxButtons.AbortRetryIgnore, - MessageBoxIcon.Stop); - } - - } - - /// - /// ThreadParams Class - /// - class ThreadParams - { - public int requestsPerThread; // how many many separate client requests per thread - public int serverTransactions; // how many separate transactions to run on the server per request - public int rowsPerTransaction; // how many rows to inserts/read per transaction - public int readsPerWrite; // number of read requests per write request - public string ReadCommandText; // command text for read request - public string WriteCommandText; // command text for insert request - - public ThreadParams(int requestsPerThread, int serverTransactions, int rowsPerTransaction, int readsPerWrite, - string ReadCommandText, string WriteCommandText) - { - this.requestsPerThread = requestsPerThread; - this.serverTransactions = serverTransactions; - this.rowsPerTransaction = rowsPerTransaction; - this.readsPerWrite = readsPerWrite; - this.ReadCommandText = ReadCommandText; - this.WriteCommandText = WriteCommandText; - } - - } - -} +//---------------------------------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, +// EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. +//---------------------------------------------------------------------------------- +// The example companies, organizations, products, domain names, +// e-mail addresses, logos, people, places, and events depicted +// herein are fictitious. No association with any real company, +// organization, product, domain name, email address, logo, person, +// places, or events is intended or should be inferred. + +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.SqlClient; +using System.Diagnostics; +using System.Linq; +using System.Threading; +using System.Windows.Forms; +using System.Windows.Forms.DataVisualization.Charting; +using System.Windows.Forms.Integration; + +/// +/// +/// Documentation References: +/// In-Memory OLTP (In-Memory Optimization): https://msdn.microsoft.com/en-us/library/dn133186.aspx +/// OLTP and database management: https://www.microsoft.com/en-us/server-cloud/solutions/oltp-database-management.aspx +/// +/// + +namespace DemoWorkload +{ + public partial class FrmMain : Form + { + delegate void SetTextCallback(string text); + + public Object ErrorLock = new Object(); + public Object StopLock = new Object(); + + List RunningThreads = new List(); + Thread MonitorThread; + + bool Stopped = true; + long BaselineTPS = 1; + int Height_2Panels = 0; + int Height_1Panel = 0; + int TPSChartTime = 0; + + UIControls uiControls = new UIControls(); + + public FrmMain() + { + InitializeComponent(); + uiControls.speedDial.MaxValue = Program.MAX_TPS; + } + + delegate void SetInt64Callback(Int64 value); + delegate void SetIntCallback(int value); + + /// + /// Adds a line of text into the message box + /// + private void AddText(string text) + { + // InvokeRequired required compares the thread ID of the + // calling thread to the thread ID of the creating thread. + // If these threads are different, it returns true. + if (this.ErrorMessages.InvokeRequired) + { + SetTextCallback d = new SetTextCallback(AddText); + this.Invoke(d, new object[] { text }); + } + else + { + this.ErrorMessages.AppendText("\r\n" + text); + } + + } + /// + /// Updates the thread count display + /// + private void UpdateCount(string TC) + { + try { this.lblThreads.Text = TC.ToString(); } + catch (Exception ex) { ShowThreadExceptionDialog("UpdateCount", ex); } + } + + /// + /// Updates the elapsed time display + /// + private void UpdateElapsed(string Elapsed) + { + this.lblTime.Text = Elapsed.ToString(); + } + + /// + /// Updates the CPU% bar in the chart + /// Note that this proc does NOT cause the chart to refresh. + /// that is done in UpdateTPS(), which should be called after this proc. + /// + private void UpdateCPUChart(int CPU) + { + try { + if (this.statusStrip1.InvokeRequired) + { + SetIntCallback d = new SetIntCallback(UpdateCPUChart); + this.Invoke(d, new object[] { CPU }); + } + else + { + CPU = (CPU == 0) ? 1 : CPU; + this.chtCPU.Series["CPUUsage"].Points.Clear(); + this.chtCPU.Series["CPUUsage"].Points.Add(new DataPoint(0, CPU)); + this.chtCPU.Update(); + } + } + catch (Exception ex) { ShowThreadExceptionDialog("UpdateCPUChart", ex); } + } + + /// + /// Updates Latches in the Chart + /// + private void UpdateLatchChart(Int64 Latches) + { + try { + if (this.statusStrip1.InvokeRequired) + { + SetInt64Callback d = new SetInt64Callback(UpdateLatchChart); + this.Invoke(d, new object[] { Latches }); + } + else + { + Latches = (Latches == 0) ? 1 : Latches; + this.chtLatches.Series["Latches"].Points.Clear(); + this.chtLatches.Series["Latches"].Points.Add(new DataPoint(0, Latches)); + this.chtLatches.Update(); + } + } + catch (Exception ex) { ShowThreadExceptionDialog("UpdateLatchChart", ex); } + } + + /// + /// Updates the TPS bar in the chart, and causes the whole chart to be re-drawn with the new data. + /// + private void UpdateTPSChart(Int64 TPS) + { + try { + if (this.statusStrip1.InvokeRequired) + { + SetInt64Callback d = new SetInt64Callback(UpdateTPSChart); + this.Invoke(d, new object[] { TPS }); + } + else + { + // Updating Speedometer + if (TPS >= 0) + { + double normalizedTPS = (double)TPS / 1000; + uiControls.speedDial.CurrentValue = normalizedTPS; + uiControls.speedDial.DialText = normalizedTPS.ToString("#.##"); + + // Updating TPS chart + TPSChartTime++; + + // X Axis Overflow + if (TPSChartTime > this.chtTPS.ChartAreas[0].AxisX.Maximum) + { + this.chtTPS.ChartAreas[0].AxisX.Maximum += 100; + } + + this.chtTPS.Series[0].Points.Add(new System.Windows.Forms.DataVisualization.Charting.DataPoint(TPSChartTime, TPS)); + } + else + { + this.chtTPS.Series[0].Points.Clear(); + TPSChartTime = 0; + } + this.chtTPS.Update(); + } + } + catch (Exception ex) { ShowThreadExceptionDialog("UpdateTPSChart", ex); } + } + + /// + /// Updates Results + /// + private void UpdateResults(string Results) + { + try + { + lock (StopLock) + { + if (Stopped) + { + return; + } + } + if (this.statusStrip1.InvokeRequired) + { + SetTextCallback d = new SetTextCallback(UpdateResults); + this.Invoke(d, new object[] { Results }); + } + else + { + this.lbResults.Text = Results; + this.lbResults.Refresh(); + } + } + catch (Exception ex) { ShowThreadExceptionDialog("UpdateResults", ex); } + } + + /// + /// Executes Write/Read Commands + /// + void OnRunClick(object sender, EventArgs e) + { + try + { + string ReadCommand; + string WriteCommand; + lock (StopLock) + { + Stopped = false; + } + + WriteCommand = "EXEC BatchInsertReservations @ServerTransactions, @RowsPerTransaction, @ThreadID"; + ReadCommand = "EXEC ReadMultipleReservations @ServerTransactions, @RowsPerTransaction, @ThreadID"; + this.ErrorMessages.Clear(); + + ThreadParams tp = new ThreadParams(Program.REQUEST_COUNT, Program.TRANSACTION_COUNT, Program.ROW_COUNT, + Program.READS_PER_WRITE, ReadCommand, WriteCommand); + for (int j = 0; j < Program.THREAD_COUNT; j++) + { + int Threads = RunningThreads.Count(); + // Create a thread with parameters. + ParameterizedThreadStart pts = new ParameterizedThreadStart(ThreadWorker); + RunningThreads.Add(new Thread(pts)); + RunningThreads.ElementAt(Threads).Start(tp); + } + ThreadStart ts1 = new ThreadStart(ThreadMonitor); + this.MonitorThread = new Thread(ts1); + this.MonitorThread.Start(); + } + catch (Exception ex) { ShowThreadExceptionDialog("OnRunClick", ex); } + } + + /// + /// Executes Transactions on the target server + /// + void ThreadWorker(object tp) + { + //////////////////////////////////////////////////////////////////////////////// + // Connect to the data source. + //////////////////////////////////////////////////////////////////////////////// + + System.Data.SqlClient.SqlConnection conn = new SqlConnection(Program.CONN_STR); + + ThreadParams MyTP = (ThreadParams)tp; + SqlCommand WriteCmd = new SqlCommand(); + WriteCmd.Connection = conn; + WriteCmd.CommandTimeout = 600; + WriteCmd.CommandText = MyTP.WriteCommandText; + WriteCmd.Parameters.Add("@ServerTransactions", SqlDbType.Int, 4).Value = (int)MyTP.serverTransactions; + WriteCmd.Parameters.Add("@RowsPerTransaction", SqlDbType.Int, 4).Value = (int)MyTP.rowsPerTransaction; + WriteCmd.Parameters.Add("@ThreadID", SqlDbType.Int, 4).Value = (int)Thread.CurrentThread.ManagedThreadId; + + SqlCommand ReadCmd = new SqlCommand(); + ReadCmd.Connection = conn; + ReadCmd.CommandTimeout = 600; + ReadCmd.CommandText = MyTP.ReadCommandText; + ReadCmd.Parameters.Add("@ServerTransactions", SqlDbType.Int, 4).Value = (int)MyTP.serverTransactions; + ReadCmd.Parameters.Add("@RowsPerTransaction", SqlDbType.Int, 4).Value = (int)MyTP.rowsPerTransaction; + ReadCmd.Parameters.Add("@ThreadID", SqlDbType.Int, 4).Value = (int)Thread.CurrentThread.ManagedThreadId; + + // Executing transactions on the target server + try + { + conn.Open(); + for (int i = 0; i < MyTP.requestsPerThread; i++) + { + lock (StopLock) + { + if (Stopped) + { + break; + } + } + WriteCmd.ExecuteNonQuery(); + for (int j = 0; j < MyTP.readsPerWrite && !Stopped; j++) + { + ReadCmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + lock (this.ErrorLock) + { + this.AddText(ex.Message + " " + Thread.CurrentThread.ManagedThreadId.ToString()); + } + } + finally + { + conn.Close(); + } + } + + /// + /// Thread Monitor + /// + void ThreadMonitor() + { + //Set-up & initialization + DateTime Start = DateTime.Now; + DateTime PerfCounterStart = DateTime.Now, PerfCounterEnd; + Int64 LastPerfCounterValue = 0, ThisPerfCounterValue = 0, TPS = 0; + Int64 LatchCounterValue = 0, LastLatchCounter = 0, ThisLatchCounter = 0; + int CPU_Usage = 0; + int mo_tables = 0; + PerformanceCounter CPUCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); + Int64 TotalTPS = 0, TotalIterations = 0; + + // Open the connection + System.Data.SqlClient.SqlConnection conn = new SqlConnection(Program.CONN_STR); + + string cmdStr = string.Format("select max(cntr_value) FROM sys.dm_os_performance_counters WHERE counter_name = 'Transactions/sec'"); + + string LatchcmdStr = string.Format("select max(cntr_value) FROM sys.dm_os_performance_counters WHERE counter_name = 'Latch Waits/sec'"); + SqlCommand Perfcmd = new SqlCommand(); + Perfcmd.Connection = conn; + Perfcmd.CommandTimeout = 600; + Perfcmd.CommandText = cmdStr; + + //query to determine which stage we're in + SqlCommand Latchcmd = new SqlCommand(); + Latchcmd.Connection = conn; + Latchcmd.CommandTimeout = 600; + Latchcmd.CommandText = LatchcmdStr; + string ConfigSelect = string.Format("select count(*) from sys.tables where is_memory_optimized = 1 and object_id=object_id('dbo.TicketReservationDetail')"); + + SqlCommand ConfigQuery = new SqlCommand(); + ConfigQuery.Connection = conn; + ConfigQuery.CommandTimeout = 600; + ConfigQuery.CommandText = ConfigSelect; + + try + { + conn.Open(); + } + catch (Exception ex) + { + lock (this.ErrorLock) + { + this.AddText(ex.Message + " " + Thread.CurrentThread.ManagedThreadId.ToString()); + } + } + + if (conn.State != ConnectionState.Open) + { + MessageBox.Show("Monitor failed to connect to server.", "Error", MessageBoxButtons.OK); + return; + } + + mo_tables = (int)ConfigQuery.ExecuteScalar(); + if (mo_tables == 0) + { + //This is the case where there are no Memory Optimized tables, so we're running in pure SQL mode. + UpdateResults("Baseline"); + //Calling UpdateTPSChart with a negative value causes it to clear the current chart and reset. + UpdateTPSChart(-1); + } + else + { + UpdateResults(""); + } + + while (RunningThreads.Count > 0) + { + List DeadThreads = new List(); + foreach (Thread MyThread in RunningThreads) + { + if (!MyThread.IsAlive) + { + DeadThreads.Add(MyThread); + } + } + foreach (Thread DThread in DeadThreads) + { + RunningThreads.Remove(DThread); + } + DeadThreads.Clear(); + PerfCounterEnd = DateTime.Now; + + try + { + ThisPerfCounterValue = (Int64)Perfcmd.ExecuteScalar(); + ThisLatchCounter = (Int64)Latchcmd.ExecuteScalar(); + } + catch (Exception ex) + { + lock (this.ErrorLock) + { + this.AddText(ex.Message + " " + Thread.CurrentThread.ManagedThreadId.ToString()); + } + } + + if (LastLatchCounter == 0) + { + LastLatchCounter = ThisLatchCounter; + } + + if (LastPerfCounterValue != 0) + { + CPU_Usage = (int)CPUCounter.NextValue(); + + TimeSpan PerfCounterInterval = PerfCounterEnd - PerfCounterStart; + if (PerfCounterInterval.Milliseconds > 0) + { + TPS = (Int64)((ThisPerfCounterValue - LastPerfCounterValue) / (float)(PerfCounterInterval.Seconds + (PerfCounterInterval.Milliseconds / 1000))); + LatchCounterValue = (Int64)((ThisLatchCounter - LastLatchCounter) / (float)(PerfCounterInterval.Seconds + (PerfCounterInterval.Milliseconds / 1000))); + UpdateCPUChart(CPU_Usage); + UpdateLatchChart(LatchCounterValue); + UpdateTPSChart(TPS); + } + if (mo_tables == 0) + { + TotalTPS += TPS; + TotalIterations += 1; + BaselineTPS = TotalTPS / TotalIterations; + } + else + { + string UpdateString = string.Format("{0}X", TPS / BaselineTPS); + UpdateResults(UpdateString); + } + } + + PerfCounterStart = PerfCounterEnd; + LastPerfCounterValue = ThisPerfCounterValue; + LastLatchCounter = ThisLatchCounter; + PerfCounterStart = PerfCounterEnd; + this.UpdateCount(RunningThreads.Count.ToString()); + Thread.Sleep(1000); + TimeSpan Elapsed = DateTime.Now - Start; + UpdateElapsed(Elapsed.ToString(@"hh\:mm\:ss")); + } + + TPS = 0; + CPU_Usage = 0; + LatchCounterValue = 0; + UpdateLatchChart(LatchCounterValue); + UpdateCPUChart(CPU_Usage); + UpdateTPSChart(TPS); + } + + /// + /// Stop Button + /// + private void btnStop_Click(object sender, EventArgs e) + { + lock (StopLock) + { + Stopped = true; + } + } + /// + /// Application Exit + /// + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + /// + /// Configuratino Settings + /// + private void configurationToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + FrmConfig cf = new FrmConfig(); + cf.ShowDialog(); + uiControls.speedDial.MaxValue = Program.MAX_TPS; + } + catch (Exception ex) { ShowThreadExceptionDialog("configurationToolStripMenuItem_Click", ex); } + } + + /// + /// Show Diagnostics + /// + private void btnToggle_Click(object sender, EventArgs e) + { + try + { + splitContainer1.Panel2Collapsed = !splitContainer1.Panel2Collapsed; + if (splitContainer1.Panel2Collapsed) + { + this.Height = this.Height_1Panel; + btnToggle.Text = "Show diagnostics"; + } + else + { + this.Height = this.Height_2Panels; + btnToggle.Text = "Hide diagnostics"; + } + } + catch (Exception ex) { ShowThreadExceptionDialog("btnToggle_Click", ex); } + } + + /// + /// Frm Main Load + /// + private void FrmMain_Load(object sender, EventArgs e) + { + try { + ElementHost host = new ElementHost(); + + host.Dock = DockStyle.Fill; + host.Child = uiControls.speedDial; + speedDialPanel.Controls.Add(host); + + this.Height_1Panel = splitContainer1.Panel1.Height + 100; + this.Height_2Panels = this.Height; + splitContainer1.Panel2Collapsed = true; + this.Height = Height_1Panel; + } + catch (Exception ex) { ShowThreadExceptionDialog("FrmMain_Load", ex);} + } + + /// + /// Frm Main Closing + /// + private void FrmMain_FormClosing(object sender, FormClosingEventArgs e) + { + lock (StopLock) + { + Stopped = true; + } + Thread.Sleep(1000); + if (MonitorThread != null && MonitorThread.ThreadState == System.Threading.ThreadState.Running) + { + MonitorThread.Abort(); + } + } + + /// + /// Creates an error message and displays it. + /// + private static DialogResult ShowThreadExceptionDialog(string title, Exception e) + { + string errorMsg = "An application error occurred"; + errorMsg = errorMsg + e.Message + "\n\nStack Trace:\n" + e.StackTrace; + return MessageBox.Show(errorMsg, title, MessageBoxButtons.AbortRetryIgnore, + MessageBoxIcon.Stop); + } + + } + + /// + /// ThreadParams Class + /// + class ThreadParams + { + public int requestsPerThread; // how many many separate client requests per thread + public int serverTransactions; // how many separate transactions to run on the server per request + public int rowsPerTransaction; // how many rows to inserts/read per transaction + public int readsPerWrite; // number of read requests per write request + public string ReadCommandText; // command text for read request + public string WriteCommandText; // command text for insert request + + public ThreadParams(int requestsPerThread, int serverTransactions, int rowsPerTransaction, int readsPerWrite, + string ReadCommandText, string WriteCommandText) + { + this.requestsPerThread = requestsPerThread; + this.serverTransactions = serverTransactions; + this.rowsPerTransaction = rowsPerTransaction; + this.readsPerWrite = readsPerWrite; + this.ReadCommandText = ReadCommandText; + this.WriteCommandText = WriteCommandText; + } + + } + +} diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/FrmMain.resx b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmMain.resx similarity index 98% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/FrmMain.resx rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmMain.resx index 9fd3983718..8176630a0e 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/FrmMain.resx +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/FrmMain.resx @@ -1,506 +1,506 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - 126, 17 - - - - - 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 - zwD45t8A++/qAO3j3wDSsaIA89XHAPTWyQDz1skA9NjLAPPXygD129AA9dzRAPXd0gD239UA9+HXAPjo - 4QD56uMA+OniAPrs5gD56+UA/PPvAPz18gDGo5IAx6aWANW0pADava4AyrCjAPXazQD02cwA5Mu/APbf - 0wD13tMA9+PZAPjl3AD88u0A+/HsAPz28wD9+fcA/vz7AMirmwDz2csAzbmuAOfZ0QDe080A+/LtAOXe - 2gDi29cA28/IANzRygD67+gA+/HrAOHZ1AD89O8A+/PuAPPr5gD9+PUAg29hAJB+cgCNfHAA8O3rAHpl - VQB7ZlcAfmlaAH5qWwB/a1wAgW1eAIBsXQCCbl8Ag3BiAI17bgCUhHgAk4N3AJeHewCcjoQApZiOAKeb - kgCrn5YAraKaAKyhmQCuo5sA4NjSAMG6tQDo5OEA5+PgAHxoWAB9aVkAhXJjAIFvYACFc2UAh3VnAIl3 - aQCLeWsAi3psAI5+cQCRgXQAj39yAJWGegCYiX0Am42CAJ+RhgChlIkAoJOIAKebkQCpnpUAq6CXAK+l - nQC4r6gA39bPAOXg3ACRgnUAlYZ5AJmLfgCekIQAm42BAKOXjACilosAoZWKALGnngCupJsAtaykALKp - oQC2raUAwLmzAL+4sgC9trAApZqPAKedkwC5sakAt6+nALOrowC8ta4AurOsAL+4sQC+t7AAwry2AP36 - 9wD9+/kA6eflAP79/ACyqqEAsamgALy1rQC6s6sAubKqALy2rwC7ta0Awby1APb08QD9/PoAOcEAADHJ - AAAuzAAAJ9UAANP4/ADd+/4A2/n8ANv6/gDV8/cA0Pb9AM/s8QC77/kAvO/5AMTx+gDM6e8Atez5ALbs - +QC16vYAve76AMXj6gDe6+4ApuX3AKfm9wCo5vcAsNrmAMDc5ACZ4PYAqOb5AKfj9gC10tsAu9jhAMrg - 5wB70/QAe9T0AJDc9gCN1fAAkt32AJHY8QCY3fQAsczVAMPX3gDA09oA2eLlANDY2wBqzPIAaszxAGrL - 8QBqyO4AasjtAGvF6gBrxekAfs3rAJ/J2QCryNMAq8fSAG7B5QB2v94Am73NAK3J1QCsxtEAtc/aALfN - 1wB9tM4AoLzKAKS/zACnws8ApsHOAJ63xACpxNEApL3KAKK7yACqxNEAts3YAMfP0wCRs8YAj62+AKK+ - zgCIqb0Am7PBAKC4xgCasb8Ap7/NAJKpuACYr74AlKq5AJWrugCRprYAl629AI2hsgCQpLQAjaCxAP// - /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAGRjYU9DTkxNTUpJYF9ISEdHAAAAAAAAAAAAAAAAAAAAZQoP - ISEhISEhISEhISEhIkgAAAAAAAAAAAAAAAAAAABmCicTExMTExMSFBESEhAyXwAAAAAAAAAAAAAAAAAA - AFAKCwsnJicnJycTFKKgEjJgAAAAAAAAAAAAAAAAAAAAaDELCwsLCwsmJycTo6EUMksAAAAAAAAAAAAA - AAAAAABpMRYWFhYVFRULCwsmJzMyTAAAAAAAAAAAAAAAAAAAAFIxKSrL3d/18uvq7OkLJjJiAAAAAAAA - AAAAAAAAAAAAazEY3NnUuLHG09je7fELMk8AAAAAAAAAAAAAAAAAAABsMRnjxbWrsLrBztDX+hUyYwAA - AAAAAAAAAAAAAAAAAHwxK+/CtquwusHN0NL4FzJkAAAAAAAAAAAAAAAAAAAAVJUs5sS2q6+6wc3P0fkp - MmUAAAAAAAAAAAAAAAAAAABulQzlxLassLrBzs/R9hgyZwAAAAAAAAAAAAAAAAAAAG+VGuDEt6yvusHO - 0NHyGTJFAAAAAAAAAAAAAAAAAAAAfZUb4sS3rLC6wM7P0vQZImoAAAAAAAAAAAAAAAAAAACIlR7hxLes - sLrBzNDS9SwkeAAAAAAAAAAAAAAAAAAAAIkBCuTEt6ywusHN0NL3AwJRAAAAAAAAAAAAAAAAAAAAV0YO - 1sS2q7C6wc7Q0vM1NVMAAAAAAAAAAAAAAAAAAABZkYbVu62kpaepsrzD8ExgegAAAAAAAAAAAAAAAAAA - AIEBN9qlpaWlpaWlpaXuGiV8AAAAAAAAAAAAAAAAAAAAgAEfv76zqqamqK65x8kcNHsAAAAAAAAAAAAA - AAAAAACWAQeetL+95+Hb6MjKQRs0cAAAAAAAAAAAAAAAAAAAAIIBBS8vIAcfQDc9DTwdHiV+AAAAAAAA - AAAAAAAAAAAAi/v7+/v7+/v7+/v7+/v7lVUAAAAAAAAAAAAAAAAAAACKkYaci4NYVn9teURmYUxgcQAA - AAAAAAAAAAAAAAAAAJmUXV1eCXc4ODk+W3Y2OzpyAAAAAAAAAAAAAAAAAAAAmPsKkwSSMEIvIAhALg08 - I3MAAAAAAAAAAAAAAAAAAACH+zEKnwQDMAUgBx83PTwjWgAAAAAAAAAAAAAAAAAAAIb7lZUKBAMwQi8H - Bi09PCN0AAAAAAAAAAAAAAAAAAAAhfsBAZUKBDACBQc/LT08KJcAAAAAAAAAAAAAAAAAAABc+/v7AQEB - AQGVlZUxMTEFjAAAAAAAAAAAAAAAAAAAAJGdXFyFho+Qm42cjpqKdYuEAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A - AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A - AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP//////KAAAACAAAABAAAAAAQAgAAAAAACAEAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAId0Zv+Fc2X/hXJj/4Nw - Yv+Db2H/gm5f/4FtXv+AbF3/gGxc/35qW/9+aVr/fWlZ/3xnWP97Z1f/e2ZW/3pmVv96ZVX/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiXdp//77 - +v/SsaL/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/x6aW/3tm - V/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACLeWv//vv6//TZzP/02Mz/9NjM//TYy//02Mv/9NfL//TYyv/z18n/89fK//TWyf/z1sn/89bI//PV - x//Iq5v/fGhY/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - q//p5+X/6OTh/+jk4f/n4+D/5+Hf/+Xg3P/l3tv/5N3Z/+Lb1//h2dT/4NjS/9/Wz//e083/3NHK/9vP - yP+pnpX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAvLWt///////++/r//fv5//76+f/9+vf//fj3//349f/89/P//PXy//vz8P/78+7/+/Hs//vv - 6v/67uj/1bSk/6ugl/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC9trD////////8+////Pr//fz6//77+f/++fj//fn2//329P/89fL//PTx//zz - 7//78u3/+/Dr//vv6P/VtKT/rqOb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+4sv////////38//79/P/+/Pr//vv5//75+P/9+fb//fj1//z2 - 8//89PH//PPw//zy7f/78ev/+u/p/9W0pP+vpZ3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwLmz///////+/v3///39//79/P/+/Pr//vr5//35 - 9//99/b//ffz//z08f/89O///PLt//vw6//67+n/5Mu//7GpoP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBurX///////////////////7+///+ - /v///v7///79///+/f/+/f3//v38//79/P/+/Pz//vz7//78+//99vT/s6uj/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK8tv/BvLX/wbu1/8C6 - tP/AubP/v7iy/7+4sf++t7D/vLav/7y1rv+7tK3/urOs/7myqv+5sKn/uK+o/7evp/+2raX/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A - AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A - AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA/ygAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAA - AAAAAAAAAAEAAAABAAAAAAAA/vn4AP349wD++vkA/PHtAPzz8AD78/AA/ff1AP77+gD12s8A9+HYAPjm - 3wD56uQA++/qAO3j3wDn4uAA0rGiAPPVxwD01skA89bJAPTYywDz18oA9dvQAPbd0gD13NEA9t7TAPXd - 0gD239UA9+HXAPfj2gD45NsA+erjAPjp4gD67OYA+/DrAPzz7wDl3tsA/PXyAMajkgDHppYA1bSkAMqw - owD12s0A9NnMAPbd0QD13tMA9uDVAPXf1AD24tgA9+TbAPjl3AD46OAA+u7oAPzy7QD78ewA4trWAPz2 - 8wDu6ugA/vz7AMirmwDz2csA59nRAN7TzQD78u0A/PXxAOnc1ADc0MkA/PTvAPvz7gD9+PUAkH5yAI18 - cADw7esAemVVAHtmVwB+aVoAfmpbAH9rXACBbV4AgGxdAIJuXwCDcGIAgm9hAI17bgCUhHgAloZ6AJyO - hACtopoA9vLvAOjk4QB8aFgAfWlZAIVyYwCFc2UAh3VnAIl3aQCLemwAjn5xAJGBdACPf3IAmYp+AJuN - ggCgk4gApZmPAKqflgCroJcAr6WdALivqACKeWoAkYJ1AJuNgQCfkYUAo5eMAKGVigCnnJIAsaeeAK6k - mwC1rKQAtq2lAODY0QDAubMAv7iyALmxqQC3r6cAvLWuALqzrAC/uLEAvrewAMK8tgDAurQA/fr3AP37 - +QDp5+UA//79AP79/ACyqqEAvLWtALy2rwC7ta0A/fz6ADXFAAAr0QAA2/v9ANP4/ADd+/4A3Pr9ANv5 - /ADb+v4A1vT4AMjz+gDB6fAAz+zxANHt8gC77/kAvO/5AMLw+gDS9v0A2+rtALXs+QC27PkAter2AKbl - 9wCn5vcAqOb3AKvm9wDG4egAl971AJjg9gCo5vkAttnkAGvN8QBszvEAbc3xAG7O8gBvzvEAcM7xAHTP - 8QB40vMAetP0AHvU9AB81PQAfNPzAJDc9gCN1fAAkt32AJHY8QCe3/UAydvhAGzO8wBtzPIAb8zzAG3K - 7gBtyO0Aa8XqAHDO8gBwzfEAb8zwAG/M7wBvy+8Ab8ntAG7H7ABuyOsAbsfqAHLO8QBxy+8AcMnsAG3E - 5gBwx+kAd9HzAHLG6ABxxecAccHiAHXH5wByv94AeszsAHjC4QCfydkAq8jTALfR2wC2ztgAbsLmAG/A - 4wB0wOIAfLnUAJm8zAChvssArMnWAKzG0gCxy9YAjrXJAKS/zACnws8AnrfEAKnE0QCkvcoAorvIAKrE - 0QCFqb0AjbLGAI6uwACrxdMAnrbDAJuzwQCasb8AobnHAJKpuACYr74Alau6AJGnuACQpbUAl629AI2h - sgCPo7MAjaCxAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABeXVxcUVFRUVJQTk9PTEtbW1tbWkpKSUkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfCBAQJiYm - JiYmJiYmJiYmJiYmJiYmJ0oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgCCsrFBQUFBQUFBQUExUSEhIS - ExMRO1oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTCAkJCQkJCSsqKysrKxQVFRUVjYwTO1sAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABhOgkJCQkJCQkJCQkqKysUFBQUjYwVO00AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABiOhgYGBgYGBgYFhYWCQkJCQkJKis8O04AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUOhkZLS0t - LS0aGhoYGBYJCQkJCQkqO1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVOhsbLi4uLhsuLy0ZGRcsLCws - FhYJO1EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkOhwcCrvi4fHx9/Xv5e7l5fAtGhgWO10AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAABuOh0d2uDYqZaWoKbW0dTX3+3uGS0aO14AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAABWhjIy6LmhmZWVn6bQxsbH0t39LhsZO18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvhgsL9Lai - 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 - AAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB// - AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/g - AAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB// - AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD///////8AAP// - /////wAAKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAId0 - Zv+Fc2X/hXJj/4VyY/+DcGL/g3Bi/4NwYv+DcGL/g29h/4JuX/+BbV7/gGxd/4BsXP9+alv/fmla/31p - Wf99aVn/fWlZ/31pWf98Z1j/e2dX/3tmVv96Zlb/emVV/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAIl3af/++/r/0rGi/9Kxov/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8aj - kv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Hppb/e2ZX/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIt5a//++/r/9NnM//TZzP/02Mz/9NjM//TYzP/02Mz/9NjM//TY - y//02Mv/9NfL//TYyv/z18n/89fK//TWyf/01sn/9NbJ//TWyf/z1sn/89bI//PVx//Iq5v/fGhY/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI17bv/+/Pr/9NrO//Tazv/12s7/9drO//Xa - zv/12s7/9NnN//Tazf/02c3/9NnN//TZzP/02cz/9NjL//PXyv/z18r/89fK//PXyv8uzAD/OcEA//PW - yP/Iq5v/fWlZ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5+cf/+/Pv/9dvP//Xb - z//028//9NvP//Tbz//028//9dvP//Taz//12s7/9drO//Xazf/02c3/9NnM//TYzP/02Mz/9NjM//TY - zP8n1QD/MckA//PYyv/Iq5v/f2tc/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJGB - dP/+/Pv/9dzS//Xc0v/13NH/9dzR//Xc0f/13NH/9d3R//Xd0f/13ND/9dzQ//Xb0P/028//9NvP//Xa - zv/12s7/9drO//Xazv/12c3/9NnM//PZy//Iq5v/gW1e/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAJODd//+/Pv/9t7T//be0//13tP/9d7T//Xe0//13tP/9d7T//Xe0v/13dL/9d3S//Xc - 0v/13dH/9dvQ//Tbz//028//9NvP//Tbz//1287/9drO//Xazf/Iq5v/gW9g/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJWGev/+/Pv/9t/V//bf1f/24NX/9uDV//bg1f/24NX/9t/V//bg - 1f/139T/9d7U//bf0//23tP/9t3S//bd0f/23dH/9t3R//bd0f/13ND/9dvQ//Xaz//Iq5v/g3Bi/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiJff/+/Pv/9+HX//fh1//34dj/0dnd/6vJ - 1v+hvsv/nbXD/562w/+Vq7r/kqm4/46uwP+Ptsr/jrLE/4+1yP+MtMr/q8XT//Xe0//13dL/9d3R//Xc - 0P/Iq5v/hXNl/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqMgP/+/Pz/9+PZ//fj - 2f+10Nv/mbzM/5/J2f+w2ub/wenw/8Hp8P+16vb/l930/3rM7P9yxuj/dcfn/3jC4f98udT/ham9/4yy - x//23tT/9d7T//Xd0v/Iq5v/h3Vn/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyO - hP/+/fz/+OXc//jl3P+et8T/kdjx/6bl9/+77/n/yPP6/8jz+v+27Pn/l9/2/3fR8/9uy+//b8ru/2/J - 7f9xxef/b8Dj/42gsf/24Nb/9t/V//bf0//Iq5v/iXdp/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAJ+Rhv/+/fz/+Obf//jm3/+guMb/kNz2/6fm9/+77/n/yPP6/8jz+v+27Pn/mOD2/3nT - 9P9tzfH/b8vv/3DJ7P9ux+r/bcTm/42hsv/34df/9uDW//bf1f/Iq5v/i3ps/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKGUif/+/fz/+Ojh//jo4f+husf/kNz2/6bm9/+87/n/yPP6/8jz - +v+17Pj/meD2/3zU9P9szvP/b83w/2/L7v9uyOv/bcTm/4+js//34tn/9+HY//fh1v/Iq5v/jXxw/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOXjP/+/fz/+erj//nq4/+iu8j/kt32/6fm - 9/+77/n/yPP6/8jz+v+17Pn/meD2/3vU9P9tzPL/b83x/27L7/9tyOz/bcHn/5CktP/35Nv/9+Pa//bi - 2P/Hppb/j39y/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOXjP/+/fz/+erj//nq - 4/+kvcr/kt32/6fm9/+87/n/yPP6/8jz+v+27Pn/mOD2/3vU9P9tzPL/b87x/2/L7/9tx+z/b8Pm/5Gm - tv/35Nv/9+Pa//bi2P/Hppb/j39y/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOX - jP/+/fz/+erj//nq4/+et8T/kdjx/6bl9/+77/n/yPP6/8jz+v+27Pn/mOD2/3vU9P9szfP/cc7x/2/L - 7/9ux+z/ccDi/42gsf/35Nv/9+Pa//bi2P/Hppb/j39y/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKOXjP/+/fz/+erj//nq4/+guMb/kNz2/6fm9/+77/n/yPP6/8jz+v+27Pn/mOD2/3vU - 9P9rzPH/cM7y/2/M7/9tyOr/b8Hl/42hsv/35Nv/9+Pa//bi2P/Hppb/kYJ1/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOXjP/+/fz/+erj//nq4/+husf/kNz2/6bm9/+87/n/yPP6/8jz - +v+17Pj/meD2/3vU9P9szvH/bs7x/3DL7/9vx+n/ccLi/5Cltv/35Nv/9+Pa//bi2P/Hppb/kYJ1/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKWaj//+/f3/+evl//nr5f+iu8j/kt32/6fm - 9/+77/n/yPP6/8jz+v+17Pn/meD2/3vV9P9rzvH/b87w/3DL7v9wx+n/cr7d/5KouP/45d3/9+Tc//jk - 2//Hppb/kYJ1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKedk////v7//vv6//77 - +v+kvcr/kt32/6fm9/+87/n/yPP6/8jz+v+27Pn/mOD2/3vU9P9tzPL/b87x/3HL7v9vx+r/c7/f/5Gn - uP/++vn//vr4//76+P/99/X/lIR4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKuf - lv/w7ev/7ePf/+3j3/+kv8z/kt32/6jm9/+87/n/yPP6/8jz+v+17Pn/mOD2/3vU9P9vzPP/cM3x/3HL - 7/9vx+r/ccDf/5KpuP/p3NX/6NvT/+fa0v/m2ND/l4d7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKyhmf/CvLb/v7iy/7+4sv+mwc7/kt32/6jm9/+87/n/yPP6/8jz+v+27Pn/meD2/3vT - 9P9uzvH/cM7x/3HL7/9ux+r/dMDi/5Squv+KeGr/hXNk/4BtXv99aFn/mYt+/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy7f+nws//kt32/6jm9/+87/n/yPP6/8jz - +v+27Pn/mOD2/3vT9P9uzvL/cM7x/2/M7/9ux+v/ccLi/5Wruv/56uT/+eri//jo4P/KsKP/m42B/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy7f+pxNH/kt32/6jm - 9/+87/n/yPP6/8jz+v+27Pn/l9/2/3jS8/9uzPD/cs7x/3DM8P9tyO3/bcTn/5etvf/56uT/+eri//jo - 4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy - 7f+rx9L/kt32/6fm9/+77/n/yPP6/8jz+v+27Pn/mOD2/3zT8/9vzPD/dM/x/2/M8P9tyu7/a8Xq/5iv - vv/56uT/+eri//jo4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6k - m////v3/+/Lt//vy7f+ryNP/qOb5/8Tx+v/T+Pz/2/v9/9v7/f/c+/7/2/r+/9L2/f/B7/r/we/6/6vm - 9/+e3/X/jdXw/5qxv//56uT/+eri//jo4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAK6km////v3/+/Lt//vy7f+tydX/3fv+/937/v/d+/7/3fv+/937/v/d+/7/3Pv9/9z6 - /f/c+v3/3Pr9/9v6/f/b+v3/3fv+/5uzwf/56uT/+eri//jo4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy7f/K4Of/u9jh/8Xj6v/P7PH/1vT4/9b0 - +P/b+fz/2/n8/9b0+P/R7fL/1/X5/9Dt8v/C3+b/sszW/7PM1v/56uT/+eri//jo4P/KsKP/m42B/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALGnnv///v7//PPv//zz7//28u//2+rt/8Pd - 5f+4093/r8vW/7HL1v+qxNH/p8LP/6zG0v+2ztj/q8bS/7DL1v+30dr/yNzh/+7q6P/56+X/+evk//jp - 4v/KsKP/npCE/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALKqof///v7//PXx//z1 - 8f/89fH//PXx//z18f/89fH//PTx//z08P/88+///PLu//zx7f/78Oz/+vDq//ru6P/67uj/+u7o//ru - 6P/67Of/+ezl//nq4//KsKP/oJOI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWs - pP///v7//fbz//328//89vP//Pbz//z28//89vP//Pbz//z18v/89fD//PPv//vz7v/78u3/+vHr//vv - 6v/77+r/++/q//vv6v/67uj/+uzm//nr5P/KsKP/opaL/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAALeup/////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////+/fz/pZiO/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALixqf/CvLb/v7my/7+5sv+7ta3/u7Wt/7u1rf+7ta3/t6+n/7Kp - of+topr/p5uS/6GViv+bjYL/lYZ5/5B+cv+QfnL/kH5y/5B+cv+KeWr/hXJj/4BtXv99aFn/p5uR/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALqzq//p5+X/6OTh/+jk4f/o5OH/6OTh/+jk - 4f/o5OH/5+Pg/+fh3//l4Nz/5d7b/+Td2f/i29f/4dnU/+DY0v/g2NL/4NjS/+DY0v/f1s//3tPN/9zR - yv/bz8j/qZ6V/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1rf///////vv6//77 - +v/9+/n//fv5//37+f/9+/n//vr5//369//9+Pf//fj1//z38//89fL/+/Pw//vz7v/78+7/+/Pu//vz - 7v/78ez/++/q//ru6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1 - rf///////vv6//77+v/9+/n//fv5//37+f/9+/n//vr5//369//9+Pf//fj1//z38//89fL/+/Pw//vz - 7v/78+7/+/Pu//vz7v/78ez/++/q//ru6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAALy1rf///////vv6//77+v/9+/n//fv5//37+f/9+/n//vr5//369//9+Pf//fj1//z3 - 8//89fL/+/Pw//vz7v/78+7/+/Pu//vz7v/78ez/++/q//ru6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1rf///////vv6//77+v/9+/n//fv5//37+f/9+/n//vr5//36 - 9//9+Pf//fj1//z38//89fL/+/Pw//vz7v/78+7/+/Pu//vz7v/78ez/++/q//ru6P/VtKT/q6CX/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1rf///////vv6//77+v/9+/n//fv5//37 - +f/9+/n//vr5//369//9+Pf//fj1//z38//89fL/+/Pw//vz7v/78+7/+/Pu//vz7v/78ez/++/q//ru - 6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL22sP////////z7///8 - +////Pr///z6///8+v///Pr//fz6//77+f/++fj//fn2//329P/89fL//PTx//zz7//88+///PPv//zz - 7//78u3/+/Dr//vv6P/VtKT/rqOb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+4 - sv////////38///9/P/+/fz//v38//79/P/+/fz//vz6//77+f/++fj//fn2//349f/89vP//PTx//zz - 8P/88/D//PPw//zz8P/88u3/+/Hr//rv6f/VtKT/r6Wd/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAMC5s////////v79//7+/f///f3///39///9/f///f3//v38//78+v/++vn//fn3//33 - 9v/99/P//PTx//z07//89O///PTv//z07//88u3/+/Dr//rv6f/VtKT/samg/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMG6tf////////////////////////////////////////7+///+ - /v///v7///79///+/f/+/f3//v38//79/P/+/fz//v38//79/P/+/Pz//vz7//78+//99vT/s6uj/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK8tv/BvLX/wbu1/8G7tf/AurT/wLq0/8C6 - tP/AurT/wLmz/7+4sv+/uLH/vrew/7y2r/+8ta7/u7St/7qzrP+6s6z/urOs/7qzrP+5sqr/ubCp/7iv - qP+3r6f/tq2l/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD/8AAAD/8AAP/wAAAP/wAA//AAAA// - AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/w - AAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA// - AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/w - AAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA// - AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/w - AAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA////////AAD///////8AAA== - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 126, 17 + + + + + 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 + zwD45t8A++/qAO3j3wDSsaIA89XHAPTWyQDz1skA9NjLAPPXygD129AA9dzRAPXd0gD239UA9+HXAPjo + 4QD56uMA+OniAPrs5gD56+UA/PPvAPz18gDGo5IAx6aWANW0pADava4AyrCjAPXazQD02cwA5Mu/APbf + 0wD13tMA9+PZAPjl3AD88u0A+/HsAPz28wD9+fcA/vz7AMirmwDz2csAzbmuAOfZ0QDe080A+/LtAOXe + 2gDi29cA28/IANzRygD67+gA+/HrAOHZ1AD89O8A+/PuAPPr5gD9+PUAg29hAJB+cgCNfHAA8O3rAHpl + VQB7ZlcAfmlaAH5qWwB/a1wAgW1eAIBsXQCCbl8Ag3BiAI17bgCUhHgAk4N3AJeHewCcjoQApZiOAKeb + kgCrn5YAraKaAKyhmQCuo5sA4NjSAMG6tQDo5OEA5+PgAHxoWAB9aVkAhXJjAIFvYACFc2UAh3VnAIl3 + aQCLeWsAi3psAI5+cQCRgXQAj39yAJWGegCYiX0Am42CAJ+RhgChlIkAoJOIAKebkQCpnpUAq6CXAK+l + nQC4r6gA39bPAOXg3ACRgnUAlYZ5AJmLfgCekIQAm42BAKOXjACilosAoZWKALGnngCupJsAtaykALKp + oQC2raUAwLmzAL+4sgC9trAApZqPAKedkwC5sakAt6+nALOrowC8ta4AurOsAL+4sQC+t7AAwry2AP36 + 9wD9+/kA6eflAP79/ACyqqEAsamgALy1rQC6s6sAubKqALy2rwC7ta0Awby1APb08QD9/PoAOcEAADHJ + AAAuzAAAJ9UAANP4/ADd+/4A2/n8ANv6/gDV8/cA0Pb9AM/s8QC77/kAvO/5AMTx+gDM6e8Atez5ALbs + +QC16vYAve76AMXj6gDe6+4ApuX3AKfm9wCo5vcAsNrmAMDc5ACZ4PYAqOb5AKfj9gC10tsAu9jhAMrg + 5wB70/QAe9T0AJDc9gCN1fAAkt32AJHY8QCY3fQAsczVAMPX3gDA09oA2eLlANDY2wBqzPIAaszxAGrL + 8QBqyO4AasjtAGvF6gBrxekAfs3rAJ/J2QCryNMAq8fSAG7B5QB2v94Am73NAK3J1QCsxtEAtc/aALfN + 1wB9tM4AoLzKAKS/zACnws8ApsHOAJ63xACpxNEApL3KAKK7yACqxNEAts3YAMfP0wCRs8YAj62+AKK+ + zgCIqb0Am7PBAKC4xgCasb8Ap7/NAJKpuACYr74AlKq5AJWrugCRprYAl629AI2hsgCQpLQAjaCxAP// + /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAGRjYU9DTkxNTUpJYF9ISEdHAAAAAAAAAAAAAAAAAAAAZQoP + ISEhISEhISEhISEhIkgAAAAAAAAAAAAAAAAAAABmCicTExMTExMSFBESEhAyXwAAAAAAAAAAAAAAAAAA + AFAKCwsnJicnJycTFKKgEjJgAAAAAAAAAAAAAAAAAAAAaDELCwsLCwsmJycTo6EUMksAAAAAAAAAAAAA + AAAAAABpMRYWFhYVFRULCwsmJzMyTAAAAAAAAAAAAAAAAAAAAFIxKSrL3d/18uvq7OkLJjJiAAAAAAAA + AAAAAAAAAAAAazEY3NnUuLHG09je7fELMk8AAAAAAAAAAAAAAAAAAABsMRnjxbWrsLrBztDX+hUyYwAA + AAAAAAAAAAAAAAAAAHwxK+/CtquwusHN0NL4FzJkAAAAAAAAAAAAAAAAAAAAVJUs5sS2q6+6wc3P0fkp + MmUAAAAAAAAAAAAAAAAAAABulQzlxLassLrBzs/R9hgyZwAAAAAAAAAAAAAAAAAAAG+VGuDEt6yvusHO + 0NHyGTJFAAAAAAAAAAAAAAAAAAAAfZUb4sS3rLC6wM7P0vQZImoAAAAAAAAAAAAAAAAAAACIlR7hxLes + sLrBzNDS9SwkeAAAAAAAAAAAAAAAAAAAAIkBCuTEt6ywusHN0NL3AwJRAAAAAAAAAAAAAAAAAAAAV0YO + 1sS2q7C6wc7Q0vM1NVMAAAAAAAAAAAAAAAAAAABZkYbVu62kpaepsrzD8ExgegAAAAAAAAAAAAAAAAAA + AIEBN9qlpaWlpaWlpaXuGiV8AAAAAAAAAAAAAAAAAAAAgAEfv76zqqamqK65x8kcNHsAAAAAAAAAAAAA + AAAAAACWAQeetL+95+Hb6MjKQRs0cAAAAAAAAAAAAAAAAAAAAIIBBS8vIAcfQDc9DTwdHiV+AAAAAAAA + AAAAAAAAAAAAi/v7+/v7+/v7+/v7+/v7lVUAAAAAAAAAAAAAAAAAAACKkYaci4NYVn9teURmYUxgcQAA + AAAAAAAAAAAAAAAAAJmUXV1eCXc4ODk+W3Y2OzpyAAAAAAAAAAAAAAAAAAAAmPsKkwSSMEIvIAhALg08 + I3MAAAAAAAAAAAAAAAAAAACH+zEKnwQDMAUgBx83PTwjWgAAAAAAAAAAAAAAAAAAAIb7lZUKBAMwQi8H + Bi09PCN0AAAAAAAAAAAAAAAAAAAAhfsBAZUKBDACBQc/LT08KJcAAAAAAAAAAAAAAAAAAABc+/v7AQEB + AQGVlZUxMTEFjAAAAAAAAAAAAAAAAAAAAJGdXFyFho+Qm42cjpqKdYuEAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A + AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A + AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP//////KAAAACAAAABAAAAAAQAgAAAAAACAEAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAId0Zv+Fc2X/hXJj/4Nw + Yv+Db2H/gm5f/4FtXv+AbF3/gGxc/35qW/9+aVr/fWlZ/3xnWP97Z1f/e2ZW/3pmVv96ZVX/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiXdp//77 + +v/SsaL/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/x6aW/3tm + V/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACLeWv//vv6//TZzP/02Mz/9NjM//TYy//02Mv/9NfL//TYyv/z18n/89fK//TWyf/z1sn/89bI//PV + x//Iq5v/fGhY/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + q//p5+X/6OTh/+jk4f/n4+D/5+Hf/+Xg3P/l3tv/5N3Z/+Lb1//h2dT/4NjS/9/Wz//e083/3NHK/9vP + yP+pnpX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAvLWt///////++/r//fv5//76+f/9+vf//fj3//349f/89/P//PXy//vz8P/78+7/+/Hs//vv + 6v/67uj/1bSk/6ugl/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC9trD////////8+////Pr//fz6//77+f/++fj//fn2//329P/89fL//PTx//zz + 7//78u3/+/Dr//vv6P/VtKT/rqOb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+4sv////////38//79/P/+/Pr//vv5//75+P/9+fb//fj1//z2 + 8//89PH//PPw//zy7f/78ev/+u/p/9W0pP+vpZ3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwLmz///////+/v3///39//79/P/+/Pr//vr5//35 + 9//99/b//ffz//z08f/89O///PLt//vw6//67+n/5Mu//7GpoP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBurX///////////////////7+///+ + /v///v7///79///+/f/+/f3//v38//79/P/+/Pz//vz7//78+//99vT/s6uj/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK8tv/BvLX/wbu1/8C6 + tP/AubP/v7iy/7+4sf++t7D/vLav/7y1rv+7tK3/urOs/7myqv+5sKn/uK+o/7evp/+2raX/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A + AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA//4A + AP/+AAD//gAA//4AAP/+AAD//gAA//4AAP/+AAD//gAA/ygAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAA + AAAAAAAAAAEAAAABAAAAAAAA/vn4AP349wD++vkA/PHtAPzz8AD78/AA/ff1AP77+gD12s8A9+HYAPjm + 3wD56uQA++/qAO3j3wDn4uAA0rGiAPPVxwD01skA89bJAPTYywDz18oA9dvQAPbd0gD13NEA9t7TAPXd + 0gD239UA9+HXAPfj2gD45NsA+erjAPjp4gD67OYA+/DrAPzz7wDl3tsA/PXyAMajkgDHppYA1bSkAMqw + owD12s0A9NnMAPbd0QD13tMA9uDVAPXf1AD24tgA9+TbAPjl3AD46OAA+u7oAPzy7QD78ewA4trWAPz2 + 8wDu6ugA/vz7AMirmwDz2csA59nRAN7TzQD78u0A/PXxAOnc1ADc0MkA/PTvAPvz7gD9+PUAkH5yAI18 + cADw7esAemVVAHtmVwB+aVoAfmpbAH9rXACBbV4AgGxdAIJuXwCDcGIAgm9hAI17bgCUhHgAloZ6AJyO + hACtopoA9vLvAOjk4QB8aFgAfWlZAIVyYwCFc2UAh3VnAIl3aQCLemwAjn5xAJGBdACPf3IAmYp+AJuN + ggCgk4gApZmPAKqflgCroJcAr6WdALivqACKeWoAkYJ1AJuNgQCfkYUAo5eMAKGVigCnnJIAsaeeAK6k + mwC1rKQAtq2lAODY0QDAubMAv7iyALmxqQC3r6cAvLWuALqzrAC/uLEAvrewAMK8tgDAurQA/fr3AP37 + +QDp5+UA//79AP79/ACyqqEAvLWtALy2rwC7ta0A/fz6ADXFAAAr0QAA2/v9ANP4/ADd+/4A3Pr9ANv5 + /ADb+v4A1vT4AMjz+gDB6fAAz+zxANHt8gC77/kAvO/5AMLw+gDS9v0A2+rtALXs+QC27PkAter2AKbl + 9wCn5vcAqOb3AKvm9wDG4egAl971AJjg9gCo5vkAttnkAGvN8QBszvEAbc3xAG7O8gBvzvEAcM7xAHTP + 8QB40vMAetP0AHvU9AB81PQAfNPzAJDc9gCN1fAAkt32AJHY8QCe3/UAydvhAGzO8wBtzPIAb8zzAG3K + 7gBtyO0Aa8XqAHDO8gBwzfEAb8zwAG/M7wBvy+8Ab8ntAG7H7ABuyOsAbsfqAHLO8QBxy+8AcMnsAG3E + 5gBwx+kAd9HzAHLG6ABxxecAccHiAHXH5wByv94AeszsAHjC4QCfydkAq8jTALfR2wC2ztgAbsLmAG/A + 4wB0wOIAfLnUAJm8zAChvssArMnWAKzG0gCxy9YAjrXJAKS/zACnws8AnrfEAKnE0QCkvcoAorvIAKrE + 0QCFqb0AjbLGAI6uwACrxdMAnrbDAJuzwQCasb8AobnHAJKpuACYr74Alau6AJGnuACQpbUAl629AI2h + sgCPo7MAjaCxAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABeXVxcUVFRUVJQTk9PTEtbW1tbWkpKSUkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfCBAQJiYm + JiYmJiYmJiYmJiYmJiYmJ0oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgCCsrFBQUFBQUFBQUExUSEhIS + ExMRO1oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTCAkJCQkJCSsqKysrKxQVFRUVjYwTO1sAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABhOgkJCQkJCQkJCQkqKysUFBQUjYwVO00AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABiOhgYGBgYGBgYFhYWCQkJCQkJKis8O04AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUOhkZLS0t + LS0aGhoYGBYJCQkJCQkqO1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVOhsbLi4uLhsuLy0ZGRcsLCws + FhYJO1EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkOhwcCrvi4fHx9/Xv5e7l5fAtGhgWO10AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABuOh0d2uDYqZaWoKbW0dTX3+3uGS0aO14AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABWhjIy6LmhmZWVn6bQxsbH0t39LhsZO18AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvhgsL9Lai + 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 + AAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB// + AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/g + AAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB// + AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD/4AAAH/8AAP/gAAAf/wAA/+AAAB//AAD///////8AAP// + /////wAAKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAId0 + Zv+Fc2X/hXJj/4VyY/+DcGL/g3Bi/4NwYv+DcGL/g29h/4JuX/+BbV7/gGxd/4BsXP9+alv/fmla/31p + Wf99aVn/fWlZ/31pWf98Z1j/e2dX/3tmVv96Zlb/emVV/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAIl3af/++/r/0rGi/9Kxov/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8aj + kv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Go5L/xqOS/8ajkv/Hppb/e2ZX/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIt5a//++/r/9NnM//TZzP/02Mz/9NjM//TYzP/02Mz/9NjM//TY + y//02Mv/9NfL//TYyv/z18n/89fK//TWyf/01sn/9NbJ//TWyf/z1sn/89bI//PVx//Iq5v/fGhY/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI17bv/+/Pr/9NrO//Tazv/12s7/9drO//Xa + zv/12s7/9NnN//Tazf/02c3/9NnN//TZzP/02cz/9NjL//PXyv/z18r/89fK//PXyv8uzAD/OcEA//PW + yP/Iq5v/fWlZ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5+cf/+/Pv/9dvP//Xb + z//028//9NvP//Tbz//028//9dvP//Taz//12s7/9drO//Xazf/02c3/9NnM//TYzP/02Mz/9NjM//TY + zP8n1QD/MckA//PYyv/Iq5v/f2tc/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJGB + dP/+/Pv/9dzS//Xc0v/13NH/9dzR//Xc0f/13NH/9d3R//Xd0f/13ND/9dzQ//Xb0P/028//9NvP//Xa + zv/12s7/9drO//Xazv/12c3/9NnM//PZy//Iq5v/gW1e/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJODd//+/Pv/9t7T//be0//13tP/9d7T//Xe0//13tP/9d7T//Xe0v/13dL/9d3S//Xc + 0v/13dH/9dvQ//Tbz//028//9NvP//Tbz//1287/9drO//Xazf/Iq5v/gW9g/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJWGev/+/Pv/9t/V//bf1f/24NX/9uDV//bg1f/24NX/9t/V//bg + 1f/139T/9d7U//bf0//23tP/9t3S//bd0f/23dH/9t3R//bd0f/13ND/9dvQ//Xaz//Iq5v/g3Bi/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiJff/+/Pv/9+HX//fh1//34dj/0dnd/6vJ + 1v+hvsv/nbXD/562w/+Vq7r/kqm4/46uwP+Ptsr/jrLE/4+1yP+MtMr/q8XT//Xe0//13dL/9d3R//Xc + 0P/Iq5v/hXNl/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqMgP/+/Pz/9+PZ//fj + 2f+10Nv/mbzM/5/J2f+w2ub/wenw/8Hp8P+16vb/l930/3rM7P9yxuj/dcfn/3jC4f98udT/ham9/4yy + x//23tT/9d7T//Xd0v/Iq5v/h3Vn/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyO + hP/+/fz/+OXc//jl3P+et8T/kdjx/6bl9/+77/n/yPP6/8jz+v+27Pn/l9/2/3fR8/9uy+//b8ru/2/J + 7f9xxef/b8Dj/42gsf/24Nb/9t/V//bf0//Iq5v/iXdp/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJ+Rhv/+/fz/+Obf//jm3/+guMb/kNz2/6fm9/+77/n/yPP6/8jz+v+27Pn/mOD2/3nT + 9P9tzfH/b8vv/3DJ7P9ux+r/bcTm/42hsv/34df/9uDW//bf1f/Iq5v/i3ps/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKGUif/+/fz/+Ojh//jo4f+husf/kNz2/6bm9/+87/n/yPP6/8jz + +v+17Pj/meD2/3zU9P9szvP/b83w/2/L7v9uyOv/bcTm/4+js//34tn/9+HY//fh1v/Iq5v/jXxw/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOXjP/+/fz/+erj//nq4/+iu8j/kt32/6fm + 9/+77/n/yPP6/8jz+v+17Pn/meD2/3vU9P9tzPL/b83x/27L7/9tyOz/bcHn/5CktP/35Nv/9+Pa//bi + 2P/Hppb/j39y/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOXjP/+/fz/+erj//nq + 4/+kvcr/kt32/6fm9/+87/n/yPP6/8jz+v+27Pn/mOD2/3vU9P9tzPL/b87x/2/L7/9tx+z/b8Pm/5Gm + tv/35Nv/9+Pa//bi2P/Hppb/j39y/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOX + jP/+/fz/+erj//nq4/+et8T/kdjx/6bl9/+77/n/yPP6/8jz+v+27Pn/mOD2/3vU9P9szfP/cc7x/2/L + 7/9ux+z/ccDi/42gsf/35Nv/9+Pa//bi2P/Hppb/j39y/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAKOXjP/+/fz/+erj//nq4/+guMb/kNz2/6fm9/+77/n/yPP6/8jz+v+27Pn/mOD2/3vU + 9P9rzPH/cM7y/2/M7/9tyOr/b8Hl/42hsv/35Nv/9+Pa//bi2P/Hppb/kYJ1/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOXjP/+/fz/+erj//nq4/+husf/kNz2/6bm9/+87/n/yPP6/8jz + +v+17Pj/meD2/3vU9P9szvH/bs7x/3DL7/9vx+n/ccLi/5Cltv/35Nv/9+Pa//bi2P/Hppb/kYJ1/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKWaj//+/f3/+evl//nr5f+iu8j/kt32/6fm + 9/+77/n/yPP6/8jz+v+17Pn/meD2/3vV9P9rzvH/b87w/3DL7v9wx+n/cr7d/5KouP/45d3/9+Tc//jk + 2//Hppb/kYJ1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKedk////v7//vv6//77 + +v+kvcr/kt32/6fm9/+87/n/yPP6/8jz+v+27Pn/mOD2/3vU9P9tzPL/b87x/3HL7v9vx+r/c7/f/5Gn + uP/++vn//vr4//76+P/99/X/lIR4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKuf + lv/w7ev/7ePf/+3j3/+kv8z/kt32/6jm9/+87/n/yPP6/8jz+v+17Pn/mOD2/3vU9P9vzPP/cM3x/3HL + 7/9vx+r/ccDf/5KpuP/p3NX/6NvT/+fa0v/m2ND/l4d7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAKyhmf/CvLb/v7iy/7+4sv+mwc7/kt32/6jm9/+87/n/yPP6/8jz+v+27Pn/meD2/3vT + 9P9uzvH/cM7x/3HL7/9ux+r/dMDi/5Squv+KeGr/hXNk/4BtXv99aFn/mYt+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy7f+nws//kt32/6jm9/+87/n/yPP6/8jz + +v+27Pn/mOD2/3vT9P9uzvL/cM7x/2/M7/9ux+v/ccLi/5Wruv/56uT/+eri//jo4P/KsKP/m42B/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy7f+pxNH/kt32/6jm + 9/+87/n/yPP6/8jz+v+27Pn/l9/2/3jS8/9uzPD/cs7x/3DM8P9tyO3/bcTn/5etvf/56uT/+eri//jo + 4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy + 7f+rx9L/kt32/6fm9/+77/n/yPP6/8jz+v+27Pn/mOD2/3zT8/9vzPD/dM/x/2/M8P9tyu7/a8Xq/5iv + vv/56uT/+eri//jo4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6k + m////v3/+/Lt//vy7f+ryNP/qOb5/8Tx+v/T+Pz/2/v9/9v7/f/c+/7/2/r+/9L2/f/B7/r/we/6/6vm + 9/+e3/X/jdXw/5qxv//56uT/+eri//jo4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAK6km////v3/+/Lt//vy7f+tydX/3fv+/937/v/d+/7/3fv+/937/v/d+/7/3Pv9/9z6 + /f/c+v3/3Pr9/9v6/f/b+v3/3fv+/5uzwf/56uT/+eri//jo4P/KsKP/m42B/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6km////v3/+/Lt//vy7f/K4Of/u9jh/8Xj6v/P7PH/1vT4/9b0 + +P/b+fz/2/n8/9b0+P/R7fL/1/X5/9Dt8v/C3+b/sszW/7PM1v/56uT/+eri//jo4P/KsKP/m42B/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALGnnv///v7//PPv//zz7//28u//2+rt/8Pd + 5f+4093/r8vW/7HL1v+qxNH/p8LP/6zG0v+2ztj/q8bS/7DL1v+30dr/yNzh/+7q6P/56+X/+evk//jp + 4v/KsKP/npCE/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALKqof///v7//PXx//z1 + 8f/89fH//PXx//z18f/89fH//PTx//z08P/88+///PLu//zx7f/78Oz/+vDq//ru6P/67uj/+u7o//ru + 6P/67Of/+ezl//nq4//KsKP/oJOI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWs + pP///v7//fbz//328//89vP//Pbz//z28//89vP//Pbz//z18v/89fD//PPv//vz7v/78u3/+vHr//vv + 6v/77+r/++/q//vv6v/67uj/+uzm//nr5P/KsKP/opaL/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALeup/////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/fz/pZiO/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAALixqf/CvLb/v7my/7+5sv+7ta3/u7Wt/7u1rf+7ta3/t6+n/7Kp + of+topr/p5uS/6GViv+bjYL/lYZ5/5B+cv+QfnL/kH5y/5B+cv+KeWr/hXJj/4BtXv99aFn/p5uR/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALqzq//p5+X/6OTh/+jk4f/o5OH/6OTh/+jk + 4f/o5OH/5+Pg/+fh3//l4Nz/5d7b/+Td2f/i29f/4dnU/+DY0v/g2NL/4NjS/+DY0v/f1s//3tPN/9zR + yv/bz8j/qZ6V/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1rf///////vv6//77 + +v/9+/n//fv5//37+f/9+/n//vr5//369//9+Pf//fj1//z38//89fL/+/Pw//vz7v/78+7/+/Pu//vz + 7v/78ez/++/q//ru6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1 + rf///////vv6//77+v/9+/n//fv5//37+f/9+/n//vr5//369//9+Pf//fj1//z38//89fL/+/Pw//vz + 7v/78+7/+/Pu//vz7v/78ez/++/q//ru6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALy1rf///////vv6//77+v/9+/n//fv5//37+f/9+/n//vr5//369//9+Pf//fj1//z3 + 8//89fL/+/Pw//vz7v/78+7/+/Pu//vz7v/78ez/++/q//ru6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1rf///////vv6//77+v/9+/n//fv5//37+f/9+/n//vr5//36 + 9//9+Pf//fj1//z38//89fL/+/Pw//vz7v/78+7/+/Pu//vz7v/78ez/++/q//ru6P/VtKT/q6CX/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALy1rf///////vv6//77+v/9+/n//fv5//37 + +f/9+/n//vr5//369//9+Pf//fj1//z38//89fL/+/Pw//vz7v/78+7/+/Pu//vz7v/78ez/++/q//ru + 6P/VtKT/q6CX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL22sP////////z7///8 + +////Pr///z6///8+v///Pr//fz6//77+f/++fj//fn2//329P/89fL//PTx//zz7//88+///PPv//zz + 7//78u3/+/Dr//vv6P/VtKT/rqOb/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+4 + sv////////38///9/P/+/fz//v38//79/P/+/fz//vz6//77+f/++fj//fn2//349f/89vP//PTx//zz + 8P/88/D//PPw//zz8P/88u3/+/Hr//rv6f/VtKT/r6Wd/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMC5s////////v79//7+/f///f3///39///9/f///f3//v38//78+v/++vn//fn3//33 + 9v/99/P//PTx//z07//89O///PTv//z07//88u3/+/Dr//rv6f/VtKT/samg/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMG6tf////////////////////////////////////////7+///+ + /v///v7///79///+/f/+/f3//v38//79/P/+/fz//v38//79/P/+/Pz//vz7//78+//99vT/s6uj/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK8tv/BvLX/wbu1/8G7tf/AurT/wLq0/8C6 + tP/AurT/wLmz/7+4sv+/uLH/vrew/7y2r/+8ta7/u7St/7qzrP+6s6z/urOs/7qzrP+5sqr/ubCp/7iv + qP+3r6f/tq2l/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD/8AAAD/8AAP/wAAAP/wAA//AAAA// + AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/w + AAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA// + AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/w + AAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA// + AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA//AAAA//AAD/8AAAD/8AAP/w + AAAP/wAA//AAAA//AAD/8AAAD/8AAP/wAAAP/wAA////////AAD///////8AAA== + + \ No newline at end of file diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/Program.cs b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Program.cs similarity index 98% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/Program.cs rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Program.cs index 3fd0672639..f3c29a7ee4 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/Program.cs +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Program.cs @@ -1,30 +1,30 @@ -using System; -using System.Configuration; -using System.Windows.Forms; -using System.Globalization; - -namespace DemoWorkload -{ - static class Program - { - public static int THREAD_COUNT = int.Parse(ConfigurationManager.AppSettings["ThreadCount"], CultureInfo.InvariantCulture); - public static int READS_PER_WRITE = int.Parse(ConfigurationManager.AppSettings["ReadsPerWrite"], CultureInfo.InvariantCulture); - public static int REQUEST_COUNT = int.Parse(ConfigurationManager.AppSettings["RequestCount"], CultureInfo.InvariantCulture); - public static int ROW_COUNT = int.Parse(ConfigurationManager.AppSettings["RowCount"], CultureInfo.InvariantCulture); - public static int TRANSACTION_COUNT = int.Parse(ConfigurationManager.AppSettings["TransactionCount"], CultureInfo.InvariantCulture); - public static long MAX_TPS = int.Parse(ConfigurationManager.AppSettings["MaxTps"], CultureInfo.InvariantCulture); - public static long MAX_LATCH_WAIT = int.Parse(ConfigurationManager.AppSettings["MaxLatchWaits"], CultureInfo.InvariantCulture); - public static string CONN_STR = ConfigurationManager.ConnectionStrings["TicketReservations"].ConnectionString; - - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new FrmMain()); - } - } -} +using System; +using System.Configuration; +using System.Windows.Forms; +using System.Globalization; + +namespace DemoWorkload +{ + static class Program + { + public static int THREAD_COUNT = int.Parse(ConfigurationManager.AppSettings["ThreadCount"], CultureInfo.InvariantCulture); + public static int READS_PER_WRITE = int.Parse(ConfigurationManager.AppSettings["ReadsPerWrite"], CultureInfo.InvariantCulture); + public static int REQUEST_COUNT = int.Parse(ConfigurationManager.AppSettings["RequestCount"], CultureInfo.InvariantCulture); + public static int ROW_COUNT = int.Parse(ConfigurationManager.AppSettings["RowCount"], CultureInfo.InvariantCulture); + public static int TRANSACTION_COUNT = int.Parse(ConfigurationManager.AppSettings["TransactionCount"], CultureInfo.InvariantCulture); + public static long MAX_TPS = int.Parse(ConfigurationManager.AppSettings["MaxTps"], CultureInfo.InvariantCulture); + public static long MAX_LATCH_WAIT = int.Parse(ConfigurationManager.AppSettings["MaxLatchWaits"], CultureInfo.InvariantCulture); + public static string CONN_STR = ConfigurationManager.ConnectionStrings["TicketReservations"].ConnectionString; + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new FrmMain()); + } + } +} diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/AssemblyInfo.cs b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/AssemblyInfo.cs similarity index 97% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/AssemblyInfo.cs rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/AssemblyInfo.cs index fc31df96ab..b7f7dbf0fe 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/AssemblyInfo.cs +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/AssemblyInfo.cs @@ -1,39 +1,39 @@ -using System.Resources; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DemoWorkload")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("DemoWorkload")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("b5dbed29-db11-442b-bd31-d0e6e97feff7")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: NeutralResourcesLanguage("en-US")] - +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DemoWorkload")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("DemoWorkload")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b5dbed29-db11-442b-bd31-d0e6e97feff7")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: NeutralResourcesLanguage("en-US")] + diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/Resources.Designer.cs b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/Resources.Designer.cs similarity index 97% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/Resources.Designer.cs rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/Resources.Designer.cs index 411ac347b6..25ec838bda 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/Resources.Designer.cs +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/Resources.Designer.cs @@ -1,93 +1,93 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace DemoWorkload.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // 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", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DemoWorkload.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SQLBackground { - get { - object obj = ResourceManager.GetObject("SQLBackground", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap SQLBackground1 { - get { - object obj = ResourceManager.GetObject("SQLBackground1", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon sqlserver { - get { - object obj = ResourceManager.GetObject("sqlserver", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace DemoWorkload.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // 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", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DemoWorkload.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SQLBackground { + get { + object obj = ResourceManager.GetObject("SQLBackground", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SQLBackground1 { + get { + object obj = ResourceManager.GetObject("SQLBackground1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon sqlserver { + get { + object obj = ResourceManager.GetObject("sqlserver", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/Resources.resx b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/Resources.resx similarity index 98% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/Resources.resx rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/Resources.resx index 9bf361226a..3e218d5dbb 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/Resources.resx +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/Resources.resx @@ -1,130 +1,130 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\SQLBackground.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\SQLBackground.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\sqlserver.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\SQLBackground.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SQLBackground.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sqlserver.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/Settings.Designer.cs b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/Settings.Designer.cs similarity index 97% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/Settings.Designer.cs rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/Settings.Designer.cs index 6b536a6564..413e56010d 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/Settings.Designer.cs +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/Settings.Designer.cs @@ -1,26 +1,26 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace DemoWorkload.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace DemoWorkload.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/samples/features/in-memory/wwi-sales-orders/WinFormsClient/Properties/Settings.settings b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/Settings.settings similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/WinFormsClient/Properties/Settings.settings rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Properties/Settings.settings diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/Resources/SQLBackground.jpg b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Resources/SQLBackground.jpg similarity index 100% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/Resources/SQLBackground.jpg rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Resources/SQLBackground.jpg diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/Resources/sqlserver.ico b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Resources/sqlserver.ico similarity index 100% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/Resources/sqlserver.ico rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/Resources/sqlserver.ico diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/UIControls.cs b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/UIControls.cs similarity index 97% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/UIControls.cs rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/UIControls.cs index 51162c3f2e..40da584bec 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/UIControls.cs +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/UIControls.cs @@ -1,60 +1,60 @@ -//---------------------------------------------------------------------------------- -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, -// EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES -// OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. -//---------------------------------------------------------------------------------- -// The example companies, organizations, products, domain names, -// e-mail addresses, logos, people, places, and events depicted -// herein are fictitious. No association with any real company, -// organization, product, domain name, email address, logo, person, -// places, or events is intended or should be inferred. - -using Gauge = CircularGauge.CircularGaugeControl; -using MediaColor = System.Windows.Media.Color; -using System; - -namespace DemoWorkload -{ - public class UIControls - { - Gauge _speedDial = new Gauge(); - - public Gauge speedDial { get { return _speedDial; }} - public UIControls() - { - SpeedDialInit(); - } - private void SpeedDialInit() - { - // Initialize CircularGauge Control - _speedDial.Radius = 120; - _speedDial.DialBorderThickness = 0; - _speedDial.ScaleRadius = 110; - _speedDial.ScaleStartAngle = 120; - _speedDial.ResetPointerOnStartUp = true; - _speedDial.ScaleSweepAngle = 300; - _speedDial.PointerLength = 85; - _speedDial.PointerCapRadius = 0; - _speedDial.MinValue = 0; - _speedDial.MaxValue = 60; - _speedDial.DialText = "0"; - _speedDial.MajorDivisionsCount = 10; - _speedDial.MinorDivisionsCount = 5; - _speedDial.RangeIndicatorThickness = 0; - _speedDial.RangeIndicatorRadius = 0; - _speedDial.ScaleLabelRadius = 90; - _speedDial.ScaleLabelFontSize = 12; - _speedDial.ScaleLabelForeground = MediaColor.FromRgb(0, 0, 0); // Black - _speedDial.MajorTickColor = MediaColor.FromRgb(169, 169, 169); // DarkGray - _speedDial.MinorTickColor = MediaColor.FromRgb(169, 169, 169); // DarkGray - _speedDial.ImageOffset = -50; - _speedDial.GaugeBackgroundColor = MediaColor.FromRgb(255, 255, 255); // White - _speedDial.PointerThickness = 5; - _speedDial.DialTextOffset = 100; - _speedDial.DialTextColor = MediaColor.FromRgb(0, 0, 0); // Red - _speedDial.DialBorderThickness = 0; - } - } -} +//---------------------------------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, +// EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. +//---------------------------------------------------------------------------------- +// The example companies, organizations, products, domain names, +// e-mail addresses, logos, people, places, and events depicted +// herein are fictitious. No association with any real company, +// organization, product, domain name, email address, logo, person, +// places, or events is intended or should be inferred. + +using Gauge = CircularGauge.CircularGaugeControl; +using MediaColor = System.Windows.Media.Color; +using System; + +namespace DemoWorkload +{ + public class UIControls + { + Gauge _speedDial = new Gauge(); + + public Gauge speedDial { get { return _speedDial; }} + public UIControls() + { + SpeedDialInit(); + } + private void SpeedDialInit() + { + // Initialize CircularGauge Control + _speedDial.Radius = 120; + _speedDial.DialBorderThickness = 0; + _speedDial.ScaleRadius = 110; + _speedDial.ScaleStartAngle = 120; + _speedDial.ResetPointerOnStartUp = true; + _speedDial.ScaleSweepAngle = 300; + _speedDial.PointerLength = 85; + _speedDial.PointerCapRadius = 0; + _speedDial.MinValue = 0; + _speedDial.MaxValue = 60; + _speedDial.DialText = "0"; + _speedDial.MajorDivisionsCount = 10; + _speedDial.MinorDivisionsCount = 5; + _speedDial.RangeIndicatorThickness = 0; + _speedDial.RangeIndicatorRadius = 0; + _speedDial.ScaleLabelRadius = 90; + _speedDial.ScaleLabelFontSize = 12; + _speedDial.ScaleLabelForeground = MediaColor.FromRgb(0, 0, 0); // Black + _speedDial.MajorTickColor = MediaColor.FromRgb(169, 169, 169); // DarkGray + _speedDial.MinorTickColor = MediaColor.FromRgb(169, 169, 169); // DarkGray + _speedDial.ImageOffset = -50; + _speedDial.GaugeBackgroundColor = MediaColor.FromRgb(255, 255, 255); // White + _speedDial.PointerThickness = 5; + _speedDial.DialTextOffset = 100; + _speedDial.DialTextColor = MediaColor.FromRgb(0, 0, 0); // Red + _speedDial.DialBorderThickness = 0; + } + } +} diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/packages.config b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/packages.config similarity index 97% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/packages.config rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/packages.config index ef84f1fcb6..0f94fb8094 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/packages.config +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/DemoWorkload/packages.config @@ -1,4 +1,4 @@ - - - + + + \ No newline at end of file diff --git a/samples/features/in-memory/ticket-reservations/InMemoryOLTPDemo.sln b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/InMemoryOLTPDemo.sln similarity index 98% rename from samples/features/in-memory/ticket-reservations/InMemoryOLTPDemo.sln rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/InMemoryOLTPDemo.sln index d24bb91964..0a3dc6d213 100644 --- a/samples/features/in-memory/ticket-reservations/InMemoryOLTPDemo.sln +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/InMemoryOLTPDemo.sln @@ -1,38 +1,38 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.40629.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DemoWorkload", "DemoWorkload\DemoWorkload.csproj", "{2881A3C4-9153-46F2-8196-9929ED9C17D6}" -EndProject -Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "TicketReservations", "TicketReservations\TicketReservations.sqlproj", "{38641248-77EA-479B-B496-3EDA463ACEAD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Debug|x86.ActiveCfg = Debug|x86 - {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Debug|x86.Build.0 = Debug|x86 - {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Release|Any CPU.Build.0 = Release|Any CPU - {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Release|x86.ActiveCfg = Release|x86 - {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Release|x86.Build.0 = Release|x86 - {38641248-77EA-479B-B496-3EDA463ACEAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {38641248-77EA-479B-B496-3EDA463ACEAD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {38641248-77EA-479B-B496-3EDA463ACEAD}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {38641248-77EA-479B-B496-3EDA463ACEAD}.Debug|x86.ActiveCfg = Debug|Any CPU - {38641248-77EA-479B-B496-3EDA463ACEAD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {38641248-77EA-479B-B496-3EDA463ACEAD}.Release|Any CPU.Build.0 = Release|Any CPU - {38641248-77EA-479B-B496-3EDA463ACEAD}.Release|Any CPU.Deploy.0 = Release|Any CPU - {38641248-77EA-479B-B496-3EDA463ACEAD}.Release|x86.ActiveCfg = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DemoWorkload", "DemoWorkload\DemoWorkload.csproj", "{2881A3C4-9153-46F2-8196-9929ED9C17D6}" +EndProject +Project("{00D1A9C2-B5F0-4AF3-8072-F6C62B433612}") = "TicketReservations", "TicketReservations\TicketReservations.sqlproj", "{38641248-77EA-479B-B496-3EDA463ACEAD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Debug|x86.ActiveCfg = Debug|x86 + {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Debug|x86.Build.0 = Debug|x86 + {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Release|Any CPU.Build.0 = Release|Any CPU + {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Release|x86.ActiveCfg = Release|x86 + {2881A3C4-9153-46F2-8196-9929ED9C17D6}.Release|x86.Build.0 = Release|x86 + {38641248-77EA-479B-B496-3EDA463ACEAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {38641248-77EA-479B-B496-3EDA463ACEAD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38641248-77EA-479B-B496-3EDA463ACEAD}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {38641248-77EA-479B-B496-3EDA463ACEAD}.Debug|x86.ActiveCfg = Debug|Any CPU + {38641248-77EA-479B-B496-3EDA463ACEAD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {38641248-77EA-479B-B496-3EDA463ACEAD}.Release|Any CPU.Build.0 = Release|Any CPU + {38641248-77EA-479B-B496-3EDA463ACEAD}.Release|Any CPU.Deploy.0 = Release|Any CPU + {38641248-77EA-479B-B496-3EDA463ACEAD}.Release|x86.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/samples/features/in-memory/ticket-reservations/README.md b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/README.md similarity index 98% rename from samples/features/in-memory/ticket-reservations/README.md rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/README.md index 33a98e9cae..1d242be3bb 100644 --- a/samples/features/in-memory/ticket-reservations/README.md +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/README.md @@ -1,79 +1,79 @@ -# In-Memory OLTP Performance Improvement Sample - -This Windows Forms sample application built on .NET Framework 4.6 demonstrates the performance benefits of using SQL Server memory optimized tables and native compiled stored procedures. You can compare the performance before and after enabling In-Memory OLTP by observing the transactions/sec as well as the current CPU Usage and latches/sec. - -The demo is run in this [17-minute video explaining In-Memory OLTP](https://www.youtube.com/watch?v=l5l5eophmK4) (demo is at 8:25). - - - -## About this sample - - -* **Latest release:** [in-memory-oltp-perf-demo-v1.0](https://github.com/Microsoft/sql-server-samples/releases/tag/in-memory-oltp-demo-v1.0) -* **Applies to:** SQL Server 2014 (or higher), Azure SQL Database -* **Key features:** In-Memory OLTP -* **Workload:** OLTP -* **Programming Language:** T-SQL, C# -* **Authors:** Jos de Bruijn - -![Alt text](/media/in-memory-oltp-performance.png "Ticket Reservations") - -## Running this sample -1. Before you can run this sample, you must have the following perquisites: - - SQL Server 2014 (or higher) - - Visual Studio 2015 (or higher) with the latest SSDT installed. - -2. Clone this repository using Git for Windows (http://www.git-scm.com/), or download the zip file. - -3. From Visual Studio, open the **InMemoryOLTPDemo.sln** file from the root directory. - -4. In Visual Studio Build menu, select **Build Solution** (or Press F6). - -5. In the **App.config** file, located in the project root, find the **TicketReservations** app setting and edit the connectionString if needed. Currently it is configured to connect to the local default SQL Server Instance using Integrated Security. - -6. Publish the TicketReservations Database - - Right click on the TicketReservations SQL Server Database Project and Select **Publish** - - Click Edit... to choose your connection string - - Click Publish - - Note: For publishing to Azure SQL you need to change the DB project target platform to **Microsoft Azure SQL Database V12** - -7. Build the app for release and run it. Do not use the debugger, as that will slow down the app. - -8. Start the workload with the **Start** button, and run for a while to show perf profile. Then press stop to stop the workload. You can tweak aspects of the workload (e.g., rows per transaction) through the configuration form accessed using the "Options" menue. - -9. In the database project, - - Change TicketReservationDetail.sql to a memory-optimized table (instructions commented in the file itself) - - Change InsertReservationDetails.sql to natively compiled (instructions in the same file) - -10. Publish the database project to the same database – the tool will take care of making the necessary changes. - Note that, as part of publication, the data is copied from the old disk-based table to the new memory-optimized table, so the longer you run the initial workload, the longer this publication takes. To speed up the process you can run `TRUNCATE TABLE dbo.TicketReservationDetail` in the database. - -11. Go back to the app and run the workload again. No need to recompile or restart the application. - -The perf gains from In-Memory OLTP as shown by the load generation app depend on two factors:\ - -- Hardware - - more cores => higher perf gain - - slower log IO => lower perf gain -- Configuration settings in the load generator - - more rows per transaction => higher perf gain - - more reads per write => lower perf gain - - default setting is 100 rows per transaction and 1 read per write - -If the performance profile after migration to In-Memory OLTP looks choppy, it is likely that log IO is the bottleneck. This can be mitigated by using [delayed durability](https://msdn.microsoft.com/en-us/library/dn449490.aspx). This is enabled by running the following statement in the database: - `ALTER DATABASE CURRENT SET DELAYED_DURABILITY = FORCED` - -With default settings on one machine with 24 logical cores and relatively slow SSD for the log the app shows around performance 40X gain, and in this case the bottleneck was log IO. Note that the factor gain can vary with the hardware being used. - -When deploying to Azure SQL Database, make sure to run the app in an Azure VM in the same region as the database. - -If you have a beefy machine and are seeing a drop-off in transaction throughput after running the demo for a while, increase the BUCKET_COUNT in 'TicketReservations/dbo/Tables/TicketReservationDetail.sql' by a factor of 10 or 100. - -For any feedback on the sample, contact: sqlserversamples@microsoft.com - -## About the code -The code included in this sample is not intended to be a set of best practices on how to build scalable enterprise grade applications. This is beyond the scope of this quick start sample. - -## More information -- [In-Memory OLTP (In-Memory Optimization)] (https://msdn.microsoft.com/library/dn133186.aspx) -- [OLTP and database management] (https://www.microsoft.com/en-us/server-cloud/solutions/oltp-database-management.aspx) +# In-Memory OLTP Performance Improvement Sample + +This Windows Forms sample application built on .NET Framework 4.6 demonstrates the performance benefits of using SQL Server memory optimized tables and native compiled stored procedures. You can compare the performance before and after enabling In-Memory OLTP by observing the transactions/sec as well as the current CPU Usage and latches/sec. + +The demo is run in this [17-minute video explaining In-Memory OLTP](https://www.youtube.com/watch?v=l5l5eophmK4) (demo is at 8:25). + + + +## About this sample + + +* **Latest release:** [in-memory-oltp-perf-demo-v1.0](https://github.com/Microsoft/sql-server-samples/releases/tag/in-memory-oltp-demo-v1.0) +* **Applies to:** SQL Server 2014 (or higher), Azure SQL Database +* **Key features:** In-Memory OLTP +* **Workload:** OLTP +* **Programming Language:** T-SQL, C# +* **Authors:** Jos de Bruijn + +![Alt text](/media/in-memory-oltp-performance.png "Ticket Reservations") + +## Running this sample +1. Before you can run this sample, you must have the following perquisites: + - SQL Server 2014 (or higher) + - Visual Studio 2015 (or higher) with the latest SSDT installed. + +2. Clone this repository using Git for Windows (http://www.git-scm.com/), or download the zip file. + +3. From Visual Studio, open the **InMemoryOLTPDemo.sln** file from the root directory. + +4. In Visual Studio Build menu, select **Build Solution** (or Press F6). + +5. In the **App.config** file, located in the project root, find the **TicketReservations** app setting and edit the connectionString if needed. Currently it is configured to connect to the local default SQL Server Instance using Integrated Security. + +6. Publish the TicketReservations Database + - Right click on the TicketReservations SQL Server Database Project and Select **Publish** + - Click Edit... to choose your connection string + - Click Publish + - Note: For publishing to Azure SQL you need to change the DB project target platform to **Microsoft Azure SQL Database V12** + +7. Build the app for release and run it. Do not use the debugger, as that will slow down the app. + +8. Start the workload with the **Start** button, and run for a while to show perf profile. Then press stop to stop the workload. You can tweak aspects of the workload (e.g., rows per transaction) through the configuration form accessed using the "Options" menue. + +9. In the database project, + - Change TicketReservationDetail.sql to a memory-optimized table (instructions commented in the file itself) + - Change InsertReservationDetails.sql to natively compiled (instructions in the same file) + +10. Publish the database project to the same database – the tool will take care of making the necessary changes. + Note that, as part of publication, the data is copied from the old disk-based table to the new memory-optimized table, so the longer you run the initial workload, the longer this publication takes. To speed up the process you can run `TRUNCATE TABLE dbo.TicketReservationDetail` in the database. + +11. Go back to the app and run the workload again. No need to recompile or restart the application. + +The perf gains from In-Memory OLTP as shown by the load generation app depend on two factors:\ + +- Hardware + - more cores => higher perf gain + - slower log IO => lower perf gain +- Configuration settings in the load generator + - more rows per transaction => higher perf gain + - more reads per write => lower perf gain + - default setting is 100 rows per transaction and 1 read per write + +If the performance profile after migration to In-Memory OLTP looks choppy, it is likely that log IO is the bottleneck. This can be mitigated by using [delayed durability](https://msdn.microsoft.com/en-us/library/dn449490.aspx). This is enabled by running the following statement in the database: + `ALTER DATABASE CURRENT SET DELAYED_DURABILITY = FORCED` + +With default settings on one machine with 24 logical cores and relatively slow SSD for the log the app shows around performance 40X gain, and in this case the bottleneck was log IO. Note that the factor gain can vary with the hardware being used. + +When deploying to Azure SQL Database, make sure to run the app in an Azure VM in the same region as the database. + +If you have a beefy machine and are seeing a drop-off in transaction throughput after running the demo for a while, increase the BUCKET_COUNT in 'TicketReservations/dbo/Tables/TicketReservationDetail.sql' by a factor of 10 or 100. + +For any feedback on the sample, contact: sqlserversamples@microsoft.com + +## About the code +The code included in this sample is not intended to be a set of best practices on how to build scalable enterprise grade applications. This is beyond the scope of this quick start sample. + +## More information +- [In-Memory OLTP (In-Memory Optimization)] (https://msdn.microsoft.com/library/dn133186.aspx) +- [OLTP and database management] (https://www.microsoft.com/en-us/server-cloud/solutions/oltp-database-management.aspx) diff --git a/samples/features/in-memory/ticket-reservations/Screenshots/1.png b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/Screenshots/1.png similarity index 100% rename from samples/features/in-memory/ticket-reservations/Screenshots/1.png rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/Screenshots/1.png diff --git a/samples/features/in-memory/ticket-reservations/TicketReservations/TicketReservations.sqlproj b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/TicketReservations.sqlproj similarity index 98% rename from samples/features/in-memory/ticket-reservations/TicketReservations/TicketReservations.sqlproj rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/TicketReservations.sqlproj index 111b449025..3628bb3345 100644 --- a/samples/features/in-memory/ticket-reservations/TicketReservations/TicketReservations.sqlproj +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/TicketReservations.sqlproj @@ -1,76 +1,76 @@ - - - - - Debug - AnyCPU - TicketReservations - 2.0 - 4.1 - {38641248-77ea-479b-b496-3eda463acead} - Microsoft.Data.Tools.Schema.Sql.Sql130DatabaseSchemaProvider - Database - - - TicketReservations - TicketReservations - 1033,CI - BySchemaAndSchemaType - True - v4.5 - CS - Properties - False - True - True - SQL_Latin1_General_CP1_CI_AS - PRIMARY - True - - - bin\Release\ - $(MSBuildProjectName).sql - False - pdbonly - true - false - true - prompt - 4 - - - bin\Debug\ - $(MSBuildProjectName).sql - false - true - full - false - true - true - prompt - 4 - - - 11.0 - - True - 11.0 - - - - - - - - - - - - - - - - - - + + + + + Debug + AnyCPU + TicketReservations + 2.0 + 4.1 + {38641248-77ea-479b-b496-3eda463acead} + Microsoft.Data.Tools.Schema.Sql.Sql130DatabaseSchemaProvider + Database + + + TicketReservations + TicketReservations + 1033,CI + BySchemaAndSchemaType + True + v4.5 + CS + Properties + False + True + True + SQL_Latin1_General_CP1_CI_AS + PRIMARY + True + + + bin\Release\ + $(MSBuildProjectName).sql + False + pdbonly + true + false + true + prompt + 4 + + + bin\Debug\ + $(MSBuildProjectName).sql + false + true + full + false + true + true + prompt + 4 + + + 11.0 + + True + 11.0 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Sequences/TicketReservationSequence.sql b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Sequences/TicketReservationSequence.sql similarity index 95% rename from samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Sequences/TicketReservationSequence.sql rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Sequences/TicketReservationSequence.sql index 85344f97f9..57bd52c71c 100644 --- a/samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Sequences/TicketReservationSequence.sql +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Sequences/TicketReservationSequence.sql @@ -1,6 +1,6 @@ -CREATE SEQUENCE [dbo].[TicketReservationSequence] - AS INT - START WITH 1 - INCREMENT BY 1 - CACHE 50000; - +CREATE SEQUENCE [dbo].[TicketReservationSequence] + AS INT + START WITH 1 + INCREMENT BY 1 + CACHE 50000; + diff --git a/samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Stored Procedures/BatchInsertReservations.sql b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Stored Procedures/BatchInsertReservations.sql similarity index 96% rename from samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Stored Procedures/BatchInsertReservations.sql rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Stored Procedures/BatchInsertReservations.sql index a95bde1bf7..d4f64dc278 100644 --- a/samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Stored Procedures/BatchInsertReservations.sql +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Stored Procedures/BatchInsertReservations.sql @@ -1,28 +1,28 @@ --- helper stored procedure to batch reservations - -CREATE PROCEDURE BatchInsertReservations(@ServerTransactions int, @RowsPerTransaction int, @ThreadID int) -AS -BEGIN - DECLARE @tranCount int = 0; - DECLARE @TS Datetime2; - DECLARE @Char_TS NVARCHAR(23); - DECLARE @CurrentSeq int = 0; - - SET @TS = SYSDATETIME(); - SET @Char_TS = CAST(@TS AS NVARCHAR(23)); - WHILE (@tranCount < @ServerTransactions) - BEGIN - BEGIN TRY - BEGIN TRAN - SET @CurrentSeq = NEXT VALUE FOR TicketReservationSequence ; - EXEC InsertReservationDetails @CurrentSeq, @RowsPerTransaction, @Char_TS, @ThreadID; - COMMIT TRAN - END TRY - BEGIN CATCH - IF XACT_STATE() = -1 - ROLLBACK TRAN - ;THROW - END CATCH - SET @tranCount += 1; - END -END +-- helper stored procedure to batch reservations + +CREATE PROCEDURE BatchInsertReservations(@ServerTransactions int, @RowsPerTransaction int, @ThreadID int) +AS +BEGIN + DECLARE @tranCount int = 0; + DECLARE @TS Datetime2; + DECLARE @Char_TS NVARCHAR(23); + DECLARE @CurrentSeq int = 0; + + SET @TS = SYSDATETIME(); + SET @Char_TS = CAST(@TS AS NVARCHAR(23)); + WHILE (@tranCount < @ServerTransactions) + BEGIN + BEGIN TRY + BEGIN TRAN + SET @CurrentSeq = NEXT VALUE FOR TicketReservationSequence ; + EXEC InsertReservationDetails @CurrentSeq, @RowsPerTransaction, @Char_TS, @ThreadID; + COMMIT TRAN + END TRY + BEGIN CATCH + IF XACT_STATE() = -1 + ROLLBACK TRAN + ;THROW + END CATCH + SET @tranCount += 1; + END +END diff --git a/samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Stored Procedures/Demo_Reset.sql b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Stored Procedures/Demo_Reset.sql similarity index 96% rename from samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Stored Procedures/Demo_Reset.sql rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Stored Procedures/Demo_Reset.sql index 9e66de4e7c..a6a9519d27 100644 --- a/samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Stored Procedures/Demo_Reset.sql +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Stored Procedures/Demo_Reset.sql @@ -1,11 +1,11 @@ - -create proc Demo_Reset -as -DECLARE @isMemoryTable BIT - -SELECT @isMemoryTable = is_memory_optimized FROM sys.tables -WHERE [name] = 'TicketReservationDetail' - -IF(@isMemoryTable= 1) DELETE dbo.TicketReservationDetail -ELSE TRUNCATE TABLE dbo.TicketReservationDetail; - + +create proc Demo_Reset +as +DECLARE @isMemoryTable BIT + +SELECT @isMemoryTable = is_memory_optimized FROM sys.tables +WHERE [name] = 'TicketReservationDetail' + +IF(@isMemoryTable= 1) DELETE dbo.TicketReservationDetail +ELSE TRUNCATE TABLE dbo.TicketReservationDetail; + diff --git a/samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Stored Procedures/InsertReservationDetails.sql b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Stored Procedures/InsertReservationDetails.sql similarity index 96% rename from samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Stored Procedures/InsertReservationDetails.sql rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Stored Procedures/InsertReservationDetails.sql index ee56ae595f..dc48cf92a9 100644 --- a/samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Stored Procedures/InsertReservationDetails.sql +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Stored Procedures/InsertReservationDetails.sql @@ -1,32 +1,32 @@ - --- traditional T-SQL version of the stored procedure -CREATE PROCEDURE InsertReservationDetails(@TicketReservationID int, @LineCount int, @Comment NVARCHAR(1000), @FlightID int) -AS -BEGIN - DECLARE @loop int = 0; - WHILE (@loop < @LineCount) - BEGIN - INSERT INTO dbo.TicketReservationDetail (TicketReservationID, Quantity, FlightID, Comment) - VALUES(@TicketReservationID, @loop % 8 + 1, @FlightID, @Comment); - SET @loop += 1; - END -END - - -/* --- natively compiled version of the stored procedure: -CREATE PROCEDURE InsertReservationDetails(@TicketReservationID int, @LineCount int, @Comment NVARCHAR(1000), @FlightID int) -WITH NATIVE_COMPILATION, SCHEMABINDING -as -BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL=SNAPSHOT, LANGUAGE=N'English') - - - DECLARE @loop int = 0; - while (@loop < @LineCount) - BEGIN - INSERT INTO dbo.TicketReservationDetail (TicketReservationID, Quantity, FlightID, Comment) - VALUES(@TicketReservationID, @loop % 8 + 1, @FlightID, @Comment); - SET @loop += 1; - END -END + +-- traditional T-SQL version of the stored procedure +CREATE PROCEDURE InsertReservationDetails(@TicketReservationID int, @LineCount int, @Comment NVARCHAR(1000), @FlightID int) +AS +BEGIN + DECLARE @loop int = 0; + WHILE (@loop < @LineCount) + BEGIN + INSERT INTO dbo.TicketReservationDetail (TicketReservationID, Quantity, FlightID, Comment) + VALUES(@TicketReservationID, @loop % 8 + 1, @FlightID, @Comment); + SET @loop += 1; + END +END + + +/* +-- natively compiled version of the stored procedure: +CREATE PROCEDURE InsertReservationDetails(@TicketReservationID int, @LineCount int, @Comment NVARCHAR(1000), @FlightID int) +WITH NATIVE_COMPILATION, SCHEMABINDING +as +BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL=SNAPSHOT, LANGUAGE=N'English') + + + DECLARE @loop int = 0; + while (@loop < @LineCount) + BEGIN + INSERT INTO dbo.TicketReservationDetail (TicketReservationID, Quantity, FlightID, Comment) + VALUES(@TicketReservationID, @loop % 8 + 1, @FlightID, @Comment); + SET @loop += 1; + END +END */ \ No newline at end of file diff --git a/samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Stored Procedures/ReadMultipleReservations.sql b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Stored Procedures/ReadMultipleReservations.sql similarity index 96% rename from samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Stored Procedures/ReadMultipleReservations.sql rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Stored Procedures/ReadMultipleReservations.sql index 20e8c127c6..c98ebeed74 100644 --- a/samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Stored Procedures/ReadMultipleReservations.sql +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Stored Procedures/ReadMultipleReservations.sql @@ -1,28 +1,28 @@ -CREATE PROCEDURE ReadMultipleReservations(@ServerTransactions int, @RowsPerTransaction int, @ThreadID int) -AS -BEGIN - DECLARE @tranCount int = 0; - DECLARE @CurrentSeq int = 0; - DECLARE @Sum int = 0; - DECLARE @loop int = 0; - WHILE (@tranCount < @ServerTransactions) - BEGIN - BEGIN TRY - SELECT @CurrentSeq = RAND() * IDENT_CURRENT(N'dbo.TicketReservationDetail') - SET @loop = 0 - BEGIN TRAN - WHILE (@loop < @RowsPerTransaction) - BEGIN - SELECT @Sum += FlightID from dbo.TicketReservationDetail where TicketReservationDetailID = @CurrentSeq - @loop; - SET @loop += 1; - END - COMMIT TRAN - END TRY - BEGIN CATCH - IF XACT_STATE() = -1 - ROLLBACK TRAN - ;THROW - END CATCH - SET @tranCount += 1; - END -END +CREATE PROCEDURE ReadMultipleReservations(@ServerTransactions int, @RowsPerTransaction int, @ThreadID int) +AS +BEGIN + DECLARE @tranCount int = 0; + DECLARE @CurrentSeq int = 0; + DECLARE @Sum int = 0; + DECLARE @loop int = 0; + WHILE (@tranCount < @ServerTransactions) + BEGIN + BEGIN TRY + SELECT @CurrentSeq = RAND() * IDENT_CURRENT(N'dbo.TicketReservationDetail') + SET @loop = 0 + BEGIN TRAN + WHILE (@loop < @RowsPerTransaction) + BEGIN + SELECT @Sum += FlightID from dbo.TicketReservationDetail where TicketReservationDetailID = @CurrentSeq - @loop; + SET @loop += 1; + END + COMMIT TRAN + END TRY + BEGIN CATCH + IF XACT_STATE() = -1 + ROLLBACK TRAN + ;THROW + END CATCH + SET @tranCount += 1; + END +END diff --git a/samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Tables/TicketReservationDetail.sql b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Tables/TicketReservationDetail.sql similarity index 97% rename from samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Tables/TicketReservationDetail.sql rename to samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Tables/TicketReservationDetail.sql index 61d80cd7dc..3dd1f620e1 100644 --- a/samples/features/in-memory/ticket-reservations/TicketReservations/dbo/Tables/TicketReservationDetail.sql +++ b/samples/features/in-memory-database/in-memory-oltp/ticket-reservations/TicketReservations/dbo/Tables/TicketReservationDetail.sql @@ -1,22 +1,22 @@ -CREATE TABLE [dbo].[TicketReservationDetail] ( - TicketReservationID BIGINT NOT NULL, - TicketReservationDetailID BIGINT IDENTITY NOT NULL, - Quantity INT NOT NULL, - FlightID INT NOT NULL, - Comment NVARCHAR (1000), --- disk-based table: - - CONSTRAINT [PK_TicketReservationDetail] PRIMARY KEY CLUSTERED (TicketReservationDetailID) -); - -/* --- for memory-optimized, replace the last two lines with the following: - CONSTRAINT [PK_TicketReservationDetail] PRIMARY KEY NONCLUSTERED HASH - ([TicketReservationDetailID]) WITH (BUCKET_COUNT=10000000) -) WITH (MEMORY_OPTIMIZED=ON); -GO -*/ - --- For SQL Server, include the following filegroup. For Azure DB, leave out the filegroup --- ALTER DATABASE [$(DatabaseName)] ADD FILEGROUP [mod] CONTAINS MEMORY_OPTIMIZED_DATA - +CREATE TABLE [dbo].[TicketReservationDetail] ( + TicketReservationID BIGINT NOT NULL, + TicketReservationDetailID BIGINT IDENTITY NOT NULL, + Quantity INT NOT NULL, + FlightID INT NOT NULL, + Comment NVARCHAR (1000), +-- disk-based table: + + CONSTRAINT [PK_TicketReservationDetail] PRIMARY KEY CLUSTERED (TicketReservationDetailID) +); + +/* +-- for memory-optimized, replace the last two lines with the following: + CONSTRAINT [PK_TicketReservationDetail] PRIMARY KEY NONCLUSTERED HASH + ([TicketReservationDetailID]) WITH (BUCKET_COUNT=10000000) +) WITH (MEMORY_OPTIMIZED=ON); +GO +*/ + +-- For SQL Server, include the following filegroup. For Azure DB, leave out the filegroup +-- ALTER DATABASE [$(DatabaseName)] ADD FILEGROUP [mod] CONTAINS MEMORY_OPTIMIZED_DATA + diff --git a/samples/features/in-memory/wwi-sales-orders/App.config b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/App.config similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/App.config rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/App.config diff --git a/samples/features/in-memory/wwi-sales-orders/DataGenerator/CancellableTask.cs b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/DataGenerator/CancellableTask.cs similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/DataGenerator/CancellableTask.cs rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/DataGenerator/CancellableTask.cs diff --git a/samples/features/in-memory/wwi-sales-orders/DataGenerator/DataGenerator.csproj b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/DataGenerator/DataGenerator.csproj similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/DataGenerator/DataGenerator.csproj rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/DataGenerator/DataGenerator.csproj diff --git a/samples/features/in-memory/wwi-sales-orders/DataGenerator/Properties/AssemblyInfo.cs b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/DataGenerator/Properties/AssemblyInfo.cs similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/DataGenerator/Properties/AssemblyInfo.cs rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/DataGenerator/Properties/AssemblyInfo.cs diff --git a/samples/features/in-memory/wwi-sales-orders/DataGenerator/SqlDataGenerator.cs b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/DataGenerator/SqlDataGenerator.cs similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/DataGenerator/SqlDataGenerator.cs rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/DataGenerator/SqlDataGenerator.cs diff --git a/samples/features/in-memory/wwi-sales-orders/DataGenerator/SqlDataGeneratorException.cs b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/DataGenerator/SqlDataGeneratorException.cs similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/DataGenerator/SqlDataGeneratorException.cs rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/DataGenerator/SqlDataGeneratorException.cs diff --git a/samples/features/in-memory/wwi-sales-orders/README.md b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/README.md similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/README.md rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/README.md diff --git a/samples/features/in-memory/wwi-sales-orders/Screenshots/InMemory.png b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/Screenshots/InMemory.png similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/Screenshots/InMemory.png rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/Screenshots/InMemory.png diff --git a/samples/features/in-memory/wwi-sales-orders/Screenshots/InMemoryWith CCI.png b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/Screenshots/InMemoryWith CCI.png similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/Screenshots/InMemoryWith CCI.png rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/Screenshots/InMemoryWith CCI.png diff --git a/samples/features/in-memory/wwi-sales-orders/Screenshots/OnDisk.png b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/Screenshots/OnDisk.png similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/Screenshots/OnDisk.png rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/Screenshots/OnDisk.png diff --git a/samples/features/in-memory/wwi-sales-orders/WinFormsClient/FrmMain.Designer.cs b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/FrmMain.Designer.cs similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/WinFormsClient/FrmMain.Designer.cs rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/FrmMain.Designer.cs diff --git a/samples/features/in-memory/wwi-sales-orders/WinFormsClient/FrmMain.cs b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/FrmMain.cs similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/WinFormsClient/FrmMain.cs rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/FrmMain.cs diff --git a/samples/features/in-memory/wwi-sales-orders/WinFormsClient/FrmMain.resx b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/FrmMain.resx similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/WinFormsClient/FrmMain.resx rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/FrmMain.resx diff --git a/samples/features/in-memory/wwi-sales-orders/WinFormsClient/Program.cs b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Program.cs similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/WinFormsClient/Program.cs rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Program.cs diff --git a/samples/features/in-memory/wwi-sales-orders/WinFormsClient/Properties/AssemblyInfo.cs b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Properties/AssemblyInfo.cs similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/WinFormsClient/Properties/AssemblyInfo.cs rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Properties/AssemblyInfo.cs diff --git a/samples/features/in-memory/wwi-sales-orders/WinFormsClient/Properties/Resources.Designer.cs b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Properties/Resources.Designer.cs similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/WinFormsClient/Properties/Resources.Designer.cs rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Properties/Resources.Designer.cs diff --git a/samples/features/in-memory/wwi-sales-orders/WinFormsClient/Properties/Resources.resx b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Properties/Resources.resx similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/WinFormsClient/Properties/Resources.resx rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Properties/Resources.resx diff --git a/samples/features/in-memory/wwi-sales-orders/WinFormsClient/Properties/Settings.Designer.cs b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Properties/Settings.Designer.cs similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/WinFormsClient/Properties/Settings.Designer.cs rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Properties/Settings.Designer.cs diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/Settings.settings b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Properties/Settings.settings similarity index 97% rename from samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/Settings.settings rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Properties/Settings.settings index abf36c5d3d..39645652af 100644 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/Properties/Settings.settings +++ b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/Properties/Settings.settings @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/samples/features/in-memory/wwi-sales-orders/WinFormsClient/WinFormsClient.csproj b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/WinFormsClient.csproj similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/WinFormsClient/WinFormsClient.csproj rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/WinFormsClient/WinFormsClient.csproj diff --git a/samples/features/in-memory/wwi-sales-orders/scripts/CustomerOrders.sql b/samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/scripts/CustomerOrders.sql similarity index 100% rename from samples/features/in-memory/wwi-sales-orders/scripts/CustomerOrders.sql rename to samples/features/in-memory-database/in-memory-oltp/wwi-sales-orders/scripts/CustomerOrders.sql diff --git a/samples/features/in-memory-database/memory-optimized-tempdb-metadata/README.md b/samples/features/in-memory-database/memory-optimized-tempdb-metadata/README.md new file mode 100644 index 0000000000..61f5c22ba0 --- /dev/null +++ b/samples/features/in-memory-database/memory-optimized-tempdb-metadata/README.md @@ -0,0 +1,4 @@ +# Memory-Optimized TempDB Metadata +[Memory-Optmized TempDB Metadata](https://docs.microsoft.com/sql/relational-databases/databases/tempdb-database#memory-optimized-tempdb-metadata) was introduced in SQL Server 2019 and is a part of the In-Memory Database feature family. This feature was introduced in order to improve the scalability of highly-concurrent OLTP applications by leveraging latch-free non-durable memory-optimized tables for TempDB system tables. Enabling this feature effectively removes metadata contention - a common bottleneck for highly-concurrent TempDB workloads. + +In this folder, you can find examples that help illustrate the benefits of Memory-Optmized TempDB Metadata. \ No newline at end of file diff --git a/samples/features/in-memory/ticket-reservations/DemoWorkload/DemoWorkload.csproj.user b/samples/features/in-memory/ticket-reservations/DemoWorkload/DemoWorkload.csproj.user deleted file mode 100644 index f97cc22b71..0000000000 --- a/samples/features/in-memory/ticket-reservations/DemoWorkload/DemoWorkload.csproj.user +++ /dev/null @@ -1,14 +0,0 @@ - - - - ShowAllFiles - publish\ - - - - - - en-US - false - - \ No newline at end of file