From b0a8ff21fb8e361424e40ad0ab5db1b7e3ffe550 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matteo=20=E2=84=B1an?= <SystemRage@protonmail.com>
Date: Wed, 14 Nov 2018 23:09:19 +0100
Subject: [PATCH] uploaded version 2018_11_15 for python2

---
 py2-kms/KmsDataBase.xml      | 798 +++++++++++++++++++++++++++++++++++
 py2-kms/aes.py               |   6 +-
 py2-kms/client.py            | 123 ++----
 py2-kms/dcerpc.py            | 432 +++++++++++++++++--
 py2-kms/filetimes.py         |   1 -
 py2-kms/formatText.py        |   8 -
 py2-kms/kmsBase.py           | 507 ++++------------------
 py2-kms/kmsDB2Dict.py        |  45 ++
 py2-kms/kmsPidGenerator.py   | 147 +++----
 py2-kms/kmsRequestUnknown.py |   2 +-
 py2-kms/kmsRequestV4.py      |  41 +-
 py2-kms/kmsRequestV5.py      |  49 +--
 py2-kms/kmsRequestV6.py      |  11 +-
 py2-kms/rpcBase.py           |  19 +-
 py2-kms/rpcBind.py           |  10 +-
 py2-kms/rpcRequest.py        |   6 +-
 py2-kms/server.py            | 120 ++++--
 py2-kms/structure.py         |  40 +-
 18 files changed, 1574 insertions(+), 791 deletions(-)
 create mode 100644 py2-kms/KmsDataBase.xml
 create mode 100644 py2-kms/kmsDB2Dict.py

diff --git a/py2-kms/KmsDataBase.xml b/py2-kms/KmsDataBase.xml
new file mode 100644
index 0000000..8e2119b
--- /dev/null
+++ b/py2-kms/KmsDataBase.xml
@@ -0,0 +1,798 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Modded by SystemRage for py-kms -->
+
+<!--
+<KmsData
+  Version="1.7"                                          // Version of the KmsData file, currently must be 1.7 (required), 
+  Author="Hotbird64"                                     // Enter your name here (required)
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  // Loads the xsi namespace (recommended for syntax checking in an XSD capable XML editor)
+  xsi:noNamespaceSchemaLocation="KmsDataBase.xsd"        // relative or absolute path of the validation file
+>
+
+  <WinBuild
+    BuildNumber="9200"                                      // Windows Build Number
+    DisplayName="Windows 8 / Server 2012"                   // A display name for the build number
+    PlatformId="5426"                                       // The "Platform ID" for this build number
+    UseForEpid="true"                                       // Use this build number for EPid generation. Should be true only for RTM builds that can be Windows servers
+    MayBeServer="true"                                      // Should be true for RTM builds that can be Windows servers
+    UsesNDR64="true"                                        // Genuine KMS servers use NDR64 for this build
+    WinBuildIndex="0"                                       // Index of the build (for py-kms)
+    MinDate="12/10/2016"                                    // GA release date of the build (for py-kms)
+  />
+
+  <CsvlkItem
+  >
+    Id="2e7a9ad1-a849-4b56-babe-17d5a29fe4b4"                // SkuId of the CSVLK (required)
+    DisplayName="Windows Server 2019"                        // Friendly name that should be displayed instead of the Guid (required)
+    IsLab="false"                                            // This is a lab CSVLK that also activates retail Windows > 8 (default false)
+    IsPreview="false"                                        // This is a preview (beta, Non-RTM, etc.) CSVLK (default false)
+    GroupId="206"                                            // GroupId for EPid generation. If omitted, this is taken from the pkeyconfig. Use only if you don´t have a pkeyconfig for this CSVLK
+    MinKeyId="551000000"                                     // Minimum key id for EPid generation. If omitted, this is taken from the pkeyconfig. Use only if you don´t have a pkeyconfig for this CSVLK
+    MaxKeyId="570999999"                                     // Maximum key id for EPid generation. If omitted, this is taken from the pkeyconfig. Use only if you don´t have a pkeyconfig for this CSVLK
+    VlmcsdIndex="0"                                          // Export this CsvlkItem with Index 0 to vlmcsd. (optional)
+    IniFileName="Windows"                                    // Name used in vlmcsd.ini to assign specific EPID (required for all CsvlkItems that have VlmcsdIndex=, optional for others)
+    EPid="03612-00206-568-381813-03-1033-14393.0000-2702018" // If you want a specific EPid, use this. Or omit it to generate a suitable default automatically.
+    InvalidWinBuild="[0,1,2]"                                // List of the builds not good for EPID generation with this CSVLK parameters (for py-kms)
+    
+      <Activate
+        KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148"       // List of KmsItems activated by the CSVLK. The KmsItem must be defined under <AppItem><KmsItem Id= ...>
+      />
+    
+</CsvlkItem>
+
+  <AppItem                                                   // Application (Windows, Office 2010 or Office 2013+)
+    Id="{55c92734-d682-4d71-983e-d6ec3f16059f}"              // Guid (required, braces are optional).
+    DisplayName="Windows"                                    // Friendly name that should be displayed instead of the Guid (required) 
+    VlmcsdIndex="0"                                          // VlmcsdIndex of CsvlkItem to use if an unknown KmsItem activates with that AppItem (required)
+    MinActiveClients="50"                                    // Minimum clients that this AppItem should maintain
+  >
+   
+     <KmsItem                                                   // KmsItem aka KMS Counted Id
+       Id="{e1c51358-fe3e-4203-a4a2-3b6b20c9734e}"              // Guid (required, braces are optional).
+       DisplayName="Windows 10 (Retail)"                        // Friendly name that should be displayed instead of the Guid (required) 
+       IsRetail="true"                                          // Indicates that this is a retail product group that can't be activated with a genuine KMS server (optional, default false)
+       IsPreview="false"                                        // Indicates that this a beta/preview product group that can't be activated with a genuine KMS server (optional, default false)
+       DefaultKmsProtocol="6.0"                                 // Default KMS protocol version that the KMS client uses. Must be "4.0", "5.0" or "6.0" (optional, default 6.0)
+       NCountPolicy="25"                                        // Minimum number of active clients required for the activation to succeed (optional, default 25, should be 25 for Windows clients and 5 otherwise)
+       CanMapToDefaultCsvlk="true"                              // This KmsItem can be omitted in vlmcsd export because it maps to VlmcsdIndex 0 (optional, default true)
+     >
+     
+       <SkuItem                                      // VOLUME_KMSCLIENT channel SKU ID (makes no sense to add other SKU IDs than VOLUME_KMSCLIENT channel
+         Id="{58e97c99-f377-4ef1-81d5-4ad5522b5fd8}" // Guid (required, braces are optional).
+         DisplayName="Windows 10 Home"               // Friendly name that should be displayed instead of the Guid (required)
+         Gvlk="XXXXX-XXXXX-XXXXX-XXXXX-H8Q99"        // The GVLK key to enable this VOLUME_KMSCLIENT channel (optional, recommended, no default)
+         IsGeneratedGvlk="false"                     // If true, indicates that this is a generated GVLK (optional, strongly recommended if a generated GVLK is used, default false)
+       />
+       
+   </KmsItem>
+ </AppItem>  
+</KmsData>
+-->
+
+
+<KmsData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="1.7" Author="Hotbird64" xsi:noNamespaceSchemaLocation="KmsDataBase.xsd">
+
+    <WinBuilds>
+        <!-- LM refuses 3-digit build numbers
+        <WinBuild BuildNumber="528" DisplayName="Windows NT 3.1" PlatformId="55041"/>
+        <WinBuild BuildNumber="807" DisplayName="Windows NT 3.5" PlatformId="55041"/>
+        -->
+        <WinBuild BuildNumber="1057" DisplayName="Windows NT 3.51" PlatformId="55041"/>
+        <WinBuild BuildNumber="1381" DisplayName="Windows NT 4.0" PlatformId="55041"/>
+        <WinBuild BuildNumber="2195" DisplayName="Windows 2000" PlatformId="55041"/>
+        <WinBuild BuildNumber="2600" DisplayName="Windows XP 32-bit" PlatformId="55041"/>
+        <WinBuild BuildNumber="3790" DisplayName="Windows Server 2003 / XP 64-bit" PlatformId="55041" MayBeServer="true"/>
+        <WinBuild BuildNumber="6000" DisplayName="Windows Vista / Server 2008 without SP" PlatformId="55041" MayBeServer="true"/>
+        <WinBuild BuildNumber="6001" DisplayName="Windows Vista / Server 2008 SP1" PlatformId="55041" MayBeServer="true"/>
+        <WinBuild BuildNumber="6002" DisplayName="Windows Vista / Server 2008 SP2" UseForEpid="true" PlatformId="55041" MayBeServer="true" WinBuildIndex="0" MinDate="26/5/2009"/>
+        <WinBuild BuildNumber="7600" DisplayName="Windows 7 / Server 2008 R2 without SP" PlatformId="55041" MayBeServer="true"/>
+        <WinBuild BuildNumber="7601" DisplayName="Windows 7 / Server 2008 R2 SP1" PlatformId="55041" UseForEpid="true" MayBeServer="true" WinBuildIndex="1" MinDate="22/02/2011"/>
+        <WinBuild BuildNumber="9200" DisplayName="Windows 8 / Server 2012" PlatformId="5426" UseForEpid="true" MayBeServer="true" UsesNDR64="true" WinBuildIndex="2" MinDate="04/09/2012"/>
+        <WinBuild BuildNumber="9600" DisplayName="Windows 8.1 / Server 2012 R2" PlatformId="6401" UseForEpid="true" MayBeServer="true" UsesNDR64="true" WinBuildIndex="3" MinDate="17/10/2013"/>
+        <WinBuild BuildNumber="10240" DisplayName="Windows 10 1507" PlatformId="3612" UsesNDR64="true"/>
+        <WinBuild BuildNumber="14393" DisplayName="Windows 10 1607 / Server 2016" UseForEpid="true" MayBeServer="true" PlatformId="3612" UsesNDR64="true" WinBuildIndex="4" MinDate="12/10/2016"/>
+        <WinBuild BuildNumber="15063" DisplayName="Windows 10 1703" PlatformId="3612" UsesNDR64="true" MinDate="11/04/2017"/>
+        <WinBuild BuildNumber="16299" DisplayName="Windows 10 1709" PlatformId="3612" UsesNDR64="true"/>
+        <WinBuild BuildNumber="17134" DisplayName="Windows 10 1803" PlatformId="3612" UsesNDR64="true"/>
+        <WinBuild BuildNumber="17763" DisplayName="Windows 10 1809 / Server 2019" UseForEpid="true" PlatformId="3612" MayBeServer="true" UsesNDR64="true" WinBuildIndex="5" MinDate="02/10/2018"/>
+    </WinBuilds>
+
+	<CsvlkItems>
+		<CsvlkItem DisplayName="Windows 10 China Government" VlmcsdIndex="4" GroupId="3858" MinKeyId="15000000" MaxKeyId="999999999" IniFileName="WinChinaGov" EPid="06401-03858-320-801028-03-1033-9600.0000-2802018" Id="ecc0774a-aed3-4e1a-b815-2b31781adfea" InvalidWinBuild="[0,1,2]">
+			<Activate KmsItem="7ba0bf23-d0f5-4072-91d9-d55af5a481b6" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2019" VlmcsdIndex="0" GroupId="206" MinKeyId="551000000" MaxKeyId="570999999" IniFileName="Windows" EPid="06401-00206-566-174993-03-1033-9600.0000-2802018" Id="2e7a9ad1-a849-4b56-babe-17d5a29fe4b4" InvalidWinBuild="[0,1,2]">
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+			<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
+			<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
+			<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
+			<Activate KmsItem="6e9fc069-257d-4bc4-b4a7-750514d32743" />
+			<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+			<Activate KmsItem="8449b1fb-f0ea-497a-99ab-66ca96e9a0f5" />
+			<Activate KmsItem="11b15659-e603-4cf1-9c1f-f0ec01b81888" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2019 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="2835000" MaxKeyId="2854999" IniFileName="Windows" Id="9db83b52-9904-4326-8957-ebe6feedf37c" InvalidWinBuild="[0,1,2]">
+			<Activate KmsItem="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" />
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+			<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
+			<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
+			<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
+			<Activate KmsItem="6e9fc069-257d-4bc4-b4a7-750514d32743" />
+			<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+			<Activate KmsItem="8449b1fb-f0ea-497a-99ab-66ca96e9a0f5" />
+			<Activate KmsItem="11b15659-e603-4cf1-9c1f-f0ec01b81888" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2016" GroupId="206" MinKeyId="491000000" MaxKeyId="530999999" IniFileName="Windows" Id="d6992aac-29e7-452a-bf10-bbfb8ccabe59" InvalidWinBuild="[0,1]">
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+			<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
+			<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
+			<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
+			<Activate KmsItem="6e9fc069-257d-4bc4-b4a7-750514d32743" />
+			<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2016 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="1510000" MaxKeyId="2009999" IniFileName="Windows" Id="3c2da9a5-1c6e-45d1-855f-fdbef536676f" InvalidWinBuild="[0,1]">
+			<Activate KmsItem="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" />
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+			<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
+			<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
+			<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
+			<Activate KmsItem="6e9fc069-257d-4bc4-b4a7-750514d32743" />
+			<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows 10 2019" GroupId="206" MinKeyId="256000000" MaxKeyId="265999999" IniFileName="Windows" Id="90da7373-1c51-430b-bf26-c97e9c5cdc31" InvalidWinBuild="[0,1,2]">
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
+			<Activate KmsItem="11b15659-e603-4cf1-9c1f-f0ec01b81888" />
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows 10 2015" GroupId="206" MinKeyId="390000000" MaxKeyId="404999999" IniFileName="Windows" Id="0724cb7d-3437-4cb7-93cb-830375d0079d" InvalidWinBuild="[0,1]">
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows 10 2016" GroupId="206" MinKeyId="531000000" MaxKeyId="545999999" IniFileName="Windows" Id="30a42c86-b7a0-4a34-8c90-ff177cb2acb7" InvalidWinBuild="[0,1]">
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows 10 2015 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="10700000" MaxKeyId="10799999" IniFileName="Windows" Id="7a802526-4c94-4bd1-ba14-835a1aca2120" InvalidWinBuild="[0,1]">
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" />
+			<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
+			<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows 10 2019 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="2860000" MaxKeyId="2864999" IniFileName="Windows" Id="60b3ec1b-9545-4921-821f-311b129dd6f6" InvalidWinBuild="[0,1,2]">
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
+			<Activate KmsItem="11b15659-e603-4cf1-9c1f-f0ec01b81888" />
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" />
+			<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
+			<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows 10 2016 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="2015000" MaxKeyId="2114999" IniFileName="Windows" Id="d552befb-48cc-4327-8f39-47d2d94f987c" InvalidWinBuild="[0,1]">
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" />
+			<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
+			<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows 10 [Pre-Release]" IsPreview="true" GroupId="206" MinKeyId="1000000" MaxKeyId="1009999" IniFileName="Windows" Id="d521c0fd-1732-4c15-8b98-a41b2a95bbc4" InvalidWinBuild="[0,1]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="5f94a0bb-d5a0-4081-a685-5819418b2fe0" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server Next [Pre-Release]" IsPreview="true" GroupId="206" MinKeyId="21001500" MaxKeyId="21010499" IniFileName="Windows" Id="c609957a-dc23-48b3-8c6b-31b303479de2" InvalidWinBuild="[0,1]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="969fe3c0-a3ec-491a-9f25-423605deb365" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="5f94a0bb-d5a0-4081-a685-5819418b2fe0" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+			<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
+			<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
+			<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
+			<Activate KmsItem="6e9fc069-257d-4bc4-b4a7-750514d32743" />
+			<Activate KmsItem="6d5f5270-31ac-433e-b90a-39892923c657" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2012 R2 With Win 10" GroupId="206" MinKeyId="405000000" MaxKeyId="424999999" IniFileName="Windows" Id="20e938bb-df44-45ee-bde1-4e4fe7477f37" InvalidWinBuild="[0]">
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+			<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
+			<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
+			<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2012 R2 With Win 10 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="17650000" MaxKeyId="17849999" IniFileName="Windows" Id="9e3fde40-d4b3-4c1d-9bde-32735aa19b39" InvalidWinBuild="[0]">
+			<Activate KmsItem="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" />
+			<Activate KmsItem="58e2134f-8e11-4d17-9cb2-91069c151148" />
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+			<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
+			<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
+			<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="d27cd636-1962-44e9-8b4f-27b6c23efb85" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows 8.1" GroupId="206" MinKeyId="339000000" MaxKeyId="353999999" IniFileName="Windows" Id="29d0b60f-66da-4858-bcaf-9eb513cd310d" InvalidWinBuild="[0]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows 8.1 (Microsoft internal Lab)" IsLab="true" GroupId="206" MinKeyId="109500000" MaxKeyId="109999999" IniFileName="Windows" Id="4614b66f-a1d7-441c-9731-23f22d0ff4e5" InvalidWinBuild="[0]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2012 R2" GroupId="206" MinKeyId="271000000" MaxKeyId="310999999" IniFileName="Windows" Id="dcb88f6f-b090-405b-850e-dabcccf3693f" InvalidWinBuild="[0]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+			<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
+			<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
+			<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2012 R2 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="192000000" MaxKeyId="192499999" IniFileName="Windows" Id="acf1b4fd-1c55-4f2d-a60b-415ac958ad88" InvalidWinBuild="[0]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="6d646890-3606-461a-86ab-598bb84ace82" />
+			<Activate KmsItem="cb8fc780-2c05-495a-9710-85afffc904d7" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+			<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
+			<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
+			<Activate KmsItem="8456efd3-0c04-4089-8740-5b7238535a65" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows 8" GroupId="206" MinKeyId="199000000" MaxKeyId="213999999" IniFileName="Windows" Id="24259a22-3bf0-44af-a68b-1b858bce1894" InvalidWinBuild="[0]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows 8 (Microsoft Internal Lab)" IsLab="true" GroupId="206" MinKeyId="21100000" MaxKeyId="21599999" IniFileName="Windows" Id="044ba67a-4c54-47ee-941a-d6f2efaa6891" InvalidWinBuild="[0]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2012" GroupId="206" MinKeyId="152000000" MaxKeyId="191999999" IniFileName="Windows" Id="7b37c913-252b-46be-ad80-b2b5ceade8af" InvalidWinBuild="[0]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+			<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
+			<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2012 (Microsoft internal Lab)" IsLab="true" GroupId="206" MinKeyId="98500000" MaxKeyId="98999999" IniFileName="Windows" Id="fe27276b-a5a9-4b4d-88e3-14271beb79be" InvalidWinBuild="[0]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" />
+			<Activate KmsItem="3c40b358-5948-45af-923b-53d21fcc7e79" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+			<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
+			<Activate KmsItem="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows 7" GroupId="172" MinKeyId="37000000" MaxKeyId="49749999" IniFileName="Windows" Id="d188820a-cb63-4bad-a9a2-40b843ee23b7" InvalidWinBuild="[0]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2008 R2 C (Datacenter)" GroupId="168" MinKeyId="305000000" MaxKeyId="312119999" IniFileName="Windows" Id="8fe15d04-fc66-40e6-bf34-942481e06fd8" InvalidWinBuild="[0]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+			<Activate KmsItem="b2ca2689-a9a8-42d7-938d-cf8e9f201958" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2008 R2 B (Standard &amp; Enterprise)" GroupId="168" MinKeyId="312880000" MaxKeyId="332999999" IniFileName="Windows" Id="c99b641f-c4ea-4e63-bec3-5ed2ccd0f357" InvalidWinBuild="[0]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+			<Activate KmsItem="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2008 R2 A (Web &amp; HPC)" GroupId="168" MinKeyId="249000000" MaxKeyId="259119999" IniFileName="Windows" Id="f73d1bcd-0802-47dd-b2d9-81bf2f8c0744" InvalidWinBuild="[0]">
+			<Activate KmsItem="7fde5219-fbfa-484a-82c9-34d1ad53e856" />
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Vista (1 of 2)" GroupId="142" MinKeyId="26000000" MaxKeyId="35999999" IniFileName="Windows" Id="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" InvalidWinBuild="[]">
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Vista (2 of 2)" GroupId="154" MinKeyId="394000000" MaxKeyId="416999999" IniFileName="Windows" Id="4871de8b-3adf-4455-a7d3-fd7b6c01c939" InvalidWinBuild="[]">
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2008 C (Datacenter)" GroupId="152" MinKeyId="381000000" MaxKeyId="392999999" IniFileName="Windows" Id="c90d1b4e-8aa8-439e-8b9e-b6d6b6a6d975" InvalidWinBuild="[]">
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+			<Activate KmsItem="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2008 B (Standard &amp; Enterprise)" GroupId="152" MinKeyId="339000000" MaxKeyId="358999999" IniFileName="Windows" Id="56df4151-1f9f-41bf-acaa-2941c071872b" InvalidWinBuild="[]">
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+			<Activate KmsItem="8fe53387-3087-4447-8985-f75132215ac9" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Windows Server 2008 A (Web &amp; HPC)" GroupId="152" MinKeyId="368000000" MaxKeyId="380999999" IniFileName="Windows" Id="c448fa06-49d1-44ec-82bb-0085545c3b51" InvalidWinBuild="[]">
+			<Activate KmsItem="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" />
+			<Activate KmsItem="33e156e4-b76f-4a52-9f91-f641dd95ac48" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Office 2019" VlmcsdIndex="5" GroupId="206" MinKeyId="666000000" MaxKeyId="685999999" IniFileName="Office2019" EPid="06401-00206-678-008369-03-1033-9600.0000-2802018" Id="70512334-47b4-44db-a233-be5ea33b914c" InvalidWinBuild="[0,1]">
+			<Activate KmsItem="617d9eb1-ef36-4f82-86e0-a65ae07b96c6" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Office 2016" VlmcsdIndex="3" GroupId="206" MinKeyId="437000000" MaxKeyId="458999999" IniFileName="Office2016" EPid="06401-00206-456-865118-03-1033-9600.0000-2802018" Id="98ebfe73-2084-4c97-932c-c0cd1643bea7" InvalidWinBuild="[0]">
+			<Activate KmsItem="85b5f61b-320b-4be3-814a-b76b2bfafc82" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Office 2013" VlmcsdIndex="2" GroupId="206" MinKeyId="234000000" MaxKeyId="255999999" IniFileName="Office2013" EPid="06401-00206-243-662026-03-1033-9600.0000-2802018" Id="2e28138a-847f-42bc-9752-61b03fff33cd" InvalidWinBuild="[]">
+			<Activate KmsItem="e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0" />
+		</CsvlkItem>
+
+		<CsvlkItem DisplayName="Office 2010" VlmcsdIndex="1" GroupId="96" MinKeyId="199000000" MaxKeyId="217999999" IniFileName="Office2010" EPid="06401-00096-208-497764-03-1033-9600.0000-2802018" Id="bfe7a195-4f8f-4f0b-a622-cf13c7d16864" InvalidWinBuild="[]">
+			<Activate KmsItem="e85af946-2e25-47b7-83e1-bebcebeac611" />
+		</CsvlkItem>
+
+	</CsvlkItems>
+
+	<AppItems>
+
+		<AppItem DisplayName="Windows" VlmcsdIndex="0" Id="55c92734-d682-4d71-983e-d6ec3f16059f" MinActiveClients="50">
+
+			<KmsItem DisplayName="Windows Server 2019" Id="8449b1fb-f0ea-497a-99ab-66ca96e9a0f5" DefaultKmsProtocol="6.0" NCountPolicy="5">
+				<SkuItem DisplayName="Windows Server 2019 ARM64" Id="8de8eb62-bbe0-40ac-ac17-f75595071ea3" Gvlk="GRFBW-QNDC4-6QBHG-CCK3B-2PR88" />
+				<SkuItem DisplayName="Windows Server 2019 Azure Core" Id="a99cc1f0-7719-4306-9645-294102fbff95" Gvlk="FDNH6-VW9RW-BXPJ7-4XTYG-239TB" />
+				<SkuItem DisplayName="Windows Server 2019 Datacenter" Id="34e1ae55-27f8-4950-8877-7a03be5fb181" Gvlk="WMDGN-G9PQG-XVVXX-R3X43-63DFG" />
+				<SkuItem DisplayName="Windows Server 2019 Essentials" Id="034d3cbb-5d4b-4245-b3f8-f84571314078" Gvlk="WVDHN-86M7X-466P6-VHXV7-YY726" />
+				<SkuItem DisplayName="Windows Server 2019 Standard" Id="de32eafd-aaee-4662-9444-c1befb41bde2" Gvlk="N69G4-B89J2-4G8F4-WWYCC-J464C" />
+				<SkuItem DisplayName="Windows Server 2019 Datacenter (Semi-Annual Channel v.1809)" Id="90c362e5-0da1-4bfd-b53b-b87d309ade43" Gvlk="6NMRW-2C8FM-D24W7-TQWMY-CWH2D" />
+				<SkuItem DisplayName="Windows Server 2019 Standard (Semi-Annual Channel v.1809)" Id="73e3957c-fc0c-400d-9184-5f7b6f2eb409" Gvlk="N2KJX-J94YW-TQVFB-DG9YT-724CC" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows 10 2019 (Volume)" Id="11b15659-e603-4cf1-9c1f-f0ec01b81888" DefaultKmsProtocol="6.0" NCountPolicy="25">
+				<SkuItem DisplayName="Windows 10 Enterprise LTSC 2019" Id="32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee" Gvlk="M7XTQ-FN8P6-TTKYV-9D4CC-J462D" />
+				<SkuItem DisplayName="Windows 10 Enterprise LTSC 2019 N" Id="7103a333-b8c8-49cc-93ce-d37c09687f92" Gvlk="92NFX-8DJQP-P6BBQ-THF9C-7CG2H" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows 10 Unknown (Volume)" Id="d27cd636-1962-44e9-8b4f-27b6c23efb85" DefaultKmsProtocol="6.0" NCountPolicy="25">
+            </KmsItem>
+
+			<KmsItem DisplayName="Windows 10 China Government" Id="7ba0bf23-d0f5-4072-91d9-d55af5a481b6" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="6.0" NCountPolicy="25">
+				<SkuItem DisplayName="Windows 10 Enterprise G" Id="e0b2d383-d112-413f-8a80-97f373a5820c" Gvlk="YYVX9-NTFWV-6MDM3-9PT4T-4M68B" />
+				<SkuItem DisplayName="Windows 10 Enterprise GN" Id="e38454fb-41a4-4f59-a5dc-25080e354730" Gvlk="44RPN-FTY23-9VTTB-MP9BX-T84FV" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows 10 2016 (Volume)" Id="969fe3c0-a3ec-491a-9f25-423605deb365" DefaultKmsProtocol="6.0" NCountPolicy="25">
+				<SkuItem DisplayName="Windows 10 Enterprise 2016 LTSB" Id="2d5a5a60-3040-48bf-beb0-fcd770c20ce0" Gvlk="DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ" />
+				<SkuItem DisplayName="Windows 10 Enterprise 2016 LTSB N" Id="9f776d83-7156-45b2-8a5c-359b9c9f22a3" Gvlk="QFFDN-GRT3P-VKWWX-X7T3R-8B639" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows 10 (Retail)" Id="e1c51358-fe3e-4203-a4a2-3b6b20c9734e" IsRetail="true" DefaultKmsProtocol="6.0" NCountPolicy="25">
+				<SkuItem DisplayName="Windows 10 Home / Core" Id="58e97c99-f377-4ef1-81d5-4ad5522b5fd8" Gvlk="TX9XD-98N7V-6WMQ6-BX7FG-H8Q99" />
+				<SkuItem DisplayName="Windows 10 Home / Core Country Specific" Id="a9107544-f4a0-4053-a96a-1479abdef912" Gvlk="PVMJN-6DFY6-9CCP6-7BKTT-D3WVR" />
+				<SkuItem DisplayName="Windows 10 Home / Core N" Id="7b9e1751-a8da-4f75-9560-5fadfe3d8e38" Gvlk="3KHY7-WNT83-DGQKR-F7HPR-844BM" />
+				<SkuItem DisplayName="Windows 10 Home / Core Single Language" Id="cd918a57-a41b-4c82-8dce-1a538e221a83" Gvlk="7HNRX-D7KGG-3K4RQ-4WPJ4-YTDFH" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows 10 2015 (Volume)" Id="58e2134f-8e11-4d17-9cb2-91069c151148" DefaultKmsProtocol="6.0" NCountPolicy="25">
+				<SkuItem DisplayName="Windows 10 Education" Id="e0c42288-980c-4788-a014-c080d2e1926e" Gvlk="NW6C2-QMPVW-D7KKK-3GKT6-VCFB2" />
+				<SkuItem DisplayName="Windows 10 Education N" Id="3c102355-d027-42c6-ad23-2e7ef8a02585" Gvlk="2WH4N-8QGBV-H22JP-CT43Q-MDWWJ" />
+				<SkuItem DisplayName="Windows 10 Enterprise" Id="73111121-5638-40f6-bc11-f1d7b0d64300" Gvlk="NPPR9-FWDCX-D2C8J-H872K-2YT43" />
+				<SkuItem DisplayName="Windows 10 Enterprise 2015 LTSB" Id="7b51a46c-0c04-4e8f-9af4-8496cca90d5e" Gvlk="WNMTR-4C88C-JK8YV-HQ7T2-76DF9" />
+				<SkuItem DisplayName="Windows 10 Enterprise 2015 LTSB N" Id="87b838b7-41b6-4590-8318-5797951d8529" Gvlk="2F77B-TNFGY-69QQF-B8YKP-D69TJ" />
+				<SkuItem DisplayName="Windows 10 Enterprise N" Id="e272e3e2-732f-4c65-a8f0-484747d0d947" Gvlk="DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4" />
+				<SkuItem DisplayName="Windows 10 Professional Workstation" Id="82bbc092-bc50-4e16-8e18-b74fc486aec3" Gvlk="NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J" />
+				<SkuItem DisplayName="Windows 10 Professional Workstation N" Id="4b1571d3-bafb-4b40-8087-a961be2caf65" Gvlk="9FNHH-K3HBT-3W4TD-6383H-6XYWF" />
+				<SkuItem DisplayName="Windows 10 Professional" Id="2de67392-b7a7-462a-b1ca-108dd189f588" Gvlk="W269N-WFGWX-YVC9B-4J6C9-T83GX" />
+				<SkuItem DisplayName="Windows 10 Professional Education" Id="3f1afc82-f8ac-4f6c-8005-1d233e606eee" Gvlk="6TP4R-GNPTD-KYYHQ-7B7DP-J447Y" />
+				<SkuItem DisplayName="Windows 10 Professional Education N" Id="5300b18c-2e33-4dc2-8291-47ffcec746dd" Gvlk="YVWGF-BXNMC-HTQYQ-CPQ99-66QFC" />
+				<SkuItem DisplayName="Windows 10 Professional N" Id="a80b5abf-76ad-428b-b05d-a47d2dffeebf" Gvlk="MH37W-N47XK-V7XM9-C7227-GCQG9" />
+				<SkuItem DisplayName="Windows 10 Professional [Preview]" Id="ff808201-fec6-4fd4-ae16-abbddade5706" Gvlk="XQHPH-N4D9W-M8P96-DPDFP-TMVPY" IsGeneratedGvlk="true" />
+				<SkuItem DisplayName="Windows 10 Enterprise [Preview]" Id="43f2ab05-7c87-4d56-b27c-44d0f9a3dabd" Gvlk="QNMXX-GCD3W-TCCT4-872RV-G6P4J" IsGeneratedGvlk="true" />
+				<SkuItem DisplayName="Windows 10 Enterprise for Virtual Desktops" Id="ec868e65-fadf-4759-b23e-93fe37f2cc29" Gvlk="CPWHC-NT2C7-VYW78-DHDB2-PG3GK" />
+				<SkuItem DisplayName="Windows 10 Remote Server" Id="e4db50ea-bda1-4566-b047-0ca50abc6f07" Gvlk="7NBT4-WGBQX-MP4H7-QXFF8-YP3KX" />
+				<SkuItem DisplayName="Windows 10 S (Lean)" Id="0df4f814-3f57-4b8b-9a9d-fddadcd69fac" Gvlk="NBTWJ-3DR69-3C4V8-C26MC-GQ9M6" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows 7" Id="7fde5219-fbfa-484a-82c9-34d1ad53e856" DefaultKmsProtocol="4.0" NCountPolicy="25">
+				<SkuItem DisplayName="Windows 7 Enterprise" Id="ae2ee509-1b34-41c0-acb7-6d4650168915" Gvlk="33PXH-7Y6KF-2VJC9-XBBR8-HVTHH" />
+				<SkuItem DisplayName="Windows 7 Enterprise E" Id="46bbed08-9c7b-48fc-a614-95250573f4ea" Gvlk="C29WB-22CC8-VJ326-GHFJW-H9DH4" />
+				<SkuItem DisplayName="Windows 7 Enterprise N" Id="1cb6d605-11b3-4e14-bb30-da91c8e3983a" Gvlk="YDRBP-3D83W-TY26F-D46B2-XCKRJ" />
+				<SkuItem DisplayName="Windows 7 Professional" Id="b92e9980-b9d5-4821-9c94-140f632f6312" Gvlk="FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4" />
+				<SkuItem DisplayName="Windows 7 Professional E" Id="5a041529-fef8-4d07-b06f-b59b573b32d2" Gvlk="W82YF-2Q76Y-63HXB-FGJG9-GF7QX" />
+				<SkuItem DisplayName="Windows 7 Professional N" Id="54a09a0d-d57b-4c10-8b69-a842d6590ad5" Gvlk="MRPKT-YTG23-K7D7T-X2JMM-QY7MG" />
+				<SkuItem DisplayName="Windows 7 Embedded POSReady" Id="db537896-376f-48ae-a492-53d0547773d0" Gvlk="YBYF6-BHCR3-JPKRB-CDW7B-F9BK4" />
+				<SkuItem DisplayName="Windows 7 Embedded Standard" Id="e1a8296a-db37-44d1-8cce-7bc961d59c54" Gvlk="XGY72-BRBBT-FF8MH-2GG8H-W7KCW" />
+				<SkuItem DisplayName="Windows 7 ThinPC" Id="aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395" Gvlk="73KQT-CD9G6-K7TQG-66MRP-CQ22C" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows 8 (Retail)" Id="bbb97b3b-8ca4-4a28-9717-89fabd42c4ac" IsRetail="true" DefaultKmsProtocol="5.0" NCountPolicy="25">
+				<SkuItem DisplayName="Windows 8 Core / Server 2012" Id="c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60" Gvlk="BN3D2-R7TKB-3YPBD-8DRP2-27GG4" />
+				<SkuItem DisplayName="Windows 8 Core / Server 2012 Country Specific" Id="9d5584a2-2d85-419a-982c-a00888bb9ddf" Gvlk="4K36P-JN4VD-GDC6V-KDT89-DYFKP" />
+				<SkuItem DisplayName="Windows 8 Core / Server 2012 N" Id="197390a0-65f6-4a95-bdc4-55d58a3b0253" Gvlk="8N2M2-HWPGY-7PGT9-HGDD8-GVGGY" />
+				<SkuItem DisplayName="Windows 8 Core / Server 2012 Single Language" Id="8860fcd4-a77b-4a20-9045-a150ff11d609" Gvlk="2WN2H-YGCQR-KFX6K-CD6TF-84YXQ" />
+				<SkuItem DisplayName="Windows 8 Professional WMC" Id="a00018a3-f20f-4632-bf7c-8daa5351c914" Gvlk="GNBB8-YVD74-QJHX6-27H4K-8QHDG" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows 8 (Volume)" Id="3c40b358-5948-45af-923b-53d21fcc7e79" DefaultKmsProtocol="5.0" NCountPolicy="25">
+				<SkuItem DisplayName="Windows 8 Embedded Industry Professional" Id="10018baf-ce21-4060-80bd-47fe74ed4dab" Gvlk="RYXVT-BNQG7-VD29F-DBMRY-HT73M" />
+				<SkuItem DisplayName="Windows 8 Embedded Industry Enterprise" Id="18db1848-12e0-4167-b9d7-da7fcda507db" Gvlk="NKB3R-R2F8T-3XCDP-7Q2KW-XWYQ2" />
+				<SkuItem DisplayName="Windows 8 Enterprise" Id="458e1bec-837a-45f6-b9d5-925ed5d299de" Gvlk="32JNW-9KQ84-P47T8-D8GGY-CWCK7" />
+				<SkuItem DisplayName="Windows 8 Enterprise N" Id="e14997e7-800a-4cf7-ad10-de4b45b578db" Gvlk="JMNMF-RHW7P-DMY6X-RF3DR-X2BQT" />
+				<SkuItem DisplayName="Windows 8 Professional" Id="a98bcd6d-5343-4603-8afe-5908e4611112" Gvlk="NG4HW-VH26C-733KW-K6F98-J8CK4" />
+				<SkuItem DisplayName="Windows 8 Professional N" Id="ebf245c1-29a8-4daf-9cb1-38dfc608a8c8" Gvlk="XCVCF-2NXM9-723PB-MHCB7-2RYQQ" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows 8.1 (Retail)" Id="6d646890-3606-461a-86ab-598bb84ace82" IsRetail="true" DefaultKmsProtocol="6.0" NCountPolicy="25">
+				<SkuItem DisplayName="Windows 8.1 Core" Id="fe1c3238-432a-43a1-8e25-97e7d1ef10f3" Gvlk="M9Q9P-WNJJT-6PXPY-DWX8H-6XWKK" />
+				<SkuItem DisplayName="Windows 8.1 Core ARM" Id="ffee456a-cd87-4390-8e07-16146c672fd0" Gvlk="XYTND-K6QKT-K2MRH-66RTM-43JKP" />
+				<SkuItem DisplayName="Windows 8.1 Core Country Specific" Id="db78b74f-ef1c-4892-abfe-1e66b8231df6" Gvlk="NCTT7-2RGK8-WMHRF-RY7YQ-JTXG3" />
+				<SkuItem DisplayName="Windows 8.1 Core N" Id="78558a64-dc19-43fe-a0d0-8075b2a370a3" Gvlk="7B9N3-D94CG-YTVHR-QBPX3-RJP64" />
+				<SkuItem DisplayName="Windows 8.1 Core Single Language" Id="c72c6a1d-f252-4e7e-bdd1-3fca342acb35" Gvlk="BB6NG-PQ82V-VRDPW-8XVD2-V8P66" />
+				<SkuItem DisplayName="Windows 8.1 Professional Student" Id="e58d87b5-8126-4580-80fb-861b22f79296" Gvlk="MX3RK-9HNGX-K3QKC-6PJ3F-W8D7B" IsGeneratedGvlk="true" />
+				<SkuItem DisplayName="Windows 8.1 Professional Student N" Id="cab491c7-a918-4f60-b502-dab75e334f40" Gvlk="TNFGH-2R6PB-8XM3K-QYHX2-J4296" IsGeneratedGvlk="true" />
+				<SkuItem DisplayName="Windows 8.1 Professional WMC" Id="096ce63d-4fac-48a9-82a9-61ae9e800e5f" Gvlk="789NJ-TQK6T-6XTH8-J39CJ-J8D3P" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows 8.1 (Volume)" Id="cb8fc780-2c05-495a-9710-85afffc904d7" DefaultKmsProtocol="6.0" NCountPolicy="25">
+				<SkuItem DisplayName="Windows 8.1 Core Connected" Id="e9942b32-2e55-4197-b0bd-5ff58cba8860" Gvlk="3PY8R-QHNP9-W7XQD-G6DPH-3J2C9" IsGeneratedGvlk="true" />
+				<SkuItem DisplayName="Windows 8.1 Core Connected Country Specific" Id="ba998212-460a-44db-bfb5-71bf09d1c68b" Gvlk="R962J-37N87-9VVK2-WJ74P-XTMHR" IsGeneratedGvlk="true" />
+				<SkuItem DisplayName="Windows 8.1 Core Connected N" Id="c6ddecd6-2354-4c19-909b-306a3058484e" Gvlk="Q6HTR-N24GM-PMJFP-69CD8-2GXKR" IsGeneratedGvlk="true" />
+				<SkuItem DisplayName="Windows 8.1 Core Connected Single Language" Id="b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c" Gvlk="KF37N-VDV38-GRRTV-XH8X6-6F3BB" IsGeneratedGvlk="true" />
+				<SkuItem DisplayName="Windows 8.1 Enterprise" Id="81671aaf-79d1-4eb1-b004-8cbbe173afea" Gvlk="MHF9N-XY6XB-WVXMC-BTDCT-MKKG7" />
+				<SkuItem DisplayName="Windows 8.1 Enterprise N" Id="113e705c-fa49-48a4-beea-7dd879b46b14" Gvlk="TT4HM-HN7YT-62K67-RGRQJ-JFFXW" />
+				<SkuItem DisplayName="Windows 8.1 Professional" Id="c06b6981-d7fd-4a35-b7b4-054742b7af67" Gvlk="GCRJD-8NW9H-F2CDX-CCM8D-9D6T9" />
+				<SkuItem DisplayName="Windows 8.1 Professional N" Id="7476d79f-8e48-49b4-ab63-4d0b813a16e4" Gvlk="HMCNV-VVBFX-7HMBH-CTY9B-B4FXY" />
+				<SkuItem DisplayName="Windows 8.1 Embedded Industry Professional" Id="0ab82d54-47f4-4acb-818c-cc5bf0ecb649" Gvlk="NMMPB-38DD4-R2823-62W8D-VXKJB" />
+				<SkuItem DisplayName="Windows 8.1 Embedded Industry Automotive" Id="f7e88590-dfc7-4c78-bccb-6f3865b99d1a" Gvlk="VHXM3-NR6FT-RY6RT-CK882-KW2CJ" />
+				<SkuItem DisplayName="Windows 8.1 Embedded Industry Enterprise" Id="cd4e2d9f-5059-4a50-a92d-05d5bb1267c7" Gvlk="FNFKF-PWTVT-9RC8H-32HB2-JB34X" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows Preview" Id="5f94a0bb-d5a0-4081-a685-5819418b2fe0" DefaultKmsProtocol="5.0" NCountPolicy="25">
+				<SkuItem DisplayName="Windows 8.1 Enterprise [Preview]" Id="cde952c7-2f96-4d9d-8f2b-2d349f64fc51" Gvlk="2MP7K-98NK8-WPVF3-Q2WDG-VMD98" />
+				<SkuItem DisplayName="Windows 8.1 Professional (Blue) [Preview]" Id="a4383e6b-dada-423d-a43d-f25678429676" Gvlk="MTWNQ-CKDHJ-3HXW9-Q2PFX-WB2HQ" />
+				<SkuItem DisplayName="Windows 8 Professional WMC [Preview]" Id="cf59a07b-1a2a-4be0-bfe0-423b5823e663" Gvlk="MY4N9-TGH34-4X4VY-8FG2T-RRDPV" />
+				<SkuItem DisplayName="Windows 8.x [Preview]" Id="2b9c337f-7a1d-4271-90a3-c6855a2b8a1c" Gvlk="MPWP3-DXNP9-BRD79-W8WFP-3YFJ6" />
+				<SkuItem DisplayName="Windows 8.x ARM [Preview]" Id="631ead72-a8ab-4df8-bbdf-372029989bdd" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows Server 2008 A (Web and HPC)" Id="33e156e4-b76f-4a52-9f91-f641dd95ac48" DefaultKmsProtocol="4.0" NCountPolicy="5">
+				<SkuItem DisplayName="Windows Server 2008 Web" Id="ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b" Gvlk="WYR28-R7TFJ-3X2YQ-YCY4H-M249D" />
+				<SkuItem DisplayName="Windows Server 2008 Compute Cluster" Id="7afb1156-2c1d-40fc-b260-aab7442b62fe" Gvlk="RCTX3-KWVHP-BR6TB-RB6DM-6X7HP" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows Server 2008 B (Standard and Enterprise)" Id="8fe53387-3087-4447-8985-f75132215ac9" DefaultKmsProtocol="4.0" NCountPolicy="5">
+				<SkuItem DisplayName="Windows Server 2008 Standard" Id="ad2542d4-9154-4c6d-8a44-30f11ee96989" Gvlk="TM24T-X9RMF-VWXK6-X8JC9-BFGM2" />
+				<SkuItem DisplayName="Windows Server 2008 Standard without Hyper-V" Id="2401e3d0-c50a-4b58-87b2-7e794b7d2607" Gvlk="W7VD6-7JFBR-RX26B-YKQ3Y-6FFFJ" />
+				<SkuItem DisplayName="Windows Server 2008 Enterprise" Id="c1af4d90-d1bc-44ca-85d4-003ba33db3b9" Gvlk="YQGMW-MPWTJ-34KDK-48M3W-X4Q6V" />
+				<SkuItem DisplayName="Windows Server 2008 Enterprise without Hyper-V" Id="8198490a-add0-47b2-b3ba-316b12d647b4" Gvlk="39BXF-X8Q23-P2WWT-38T2F-G3FPG" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows Server 2008 C (Datacenter)" Id="8a21fdf3-cbc5-44eb-83f3-fe284e6680a7" DefaultKmsProtocol="4.0" NCountPolicy="5">
+				<SkuItem DisplayName="Windows Server 2008 Datacenter" Id="68b6e220-cf09-466b-92d3-45cd964b9509" Gvlk="7M67G-PC374-GR742-YH8V4-TCBY3" />
+				<SkuItem DisplayName="Windows Server 2008 Datacenter without Hyper-V" Id="fd09ef77-5647-4eff-809c-af2b64659a45" Gvlk="22XQ2-VRXRG-P8D42-K34TD-G3QQC" />
+				<SkuItem DisplayName="Windows Server 2008 for Itanium" Id="01ef176b-3e0d-422a-b4f8-4ea880035e8f" Gvlk="4DWFP-JF3DJ-B7DTH-78FJB-PDRHK" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows Server 2008 R2 A (Web and HPC)" Id="0fc6ccaf-ff0e-4fae-9d08-4370785bf7ed" DefaultKmsProtocol="4.0" NCountPolicy="5">
+				<SkuItem DisplayName="Windows MultiPoint Server 2010" Id="f772515c-0e87-48d5-a676-e6962c3e1195" Gvlk="736RG-XDKJK-V34PF-BHK87-J6X3K" />
+				<SkuItem DisplayName="Windows Server 2008 R2 Web" Id="a78b8bd9-8017-4df5-b86a-09f756affa7c" Gvlk="6TPJF-RBVHG-WBW2R-86QPH-6RTM4" />
+				<SkuItem DisplayName="Windows Server 2008 R2 HPC Edition" Id="cda18cf3-c196-46ad-b289-60c072869994" Gvlk="TT8MH-CG224-D3D7Q-498W2-9QCTX" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows Server 2008 R2 B (Standard and Enterprise)" Id="ca87f5b6-cd46-40c0-b06d-8ecd57a4373f" DefaultKmsProtocol="4.0" NCountPolicy="5">
+				<SkuItem DisplayName="Windows Server 2008 R2 Standard" Id="68531fb9-5511-4989-97be-d11a0f55633f" Gvlk="YC6KT-GKW9T-YTKYR-T4X34-R7VHC" />
+				<SkuItem DisplayName="Windows Server 2008 R2 Enterprise" Id="620e2b3d-09e7-42fd-802a-17a13652fe7a" Gvlk="489J6-VHDMP-X63PK-3K798-CPX3Y" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows Server 2008 R2 C (Datacenter)" Id="b2ca2689-a9a8-42d7-938d-cf8e9f201958" DefaultKmsProtocol="4.0" NCountPolicy="5">
+				<SkuItem DisplayName="Windows Server 2008 R2 Datacenter" Id="7482e61b-c589-4b7f-8ecc-46d455ac3b87" Gvlk="74YFP-3QFB3-KQT8W-PMXWJ-7M648" />
+				<SkuItem DisplayName="Windows Server 2008 R2 for Itanium Enterprise" Id="8a26851c-1c7e-48d3-a687-fbca9b9ac16b" Gvlk="GT63C-RJFQ3-4GMB6-BRFB9-CB83V" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows Server 2012" Id="8665cb71-468c-4aa3-a337-cb9bc9d5eaac" DefaultKmsProtocol="5.0" NCountPolicy="5">
+				<SkuItem DisplayName="Windows Server 2012 Datacenter" Id="d3643d60-0c42-412d-a7d6-52e6635327f6" Gvlk="48HP8-DN98B-MYWDG-T2DCC-8W83P" />
+				<SkuItem DisplayName="Windows Server 2012 MultiPoint Premium" Id="95fd1c83-7df5-494a-be8b-1300e1c9d1cd" Gvlk="XNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G" />
+				<SkuItem DisplayName="Windows Server 2012 MultiPoint Standard" Id="7d5486c7-e120-4771-b7f1-7b56c6d3170c" Gvlk="HM7DN-YVMH3-46JC3-XYTG7-CYQJJ" />
+				<SkuItem DisplayName="Windows Server 2012 Standard" Id="f0f5ec41-0d55-4732-af02-440a44a3cf0f" Gvlk="XC9B7-NBPP2-83J2H-RHMBY-92BT4" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows Server 2012 R2" Id="8456efd3-0c04-4089-8740-5b7238535a65" DefaultKmsProtocol="6.0" NCountPolicy="5">
+				<SkuItem DisplayName="Windows Server 2012 R2 Cloud Storage" Id="b743a2be-68d4-4dd3-af32-92425b7bb623" Gvlk="3NPTF-33KPT-GGBPR-YX76B-39KDD" />
+				<SkuItem DisplayName="Windows Server 2012 R2 Datacenter" Id="00091344-1ea4-4f37-b789-01750ba6988c" Gvlk="W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9" />
+				<SkuItem DisplayName="Windows Server 2012 R2 Essentials" Id="21db6ba4-9a7b-4a14-9e29-64a60c59301d" Gvlk="KNC87-3J2TX-XB4WP-VCPJV-M4FWM" />
+				<SkuItem DisplayName="Windows Server 2012 R2 Standard" Id="b3ca044e-a358-4d68-9883-aaa2941aca99" Gvlk="D2N9P-3P6X9-2R39C-7RTCD-MDVJX" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows Server 2016" Id="6e9fc069-257d-4bc4-b4a7-750514d32743" DefaultKmsProtocol="6.0" NCountPolicy="5">
+				<SkuItem DisplayName="Windows Server 2016 Azure Core" Id="3dbf341b-5f6c-4fa7-b936-699dce9e263f" Gvlk="VP34G-4NPPG-79JTQ-864T4-R3MQX" />
+				<SkuItem DisplayName="Windows Server 2016 Cloud Storage" Id="7b4433f4-b1e7-4788-895a-c45378d38253" Gvlk="QN4C6-GBJD2-FB422-GHWJK-GJG2R" />
+				<SkuItem DisplayName="Windows Server 2016 Datacenter" Id="21c56779-b449-4d20-adfc-eece0e1ad74b" Gvlk="CB7KF-BWN84-R7R2Y-793K2-8XDDG" />
+				<SkuItem DisplayName="Windows Server 2016 Essentials" Id="2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283" Gvlk="JCKRF-N37P4-C2D82-9YXRT-4M63B" />
+				<SkuItem DisplayName="Windows Server 2016 Standard" Id="8c1c5410-9f39-4805-8c9d-63a07706358f" Gvlk="WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY" />
+				<SkuItem DisplayName="Windows Server 2016 ARM64" Id="43d9af6e-5e86-4be8-a797-d072a046896c" Gvlk="K9FYF-G6NCK-73M32-XMVPY-F9DRR" />
+				<SkuItem DisplayName="Windows Server 2016 Datacenter (Semi-Annual Channel v.1803)" Id="e49c08e7-da82-42f8-bde2-b570fbcae76c" Gvlk="2HXDN-KRXHB-GPYC7-YCKFJ-7FVDG" />
+				<SkuItem DisplayName="Windows Server 2016 Standard (Semi-Annual Channel v.1803)" Id="61c5ef22-f14f-4553-a824-c4b31e84b100" Gvlk="PTXN8-JFHJM-4WC78-MPCBR-9W4KR" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows Server Preview" Id="6d5f5270-31ac-433e-b90a-39892923c657" IsPreview="true" DefaultKmsProtocol="6.0" NCountPolicy="5">
+				<SkuItem DisplayName="Windows Server 2016 Datacenter [Preview]" Id="ba947c44-d19d-4786-b6ae-22770bc94c54" Gvlk="VRDD2-NVGDP-K7QG8-69BR4-TVFHB" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Windows Vista" Id="212a64dc-43b1-4d3d-a30c-2fc69d2095c6" DefaultKmsProtocol="4.0" NCountPolicy="25">
+				<SkuItem DisplayName="Windows Vista Business" Id="4f3d1606-3fea-4c01-be3c-8d671c401e3b" Gvlk="YFKBB-PQJJV-G996G-VWGXY-2V3X8" />
+				<SkuItem DisplayName="Windows Vista Business N" Id="2c682dc2-8b68-4f63-a165-ae291d4cf138" Gvlk="HMBQG-8H2RH-C77VX-27R82-VMQBT" />
+				<SkuItem DisplayName="Windows Vista Enterprise" Id="cfd8ff08-c0d7-452b-9f60-ef5c70c32094" Gvlk="VKK3X-68KWM-X2YGT-QR4M6-4BWMV" />
+				<SkuItem DisplayName="Windows Vista Enterprise N" Id="d4f54950-26f2-4fb4-ba21-ffab16afcade" Gvlk="VTC42-BM838-43QHV-84HX6-XJXKV" />
+			</KmsItem>
+
+		</AppItem>
+
+		<AppItem DisplayName="Office 14 (2010)" VlmcsdIndex="1" MinActiveClients="10" Id="59a52881-a989-479d-af46-f275c6370663">
+
+			<KmsItem DisplayName="Office 2010" Id="e85af946-2e25-47b7-83e1-bebcebeac611" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="4.0" NCountPolicy="5">
+				<SkuItem DisplayName="Office Access 2010" Id="8ce7e872-188c-4b98-9d90-f8f90b7aad02" Gvlk="V7Y44-9T38C-R2VJK-666HK-T7DDX" />
+				<SkuItem DisplayName="Office Excel 2010" Id="cee5d470-6e3b-4fcc-8c2b-d17428568a9f" Gvlk="H62QG-HXVKF-PP4HP-66KMR-CW9BM" />
+				<SkuItem DisplayName="Office Groove (SharePoint Workspace) 2010" Id="8947d0b8-c33b-43e1-8c56-9b674c052832" Gvlk="QYYW6-QP4CB-MBV6G-HYMCJ-4T3J4" />
+				<SkuItem DisplayName="Office InfoPath 2010" Id="ca6b6639-4ad6-40ae-a575-14dee07f6430" Gvlk="K96W8-67RPQ-62T9Y-J8FQJ-BT37T" />
+				<SkuItem DisplayName="Office Mondo 1 2010" Id="09ed9640-f020-400a-acd8-d7d867dfd9c2" Gvlk="YBJTT-JG6MD-V9Q7P-DBKXJ-38W9R" />
+				<SkuItem DisplayName="Office Mondo 2 2010" Id="ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c" Gvlk="7TC2V-WXF6P-TD7RT-BQRXR-B8K32" />
+				<SkuItem DisplayName="Office OneNote 2010" Id="ab586f5c-5256-4632-962f-fefd8b49e6f4" Gvlk="Q4Y4M-RHWJM-PY37F-MTKWH-D3XHX" />
+				<SkuItem DisplayName="Office OutLook 2010" Id="ecb7c192-73ab-4ded-acf4-2399b095d0cc" Gvlk="7YDC2-CWM8M-RRTJC-8MDVC-X3DWQ" />
+				<SkuItem DisplayName="Office PowerPoint 2010" Id="45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a" Gvlk="RC8FX-88JRY-3PF7C-X8P67-P4VTT" />
+				<SkuItem DisplayName="Office Professional Plus 2010" Id="6f327760-8c5c-417c-9b61-836a98287e0c" Gvlk="VYBBJ-TRJPB-QFQRF-QFT4D-H3GVB" />
+				<SkuItem DisplayName="Office Project Professional 2010" Id="df133ff7-bf14-4f95-afe3-7b48e7e331ef" Gvlk="YGX6F-PGV49-PGW3J-9BTGG-VHKC6" />
+				<SkuItem DisplayName="Office Project Standard 2010" Id="5dc7bf61-5ec9-4996-9ccb-df806a2d0efe" Gvlk="4HP3K-88W3F-W2K3D-6677X-F9PGB" />
+				<SkuItem DisplayName="Office Publisher 2010" Id="b50c4f75-599b-43e8-8dcd-1081a7967241" Gvlk="BFK7F-9MYHM-V68C7-DRQ66-83YTP" />
+				<SkuItem DisplayName="Office Small Business Basics 2010" Id="ea509e87-07a1-4a45-9edc-eba5a39f36af" Gvlk="D6QFG-VBYP2-XQHM7-J97RH-VVRCK" />
+				<SkuItem DisplayName="Office Standard 2010" Id="9da2a678-fb6b-4e67-ab84-60dd6a9c819a" Gvlk="V7QKV-4XVVR-XYV4D-F7DFM-8R6BM" />
+				<SkuItem DisplayName="Office Visio Premium 2010" Id="92236105-bb67-494f-94c7-7f7a607929bd" Gvlk="D9DWC-HPYVV-JGF4P-BTWQB-WX8BJ" />
+				<SkuItem DisplayName="Office Visio Professional 2010" Id="e558389c-83c3-4b29-adfe-5e4d7f46c358" Gvlk="7MCW8-VRQVK-G677T-PDJCM-Q8TCP" />
+				<SkuItem DisplayName="Office Visio Standard 2010" Id="9ed833ff-4f92-4f36-b370-8683a4f13275" Gvlk="767HD-QGMWX-8QTDB-9G3R2-KHFGJ" />
+				<SkuItem DisplayName="Office Word 2010" Id="2d0882e7-a4e7-423b-8ccc-70d91e0158b1" Gvlk="HVHB3-C6FV7-KQX9W-YQG79-CRY7T" />
+			</KmsItem>
+
+		</AppItem>
+
+		<AppItem DisplayName="Office 15 (2013) / 16 (2016) / 17 (2019)" VlmcsdIndex="5" MinActiveClients="10" Id="0ff1ce15-a989-479d-af46-f275c6370663">
+
+			<KmsItem DisplayName="Office 2013" Id="e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="5.0" NCountPolicy="5">
+				<SkuItem DisplayName="Office Access 2013" Id="6ee7622c-18d8-4005-9fb7-92db644a279b" Gvlk="NG2JY-H4JBT-HQXYP-78QH9-4JM2D" />
+				<SkuItem DisplayName="Office Excel 2013" Id="f7461d52-7c2b-43b2-8744-ea958e0bd09a" Gvlk="VGPNG-Y7HQW-9RHP7-TKPV3-BG7GB" />
+				<SkuItem DisplayName="Office InfoPath 2013" Id="a30b8040-d68a-423f-b0b5-9ce292ea5a8f" Gvlk="DKT8B-N7VXH-D963P-Q4PHY-F8894" />
+				<SkuItem DisplayName="Office Lync 2013" Id="1b9f11e3-c85c-4e1b-bb29-879ad2c909e3" Gvlk="2MG3G-3BNTT-3MFW9-KDQW3-TCK7R" />
+				<SkuItem DisplayName="Office Mondo 2013" Id="dc981c6b-fc8e-420f-aa43-f8f33e5c0923" Gvlk="42QTK-RN8M7-J3C4G-BBGYM-88CYV" />
+				<SkuItem DisplayName="Office OneNote 2013" Id="efe1f3e6-aea2-4144-a208-32aa872b6545" Gvlk="TGN6P-8MMBC-37P2F-XHXXK-P34VW" />
+				<SkuItem DisplayName="Office OutLook 2013" Id="771c3afa-50c5-443f-b151-ff2546d863a0" Gvlk="QPN8Q-BJBTJ-334K3-93TGY-2PMBT" />
+				<SkuItem DisplayName="Office PowerPoint 2013" Id="8c762649-97d1-4953-ad27-b7e2c25b972e" Gvlk="4NT99-8RJFH-Q2VDH-KYG2C-4RD4F" />
+				<SkuItem DisplayName="Office Professional Plus 2013" Id="b322da9c-a2e2-4058-9e4e-f59a6970bd69" Gvlk="YC7DK-G2NP3-2QQC3-J6H88-GVGXT" />
+				<SkuItem DisplayName="Office Project Professional 2013" Id="4a5d124a-e620-44ba-b6ff-658961b33b9a" Gvlk="FN8TT-7WMH6-2D4X9-M337T-2342K" />
+				<SkuItem DisplayName="Office Project Standard 2013" Id="427a28d1-d17c-4abf-b717-32c780ba6f07" Gvlk="6NTH3-CW976-3G3Y2-JK3TX-8QHTT" />
+				<SkuItem DisplayName="Office Publisher 2013" Id="00c79ff1-6850-443d-bf61-71cde0de305f" Gvlk="PN2WF-29XG2-T9HJ7-JQPJR-FCXK4" />
+				<SkuItem DisplayName="Office Standard 2013" Id="b13afb38-cd79-4ae5-9f7f-eed058d750ca" Gvlk="KBKQT-2NMXY-JJWGP-M62JB-92CD4" />
+				<SkuItem DisplayName="Office Visio Professional 2013" Id="e13ac10e-75d0-4aff-a0cd-764982cf541c" Gvlk="C2FG9-N6J68-H8BTJ-BW3QX-RM3B3" />
+				<SkuItem DisplayName="Office Visio Standard 2013" Id="ac4efaf0-f81f-4f61-bdf7-ea32b02ab117" Gvlk="J484Y-4NKBF-W2HMG-DBMJC-PGWR7" />
+				<SkuItem DisplayName="Office Word 2013" Id="d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3" Gvlk="6Q7VD-NX8JD-WJ2VH-88V73-4GBJ7" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Office 2013 [Pre-Release]" Id="aa4c7968-b9da-4680-92b6-acb25e2f866c" IsPreview="true" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="5.0" NCountPolicy="5">
+				<SkuItem DisplayName="Office Access 2013 [Pre-Release]" Id="44b538e2-fb34-4732-81e4-644c17d2e746" Gvlk="DJBH8-RGN7Q-836KD-DMP3M-DM9MF" />
+				<SkuItem DisplayName="Office Excel 2013 [Pre-Release]" Id="9373bfa0-97b3-4587-ab73-30934461d55c" Gvlk="Q3BNP-3WXDT-GG8HF-24KMW-HMDBK" />
+				<SkuItem DisplayName="Office Groove (SharePoint Workspace) 2013 [Pre-Release]" Id="aa286eb4-556f-4eeb-967c-c1b771b7673e" Gvlk="WVCGG-NK4FG-7XKXM-BD4WF-3C624" />
+				<SkuItem DisplayName="Office InfoPath 2013 [Pre-Release]" Id="7ccc8256-fbaa-49c6-b2a9-f5afb4257cd2" Gvlk="7KPJJ-N8TT7-CK3KR-QTV98-YPVXQ" />
+				<SkuItem DisplayName="Office Lync 2013 [Pre-Release]" Id="c53dfe17-cc00-4967-b188-a088a965494d" Gvlk="XNVD3-RYC7T-7R6BT-WX6CF-8BYH7" />
+				<SkuItem DisplayName="Office Mondo 2013 [Pre-Release]" Id="2816a87d-e1ed-4097-b311-e2341c57b179" Gvlk="GCGCN-6FJRM-TR9Q3-BGMWJ-78KQV" />
+				<SkuItem DisplayName="Office OneNote 2013 [Pre-Release]" Id="67c0f908-184f-4f64-8250-12db797ab3c3" Gvlk="VYNYX-8GPBC-7FQMD-D6B7B-7MDFD" />
+				<SkuItem DisplayName="Office Outlook 2013 [Pre-Release]" Id="7bce4e7a-dd80-4682-98fa-f993725803d2" Gvlk="X2KNB-FRRG2-WXDPH-739DM-DM9RH" />
+				<SkuItem DisplayName="Office PowerPoint 2013 [Pre-Release]" Id="1ec10c0a-54f6-453e-b85a-6fa1bbfea9b7" Gvlk="B8CT8-BTNFQ-XQXBK-BFWV8-HMDFQ" />
+				<SkuItem DisplayName="Office Professional Plus 2013 [Pre-Release]" Id="87d2b5bf-d47b-41fb-af62-71c382f5cc85" Gvlk="PGD67-JN23K-JGVWV-KTHP4-GXR9G" />
+				<SkuItem DisplayName="Office Project Professional 2013 [Pre-Release]" Id="3cfe50a9-0e03-4b29-9754-9f193f07b71f" Gvlk="NFKVM-DVG7F-TYWYR-3RPHY-F872K" />
+				<SkuItem DisplayName="Office Project Standard 2013 [Pre-Release]" Id="39e49e57-ae68-4ee3-b098-26480df3da96" Gvlk="N89QF-GGB8J-BKD28-C4V28-W4XTK" />
+				<SkuItem DisplayName="Office Publisher 2013 [Pre-Release]" Id="15aa2117-8f79-49a8-8317-753026d6a054" Gvlk="NB67P-J8XP4-XDK9B-V73VH-M4CKR" />
+				<SkuItem DisplayName="Office Visio Professional 2013 [Pre-Release]" Id="cfbfd60e-0b5f-427d-917c-a4df42a80e44" Gvlk="B3C7Q-D6NH2-2VRFW-HHWDG-FVQB6" />
+				<SkuItem DisplayName="Office Visio Standard 2013 [Pre-Release]" Id="7012cc81-8887-42e9-b17d-4e5e42760f0d" Gvlk="9MKNF-J9XQ6-JV4XB-FJQPY-43F43" />
+				<SkuItem DisplayName="Office Word 2013 [Pre-Release]" Id="de9c7eb6-5a85-420d-9703-fff11bdd4d43" Gvlk="JBGD4-3JNG7-JWWGV-CR6TP-DC62Q" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Office 2016" Id="85b5f61b-320b-4be3-814a-b76b2bfafc82" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="6.0" NCountPolicy="5">
+				<SkuItem DisplayName="Office Access 2016" Id="67c0fc0c-deba-401b-bf8b-9c8ad8395804" Gvlk="GNH9Y-D2J4T-FJHGG-QRVH7-QPFDW" />
+				<SkuItem DisplayName="Office Excel 2016" Id="c3e65d36-141f-4d2f-a303-a842ee756a29" Gvlk="9C2PK-NWTVB-JMPW8-BFT28-7FTBF" />
+				<SkuItem DisplayName="Office Mondo 2016" Id="9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce" Gvlk="HFTND-W9MK4-8B7MJ-B6C4G-XQBR2" />
+				<SkuItem DisplayName="Office Mondo Retail 2016" Id="e914ea6e-a5fa-4439-a394-a9bb3293ca09" Gvlk="DMTCJ-KNRKX-26982-JYCKT-P7KB6" />
+				<SkuItem DisplayName="Office OneNote 2016" Id="d8cace59-33d2-4ac7-9b1b-9b72339c51c8" Gvlk="DR92N-9HTF2-97XKM-XW2WJ-XW3J6" />
+				<SkuItem DisplayName="Office Outlook 2016" Id="ec9d9265-9d1e-4ed0-838a-cdc20f2551a1" Gvlk="R69KK-NTPKF-7M3Q4-QYBHW-6MT9B" />
+				<SkuItem DisplayName="Office Powerpoint 2016" Id="d70b1bba-b893-4544-96e2-b7a318091c33" Gvlk="J7MQP-HNJ4Y-WJ7YM-PFYGF-BY6C6" />
+				<SkuItem DisplayName="Office Professional Plus 2016" Id="d450596f-894d-49e0-966a-fd39ed4c4c64" Gvlk="XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99" />
+				<SkuItem DisplayName="Office Project Professional 2016" Id="4f414197-0fc2-4c01-b68a-86cbb9ac254c" Gvlk="YG9NW-3K39V-2T3HJ-93F3Q-G83KT" />
+				<SkuItem DisplayName="Office Project Professional 2016 C2R [Preview]" Id="829b8110-0e6f-4349-bca4-42803577788d" Gvlk="WGT24-HCNMF-FQ7XH-6M8K7-DRTW9" />
+				<SkuItem DisplayName="Office Project Standard 2016" Id="da7ddabc-3fbe-4447-9e01-6ab7440b4cd4" Gvlk="GNFHQ-F6YQM-KQDGJ-327XX-KQBVC" />
+				<SkuItem DisplayName="Office Project Standard 2016 C2R [Preview]" Id="cbbaca45-556a-4416-ad03-bda598eaa7c8" Gvlk="D8NRQ-JTYM3-7J2DX-646CT-6836M" />
+				<SkuItem DisplayName="Office Publisher 2016" Id="041a06cb-c5b8-4772-809f-416d03d16654" Gvlk="F47MM-N3XJP-TQXJ9-BP99D-8K837" />
+				<SkuItem DisplayName="Office Skype for Business 2016" Id="83e04ee1-fa8d-436d-8994-d31a862cab77" Gvlk="869NQ-FJ69K-466HW-QYCP2-DDBV6" />
+				<SkuItem DisplayName="Office Standard 2016" Id="dedfa23d-6ed1-45a6-85dc-63cae0546de6" Gvlk="JNRGM-WHDWX-FJJG3-K47QV-DRTFM" />
+				<SkuItem DisplayName="Office Visio Professional 2016" Id="6bf301c1-b94a-43e9-ba31-d494598c47fb" Gvlk="PD3PC-RHNGV-FXJ29-8JK7D-RJRJK" />
+				<SkuItem DisplayName="Office Visio Professional 2016 C2R [Preview]" Id="b234abe3-0857-4f9c-b05a-4dc314f85557" Gvlk="69WXN-MBYV6-22PQG-3WGHK-RM6XC" />
+				<SkuItem DisplayName="Office Visio Standard 2016" Id="aa2a7821-1827-4c2c-8f1d-4513a34dda97" Gvlk="7WHWN-4T7MP-G96JF-G33KR-W8GF4" />
+				<SkuItem DisplayName="Office Visio Standard 2016 C2R [Preview]" Id="361fe620-64f4-41b5-ba77-84f8e079b1f7" Gvlk="NY48V-PPYYH-3F4PX-XJRKJ-W4423" />
+				<SkuItem DisplayName="Office Word 2016" Id="bb11badf-d8aa-470e-9311-20eaf80fe5cc" Gvlk="WXY84-JN2Q9-RBCCQ-3Q3J3-3PFJ6" />
+				<SkuItem DisplayName="Office Professional Plus 2019 C2R [Preview]" Id="0bc88885-718c-491d-921f-6f214349e79c" Gvlk="VQ9DP-NVHPH-T9HJC-J9PDT-KTQRG" />
+				<SkuItem DisplayName="Office Project Professional 2019 C2R [Preview]" Id="fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9" Gvlk="XM2V9-DN9HH-QB449-XDGKC-W2RMW" />
+				<SkuItem DisplayName="Office Visio Professional 2019 C2R [Preview]" Id="500f6619-ef93-4b75-bcb4-82819998a3ca" Gvlk="N2CG9-YD3YK-936X4-3WR82-Q3X4H" />
+			</KmsItem>
+
+			<KmsItem DisplayName="Office 2019" Id="617d9eb1-ef36-4f82-86e0-a65ae07b96c6" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="6.0" NCountPolicy="5">
+				<SkuItem DisplayName="Office Access 2019" Id="9e9bceeb-e736-4f26-88de-763f87dcc485" Gvlk="9N9PT-27V4Y-VJ2PD-YXFMF-YTFQT" />
+				<SkuItem DisplayName="Office Excel 2019" Id="237854e9-79fc-4497-a0c1-a70969691c6b" Gvlk="TMJWT-YYNMB-3BKTF-644FC-RVXBD" />
+				<SkuItem DisplayName="Office Outlook 2019" Id="c8f8a301-19f5-4132-96ce-2de9d4adbd33" Gvlk="7HD7K-N4PVK-BHBCQ-YWQRW-XW4VK" />
+				<SkuItem DisplayName="Office Powerpoint 2019" Id="3131fd61-5e4f-4308-8d6d-62be1987c92c" Gvlk="RRNCX-C64HY-W2MM7-MCH9G-TJHMQ" />
+				<SkuItem DisplayName="Office Professional Plus 2019" Id="85dd8b5f-eaa4-4af3-a628-cce9e77c9a03" Gvlk="NMMKJ-6RK4F-KMJVX-8D9MJ-6MWKP" />
+				<SkuItem DisplayName="Office Project Professional 2019" Id="2ca2bf3f-949e-446a-82c7-e25a15ec78c4" Gvlk="B4NPR-3FKK7-T2MBV-FRQ4W-PKD2B" />
+				<SkuItem DisplayName="Office Project Standard 2019" Id="1777f0e3-7392-4198-97ea-8ae4de6f6381" Gvlk="C4F7P-NCP8C-6CQPT-MQHV9-JXD2M" />
+				<SkuItem DisplayName="Office Publisher 2019" Id="9d3e4cca-e172-46f1-a2f4-1d2107051444" Gvlk="G2KWX-3NW6P-PY93R-JXK2T-C9Y9V" />
+				<SkuItem DisplayName="Office Skype for Business 2019" Id="734c6c6e-b0ba-4298-a891-671772b2bd1b" Gvlk="NCJ33-JHBBY-HTK98-MYCV8-HMKHJ" />
+				<SkuItem DisplayName="Office Standard 2019" Id="6912a74b-a5fb-401a-bfdb-2e3ab46f4b02" Gvlk="6NWWJ-YQWMR-QKGCB-6TMB3-9D9HK" />
+				<SkuItem DisplayName="Office Visio Professional 2019" Id="5b5cf08f-b81a-431d-b080-3450d8620565" Gvlk="9BGNQ-K37YR-RQHF2-38RQ3-7VCBB" />
+				<SkuItem DisplayName="Office Visio Standard 2019" Id="e06d7df3-aad0-419d-8dfb-0ac37e2bdf39" Gvlk="7TQNQ-K3YQQ-3PFH7-CCPPM-X4VQ2" />
+				<SkuItem DisplayName="Office Word 2019" Id="059834fe-a8ea-4bff-b67b-4d006b5447d3" Gvlk="PBX3G-NWMT6-Q7XBW-PYJGG-WXD33" />
+			</KmsItem>
+
+		</AppItem>
+
+	</AppItems>
+
+</KmsData>
diff --git a/py2-kms/aes.py b/py2-kms/aes.py
index f952aeb..1cabcd9 100644
--- a/py2-kms/aes.py
+++ b/py2-kms/aes.py
@@ -4,13 +4,17 @@
 # from the SlowAES project, http://code.google.com/p/slowaes/
 #
 # Copyright (c) 2008    Josh Davis ( http://www.josh-davis.org ),
-#           Alex Martelli ( http://www.aleax.it )
+#                       Alex Martelli ( http://www.aleax.it )
 #
 # Ported from C code written by Laurent Haan ( http://www.progressive-coding.com )
 #
 # Licensed under the Apache License, Version 2.0
 # http://www.apache.org/licenses/
 
+"""
+Modified for py-kms
+"""
+
 import os
 import math
 
diff --git a/py2-kms/client.py b/py2-kms/client.py
index 952d01b..5410c48 100644
--- a/py2-kms/client.py
+++ b/py2-kms/client.py
@@ -1,16 +1,17 @@
 #!/usr/bin/env python
 
+import re
 import argparse
 import binascii
 import datetime
 import random
 import socket
 import string
-import struct
 import sys
 import uuid
 import logging
 import os
+import errno
 
 import filetimes, rpcBind, rpcRequest
 from dcerpc import MSRPCHeader, MSRPCBindNak, MSRPCRequestHeader, MSRPCRespHeader
@@ -19,6 +20,7 @@ from kmsRequestV4 import kmsRequestV4
 from kmsRequestV5 import kmsRequestV5
 from kmsRequestV6 import kmsRequestV6
 from rpcBase import rpcBase
+from kmsDB2Dict import kmsDB2Dict
 from formatText import shell_message, justify
 
 config = {}
@@ -29,7 +31,8 @@ def main():
         parser.add_argument("port", nargs="?", action="store", default=1688,
                             help='The port the KMS service is listening on. The default is \"1688\".', type=int)
         parser.add_argument("-m", "--mode", dest="mode",
-                            choices=["WindowsVista","Windows7","Windows8","Windows81","Windows10","Office2010","Office2013","Office2016"], default="Windows81",
+                            choices=["WindowsVista","Windows7","Windows8","Windows8.1","Windows10",
+                                     "Office2010","Office2013","Office2016","Office2019"], default="Windows8.1",
                             help='Use this flag to manually specify a Microsoft product for testing the server. The default is \"Windows81\".', type=str)
         parser.add_argument("-c", "--cmid", dest="cmid", default=None,
                             help='Use this flag to manually specify a CMID to use. If no CMID is specified, a random CMID will be generated.', type=str)
@@ -62,7 +65,7 @@ a random machineName will be generated.', type=str)
                 shell_message(nshell = [-4, 7])
                 bindResponse = s.recv(1024)
         except socket.error, e:
-                if e[0] == 104:
+                if e.errno == errno.ECONNRESET:
                         logging.error("Connection reset by peer. Exiting...")
                         sys.exit()
                 else:
@@ -84,15 +87,13 @@ a random machineName will be generated.', type=str)
                 parsed = MSRPCRespHeader(response)
                 kmsData = readKmsResponse(parsed['pduData'], kmsRequest, config)
                 kmsResp = kmsData['response']
-                
+                               
                 try:
                         hwid = kmsData['hwid']
-                except:
-                        hwid = None
-                logging.info("KMS Host ePID: %s" % kmsResp['kmsEpid'].decode('utf-16le').encode('utf-8'))
-                if hwid is not None:
                         logging.info("KMS Host HWID: %s" % binascii.b2a_hex(hwid).upper())
-                        
+                except KeyError:
+                        pass
+                logging.info("KMS Host ePID: %s" % kmsResp['kmsEpid'].decode('utf-16le').encode('utf-8'))                       
                 logging.info("KMS Host Current Client Count: %s" % kmsResp['currentClientCount'])
                 logging.info("KMS VL Activation Interval: %s" % kmsResp['vLActivationInterval'])
                 logging.info("KMS VL Renewal Interval: %s" % kmsResp['vLRenewalInterval'])
@@ -110,79 +111,45 @@ def checkConfig():
         if config['cmid'] is not None:
                 try:
                         uuid.UUID(config['cmid'])
-                except:
+                except ValueError:
                         logging.error("Bad CMID. Exiting...")
                         sys.exit()
         if config['machineName'] is not None:
                 if len(config['machineName']) < 2 or len(config['machineName']) > 63:
-                        logging.error("machineName must be between 2 and 63 characters in length.")
+                        logging.error("Error: machineName must be between 2 and 63 characters in length.")
                         sys.exit()
 
 def updateConfig():
-        if config['mode'] == 'WindowsVista':
-                config['RequiredClientCount'] = 25
-                config['KMSProtocolMajorVersion'] = 4
-                config['KMSProtocolMinorVersion'] = 0
-                config['KMSClientLicenseStatus'] = 2
-                config['KMSClientAppID'] = "55c92734-d682-4d71-983e-d6ec3f16059f"
-                config['KMSClientSkuID'] = "cfd8ff08-c0d7-452b-9f60-ef5c70c32094"
-                config['KMSClientKMSCountedID'] = "212a64dc-43b1-4d3d-a30c-2fc69d2095c6"
-        elif config['mode'] == 'Windows7':
-                config['RequiredClientCount'] = 25
-                config['KMSProtocolMajorVersion'] = 4
-                config['KMSProtocolMinorVersion'] = 0
-                config['KMSClientLicenseStatus'] = 2
-                config['KMSClientAppID'] = "55c92734-d682-4d71-983e-d6ec3f16059f"
-                config['KMSClientSkuID'] = "ae2ee509-1b34-41c0-acb7-6d4650168915"
-                config['KMSClientKMSCountedID'] = "7fde5219-fbfa-484a-82c9-34d1ad53e856"
-        elif config['mode'] == 'Windows8':
-                config['RequiredClientCount'] = 25
-                config['KMSProtocolMajorVersion'] = 5
-                config['KMSProtocolMinorVersion'] = 0
-                config['KMSClientLicenseStatus'] = 2
-                config['KMSClientAppID'] = "55c92734-d682-4d71-983e-d6ec3f16059f"
-                config['KMSClientSkuID'] = "458e1bec-837a-45f6-b9d5-925ed5d299de"
-                config['KMSClientKMSCountedID'] = "3c40b358-5948-45af-923b-53d21fcc7e79"
-        elif config['mode'] == 'Windows81':
-                config['RequiredClientCount'] = 25
-                config['KMSProtocolMajorVersion'] = 6
-                config['KMSProtocolMinorVersion'] = 0
-                config['KMSClientLicenseStatus'] = 2
-                config['KMSClientAppID'] = "55c92734-d682-4d71-983e-d6ec3f16059f"
-                config['KMSClientSkuID'] = "81671aaf-79d1-4eb1-b004-8cbbe173afea"
-                config['KMSClientKMSCountedID'] = "cb8fc780-2c05-495a-9710-85afffc904d7"
-        elif config['mode'] == 'Windows10':
-                config['RequiredClientCount'] = 25
-                config['KMSProtocolMajorVersion'] = 6
-                config['KMSProtocolMinorVersion'] = 0
-                config['KMSClientLicenseStatus'] = 2
-                config['KMSClientAppID'] = "55c92734-d682-4d71-983e-d6ec3f16059f"
-                config['KMSClientSkuID'] = "73111121-5638-40f6-bc11-f1d7b0d64300"
-                config['KMSClientKMSCountedID'] = "58e2134f-8e11-4d17-9cb2-91069c151148"
-        elif config['mode'] == 'Office2010':
-                config['RequiredClientCount'] = 5
-                config['KMSProtocolMajorVersion'] = 4
-                config['KMSProtocolMinorVersion'] = 0
-                config['KMSClientLicenseStatus'] = 2
-                config['KMSClientAppID'] = "59a52881-a989-479d-af46-f275c6370663"
-                config['KMSClientSkuID'] = "6f327760-8c5c-417c-9b61-836a98287e0c"
-                config['KMSClientKMSCountedID'] = "e85af946-2e25-47b7-83e1-bebcebeac611"
-        elif config['mode'] == 'Office2013':
-                config['RequiredClientCount'] = 5
-                config['KMSProtocolMajorVersion'] = 5
-                config['KMSProtocolMinorVersion'] = 0
-                config['KMSClientLicenseStatus'] = 2
-                config['KMSClientAppID'] = "0ff1ce15-a989-479d-af46-f275c6370663"
-                config['KMSClientSkuID'] = "b322da9c-a2e2-4058-9e4e-f59a6970bd69"
-                config['KMSClientKMSCountedID'] = "e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0"
-        elif config['mode'] == 'Office2016':
-                config['RequiredClientCount'] = 5
-                config['KMSProtocolMajorVersion'] = 6
-                config['KMSProtocolMinorVersion'] = 0
-                config['KMSClientLicenseStatus'] = 2
-                config['KMSClientAppID'] = "0ff1ce15-a989-479d-af46-f275c6370663"
-                config['KMSClientSkuID'] = "d450596f-894d-49e0-966a-fd39ed4c4c64"
-                config['KMSClientKMSCountedID'] = "85b5f61b-320b-4be3-814a-b76b2bfafc82"
+        kmsdb = kmsDB2Dict()
+
+        appitems = kmsdb[2]
+        for appitem in appitems:
+                kmsitems = appitem['KmsItems']
+                for kmsitem in kmsitems:
+                        # Threshold.
+                        try:
+                                count = int(kmsitem['NCountPolicy'])
+                        except KeyError:
+                                count = 25
+                                
+                        name = re.sub('\(.*\)', '', kmsitem['DisplayName']).replace('2015', '').replace(' ', '')
+                        if name == config['mode']:
+                                skuitems = kmsitem['SkuItems']
+                                # Select 'Enterprise' for Windows or 'Professional Plus' for Office.
+                                # (improvement: choice could be also random: skuitem = random.choice(skuitems))
+                                for skuitem in skuitems:
+                                        if skuitem['DisplayName'].replace(' ','') == name + 'Enterprise' or \
+                                           skuitem['DisplayName'].replace(' ','') == name[:6] + 'ProfessionalPlus' + name[6:]:
+
+                                                config['KMSClientSkuID'] = skuitem['Id']
+                                                config['RequiredClientCount'] = count
+                                                config['KMSProtocolMajorVersion'] = int(float(kmsitem['DefaultKmsProtocol']))
+                                                config['KMSProtocolMinorVersion'] = 0
+                                                config['KMSClientLicenseStatus'] = 2
+                                                config['KMSClientAppID'] = appitem['Id']
+                                                config['KMSClientKMSCountedID'] = kmsitem['Id']
+                                                break
+
 
 def createKmsRequestBase():
         requestDict = kmsBase.kmsRequestStruct()
@@ -198,7 +165,8 @@ def createKmsRequestBase():
         requestDict['previousClientMachineId'] = '\0' * 16 #requestDict['clientMachineId'] # I'm pretty sure this is supposed to be a null UUID.
         requestDict['requiredClientCount'] = config['RequiredClientCount']
         requestDict['requestTime'] = filetimes.dt_to_filetime(datetime.datetime.utcnow())
-        requestDict['machineName'] = (config['machineName'] if (config['machineName'] is not None) else ''.join(random.choice(string.letters + string.digits) for i in range(random.randint(2,63)))).encode('utf-16le')
+        requestDict['machineName'] = (config['machineName'] if (config['machineName'] is not None) else
+                                      ''.join(random.choice(string.letters + string.digits) for i in range(random.randint(2,63)))).encode('utf-16le')
         requestDict['mnPad'] = '\0'.encode('utf-16le') * (63 - len(requestDict['machineName'].decode('utf-16le')))
 
         # Debug Stuff
@@ -242,7 +210,8 @@ def readKmsResponse(data, request, config):
 def readKmsResponseV4(data, request):
         response = kmsRequestV4.ResponseV4(data)
         hashed = kmsRequestV4(data, config).generateHash(bytearray(str(response['response'])))
-        logging.info("Response Hash has expected value: ", hashed == response['hash'])
+        if hashed == response['hash']:
+                logging.info("Response Hash has expected value !")
         return response
 
 def readKmsResponseV5(data):
diff --git a/py2-kms/dcerpc.py b/py2-kms/dcerpc.py
index dc146c5..31a14d1 100644
--- a/py2-kms/dcerpc.py
+++ b/py2-kms/dcerpc.py
@@ -1,14 +1,17 @@
 #!/usr/bin/env python
 
-# Copyright (c) 2003-2012 CORE Security Technologies
+# Copyright (c) 2003-2016 CORE Security Technologies
 #
 # This software is provided under under a slightly modified version
 # of the Apache Software License. See the accompanying LICENSE file
 # for more information.
 #
-# $Id: dcerpc.py 917 2013-11-10 20:47:57Z bethus $
+# Description:
+#   Partial C706.pdf + [MS-RPCE] implementation
 #
-# Partial C706.pdf + [MS-RPCE] implementation
+#   Best way to learn how to use these calls is to grab the protocol standard
+#   so you understand what the call does, and then read the test case located
+#   at https://github.com/CoreSecurity/impacket/tree/master/impacket/testcases/SMB_RPC
 #
 # ToDo: 
 # [ ] Take out all the security provider stuff out of here (e.g. RPC_C_AUTHN_WINNT)
@@ -16,7 +19,11 @@
 #     more SSP (e.g. NETLOGON)
 # 
 
-from structure import Structure,pack,unpack
+"""
+Stripped down version of: https://github.com/SecureAuthCorp/impacket/blob/master/impacket/dcerpc/v5/rpcrt.py
+"""
+
+from structure import Structure
 
 # MS/RPC Constants
 MSRPC_REQUEST   = 0x00
@@ -41,8 +48,8 @@ MSRPC_CO_CANCEL = 0x12
 MSRPC_ORPHANED  = 0x13
 
 # MS/RPC Packet Flags
-MSRPC_FIRSTFRAG     = 0x01
-MSRPC_LASTFRAG      = 0x02
+PFC_FIRST_FRAG     = 0x01
+PFC_LAST_FRAG      = 0x02
 
 # For PDU types bind, bind_ack, alter_context, and
 # alter_context_resp, this flag MUST be interpreted as PFC_SUPPORT_HEADER_SIGN
@@ -52,12 +59,11 @@ MSRPC_SUPPORT_SIGN  = 0x04
 #remaining PDU types, this flag MUST be interpreted as PFC_PENDING_CANCEL.
 MSRPC_PENDING_CANCEL= 0x04
 
-MSRPC_NOTAFRAG      = 0x04
-MSRPC_RECRESPOND    = 0x08
-MSRPC_NOMULTIPLEX   = 0x10
-MSRPC_NOTFORIDEMP   = 0x20
-MSRPC_NOTFORBCAST   = 0x40
-MSRPC_NOUUID        = 0x80
+PFC_RESERVED_1      = 0x08
+PFC_CONC_MPX        = 0x10
+PFC_DID_NOT_EXECUTE = 0x20
+PFC_MAYBE           = 0x40
+PFC_OBJECT_UUID     = 0x80
 
 # Auth Types - Security Providers
 RPC_C_AUTHN_NONE          = 0x00
@@ -155,12 +161,379 @@ rpc_status_codes = {
     0x1C000022L : 'nca_s_fault_tx_open_failed',
     0x1C000023L : 'nca_s_fault_codeset_conv_error',
     0x1C000024L : 'nca_s_fault_object_not_found ',
-    0x1C000025L : 'nca_s_fault_no_client_stub'
+    0x1C000025L : 'nca_s_fault_no_client_stub',
+    0x16c9a000L : "rpc_s_mod",
+    0x16c9a001L : "rpc_s_op_rng_error",
+    0x16c9a002L : "rpc_s_cant_create_socket",
+    0x16c9a003L : "rpc_s_cant_bind_socket",
+    0x16c9a004L : "rpc_s_not_in_call",
+    0x16c9a005L : "rpc_s_no_port",
+    0x16c9a006L : "rpc_s_wrong_boot_time",
+    0x16c9a007L : "rpc_s_too_many_sockets",
+    0x16c9a008L : "rpc_s_illegal_register",
+    0x16c9a009L : "rpc_s_cant_recv",
+    0x16c9a00aL : "rpc_s_bad_pkt",
+    0x16c9a00bL : "rpc_s_unbound_handle",
+    0x16c9a00cL : "rpc_s_addr_in_use",
+    0x16c9a00dL : "rpc_s_in_args_too_big",
+    0x16c9a00eL : "rpc_s_string_too_long",
+    0x16c9a00fL : "rpc_s_too_many_objects",
+    0x16c9a010L : "rpc_s_binding_has_no_auth",
+    0x16c9a011L : "rpc_s_unknown_authn_service",
+    0x16c9a012L : "rpc_s_no_memory",
+    0x16c9a013L : "rpc_s_cant_nmalloc",
+    0x16c9a014L : "rpc_s_call_faulted",
+    0x16c9a015L : "rpc_s_call_failed",
+    0x16c9a016L : "rpc_s_comm_failure",
+    0x16c9a017L : "rpc_s_rpcd_comm_failure",
+    0x16c9a018L : "rpc_s_illegal_family_rebind",
+    0x16c9a019L : "rpc_s_invalid_handle",
+    0x16c9a01aL : "rpc_s_coding_error",
+    0x16c9a01bL : "rpc_s_object_not_found",
+    0x16c9a01cL : "rpc_s_cthread_not_found",
+    0x16c9a01dL : "rpc_s_invalid_binding",
+    0x16c9a01eL : "rpc_s_already_registered",
+    0x16c9a01fL : "rpc_s_endpoint_not_found",
+    0x16c9a020L : "rpc_s_invalid_rpc_protseq",
+    0x16c9a021L : "rpc_s_desc_not_registered",
+    0x16c9a022L : "rpc_s_already_listening",
+    0x16c9a023L : "rpc_s_no_protseqs",
+    0x16c9a024L : "rpc_s_no_protseqs_registered",
+    0x16c9a025L : "rpc_s_no_bindings",
+    0x16c9a026L : "rpc_s_max_descs_exceeded",
+    0x16c9a027L : "rpc_s_no_interfaces",
+    0x16c9a028L : "rpc_s_invalid_timeout",
+    0x16c9a029L : "rpc_s_cant_inq_socket",
+    0x16c9a02aL : "rpc_s_invalid_naf_id",
+    0x16c9a02bL : "rpc_s_inval_net_addr",
+    0x16c9a02cL : "rpc_s_unknown_if",
+    0x16c9a02dL : "rpc_s_unsupported_type",
+    0x16c9a02eL : "rpc_s_invalid_call_opt",
+    0x16c9a02fL : "rpc_s_no_fault",
+    0x16c9a030L : "rpc_s_cancel_timeout",
+    0x16c9a031L : "rpc_s_call_cancelled",
+    0x16c9a032L : "rpc_s_invalid_call_handle",
+    0x16c9a033L : "rpc_s_cannot_alloc_assoc",
+    0x16c9a034L : "rpc_s_cannot_connect",
+    0x16c9a035L : "rpc_s_connection_aborted",
+    0x16c9a036L : "rpc_s_connection_closed",
+    0x16c9a037L : "rpc_s_cannot_accept",
+    0x16c9a038L : "rpc_s_assoc_grp_not_found",
+    0x16c9a039L : "rpc_s_stub_interface_error",
+    0x16c9a03aL : "rpc_s_invalid_object",
+    0x16c9a03bL : "rpc_s_invalid_type",
+    0x16c9a03cL : "rpc_s_invalid_if_opnum",
+    0x16c9a03dL : "rpc_s_different_server_instance",
+    0x16c9a03eL : "rpc_s_protocol_error",
+    0x16c9a03fL : "rpc_s_cant_recvmsg",
+    0x16c9a040L : "rpc_s_invalid_string_binding",
+    0x16c9a041L : "rpc_s_connect_timed_out",
+    0x16c9a042L : "rpc_s_connect_rejected",
+    0x16c9a043L : "rpc_s_network_unreachable",
+    0x16c9a044L : "rpc_s_connect_no_resources",
+    0x16c9a045L : "rpc_s_rem_network_shutdown",
+    0x16c9a046L : "rpc_s_too_many_rem_connects",
+    0x16c9a047L : "rpc_s_no_rem_endpoint",
+    0x16c9a048L : "rpc_s_rem_host_down",
+    0x16c9a049L : "rpc_s_host_unreachable",
+    0x16c9a04aL : "rpc_s_access_control_info_inv",
+    0x16c9a04bL : "rpc_s_loc_connect_aborted",
+    0x16c9a04cL : "rpc_s_connect_closed_by_rem",
+    0x16c9a04dL : "rpc_s_rem_host_crashed",
+    0x16c9a04eL : "rpc_s_invalid_endpoint_format",
+    0x16c9a04fL : "rpc_s_unknown_status_code",
+    0x16c9a050L : "rpc_s_unknown_mgr_type",
+    0x16c9a051L : "rpc_s_assoc_creation_failed",
+    0x16c9a052L : "rpc_s_assoc_grp_max_exceeded",
+    0x16c9a053L : "rpc_s_assoc_grp_alloc_failed",
+    0x16c9a054L : "rpc_s_sm_invalid_state",
+    0x16c9a055L : "rpc_s_assoc_req_rejected",
+    0x16c9a056L : "rpc_s_assoc_shutdown",
+    0x16c9a057L : "rpc_s_tsyntaxes_unsupported",
+    0x16c9a058L : "rpc_s_context_id_not_found",
+    0x16c9a059L : "rpc_s_cant_listen_socket",
+    0x16c9a05aL : "rpc_s_no_addrs",
+    0x16c9a05bL : "rpc_s_cant_getpeername",
+    0x16c9a05cL : "rpc_s_cant_get_if_id",
+    0x16c9a05dL : "rpc_s_protseq_not_supported",
+    0x16c9a05eL : "rpc_s_call_orphaned",
+    0x16c9a05fL : "rpc_s_who_are_you_failed",
+    0x16c9a060L : "rpc_s_unknown_reject",
+    0x16c9a061L : "rpc_s_type_already_registered",
+    0x16c9a062L : "rpc_s_stop_listening_disabled",
+    0x16c9a063L : "rpc_s_invalid_arg",
+    0x16c9a064L : "rpc_s_not_supported",
+    0x16c9a065L : "rpc_s_wrong_kind_of_binding",
+    0x16c9a066L : "rpc_s_authn_authz_mismatch",
+    0x16c9a067L : "rpc_s_call_queued",
+    0x16c9a068L : "rpc_s_cannot_set_nodelay",
+    0x16c9a069L : "rpc_s_not_rpc_tower",
+    0x16c9a06aL : "rpc_s_invalid_rpc_protid",
+    0x16c9a06bL : "rpc_s_invalid_rpc_floor",
+    0x16c9a06cL : "rpc_s_call_timeout",
+    0x16c9a06dL : "rpc_s_mgmt_op_disallowed",
+    0x16c9a06eL : "rpc_s_manager_not_entered",
+    0x16c9a06fL : "rpc_s_calls_too_large_for_wk_ep",
+    0x16c9a070L : "rpc_s_server_too_busy",
+    0x16c9a071L : "rpc_s_prot_version_mismatch",
+    0x16c9a072L : "rpc_s_rpc_prot_version_mismatch",
+    0x16c9a073L : "rpc_s_ss_no_import_cursor",
+    0x16c9a074L : "rpc_s_fault_addr_error",
+    0x16c9a075L : "rpc_s_fault_context_mismatch",
+    0x16c9a076L : "rpc_s_fault_fp_div_by_zero",
+    0x16c9a077L : "rpc_s_fault_fp_error",
+    0x16c9a078L : "rpc_s_fault_fp_overflow",
+    0x16c9a079L : "rpc_s_fault_fp_underflow",
+    0x16c9a07aL : "rpc_s_fault_ill_inst",
+    0x16c9a07bL : "rpc_s_fault_int_div_by_zero",
+    0x16c9a07cL : "rpc_s_fault_int_overflow",
+    0x16c9a07dL : "rpc_s_fault_invalid_bound",
+    0x16c9a07eL : "rpc_s_fault_invalid_tag",
+    0x16c9a07fL : "rpc_s_fault_pipe_closed",
+    0x16c9a080L : "rpc_s_fault_pipe_comm_error",
+    0x16c9a081L : "rpc_s_fault_pipe_discipline",
+    0x16c9a082L : "rpc_s_fault_pipe_empty",
+    0x16c9a083L : "rpc_s_fault_pipe_memory",
+    0x16c9a084L : "rpc_s_fault_pipe_order",
+    0x16c9a085L : "rpc_s_fault_remote_comm_failure",
+    0x16c9a086L : "rpc_s_fault_remote_no_memory",
+    0x16c9a087L : "rpc_s_fault_unspec",
+    0x16c9a088L : "uuid_s_bad_version",
+    0x16c9a089L : "uuid_s_socket_failure",
+    0x16c9a08aL : "uuid_s_getconf_failure",
+    0x16c9a08bL : "uuid_s_no_address",
+    0x16c9a08cL : "uuid_s_overrun",
+    0x16c9a08dL : "uuid_s_internal_error",
+    0x16c9a08eL : "uuid_s_coding_error",
+    0x16c9a08fL : "uuid_s_invalid_string_uuid",
+    0x16c9a090L : "uuid_s_no_memory",
+    0x16c9a091L : "rpc_s_no_more_entries",
+    0x16c9a092L : "rpc_s_unknown_ns_error",
+    0x16c9a093L : "rpc_s_name_service_unavailable",
+    0x16c9a094L : "rpc_s_incomplete_name",
+    0x16c9a095L : "rpc_s_group_not_found",
+    0x16c9a096L : "rpc_s_invalid_name_syntax",
+    0x16c9a097L : "rpc_s_no_more_members",
+    0x16c9a098L : "rpc_s_no_more_interfaces",
+    0x16c9a099L : "rpc_s_invalid_name_service",
+    0x16c9a09aL : "rpc_s_no_name_mapping",
+    0x16c9a09bL : "rpc_s_profile_not_found",
+    0x16c9a09cL : "rpc_s_not_found",
+    0x16c9a09dL : "rpc_s_no_updates",
+    0x16c9a09eL : "rpc_s_update_failed",
+    0x16c9a09fL : "rpc_s_no_match_exported",
+    0x16c9a0a0L : "rpc_s_entry_not_found",
+    0x16c9a0a1L : "rpc_s_invalid_inquiry_context",
+    0x16c9a0a2L : "rpc_s_interface_not_found",
+    0x16c9a0a3L : "rpc_s_group_member_not_found",
+    0x16c9a0a4L : "rpc_s_entry_already_exists",
+    0x16c9a0a5L : "rpc_s_nsinit_failure",
+    0x16c9a0a6L : "rpc_s_unsupported_name_syntax",
+    0x16c9a0a7L : "rpc_s_no_more_elements",
+    0x16c9a0a8L : "rpc_s_no_ns_permission",
+    0x16c9a0a9L : "rpc_s_invalid_inquiry_type",
+    0x16c9a0aaL : "rpc_s_profile_element_not_found",
+    0x16c9a0abL : "rpc_s_profile_element_replaced",
+    0x16c9a0acL : "rpc_s_import_already_done",
+    0x16c9a0adL : "rpc_s_database_busy",
+    0x16c9a0aeL : "rpc_s_invalid_import_context",
+    0x16c9a0afL : "rpc_s_uuid_set_not_found",
+    0x16c9a0b0L : "rpc_s_uuid_member_not_found",
+    0x16c9a0b1L : "rpc_s_no_interfaces_exported",
+    0x16c9a0b2L : "rpc_s_tower_set_not_found",
+    0x16c9a0b3L : "rpc_s_tower_member_not_found",
+    0x16c9a0b4L : "rpc_s_obj_uuid_not_found",
+    0x16c9a0b5L : "rpc_s_no_more_bindings",
+    0x16c9a0b6L : "rpc_s_invalid_priority",
+    0x16c9a0b7L : "rpc_s_not_rpc_entry",
+    0x16c9a0b8L : "rpc_s_invalid_lookup_context",
+    0x16c9a0b9L : "rpc_s_binding_vector_full",
+    0x16c9a0baL : "rpc_s_cycle_detected",
+    0x16c9a0bbL : "rpc_s_nothing_to_export",
+    0x16c9a0bcL : "rpc_s_nothing_to_unexport",
+    0x16c9a0bdL : "rpc_s_invalid_vers_option",
+    0x16c9a0beL : "rpc_s_no_rpc_data",
+    0x16c9a0bfL : "rpc_s_mbr_picked",
+    0x16c9a0c0L : "rpc_s_not_all_objs_unexported",
+    0x16c9a0c1L : "rpc_s_no_entry_name",
+    0x16c9a0c2L : "rpc_s_priority_group_done",
+    0x16c9a0c3L : "rpc_s_partial_results",
+    0x16c9a0c4L : "rpc_s_no_env_setup",
+    0x16c9a0c5L : "twr_s_unknown_sa",
+    0x16c9a0c6L : "twr_s_unknown_tower",
+    0x16c9a0c7L : "twr_s_not_implemented",
+    0x16c9a0c8L : "rpc_s_max_calls_too_small",
+    0x16c9a0c9L : "rpc_s_cthread_create_failed",
+    0x16c9a0caL : "rpc_s_cthread_pool_exists",
+    0x16c9a0cbL : "rpc_s_cthread_no_such_pool",
+    0x16c9a0ccL : "rpc_s_cthread_invoke_disabled",
+    0x16c9a0cdL : "ept_s_cant_perform_op",
+    0x16c9a0ceL : "ept_s_no_memory",
+    0x16c9a0cfL : "ept_s_database_invalid",
+    0x16c9a0d0L : "ept_s_cant_create",
+    0x16c9a0d1L : "ept_s_cant_access",
+    0x16c9a0d2L : "ept_s_database_already_open",
+    0x16c9a0d3L : "ept_s_invalid_entry",
+    0x16c9a0d4L : "ept_s_update_failed",
+    0x16c9a0d5L : "ept_s_invalid_context",
+    0x16c9a0d6L : "ept_s_not_registered",
+    0x16c9a0d7L : "ept_s_server_unavailable",
+    0x16c9a0d8L : "rpc_s_underspecified_name",
+    0x16c9a0d9L : "rpc_s_invalid_ns_handle",
+    0x16c9a0daL : "rpc_s_unknown_error",
+    0x16c9a0dbL : "rpc_s_ss_char_trans_open_fail",
+    0x16c9a0dcL : "rpc_s_ss_char_trans_short_file",
+    0x16c9a0ddL : "rpc_s_ss_context_damaged",
+    0x16c9a0deL : "rpc_s_ss_in_null_context",
+    0x16c9a0dfL : "rpc_s_socket_failure",
+    0x16c9a0e0L : "rpc_s_unsupported_protect_level",
+    0x16c9a0e1L : "rpc_s_invalid_checksum",
+    0x16c9a0e2L : "rpc_s_invalid_credentials",
+    0x16c9a0e3L : "rpc_s_credentials_too_large",
+    0x16c9a0e4L : "rpc_s_call_id_not_found",
+    0x16c9a0e5L : "rpc_s_key_id_not_found",
+    0x16c9a0e6L : "rpc_s_auth_bad_integrity",
+    0x16c9a0e7L : "rpc_s_auth_tkt_expired",
+    0x16c9a0e8L : "rpc_s_auth_tkt_nyv",
+    0x16c9a0e9L : "rpc_s_auth_repeat",
+    0x16c9a0eaL : "rpc_s_auth_not_us",
+    0x16c9a0ebL : "rpc_s_auth_badmatch",
+    0x16c9a0ecL : "rpc_s_auth_skew",
+    0x16c9a0edL : "rpc_s_auth_badaddr",
+    0x16c9a0eeL : "rpc_s_auth_badversion",
+    0x16c9a0efL : "rpc_s_auth_msg_type",
+    0x16c9a0f0L : "rpc_s_auth_modified",
+    0x16c9a0f1L : "rpc_s_auth_badorder",
+    0x16c9a0f2L : "rpc_s_auth_badkeyver",
+    0x16c9a0f3L : "rpc_s_auth_nokey",
+    0x16c9a0f4L : "rpc_s_auth_mut_fail",
+    0x16c9a0f5L : "rpc_s_auth_baddirection",
+    0x16c9a0f6L : "rpc_s_auth_method",
+    0x16c9a0f7L : "rpc_s_auth_badseq",
+    0x16c9a0f8L : "rpc_s_auth_inapp_cksum",
+    0x16c9a0f9L : "rpc_s_auth_field_toolong",
+    0x16c9a0faL : "rpc_s_invalid_crc",
+    0x16c9a0fbL : "rpc_s_binding_incomplete",
+    0x16c9a0fcL : "rpc_s_key_func_not_allowed",
+    0x16c9a0fdL : "rpc_s_unknown_stub_rtl_if_vers",
+    0x16c9a0feL : "rpc_s_unknown_ifspec_vers",
+    0x16c9a0ffL : "rpc_s_proto_unsupp_by_auth",
+    0x16c9a100L : "rpc_s_authn_challenge_malformed",
+    0x16c9a101L : "rpc_s_protect_level_mismatch",
+    0x16c9a102L : "rpc_s_no_mepv",
+    0x16c9a103L : "rpc_s_stub_protocol_error",
+    0x16c9a104L : "rpc_s_class_version_mismatch",
+    0x16c9a105L : "rpc_s_helper_not_running",
+    0x16c9a106L : "rpc_s_helper_short_read",
+    0x16c9a107L : "rpc_s_helper_catatonic",
+    0x16c9a108L : "rpc_s_helper_aborted",
+    0x16c9a109L : "rpc_s_not_in_kernel",
+    0x16c9a10aL : "rpc_s_helper_wrong_user",
+    0x16c9a10bL : "rpc_s_helper_overflow",
+    0x16c9a10cL : "rpc_s_dg_need_way_auth",
+    0x16c9a10dL : "rpc_s_unsupported_auth_subtype",
+    0x16c9a10eL : "rpc_s_wrong_pickle_type",
+    0x16c9a10fL : "rpc_s_not_listening",
+    0x16c9a110L : "rpc_s_ss_bad_buffer",
+    0x16c9a111L : "rpc_s_ss_bad_es_action",
+    0x16c9a112L : "rpc_s_ss_wrong_es_version",
+    0x16c9a113L : "rpc_s_fault_user_defined",
+    0x16c9a114L : "rpc_s_ss_incompatible_codesets",
+    0x16c9a115L : "rpc_s_tx_not_in_transaction",
+    0x16c9a116L : "rpc_s_tx_open_failed",
+    0x16c9a117L : "rpc_s_partial_credentials",
+    0x16c9a118L : "rpc_s_ss_invalid_codeset_tag",
+    0x16c9a119L : "rpc_s_mgmt_bad_type",
+    0x16c9a11aL : "rpc_s_ss_invalid_char_input",
+    0x16c9a11bL : "rpc_s_ss_short_conv_buffer",
+    0x16c9a11cL : "rpc_s_ss_iconv_error",
+    0x16c9a11dL : "rpc_s_ss_no_compat_codeset",
+    0x16c9a11eL : "rpc_s_ss_no_compat_charsets",
+    0x16c9a11fL : "dce_cs_c_ok",
+    0x16c9a120L : "dce_cs_c_unknown",
+    0x16c9a121L : "dce_cs_c_notfound",
+    0x16c9a122L : "dce_cs_c_cannot_open_file",
+    0x16c9a123L : "dce_cs_c_cannot_read_file",
+    0x16c9a124L : "dce_cs_c_cannot_allocate_memory",
+    0x16c9a125L : "rpc_s_ss_cleanup_failed",
+    0x16c9a126L : "rpc_svc_desc_general",
+    0x16c9a127L : "rpc_svc_desc_mutex",
+    0x16c9a128L : "rpc_svc_desc_xmit",
+    0x16c9a129L : "rpc_svc_desc_recv",
+    0x16c9a12aL : "rpc_svc_desc_dg_state",
+    0x16c9a12bL : "rpc_svc_desc_cancel",
+    0x16c9a12cL : "rpc_svc_desc_orphan",
+    0x16c9a12dL : "rpc_svc_desc_cn_state",
+    0x16c9a12eL : "rpc_svc_desc_cn_pkt",
+    0x16c9a12fL : "rpc_svc_desc_pkt_quotas",
+    0x16c9a130L : "rpc_svc_desc_auth",
+    0x16c9a131L : "rpc_svc_desc_source",
+    0x16c9a132L : "rpc_svc_desc_stats",
+    0x16c9a133L : "rpc_svc_desc_mem",
+    0x16c9a134L : "rpc_svc_desc_mem_type",
+    0x16c9a135L : "rpc_svc_desc_dg_pktlog",
+    0x16c9a136L : "rpc_svc_desc_thread_id",
+    0x16c9a137L : "rpc_svc_desc_timestamp",
+    0x16c9a138L : "rpc_svc_desc_cn_errors",
+    0x16c9a139L : "rpc_svc_desc_conv_thread",
+    0x16c9a13aL : "rpc_svc_desc_pid",
+    0x16c9a13bL : "rpc_svc_desc_atfork",
+    0x16c9a13cL : "rpc_svc_desc_cma_thread",
+    0x16c9a13dL : "rpc_svc_desc_inherit",
+    0x16c9a13eL : "rpc_svc_desc_dg_sockets",
+    0x16c9a13fL : "rpc_svc_desc_timer",
+    0x16c9a140L : "rpc_svc_desc_threads",
+    0x16c9a141L : "rpc_svc_desc_server_call",
+    0x16c9a142L : "rpc_svc_desc_nsi",
+    0x16c9a143L : "rpc_svc_desc_dg_pkt",
+    0x16c9a144L : "rpc_m_cn_ill_state_trans_sa",
+    0x16c9a145L : "rpc_m_cn_ill_state_trans_ca",
+    0x16c9a146L : "rpc_m_cn_ill_state_trans_sg",
+    0x16c9a147L : "rpc_m_cn_ill_state_trans_cg",
+    0x16c9a148L : "rpc_m_cn_ill_state_trans_sr",
+    0x16c9a149L : "rpc_m_cn_ill_state_trans_cr",
+    0x16c9a14aL : "rpc_m_bad_pkt_type",
+    0x16c9a14bL : "rpc_m_prot_mismatch",
+    0x16c9a14cL : "rpc_m_frag_toobig",
+    0x16c9a14dL : "rpc_m_unsupp_stub_rtl_if",
+    0x16c9a14eL : "rpc_m_unhandled_callstate",
+    0x16c9a14fL : "rpc_m_call_failed",
+    0x16c9a150L : "rpc_m_call_failed_no_status",
+    0x16c9a151L : "rpc_m_call_failed_errno",
+    0x16c9a152L : "rpc_m_call_failed_s",
+    0x16c9a153L : "rpc_m_call_failed_c",
+    0x16c9a154L : "rpc_m_errmsg_toobig",
+    0x16c9a155L : "rpc_m_invalid_srchattr",
+    0x16c9a156L : "rpc_m_nts_not_found",
+    0x16c9a157L : "rpc_m_invalid_accbytcnt",
+    0x16c9a158L : "rpc_m_pre_v2_ifspec",
+    0x16c9a159L : "rpc_m_unk_ifspec",
+    0x16c9a15aL : "rpc_m_recvbuf_toosmall",
+    0x16c9a15bL : "rpc_m_unalign_authtrl",
+    0x16c9a15cL : "rpc_m_unexpected_exc",
+    0x16c9a15dL : "rpc_m_no_stub_data",
+    0x16c9a15eL : "rpc_m_eventlist_full",
+    0x16c9a15fL : "rpc_m_unk_sock_type",
+    0x16c9a160L : "rpc_m_unimp_call",
+    0x16c9a161L : "rpc_m_invalid_seqnum",
+    0x16c9a162L : "rpc_m_cant_create_uuid",
+    0x16c9a163L : "rpc_m_pre_v2_ss",
+    0x16c9a164L : "rpc_m_dgpkt_pool_corrupt",
+    0x16c9a165L : "rpc_m_dgpkt_bad_free",
+    0x16c9a166L : "rpc_m_lookaside_corrupt",
+    0x16c9a167L : "rpc_m_alloc_fail",
+    0x16c9a168L : "rpc_m_realloc_fail",
+    0x16c9a169L : "rpc_m_cant_open_file",
+    0x16c9a16aL : "rpc_m_cant_read_addr",
+    0x16c9a16bL : "rpc_svc_desc_libidl",
+    0x16c9a16cL : "rpc_m_ctxrundown_nomem",
+    0x16c9a16dL : "rpc_m_ctxrundown_exc",
+    0x16c9a16eL : "rpc_s_fault_codeset_conv_error",
+    0x16c9a16fL : "rpc_s_no_call_active",
+    0x16c9a170L : "rpc_s_cannot_support",
+    0x16c9a171L : "rpc_s_no_context_available",
 }
 
-class Exception(Exception):
-    pass
-
 # Context Item
 class CtxItem(Structure):
     structure = (
@@ -195,15 +568,15 @@ class MSRPCHeader(Structure):
         ('type','B=0'),                                   # 2
         ('flags','B=0'),                                  # 3
         ('representation','<L=0x10'),                     # 4
-        ('frag_len','<H=self._SIZE+len(pduData)+len(pad)+len(sec_trailer)+len(auth_data)'),  # 8
+        ('frag_len','<H=self._SIZE+len(auth_data)+(16 if (self["flags"] & 0x80) > 0 else 0)+len(pduData)+len(pad)+len(sec_trailer)'),  # 8
         ('auth_len','<H=len(auth_data)'),                 # 10
         ('call_id','<L=1'),                               # 12    <-- Common up to here (including this)
     )
 
     structure = ( 
-        ('dataLen','_-pduData','self["frag_len"]-self["auth_len"]-self._SIZE-(8 if self["auth_len"] > 0 else 0)'),  
+        ('dataLen','_-pduData','self["frag_len"]-self["auth_len"]-self._SIZE-(8 if self["auth_len"] > 0 else 0)'),
         ('pduData',':'),                                
-        ('_pad', '_-pad','(4 - ((self._SIZE + len(self["pduData"])) & 3) & 3)'),
+        ('_pad', '_-pad','(4 - ((self._SIZE + (16 if (self["flags"] & 0x80) > 0 else 0) + len(self["pduData"])) & 3) & 3)'),
         ('pad', ':'),
         ('_sec_trailer', '_-sec_trailer', '8 if self["auth_len"] > 0 else 0'),
         ('sec_trailer',':'),
@@ -216,7 +589,7 @@ class MSRPCHeader(Structure):
         if data is None:
             self['ver_major'] = 5
             self['ver_minor'] = 0
-            self['flags'] = MSRPC_FIRSTFRAG | MSRPC_LASTFRAG 
+            self['flags'] = PFC_FIRST_FRAG | PFC_LAST_FRAG
             self['type'] = MSRPC_REQUEST
             self.__frag_len_set = 0
             self['auth_len'] = 0
@@ -226,7 +599,7 @@ class MSRPCHeader(Structure):
             self['pad'] = ''
 
     def get_header_size(self):
-        return self._SIZE
+        return self._SIZE + (16 if (self["flags"] & PFC_OBJECT_UUID) > 0 else 0)
 
     def get_packet(self):
         if self['auth_data'] != '':
@@ -244,6 +617,8 @@ class MSRPCRequestHeader(MSRPCHeader):
         ('alloc_hint','<L=0'),                            # 16
         ('ctx_id','<H=0'),                                # 20
         ('op_num','<H=0'),                                # 22
+        ('_uuid','_-uuid','16 if self["flags"] & 0x80 > 0 else 0' ), # 22
+        ('uuid',':'),                                # 22
     )
 
     def __init__(self, data = None, alignment = 0):
@@ -251,6 +626,7 @@ class MSRPCRequestHeader(MSRPCHeader):
         if data is None:
            self['type'] = MSRPC_REQUEST
            self['ctx_id'] = 0
+           self['uuid'] = ''
 
 class MSRPCRespHeader(MSRPCHeader):
     _SIZE = 24
@@ -299,19 +675,9 @@ class MSRPCBind(Structure):
             self['ctx_items'] += i.getData()
         return Structure.getData(self)
 
-class MSRPCBindAck(Structure):
+class MSRPCBindAck(MSRPCHeader):
     _SIZE = 26 # Up to SecondaryAddr
     _CTX_ITEM_LEN = len(CtxItemResult())
-    commonHdr = ( 
-        ('ver_major','B=5'),                            # 0
-        ('ver_minor','B=0'),                            # 1
-        ('type','B=0'),                                 # 2
-        ('flags','B=0'),                                # 3
-        ('representation','<L=0x10'),                   # 4
-        ('frag_len','<H=0'),                            # 8
-        ('auth_len','<H=0'),                            # 10
-        ('call_id','<L=1'),                             # 12    <-- Common up to here (including this)
-    )
     structure = ( 
         ('max_tfrag','<H=0'),
         ('max_rfrag','<H=0'),
@@ -332,7 +698,7 @@ class MSRPCBindAck(Structure):
     )
     def __init__(self, data = None, alignment = 0):
         self.__ctx_items = []
-        Structure.__init__(self,data,alignment)
+        MSRPCHeader.__init__(self,data,alignment)
         if data is None:
             self['Pad'] = ''
             self['ctx_items'] = ''
diff --git a/py2-kms/filetimes.py b/py2-kms/filetimes.py
index d4ac46e..f780a16 100644
--- a/py2-kms/filetimes.py
+++ b/py2-kms/filetimes.py
@@ -103,4 +103,3 @@ if __name__ == "__main__":
         import doctest
         
         doctest.testmod()
-
diff --git a/py2-kms/formatText.py b/py2-kms/formatText.py
index b33c017..5eb8d76 100644
--- a/py2-kms/formatText.py
+++ b/py2-kms/formatText.py
@@ -1,7 +1,5 @@
 #!/usr/bin/env python
 
-import sys
-
 def justify(astring, indent = 35, break_every = 100):
     str_indent = ('\n' + ' ' * indent)
     splitted = astring.split('\n')
@@ -53,8 +51,6 @@ class ShellStyle(object):
         return self.style(s, '\033[4m')
 
 
-
-
 def shell_message(nshell):
      
     shelldict = {0: ShellStyle().yellow("Client generating RPC Bind Request..."),
@@ -90,7 +86,3 @@ def shell_message(nshell):
             print shelldict[n]
     else:
         print shelldict[nshell]
-
-
-             
-
diff --git a/py2-kms/kmsBase.py b/py2-kms/kmsBase.py
index d99c6d1..0c27e64 100644
--- a/py2-kms/kmsBase.py
+++ b/py2-kms/kmsBase.py
@@ -2,14 +2,13 @@
 
 import binascii
 import logging
-import datetime
 import os
-import struct
 import sys
 import time
 import uuid
 
 from structure import Structure
+from kmsDB2Dict import kmsDB2Dict
 import kmsPidGenerator
 import filetimes
 from formatText import justify, shell_message
@@ -17,10 +16,9 @@ from formatText import justify, shell_message
 # sqlite3 is optional
 try:
 	import sqlite3
-except:
+except ImportError:
 	pass
 
-
 class UUID(Structure):
 	commonHdr = ()
 	structure = (
@@ -31,6 +29,10 @@ class UUID(Structure):
 		return uuid.UUID(bytes_le=str(self))
 
 class kmsBase:
+        def __init__(self, data, config):
+                self.data = data
+		self.config = config
+		
 	class kmsRequestStruct(Structure):
 		commonHdr = ()
 		structure = (
@@ -81,359 +83,6 @@ class kmsBase:
 			('remainder',    '_'),
 		)
 
-	appIds = {
-                uuid.UUID("55C92734-D682-4D71-983E-D6EC3F16059F") : "Windows",
-                uuid.UUID("59A52881-A989-479D-AF46-F275C6370663") : "Office 14 (2010)",
-                uuid.UUID("0FF1CE15-A989-479D-AF46-F275C6370663") : "Office 15 (2013) / Office 16 (2016)"
-        }
-
-	skuIds = {
-                #########################
-                ## Windows Server 2019 ##
-                #########################
-                uuid.UUID("34e1ae55-27f8-4950-8877-7a03be5fb181") : "Windows Server 2019 Datacenter",
-                uuid.UUID("de32eafd-aaee-4662-9444-c1befb41bde2") : "Windows Server 2019 Standard",
-                uuid.UUID("034d3cbb-5d4b-4245-b3f8-f84571314078") : "Windows Server 2019 Essentials",
-                uuid.UUID("a99cc1f0-7719-4306-9645-294102fbff95") : "Windows Server 2019 Azure Core",
-                #########################
-                ## Windows Server 2016 ##
-                #########################
-                uuid.UUID("21c56779-b449-4d20-adfc-eece0e1ad74b") : "Windows Server 2016 Datacenter",
-                uuid.UUID("8c1c5410-9f39-4805-8c9d-63a07706358f") : "Windows Server 2016 Standard",
-                uuid.UUID("2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283") : "Windows Server 2016 Essentials",
-                uuid.UUID("7b4433f4-b1e7-4788-895a-c45378d38253") : "Windows Server 2016 Cloud Storage",
-                uuid.UUID("3dbf341b-5f6c-4fa7-b936-699dce9e263f") : "Windows Server 2016 Azure Core",
-                ################
-                ## Windows 10 ##
-                ################
-                uuid.UUID("2de67392-b7a7-462a-b1ca-108dd189f588") : "Windows 10 Professional",
-                uuid.UUID("a80b5abf-76ad-428b-b05d-a47d2dffeebf") : "Windows 10 Professional N",
-                uuid.UUID("3f1afc82-f8ac-4f6c-8005-1d233e606eee") : "Windows 10 Professional Education",
-                uuid.UUID("5300b18c-2e33-4dc2-8291-47ffcec746dd") : "Windows 10 Professional Education N",
-                uuid.UUID("e0c42288-980c-4788-a014-c080d2e1926e") : "Windows 10 Education",
-                uuid.UUID("3c102355-d027-42c6-ad23-2e7ef8a02585") : "Windows 10 Education N",
-                uuid.UUID("73111121-5638-40f6-bc11-f1d7b0d64300") : "Windows 10 Enterprise",
-                uuid.UUID("e272e3e2-732f-4c65-a8f0-484747d0d947") : "Windows 10 Enterprise N",
-                uuid.UUID("7b51a46c-0c04-4e8f-9af4-8496cca90d5e") : "Windows 10 Enterprise 2015 LTSB",
-                uuid.UUID("87b838b7-41b6-4590-8318-5797951d8529") : "Windows 10 Enterprise 2015 LTSB N",
-                uuid.UUID("2d5a5a60-3040-48bf-beb0-fcd770c20ce0") : "Windows 10 Enterprise 2016 LTSB",
-                uuid.UUID("9f776d83-7156-45b2-8a5c-359b9c9f22a3") : "Windows 10 Enterprise 2016 LTSB N", 
-                uuid.UUID("58e97c99-f377-4ef1-81d5-4ad5522b5fd8") : "Windows 10 Home / Core",
-                uuid.UUID("7b9e1751-a8da-4f75-9560-5fadfe3d8e38") : "Windows 10 Home / Core N",
-                uuid.UUID("cd918a57-a41b-4c82-8dce-1a538e221a83") : "Windows 10 Home / Core Single Language",
-                uuid.UUID("a9107544-f4a0-4053-a96a-1479abdef912") : "Windows 10 Home / Core Country Specific",
-                ############################
-                ## Windows Server 2012 R2 ##
-                ############################
-                uuid.UUID("b3ca044e-a358-4d68-9883-aaa2941aca99") : "Windows Server 2012 R2 Standard",
-                uuid.UUID("00091344-1ea4-4f37-b789-01750ba6988c") : "Windows Server 2012 R2 Datacenter",
-                uuid.UUID("21db6ba4-9a7b-4a14-9e29-64a60c59301d") : "Windows Server 2012 R2 Essentials",
-                uuid.UUID("b743a2be-68d4-4dd3-af32-92425b7bb623") : "Windows Server 2012 R2 Cloud Storage",
-                #################
-                ## Windows 8.1 ##
-                #################
-                uuid.UUID("c06b6981-d7fd-4a35-b7b4-054742b7af67") : "Windows 8.1 Professional",
-                uuid.UUID("7476d79f-8e48-49b4-ab63-4d0b813a16e4") : "Windows 8.1 Professional N",
-                uuid.UUID("096ce63d-4fac-48a9-82a9-61ae9e800e5f") : "Windows 8.1 Professional WMC",
-                uuid.UUID("81671aaf-79d1-4eb1-b004-8cbbe173afea") : "Windows 8.1 Enterprise",
-                uuid.UUID("113e705c-fa49-48a4-beea-7dd879b46b14") : "Windows 8.1 Enterprise N",
-                uuid.UUID("f7e88590-dfc7-4c78-bccb-6f3865b99d1a") : "Windows 8.1 Embedded Industry Automotive",
-                uuid.UUID("cd4e2d9f-5059-4a50-a92d-05d5bb1267c7") : "Windows 8.1 Embedded Industry Enterprise",
-                uuid.UUID("0ab82d54-47f4-4acb-818c-cc5bf0ecb649") : "Windows 8.1 Embedded Industry Professional",
-                uuid.UUID("fe1c3238-432a-43a1-8e25-97e7d1ef10f3") : "Windows 8.1 Core",
-                uuid.UUID("78558a64-dc19-43fe-a0d0-8075b2a370a3") : "Windows 8.1 Core N",
-                uuid.UUID("c72c6a1d-f252-4e7e-bdd1-3fca342acb35") : "Windows 8.1 Core Single Language",
-                uuid.UUID("db78b74f-ef1c-4892-abfe-1e66b8231df6") : "Windows 8.1 Core Country Specific",
-                uuid.UUID("ffee456a-cd87-4390-8e07-16146c672fd0") : "Windows 8.1 Core ARM",
-                uuid.UUID("e9942b32-2e55-4197-b0bd-5ff58cba8860") : "Windows 8.1 Core Connected",
-                uuid.UUID("c6ddecd6-2354-4c19-909b-306a3058484e") : "Windows 8.1 Core Connected N",
-                uuid.UUID("ba998212-460a-44db-bfb5-71bf09d1c68b") : "Windows 8.1 Core Connected Country Specific",
-                uuid.UUID("b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c") : "Windows 8.1 Core Connected Single Language",
-                uuid.UUID("e58d87b5-8126-4580-80fb-861b22f79296") : "Windows 8.1 Professional Student",
-                uuid.UUID("cab491c7-a918-4f60-b502-dab75e334f40") : "Windows 8.1 Professional Student N",
-		#########################
-                ## Windows Server 2012 ##
-                #########################
-                uuid.UUID("c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60") : "Windows Server 2012 / Windows 8 Core",
-                uuid.UUID("197390a0-65f6-4a95-bdc4-55d58a3b0253") : "Windows Server 2012 N / Windows 8 Core N",
-                uuid.UUID("8860fcd4-a77b-4a20-9045-a150ff11d609") : "Windows Server 2012 Single Language / Windows 8 Core Single Language",
-                uuid.UUID("9d5584a2-2d85-419a-982c-a00888bb9ddf") : "Windows Server 2012 Country Specific / Windows 8 Core Country Specific",
-                uuid.UUID("f0f5ec41-0d55-4732-af02-440a44a3cf0f") : "Windows Server 2012 Standard",
-                uuid.UUID("7d5486c7-e120-4771-b7f1-7b56c6d3170c") : "Windows Server 2012 MultiPoint Standard",
-                uuid.UUID("95fd1c83-7df5-494a-be8b-1300e1c9d1cd") : "Windows Server 2012 MultiPoint Premium",
-                uuid.UUID("d3643d60-0c42-412d-a7d6-52e6635327f6") : "Windows Server 2012 Datacenter",
-                #########################
-                ## Windows Server 2010 ##
-                #########################
-                uuid.UUID("f772515c-0e87-48d5-a676-e6962c3e1195") : "Windows MultiPoint Server 2010",
-                ###############
-                ## Windows 8 ##
-                ###############
-                uuid.UUID("a98bcd6d-5343-4603-8afe-5908e4611112") : "Windows 8 Professional",
-                uuid.UUID("ebf245c1-29a8-4daf-9cb1-38dfc608a8c8") : "Windows 8 Professional N",
-                uuid.UUID("a00018a3-f20f-4632-bf7c-8daa5351c914") : "Windows 8 Professional WMC",
-                uuid.UUID("458e1bec-837a-45f6-b9d5-925ed5d299de") : "Windows 8 Enterprise",
-                uuid.UUID("e14997e7-800a-4cf7-ad10-de4b45b578db") : "Windows 8 Enterprise N",
-                uuid.UUID("10018baf-ce21-4060-80bd-47fe74ed4dab") : "Windows 8 Embedded Industry Professional",
-                uuid.UUID("18db1848-12e0-4167-b9d7-da7fcda507db") : "Windows 8 Embedded Industry Enterprise",
-                uuid.UUID("af35d7b7-5035-4b63-8972-f0b747b9f4dc") : "Windows 8 Core ARM",
-                ############################
-                ## Windows Server 2008 R2 ##
-                ############################
-                uuid.UUID("a78b8bd9-8017-4df5-b86a-09f756affa7c") : "Windows Server 2008 R2 Web",
-                uuid.UUID("cda18cf3-c196-46ad-b289-60c072869994") : "Windows Server 2008 R2 HPC Edition (Compute Cluster)",
-                uuid.UUID("68531fb9-5511-4989-97be-d11a0f55633f") : "Windows Server 2008 R2 Standard",
-                uuid.UUID("620e2b3d-09e7-42fd-802a-17a13652fe7a") : "Windows Server 2008 R2 Enterprise",
-                uuid.UUID("7482e61b-c589-4b7f-8ecc-46d455ac3b87") : "Windows Server 2008 R2 Datacenter",
-                uuid.UUID("8a26851c-1c7e-48d3-a687-fbca9b9ac16b") : "Windows Server 2008 R2 for Itanium-based Systems",
-                ###############
-                ## Windows 7 ##
-                ###############
-                uuid.UUID("b92e9980-b9d5-4821-9c94-140f632f6312") : "Windows 7 Professional",
-                uuid.UUID("54a09a0d-d57b-4c10-8b69-a842d6590ad5") : "Windows 7 Professional N",
-                uuid.UUID("5a041529-fef8-4d07-b06f-b59b573b32d2") : "Windows 7 Professional E",
-                uuid.UUID("ae2ee509-1b34-41c0-acb7-6d4650168915") : "Windows 7 Enterprise",
-                uuid.UUID("1cb6d605-11b3-4e14-bb30-da91c8e3983a") : "Windows 7 Enterprise N",
-                uuid.UUID("46bbed08-9c7b-48fc-a614-95250573f4ea") : "Windows 7 Enterprise E",
-                uuid.UUID("db537896-376f-48ae-a492-53d0547773d0") : "Windows 7 Embedded POSReady",
-                uuid.UUID("aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395") : "Windows 7 Embedded ThinPC",
-                uuid.UUID("e1a8296a-db37-44d1-8cce-7bc961d59c54") : "Windows 7 Embedded Standard",
-                #########################
-                ## Windows Server 2008 ##
-                #########################
-                uuid.UUID("ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b") : "Windows Server 2008 Web",
-                uuid.UUID("ad2542d4-9154-4c6d-8a44-30f11ee96989") : "Windows Server 2008 Standard",
-                uuid.UUID("2401e3d0-c50a-4b58-87b2-7e794b7d2607") : "Windows Server 2008 Standard without Hyper-V",
-                uuid.UUID("c1af4d90-d1bc-44ca-85d4-003ba33db3b9") : "Windows Server 2008 Enterprise",
-                uuid.UUID("8198490a-add0-47b2-b3ba-316b12d647b4") : "Windows Server 2008 Enterprise without Hyper-V",
-                uuid.UUID("7afb1156-2c1d-40fc-b260-aab7442b62fe") : "Windows Server 2008 HPC Edition (Compute Cluster)",
-                uuid.UUID("68b6e220-cf09-466b-92d3-45cd964b9509") : "Windows Server 2008 Datacenter",
-                uuid.UUID("fd09ef77-5647-4eff-809c-af2b64659a45") : "Windows Server 2008 Datacenter without Hyper-V",
-                uuid.UUID("01ef176b-3e0d-422a-b4f8-4ea880035e8f") : "Windows Server 2008 for Itanium-based Systems",
-                ###################
-                ## Windows Vista ##
-                ###################
-                uuid.UUID("4f3d1606-3fea-4c01-be3c-8d671c401e3b") : "Windows Vista Business",
-                uuid.UUID("2c682dc2-8b68-4f63-a165-ae291d4cf138") : "Windows Vista Business N",
-                uuid.UUID("cfd8ff08-c0d7-452b-9f60-ef5c70c32094") : "Windows Vista Enterprise",
-                uuid.UUID("d4f54950-26f2-4fb4-ba21-ffab16afcade") : "Windows Vista Enterprise N",
-                #################
-                ## Office 2019 ##
-                #################
-                uuid.UUID("0bc88885-718c-491d-921f-6f214349e79c") : "Office Professional Plus 2019 [Click-to-Run]",
-                uuid.UUID("fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9") : "Office Project Professional 2019 [Click-to-Run]",
-                uuid.UUID("500f6619-ef93-4b75-bcb4-82819998a3ca") : "Office Visio Professional 2019 [Click-to-Run]",
-                uuid.UUID("85dd8b5f-eaa4-4af3-a628-cce9e77c9a03") : "Office Professional Plus 2019",
-                uuid.UUID("6912a74b-a5fb-401a-bfdb-2e3ab46f4b02") : "Office Standard 2019",
-                uuid.UUID("2ca2bf3f-949e-446a-82c7-e25a15ec78c4") : "Office Project Professional 2019",
-                uuid.UUID("1777f0e3-7392-4198-97ea-8ae4de6f6381") : "Office Project Standard 2019",
-                uuid.UUID("5b5cf08f-b81a-431d-b080-3450d8620565") : "Office Visio Professional 2019",
-                uuid.UUID("e06d7df3-aad0-419d-8dfb-0ac37e2bdf39") : "Office Visio Standard 2019",
-                uuid.UUID("9e9bceeb-e736-4f26-88de-763f87dcc485") : "Office Access 2019",
-                uuid.UUID("237854e9-79fc-4497-a0c1-a70969691c6b") : "Office Excel 2019",
-                uuid.UUID("c8f8a301-19f5-4132-96ce-2de9d4adbd33") : "Office Outlook 2019",
-                uuid.UUID("3131fd61-5e4f-4308-8d6d-62be1987c92c") : "Office PowerPoint 2019",
-                uuid.UUID("9d3e4cca-e172-46f1-a2f4-1d2107051444") : "Office Publisher 2019",
-                uuid.UUID("734c6c6e-b0ba-4298-a891-671772b2bd1b") : "Office Skype for Business 2019",
-                uuid.UUID("059834fe-a8ea-4bff-b67b-4d006b5447d3") : "Office Word 2019",
-                #################
-                ## Office 2016 ##
-                #################
-                uuid.UUID("d450596f-894d-49e0-966a-fd39ed4c4c64") : "Office Professional Plus 2016",
-                uuid.UUID("dedfa23d-6ed1-45a6-85dc-63cae0546de6") : "Office Standard 2016",
-                uuid.UUID("4f414197-0fc2-4c01-b68a-86cbb9ac254c") : "Office Project Professional 2016",
-                uuid.UUID("829b8110-0e6f-4349-bca4-42803577788d") : "Office Project Professional 2016 [Click-to-Run]",
-                uuid.UUID("da7ddabc-3fbe-4447-9e01-6ab7440b4cd4") : "Office Project Standard 2016",
-                uuid.UUID("cbbaca45-556a-4416-ad03-bda598eaa7c8") : "Office Project Standard 2016 [Click-to-Run]",
-                uuid.UUID("6bf301c1-b94a-43e9-ba31-d494598c47fb") : "Office Visio Professional 2016",
-                uuid.UUID("b234abe3-0857-4f9c-b05a-4dc314f85557") : "Office Visio Professional 2016 [Click-to-Run]",
-                uuid.UUID("aa2a7821-1827-4c2c-8f1d-4513a34dda97") : "Office Visio Standard 2016",
-                uuid.UUID("361fe620-64f4-41b5-ba77-84f8e079b1f7") : "Office Visio Standard 2016 [Click-to-Run]",
-                uuid.UUID("67c0fc0c-deba-401b-bf8b-9c8ad8395804") : "Office Access 2016",
-                uuid.UUID("c3e65d36-141f-4d2f-a303-a842ee756a29") : "Office Excel 2016",
-                uuid.UUID("9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce") : "Office Mondo 2016",
-                uuid.UUID("e914ea6e-a5fa-4439-a394-a9bb3293ca09") : "Office Mondo Retail 2016",
-                uuid.UUID("d8cace59-33d2-4ac7-9b1b-9b72339c51c8") : "Office OneNote 2016",
-                uuid.UUID("ec9d9265-9d1e-4ed0-838a-cdc20f2551a1") : "Office Outlook 2016",
-                uuid.UUID("d70b1bba-b893-4544-96e2-b7a318091c33") : "Office Powerpoint 2016",
-                uuid.UUID("041a06cb-c5b8-4772-809f-416d03d16654") : "Office Publisher 2016",
-                uuid.UUID("83e04ee1-fa8d-436d-8994-d31a862cab77") : "Office Skype for Business 2016",
-                uuid.UUID("bb11badf-d8aa-470e-9311-20eaf80fe5cc") : "Office Word 2016",
-		#################
-                ## Office 2013 ##
-                #################
-                uuid.UUID("87d2b5bf-d47b-41fb-af62-71c382f5cc85") : "Office Professional Plus 2013 [Preview]",
-                uuid.UUID("b322da9c-a2e2-4058-9e4e-f59a6970bd69") : "Office Professional Plus 2013",
-                uuid.UUID("b13afb38-cd79-4ae5-9f7f-eed058d750ca") : "Office Standard 2013",
-                uuid.UUID("3cfe50a9-0e03-4b29-9754-9f193f07b71f") : "Office Project Professional 2013 [Preview]",
-                uuid.UUID("4a5d124a-e620-44ba-b6ff-658961b33b9a") : "Office Project Professional 2013",
-                uuid.UUID("39e49e57-ae68-4ee3-b098-26480df3da96") : "Office Project Standard 2013 [Preview]",
-                uuid.UUID("427a28d1-d17c-4abf-b717-32c780ba6f07") : "Office Project Standard 2013",
-                uuid.UUID("cfbfd60e-0b5f-427d-917c-a4df42a80e44") : "Office Visio Professional 2013 [Preview]",
-                uuid.UUID("e13ac10e-75d0-4aff-a0cd-764982cf541c") : "Office Visio Professional 2013",
-                uuid.UUID("7012cc81-8887-42e9-b17d-4e5e42760f0d") : "Office Visio Standard 2013 [Preview]",
-                uuid.UUID("ac4efaf0-f81f-4f61-bdf7-ea32b02ab117") : "Office Visio Standard 2013",
-                uuid.UUID("44b538e2-fb34-4732-81e4-644c17d2e746") : "Office Access 2013 [Preview]",
-                uuid.UUID("6ee7622c-18d8-4005-9fb7-92db644a279b") : "Office Access 2013",
-                uuid.UUID("9373bfa0-97b3-4587-ab73-30934461d55c") : "Office Excel 2013 [Preview]",
-                uuid.UUID("f7461d52-7c2b-43b2-8744-ea958e0bd09a") : "Office Excel 2013",
-                uuid.UUID("67c0f908-184f-4f64-8250-12db797ab3c3") : "Office OneNote 2013 [Preview]",
-                uuid.UUID("efe1f3e6-aea2-4144-a208-32aa872b6545") : "Office OneNote 2013",
-                uuid.UUID("7bce4e7a-dd80-4682-98fa-f993725803d2") : "Office Outlook 2013 [Preview]",
-                uuid.UUID("771c3afa-50c5-443f-b151-ff2546d863a0") : "Office OutLook 2013",
-                uuid.UUID("1ec10c0a-54f6-453e-b85a-6fa1bbfea9b7") : "Office PowerPoint 2013 [Preview]",
-                uuid.UUID("8c762649-97d1-4953-ad27-b7e2c25b972e") : "Office PowerPoint 2013",
-                uuid.UUID("15aa2117-8f79-49a8-8317-753026d6a054") : "Office Publisher 2013 [Preview]",
-                uuid.UUID("00c79ff1-6850-443d-bf61-71cde0de305f") : "Office Publisher 2013",
-                uuid.UUID("7ccc8256-fbaa-49c6-b2a9-f5afb4257cd2") : "Office InfoPath 2013 [Preview]",
-                uuid.UUID("a30b8040-d68a-423f-b0b5-9ce292ea5a8f") : "Office InfoPath 2013",
-                uuid.UUID("c53dfe17-cc00-4967-b188-a088a965494d") : "Office Lync 2013 [Preview]",
-                uuid.UUID("1b9f11e3-c85c-4e1b-bb29-879ad2c909e3") : "Office Lync 2013",
-                uuid.UUID("de9c7eb6-5a85-420d-9703-fff11bdd4d43") : "Office Word 2013 [Preview]",
-                uuid.UUID("d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3") : "Office Word 2013",
-                uuid.UUID("2816a87d-e1ed-4097-b311-e2341c57b179") : "Office Mondo 2013 [Preview]",
-                uuid.UUID("dc981c6b-fc8e-420f-aa43-f8f33e5c0923") : "Office Mondo 2013",
-                uuid.UUID("aa286eb4-556f-4eeb-967c-c1b771b7673e") : "Office SharePoint Workspace (Groove) 2013 [Preview]",
-                uuid.UUID("fb4875ec-0c6b-450f-b82b-ab57d8D1677f") : "Office SharePoint Workspace (Groove) 2013",
-                ## uuid.UUID("???") : "Office SharePoint Designer (Frontpage) 2013 [Preview]",
-                uuid.UUID("ba3e3833-6a7e-445a-89d0-7802a9a68588") : "Office SharePoint Designer (Frontpage) 2013",
-                uuid.UUID("1dc00701-03af-4680-b2af-007ffc758a1f") : "Office Mondo Retail 2013",
-                #################
-                ## Office 2010 ##
-                #################
-                uuid.UUID("6f327760-8c5c-417c-9b61-836a98287e0c") : "Office Professional Plus 2010",
-                uuid.UUID("9da2a678-fb6b-4e67-ab84-60dd6a9c819a") : "Office Standard 2010",
-                uuid.UUID("df133ff7-bf14-4f95-afe3-7b48e7e331ef") : "Office Project Professional 2010",
-                uuid.UUID("5dc7bf61-5ec9-4996-9ccb-df806a2d0efe") : "Office Project Standard 2010",
-                uuid.UUID("e558389c-83c3-4b29-adfe-5e4d7f46c358") : "Office Visio Professional 2010",
-                uuid.UUID("9ed833ff-4f92-4f36-b370-8683a4f13275") : "Office Visio Standard 2010",
-                uuid.UUID("92236105-bb67-494f-94c7-7f7a607929bd") : "Office Visio Premium 2010",                
-                uuid.UUID("8ce7e872-188c-4b98-9d90-f8f90b7aad02") : "Office Access 2010",
-                uuid.UUID("cee5d470-6e3b-4fcc-8c2b-d17428568a9f") : "Office Excel 2010",
-                uuid.UUID("ab586f5c-5256-4632-962f-fefd8b49e6f4") : "Office OneNote 2010",
-                uuid.UUID("ecb7c192-73ab-4ded-acf4-2399b095d0cc") : "Office OutLook 2010",
-                uuid.UUID("45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a") : "Office PowerPoint 2010",
-                uuid.UUID("b50c4f75-599b-43e8-8dcd-1081a7967241") : "Office Publisher 2010",
-                uuid.UUID("ca6b6639-4ad6-40ae-a575-14dee07f6430") : "Office InfoPath 2010",
-                uuid.UUID("8947d0b8-c33b-43e1-8c56-9b674c052832") : "Office SharePoint Workspace (Groove) 2010",
-                uuid.UUID("2d0882e7-a4e7-423b-8ccc-70d91e0158b1") : "Office Word 2010",
-                uuid.UUID("ea509e87-07a1-4a45-9edc-eba5a39f36af") : "Office Small Business Basics 2010",
-                uuid.UUID("2745e581-565a-4670-ae90-6bf7c57ffe43") : "Office Starter 2010 Retail",
-                ## uuid.UUID("???") : "Office SharePoint Designer (Frontpage) 2010",
-                uuid.UUID("09ed9640-f020-400a-acd8-d7d867dfd9c2") : "Office Mondo 1 2010",
-                uuid.UUID("ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c") : "Office Mondo 2 2010",
-
-                ######################
-                ## Windows Previews ##
-                ######################
-                uuid.UUID("a4383e6b-dada-423d-a43d-f25678429676") : "Windows 8.1 Professional (Blue) [Preview]",
-                uuid.UUID("631ead72-a8ab-4df8-bbdf-372029989bdd") : "Windows 8.1 ARM [Beta Pre-Release]",
-                uuid.UUID("2b9c337f-7a1d-4271-90a3-c6855a2b8a1c") : "Windows 8.1 [Beta Pre-Release]",
-                uuid.UUID("ba947c44-d19d-4786-b6ae-22770bc94c54") : "Windows Server 2016 Datacenter [Preview]",
-                uuid.UUID("ff808201-fec6-4fd4-ae16-abbddade5706") : "Windows 10 Professional [Pre-Release]",
-                uuid.UUID("cf59a07b-1a2a-4be0-bfe0-423b5823e663") : "Windows 8 Professional WMC [RC]",
-                
-                #################################
-                ## A lot of Previews to define ##
-                #################################
-                uuid.UUID("34260150-69ac-49a3-8a0d-4a403ab55763") : "Windows 10 Professional N [Pre-Release]",
-                uuid.UUID("64192251-81b0-4898-ac63-913cc3edf919") : "Windows XX [XX]",
-                uuid.UUID("cc17e18a-fa93-43d6-9179-72950a1e931a") : "Windows 10 Professional WMC [Pre-Release]",
-                
-                uuid.UUID("903663f7-d2ab-49c9-8942-14aa9e0a9c72") : "Windows 10 Home / Core [Pre-Release]",
-                uuid.UUID("4dfd543d-caa6-4f69-a95f-5ddfe2b89567") : "Windows 10 Home / Core N [Pre-Release]",
-                uuid.UUID("6496e59d-89dc-49eb-a353-09ceb9404845") : "Windows 10 Home / Core [Pre-Release]",
-                uuid.UUID("2cc171ef-db48-4adc-af09-7c574b37f139") : "Windows 10 Home / Core Single Language [Pre-Release]",
-                uuid.UUID("5fe40dd6-cf1f-4cf2-8729-92121ac2e997") : "Windows 10 Home / Core Country Specific [Pre-Release]",
-                
-                uuid.UUID("af43f7f0-3b1e-4266-a123-1fdb53f4323b") : "Windows 10 Education [Pre-Release]",
-                uuid.UUID("075aca1f-05d7-42e5-a3ce-e349e7be7078") : "Windows 10 Education N [Pre-Release]",
-                uuid.UUID("e8ced63e-420d-4ab6-8723-aaf165efb5eb") : "Windows XX Education [Pre-Release]",
-                uuid.UUID("3885bca5-11c1-4d4e-9395-df38f7f09a0e") : "Windows XX Education N [Pre-Release]",
-                
-                uuid.UUID("6ae51eeb-c268-4a21-9aae-df74c38b586d") : "Windows 10 Enterprise N [Pre-Release]",
-                uuid.UUID("c23947f3-3f2e-401f-a38c-f38fe0ecb0bd") : "Windows XX Enterprise N [XX]",
-                uuid.UUID("38fbe2ac-465a-4ef7-b9d8-72044f2792b6") : "Windows XX Enterprise [XX]",
-                uuid.UUID("2cf5af84-abab-4ff0-83f8-f040fb2576eb") : "Windows 10 Enterprise XX LTSB [Pre-Release]",
-                uuid.UUID("11a37f09-fb7f-4002-bd84-f3ae71d11e90") : "Windows 10 Enterprise XX LTSB N [Pre-Release]",
-                uuid.UUID("75d003b0-dc66-42c0-b3a1-308a3f35741a") : "Windows 10 Enterprise XX LTSB [Pre-Release]",
-                uuid.UUID("4e4d5504-e7b1-419c-913d-3c80c15294fc") : "Windows 10 Enterprise XX LTSB N [Pre-Release]",
-                uuid.UUID("43f2ab05-7c87-4d56-b27c-44d0f9a3dabd") : "Windows 10 Enterprise [Pre-Release]",
-                
-                uuid.UUID("b554b49f-4d57-4f08-955e-87886f514d49") : "Windows 10 Core ARM [Pre-Release]",
-                uuid.UUID("f18bbe32-16dc-48d4-a27b-5f3966f82513") : "Windows 10 Core Connected N [Pre-Release]",
-                uuid.UUID("964a60f6-1505-4ddb-af03-6a9ce6997d3b") : "Windows 10 Core Connected Single Language [Pre-Release]",
-                uuid.UUID("b5fe5eaa-14cc-4075-84ae-57c0206d1133") : "Windows 10 Core Connected Country Specific [Pre-Release]",
-                uuid.UUID("827a0032-dced-4609-ab6e-16b9d8a40280") : "Windows 10 Core Connected [Pre-Release]",
-                
-                uuid.UUID("b15187db-11c6-4f13-91ca-8121cebf5b88") : "Windows 10 Professional S [Pre-Release]",
-                uuid.UUID("6cdbc9fb-63f5-431b-a5c0-c6f19ae26a9b") : "Windows 10 Professional S N [Pre-Release]",
-                uuid.UUID("aa234c15-ee34-4e5f-adb5-73afafb77143") : "Windows XX Professional S [Pre-Release]",
-                uuid.UUID("9f6a1bc9-5278-4991-88c9-7301c87a75ea") : "Windows XX Professional S N [Pre-Release]",
-                uuid.UUID("49066601-00dc-4d2c-83a8-4343a7b990d1") : "Windows 10 Professional Student [Pre-Release]",
-                uuid.UUID("bd64ebf7-d5ec-44c5-ba00-6813441c8c87") : "Windows 10 Professional Student N [Pre-Release]",
-                uuid.UUID("5b2add49-b8f4-42e0-a77c-adad4efeeeb1") : "Windows 10 PPIPro [Pre-Release]",
-
-                uuid.UUID("3a9a9414-24bf-4836-866d-ba13a298efb0") : "Windows 8 Core ARM [RC]",
-                uuid.UUID("c8cca3ca-bea8-4f6f-87e0-4d050ce8f0a9") : "Windows 8 Embedded Industry Enterprise [TAP-CTP]",
-                uuid.UUID("5ca3e488-dbae-4fae-8282-a98fbcd21126") : "Windows 8 Embedded Industry Enterprise [Beta]",
-
-                uuid.UUID("cde952c7-2f96-4d9d-8f2b-2d349f64fc51") : "Windows 8.1 Enterprise [Pre-Release]",
-                uuid.UUID("c436def1-0dcc-4849-9a59-8b6142eb70f3") : "Windows 8.1 Core Connected [Pre-Release]",
-                uuid.UUID("86f72c8d-8363-4188-b574-1a53cb374711") : "Windows 8.1 Core Connected N [Pre-Release]",
-                uuid.UUID("a8651bfb-7fe0-40df-b156-87337ecd5acc") : "Windows 8.1 Core Connected Country Specific [Pre-Release]",
-                uuid.UUID("5b120df4-ea3f-4e82-b0c0-6568f719730e") : "Windows 8.1 Core Connected Single Language [Pre-Release]",
-                uuid.UUID("fd5ae385-f5cf-4b53-b1fa-1af6fff7c0d8") : "Windows 8.1 Professional Student [Pre-Release]",
-                uuid.UUID("687f6358-6a21-453a-a712-3b3b57123827") : "Windows 8.1 Professional Student N [Pre-Release]",
-                uuid.UUID("c35a9336-fb02-48db-8f4d-245c17f03667") : "Windows 8.1 Embedded Industry [Beta]",
-                uuid.UUID("4daf1e3e-6be9-4848-8f5a-a18a0d2895e1") : "Windows 8.1 Embedded Industry Enterprise [Beta]",
-                uuid.UUID("9cc2564c-292e-4d8a-b9f9-1f5007d9409a") : "Windows 8.1 Embedded Industry Automotive [Beta]",
-                               
-                uuid.UUID("3ddb92aa-332e-46f9-abb7-8bdf62f8d967") : "Windows Longhorn Web Edition [XX]",
-                uuid.UUID("7ea4f647-9e67-453b-a7ba-56f7102afde2") : "Windows Longhorn Standard Server [XX]",
-                uuid.UUID("5a99526c-1c09-4481-80fb-b60e8b3d99f8") : "Windows Longhorn Enterprise Server [XX]",
-                uuid.UUID("8372b47d-5221-41d8-88d0-3f924e50623e") : "Windows Longhorn Computer Cluster [XX]",
-                uuid.UUID("932ef1f5-4327-4548-b147-51b0f5502995") : "Windows Longhorn Datacenter Server [XX]",
-                uuid.UUID("bebf03b1-a184-4c5e-9103-88af08055e68") : "Windows Longhorn Enterprise Server IA64 [XX]",
-                
-                uuid.UUID("bfa6b683-56be-47b8-a22e-461b27b9cf11") : "Windows Server XX MultiPoint Standard [XX]",
-                uuid.UUID("bc20fb5b-4097-484f-84d2-55b18dac95eb") : "Windows Server XX MultiPoint Premium [XX]",
-                uuid.UUID("8a409d61-30fe-4903-bdbc-1fb28603ba3a") : "Windows Server XX Enterprise [XX]",
-                uuid.UUID("9dce1f29-bb10-4be0-8027-35b953dd46d5") : "Windows 7 Server Enterprise [XX]",
-                uuid.UUID("bf9eda2f-74cc-4ba3-8967-cde30f18c230") : "Windows 7 Server Enterprise IA64 [XX]",
-                uuid.UUID("dc06c019-b222-4706-a820-645e77d26a91") : "Windows 7 Server Enterprise without Hyper-V [XX]",
-                uuid.UUID("d3872724-5c08-4b1b-91f2-fc9eafed4990") : "Windows XX Server Standard [XX]",
-                uuid.UUID("92374131-ed4c-4d1b-846a-32f43c3eb90d") : "Windows 7 Server Standard [XX]",
-                uuid.UUID("f963bf4b-9693-46e6-9d9d-09c73eaa2b60") : "Windows 7 Server Standard without Hyper-V [XX]",
-                uuid.UUID("e5676f13-9b66-4a1f-8b0c-43490e236202") : "Windows XX Server Web [XX]",
-                uuid.UUID("4f4cfa6c-76d8-49f5-9c41-0a57f8af1bbc") : "Windows 7 Server Web [XX]",
-                uuid.UUID("0839e017-cfef-4ac6-a97e-ed2ea7962787") : "Windows 7 Server Datacenter without Hyper-V [XX]",
-                uuid.UUID("cc64c548-1867-4777-a1cc-0022691bc2a0") : "Windows 7 Server Datacenter [XX]",                
-                uuid.UUID("2412bea9-b6e0-441e-8dc2-a13720b42de9") : "Windows XX Server HPC Edition [XX]",
-                uuid.UUID("c6e3410d-e48d-41eb-8ca9-848397f46d02") : "Windows Server 2012 N / Windows 8 Core N [RC]",
-                uuid.UUID("b148c3f4-6248-4d2f-8c6d-31cce7ae95c3") : "Windows Server 2012 Single Language / Windows 8 Core Single Language [RC]",
-                uuid.UUID("c7a8a09a-571c-4ea8-babc-0cbe4d48a89d") : "Windows Server 2012 Country Specific / Windows 8 Core Country Specific [RC]",
-                uuid.UUID("8f365ba6-c1b9-4223-98fc-282a0756a3ed") : "Windows Server 2012 R2 Essentials [RTM]",
-                uuid.UUID("b995b62c-eae2-40aa-afb9-111889a84ef4") : "Windows XX Server HI [Beta]",
-                               
-                uuid.UUID("99ff9b26-016a-49d3-982e-fc492f352e57") : "Windows Vista Business [XX]",
-                uuid.UUID("90284483-de09-44a2-a406-98957f8dd09d") : "Windows Vista Business [XX]",
-                uuid.UUID("af46f56f-f06b-49f0-a420-caa8a8d2bf8c") : "Windows Vista Business N [XX]",
-                uuid.UUID("cf67834d-db4a-402c-ab1f-2c134f02b700") : "Windows Vista Enterprise [XX]",
-                uuid.UUID("14478aca-ea15-4958-ac34-359281101c99") : "Windows Vista Enterprise [XX]",
-                uuid.UUID("0707c7fc-143d-46a4-a830-3705e908202c") : "Windows Vista Enterprise N [XX]",
-
-                uuid.UUID("957ec1e8-97cd-42a8-a091-01a30cf779da") : "Windows 7 Business [XX]",
-                uuid.UUID("0ff4e536-a746-4018-b107-e81dd0b6d33a") : "Windows 7 Business N [XX]",
-                uuid.UUID("ea77973e-4930-4fa1-a899-02dfaeada1db") : "Windows 7 Enterprise [XX]",
-                uuid.UUID("e4ecef68-4372-4740-98e8-6c157cd301c2") : "Windows 7 Enterprise N [XX]",
-
-                uuid.UUID("2a4403df-877f-4046-8271-db6fb6ec54c8") : "Enterprise ProdKey3 Win 9984 DLA/Bypass NQR Test",
-                uuid.UUID("38fbe2ac-465a-4ef7-b9d8-72044f2792b6") : "Windows XX Enterprise [XX]",
-
-			
-	}
-
 	licenseStates = {
 		0 : "Unlicensed",
 		1 : "Activated",
@@ -464,29 +113,10 @@ class kmsBase:
 		'SL_E_VL_MACHINE_NOT_BOUND' : 0xC004F056
 	}
 
-	def __init__(self, data, config):
-		self.data = data
-		self.config = config
 
-	def getConfig(self):
-		return self.config
-
-	def getOptions(self):
-		return self.config
-
-	def getData(self):
-		return self.data
-
-	def getResponse(self):
-		return ''
-
-	def getResponsePadding(self, bodyLength):
-		if bodyLength % 8 == 0:
-			paddingLength = 0
-		else:
-			paddingLength = 8 - bodyLength % 8
-		padding = bytearray(paddingLength)
-		return padding
+	def getPadding(self, bodyLength):
+                ## https://forums.mydigitallife.info/threads/71213-Source-C-KMS-Server-from-Microsoft-Toolkit?p=1277542&viewfull=1#post1277542
+                return 4 + (((~bodyLength & 3) + 1) & 3)
 
 	def serverLogic(self, kmsRequest):
 		if self.config['sqlite'] and self.config['dbSupport']:
@@ -497,10 +127,11 @@ class kmsBase:
 				try:
 					con = sqlite3.connect(self.dbName)
 					cur = con.cursor()
-					cur.execute("CREATE TABLE clients(clientMachineId TEXT, machineName TEXT, applicationId TEXT, skuId TEXT, licenseStatus TEXT, lastRequestTime INTEGER, kmsEpid TEXT, requestCount INTEGER)")
+					cur.execute("CREATE TABLE clients(clientMachineId TEXT, machineName TEXT, applicationId TEXT, \
+skuId TEXT, licenseStatus TEXT, lastRequestTime INTEGER, kmsEpid TEXT, requestCount INTEGER)")
 
 				except sqlite3.Error, e:
-                                        logging.error("%s:" % e.args[0])
+                                        logging.error("Error %s:" % e.args[0])
 					sys.exit(1)
 
 				finally:
@@ -513,30 +144,68 @@ class kmsBase:
                 logging.debug("KMS Request: \n%s\n" % justify(kmsRequest.dump(print_to_stdout = False)))
 			
 		clientMachineId = kmsRequest['clientMachineId'].get()
-		global applicationId 
 		applicationId = kmsRequest['applicationId'].get()
 		skuId = kmsRequest['skuId'].get()
 		requestDatetime = filetimes.filetime_to_dt(kmsRequest['requestTime'])
 
-		# Try and localize the request time, if pytz is available
+		# Localize the request time, if module "tzlocal" is available.
 		try:
-			import timezones
-			from pytz import utc
-			local_dt = utc.localize(requestDatetime).astimezone(timezones.localtz())
-		except ImportError:
-			local_dt = requestDatetime
+                        from tzlocal import get_localzone
+                        from pytz.exceptions import UnknownTimeZoneError
+                        try:
+                                tz = get_localzone()
+                                local_dt = tz.localize(requestDatetime)
+                        except UnknownTimeZoneError:
+                                logging.warning('Unknown time zone ! Request time not localized.')
+                                local_dt = requestDatetime
+                except ImportError:
+                        logging.warning('Module "tzlocal" not available ! Request time not localized.')
+                        local_dt = requestDatetime
+
+		# Get SkuId, AppId and client threshold.
+		appName, skuName = applicationId, skuId
+		
+		kmsdb = kmsDB2Dict()
+
+                appitems = kmsdb[2]
+                for appitem in appitems:
+                        kmsitems = appitem['KmsItems']
+                        for kmsitem in kmsitems:
+
+                                # Activation threshold.
+                                try:
+                                        count = int(kmsitem['NCountPolicy'])
+                                except KeyError:
+                                        count = 25
+                                
+                                if self.config["CurrentClientCount"] <= count:
+                                        currentClientCount = count + 1
+                                else:
+                                        currentClientCount = self.config["CurrentClientCount"]
+                                
+                                skuitems = kmsitem['SkuItems']
+                                for skuitem in skuitems:
+                                        try:
+                                                if uuid.UUID(skuitem['Id']) == skuId:
+                                                        skuName = skuitem['DisplayName']
+                                                        break
+                                        except IndexError:
+                                                pass
+                                        
+                        if uuid.UUID(appitem['Id']) == applicationId:
+                                appName = appitem['DisplayName']
+                                
 
 		infoDict = {
 			"machineName" : kmsRequest.getMachineName(),
 			"clientMachineId" : str(clientMachineId),
-			"appId" : self.appIds.get(applicationId, str(applicationId)),
-			"skuId" : self.skuIds.get(skuId, str(skuId)),
+			"appId" : appName,
+			"skuId" : skuName,
 			"licenseStatus" : kmsRequest.getLicenseStatus(),
 			"requestTime" : int(time.time()),
 			"kmsEpid" : None
 		}
 
-		#print infoDict
                 logging.info("Machine Name: %s" % infoDict["machineName"])
                 logging.info("Client Machine ID: %s" % infoDict["clientMachineId"])
                 logging.info("Application ID: %s" % infoDict["appId"])
@@ -554,48 +223,57 @@ class kmsBase:
 					data = cur.fetchone()
 					if not data:
 						#print "Inserting row..."
-						cur.execute("INSERT INTO clients (clientMachineId, machineName, applicationId, skuId, licenseStatus, lastRequestTime, requestCount) VALUES (:clientMachineId, :machineName, :appId, :skuId, :licenseStatus, :requestTime, 1);", infoDict)
+						cur.execute("INSERT INTO clients (clientMachineId, machineName, applicationId, \
+skuId, licenseStatus, lastRequestTime, requestCount) VALUES (:clientMachineId, :machineName, :appId, :skuId, :licenseStatus, :requestTime, 1);", infoDict)
 					else:
 						#print "Data:", data
 						if data[1] != infoDict["machineName"]:
-							cur.execute("UPDATE clients SET machineName=:machineName WHERE clientMachineId=:clientMachineId;", infoDict)
+							cur.execute("UPDATE clients SET machineName=:machineName WHERE \
+clientMachineId=:clientMachineId;", infoDict)
 						if data[2] != infoDict["appId"]:
-							cur.execute("UPDATE clients SET applicationId=:appId WHERE clientMachineId=:clientMachineId;", infoDict)
+							cur.execute("UPDATE clients SET applicationId=:appId WHERE \
+clientMachineId=:clientMachineId;", infoDict)
 						if data[3] != infoDict["skuId"]:
-							cur.execute("UPDATE clients SET skuId=:skuId WHERE clientMachineId=:clientMachineId;", infoDict)
+							cur.execute("UPDATE clients SET skuId=:skuId WHERE \
+clientMachineId=:clientMachineId;", infoDict)
 						if data[4] != infoDict["licenseStatus"]:
-							cur.execute("UPDATE clients SET licenseStatus=:licenseStatus WHERE clientMachineId=:clientMachineId;", infoDict)
+							cur.execute("UPDATE clients SET licenseStatus=:licenseStatus WHERE \
+clientMachineId=:clientMachineId;", infoDict)
 						if data[5] != infoDict["requestTime"]:
-							cur.execute("UPDATE clients SET lastRequestTime=:requestTime WHERE clientMachineId=:clientMachineId;", infoDict)
+							cur.execute("UPDATE clients SET lastRequestTime=:requestTime WHERE \
+clientMachineId=:clientMachineId;", infoDict)
 						# Increment requestCount
-						cur.execute("UPDATE clients SET requestCount=requestCount+1 WHERE clientMachineId=:clientMachineId;", infoDict)
+						cur.execute("UPDATE clients SET requestCount=requestCount+1 WHERE \
+clientMachineId=:clientMachineId;", infoDict)
 
 				except sqlite3.Error, e:
-                                        logging.error("%s:" % e.args[0])
+                                        logging.error("Error %s:" % e.args[0])
 					
 			except sqlite3.Error, e:
-                                logging.error("%s:" % e.args[0])
+                                logging.error("Error %s:" % e.args[0])
 				sys.exit(1)
 			finally:
 				if con:
 					con.commit()
 					con.close()
 
-		return self.createKmsResponse(kmsRequest)
+		return self.createKmsResponse(kmsRequest, currentClientCount)
+	
 
-	def createKmsResponse(self, kmsRequest):
+	def createKmsResponse(self, kmsRequest, currentClientCount):
 		response = self.kmsResponseStruct()
 		response['versionMinor'] = kmsRequest['versionMinor']
 		response['versionMajor'] = kmsRequest['versionMajor']
-		#print " : ", kmsRequest['applicationId'] ----> This line was returning garbage in the pidGenerator
+		
 		if not self.config["epid"]:
-			response["kmsEpid"] = kmsPidGenerator.epidGenerator(applicationId, kmsRequest['versionMajor'], self.config["lcid"]).encode('utf-16le')
+			response["kmsEpid"] = kmsPidGenerator.epidGenerator(kmsRequest['kmsCountedId'].get(), kmsRequest['versionMajor'],
+                                                                            self.config["lcid"]).encode('utf-16le')
 		else:
 			response["kmsEpid"] = self.config["epid"].encode('utf-16le')
 			
 		response['clientMachineId'] = kmsRequest['clientMachineId']
 		response['responseTime'] = kmsRequest['requestTime']
-		response['currentClientCount'] = self.config["CurrentClientCount"]
+		response['currentClientCount'] = currentClientCount		
 		response['vLActivationInterval'] = self.config["VLActivationInterval"]
 		response['vLRenewalInterval'] = self.config["VLRenewalInterval"]
 
@@ -607,18 +285,18 @@ class kmsBase:
 				cur.execute("SELECT * FROM clients WHERE clientMachineId=?;", [str(kmsRequest['clientMachineId'].get())])
 				try:
 					data = cur.fetchone()
-					#print "Data:", data
 					if data[6]:
 						response["kmsEpid"] = data[6].encode('utf-16le')
 					else:
-						cur.execute("UPDATE clients SET kmsEpid=? WHERE clientMachineId=?;", (str(response["kmsEpid"].decode('utf-16le')), str(kmsRequest['clientMachineId'].get())))
+						cur.execute("UPDATE clients SET kmsEpid=? WHERE clientMachineId=?;",
+                                                            (str(response["kmsEpid"].decode('utf-16le')), str(kmsRequest['clientMachineId'].get())))
 
 				except sqlite3.Error, e:
-                                        logging.error("%s:" % e.args[0])
+                                        logging.error("Error %s:" % e.args[0])
 					
 			except sqlite3.Error, e:
-                                logging.error("%s:" % e.args[0])
-				sys.exit(1)
+                                logging.error("Error %s:" % e.args[0])
+                                sys.exit(1)
 			finally:
 				if con:
 					con.commit()
@@ -633,22 +311,19 @@ import kmsRequestV4, kmsRequestV5, kmsRequestV6, kmsRequestUnknown
 
 def generateKmsResponseData(data, config):
 	version = kmsBase.GenericRequestHeader(data)['versionMajor']
-	currentDate = datetime.datetime.now().ctime()
+	currentDate = time.strftime("%a %b %d %H:%M:%S %Y")
 
 	if version == 4:
 		logging.info("Received V%d request on %s." % (version, currentDate))
-		messagehandler = kmsRequestV4.kmsRequestV4(data, config)
-		messagehandler.executeRequestLogic()
+		messagehandler = kmsRequestV4.kmsRequestV4(data, config)	
 	elif version == 5:
 		logging.info("Received V%d request on %s." % (version, currentDate))
 		messagehandler = kmsRequestV5.kmsRequestV5(data, config)
-		messagehandler.executeRequestLogic()
 	elif version == 6:
 		logging.info("Received V%d request on %s." % (version, currentDate))
 		messagehandler = kmsRequestV6.kmsRequestV6(data, config)
-		messagehandler.executeRequestLogic()
 	else:
 		logging.info("Unhandled KMS version V%d." % version)
 		messagehandler = kmsRequestUnknown.kmsRequestUnknown(data, config)
 		
-	return messagehandler.getResponse()
+	return messagehandler.executeRequestLogic()
diff --git a/py2-kms/kmsDB2Dict.py b/py2-kms/kmsDB2Dict.py
new file mode 100644
index 0000000..6f9b0f4
--- /dev/null
+++ b/py2-kms/kmsDB2Dict.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+
+import os
+import xml.etree.ElementTree as ET
+
+def kmsDB2Dict():
+        path = os.path.join(os.path.dirname(__file__), 'KmsDataBase.xml')
+        root = ET.parse(path).getroot()
+
+        kmsdb, child1, child2, child3 = [ [] for _ in range(4) ]
+
+        ## Get winbuilds.
+        for winbuild in root.iter('WinBuild'):
+                child1.append(winbuild.attrib)
+        
+        kmsdb.append(child1)
+        
+        ## Get csvlkitem data.
+        child1 = []
+        for csvlk in root.iter('CsvlkItem'):
+                for activ in csvlk.iter('Activate'):
+                        child2.append(activ.attrib['KmsItem'])
+                        csvlk.attrib.update({'Activate' : child2})
+                child1.append(csvlk.attrib)
+                child2 = []
+                
+        kmsdb.append(child1)
+
+        ## Get appitem data.
+        child1 = []
+        for app in root.iter('AppItem'):
+                for kms in app.iter('KmsItem'):
+                        for sku in kms.iter('SkuItem'):
+                                child3.append(sku.attrib)
+                        kms.attrib.update({'SkuItems' : child3})
+                        child2.append(kms.attrib)
+                        child3 = []
+
+                app.attrib.update({'KmsItems' : child2})       
+                child1.append(app.attrib)
+                child2 = []
+                
+        kmsdb.append(child1)
+
+        return kmsdb
diff --git a/py2-kms/kmsPidGenerator.py b/py2-kms/kmsPidGenerator.py
index bfe9c7a..63f98c0 100644
--- a/py2-kms/kmsPidGenerator.py
+++ b/py2-kms/kmsPidGenerator.py
@@ -4,122 +4,74 @@ import datetime
 import random
 import time
 import uuid
+from ast import literal_eval
 
-APP_ID_WINDOWS = uuid.UUID("55C92734-D682-4D71-983E-D6EC3F16059F")
-APP_ID_OFFICE14 = uuid.UUID("59A52881-A989-479D-AF46-F275C6370663")
-APP_ID_OFFICE15 = uuid.UUID("0FF1CE15-A989-479D-AF46-F275C6370663")
+from kmsDB2Dict import kmsDB2Dict
 
 
-# KMS Host OS Type
-hostOsList = {}
-# Windows Server 2008 R2 SP1
-hostOsList["HOST_SERVER2008R2"] = {
-        "type" : 55041,
-        "osBuild" : 7601
-}
-# Windows Server 2012 RTM
-hostOsList["HOST_SERVER2012"] = {
-        "type" : 5426,
-        "osBuild" : 9200
-}
-# Windows Server 2012 R2 RTM
-hostOsList["HOST_SERVER2012R2"] = {
-        "type" : 6401,
-        "osBuild" : 9600
-}
-# Windows Server 2016 RTM
-hostOsList["HOST_SERVER2016"] = {
-        "type" : 3612,
-        "osBuild" : 14393
-}
-
-
-# Product Specific KeyConfig
-pkeyConfigList = {}
-# Windows Server KMS Host PID, actual PIDRangeMax = 191999999
-pkeyConfigList["windows"] = {
-        "GroupID" : 206,
-        "PIDRangeMin" : 152000000,
-        "PIDRangeMax" : 191999999
-}
-# Windows Server 2012 R2 KMS Host PID, actual PIDRangeMax = 310999999
-pkeyConfigList["windows2012r2"] = {
-        "GroupID" : 206,
-        "PIDRangeMin" : 271000000,
-        "PIDRangeMax" : 310999999
-}
-# Office 2010 KMSHost Class PID, actual PIDRangeMax = 217999999
-pkeyConfigList["office14"] = {
-        "GroupID" : 96,
-        "PIDRangeMin" : 199000000,
-        "PIDRangeMax" : 217999999
-}
-# Office 2013 KMSHost Class PID, actual PIDRangeMax = 255999999
-pkeyConfigList["office15"] = {
-        "GroupID" : 206,
-        "PIDRangeMin" : 234000000,
-        "PIDRangeMax" : 255999999
-}
-
-
-def epidGenerator(appId, version, lcid):
-        # Generate Part 1 & 7: Host Type and KMS Server OS Build
-        hostOsType = random.choice(hostOsList.keys())
-        hostOsDict = hostOsList[hostOsType]
+def epidGenerator(kmsId, version, lcid):
+        kmsdb = kmsDB2Dict()
+        winbuilds, csvlkitems, appitems = kmsdb[0], kmsdb[1], kmsdb[2]
+        hosts, pkeys = [ [] for _ in range(2) ]
 
+        # Product Specific Detection (Get all CSVLK GroupID and PIDRange good for EPID generation), then
         # Generate Part 2: Group ID and Product Key ID Range
-        if appId == APP_ID_OFFICE14:
-                keyConfig = pkeyConfigList["office14"]
-        elif appId == APP_ID_OFFICE15:
-                keyConfig = pkeyConfigList["office15"]
-        else:
-                # Default to Windows
-                if hostOsDict['osBuild'] == 14393:
-                        keyConfig = pkeyConfigList["windows2012r2"]
-                elif hostOsDict['osBuild'] == 9600:
-                        keyConfig = pkeyConfigList["windows2012r2"]
-                else:
-                        keyConfig = pkeyConfigList["windows"]
+        for csvlkitem in csvlkitems:
+                try:
+                        if kmsId in [ uuid.UUID(kmsitem) for kmsitem in csvlkitem['Activate'] ]:
+                                pkeys.append( (csvlkitem['GroupId'], csvlkitem['MinKeyId'], csvlkitem['MaxKeyId'], csvlkitem['InvalidWinBuild']) )
+                except IndexError:
+                        # fallback to Windows Server 2019 parameters.
+                        GroupId, MinKeyId, MaxKeyId, Invalid = 206, 551000000, 570999999, [0,1,2]
+        
+        pkey = random.choice(pkeys)
+        GroupId, MinKeyId, MaxKeyId, Invalid = int(pkey[0]), int(pkey[1]), int(pkey[2]), literal_eval(pkey[3])
+
+        # Get all KMS Server Host Builds good for EPID generation, then
+        # Generate Part 1 & 7: Host Type and KMS Server OS Build
+        # https://www.itprotoday.com/windows-78/volume-activation-server-2008
+        # https://docs.microsoft.com/en-us/windows-server/get-started-19/activation-19
+        # https://docs.microsoft.com/en-us/windows-server/get-started/windows-server-release-info
+        # https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet
+        for winbuild in winbuilds:
+                try:
+                        # Check versus "InvalidWinBuild".
+                        if int(winbuild['WinBuildIndex']) not in Invalid:
+                                # Re-check versus "version" protocol.
+                                if ((version == 4 and int(winbuild['BuildNumber']) >= 7601) or
+                                    (version == 5 and int(winbuild['BuildNumber']) >= 9200) or
+                                    (version == 6 and int(winbuild['BuildNumber']) >= 9600)):
+                                        hosts.append(winbuild)
+                except KeyError:
+                        # fallback to Windows Server 2019 parameters.
+                        BuildNumber, PlatformId, MinDate = '17763', '3612', '02/10/2018'
+                        
+        host = random.choice(hosts)
+        BuildNumber, PlatformId, MinDate = host['BuildNumber'], host['PlatformId'], host['MinDate']
 
         # Generate Part 3 and Part 4: Product Key ID
-        productKeyID = random.randint(keyConfig["PIDRangeMin"], keyConfig["PIDRangeMax"])
+        productKeyID = random.randint(MinKeyId, MaxKeyId)
 
-        # Generate Part 5: License Channel (00=Retail, 01=Retail, 02=OEM,
-        # 03=Volume(GVLK,MAK)) - always 03
+        # Generate Part 5: License Channel (00=Retail, 01=Retail, 02=OEM, 03=Volume(GVLK,MAK)) - always 03
         licenseChannel = 3
 
-        # Generate Part 6: Language - use system default language
-        # 1033 is en-us
-        languageCode = lcid # C# CultureInfo.InstalledUICulture.LCID
+        # Generate Part 6: Language - use system default language, 1033 is en-us
+        languageCode = lcid  # (C# CultureInfo.InstalledUICulture.LCID)
 
         # Generate Part 8: KMS Host Activation Date
-        # Get Minimum Possible Date: Newer Products first
-        if hostOsType == "HOST_SERVER2016":
-                # Microsoft Windows Server 2016 RTM
-                minTime = datetime.date(2016, 7, 27)
-        elif hostOsType == "HOST_SERVER2012R2" or version == 6:
-                # Microsoft Windows Server 2012 R2 RTM (October 17, 2013)
-                minTime = datetime.date(2013, 10, 17)
-        elif appId == APP_ID_OFFICE15:
-                # Microsoft Office 2013 RTM (October 24, 2012)
-                minTime = datetime.date(2012, 10, 24)
-        elif hostOsType == "HOST_SERVER2012" or version == 5:
-                # Microsoft Windows Server 2012 RTM (September 4, 2012)
-                minTime = datetime.date(2012, 9, 4)
-        else:
-                # Windows Server 2008 R2 SP1 (February 16, 2011)
-                minTime = datetime.date(2011, 2, 16)
+        d = datetime.datetime.strptime(MinDate, "%d/%m/%Y")
+        minTime = datetime.date(d.year, d.month, d.day)       
 
         # Generate Year and Day Number
         randomDate = datetime.date.fromtimestamp(random.randint(time.mktime(minTime.timetuple()), time.mktime(datetime.datetime.now().timetuple())))
         firstOfYear = datetime.date(randomDate.year, 1, 1)
         randomDayNumber = int((time.mktime(randomDate.timetuple()) - time.mktime(firstOfYear.timetuple())) / 86400 + 0.5)
 
-        # generate the epid string
+        # Generate the EPID string
         result = []
-        result.append(str(hostOsDict["type"]).rjust(5, "0"))
+        result.append(str(PlatformId).rjust(5, "0"))
         result.append("-")
-        result.append(str(keyConfig["GroupID"]).rjust(5, "0"))
+        result.append(str(GroupId).rjust(5, "0"))
         result.append("-")
         result.append(str(productKeyID / 1000000).rjust(3, "0"))
         result.append("-")
@@ -129,8 +81,9 @@ def epidGenerator(appId, version, lcid):
         result.append("-")
         result.append(str(languageCode))
         result.append("-")
-        result.append(str(hostOsDict["osBuild"]).rjust(4, "0"))
+        result.append(str(BuildNumber).rjust(4, "0"))
         result.append(".0000-")
         result.append(str(randomDayNumber).rjust(3, "0"))
         result.append(str(randomDate.year).rjust(4, "0"))
+        
         return "".join(result)
diff --git a/py2-kms/kmsRequestUnknown.py b/py2-kms/kmsRequestUnknown.py
index 4342902..d727f30 100644
--- a/py2-kms/kmsRequestUnknown.py
+++ b/py2-kms/kmsRequestUnknown.py
@@ -5,7 +5,7 @@ import struct
 from kmsBase import kmsBase
 
 class kmsRequestUnknown(kmsBase):
-        def getResponse(self):
+        def executeRequestLogic(self):
                 finalResponse = bytearray()
                 finalResponse.extend(bytearray(struct.pack('<I', 0)))
                 finalResponse.extend(bytearray(struct.pack('<I', 0)))
diff --git a/py2-kms/kmsRequestV4.py b/py2-kms/kmsRequestV4.py
index d1aa3d2..28981fd 100644
--- a/py2-kms/kmsRequestV4.py
+++ b/py2-kms/kmsRequestV4.py
@@ -1,7 +1,6 @@
 #!/usr/bin/env python
 
 import binascii
-import struct
 import time
 import logging
 
@@ -22,7 +21,7 @@ class kmsRequestV4(kmsBase):
 	class RequestV4(Structure):
 		commonHdr = ()
 		structure = (
-			('bodyLength1', '<I'),
+			('bodyLength1', '<I'), 
 			('bodyLength2', '<I'),
 			('request',     ':', kmsBase.kmsRequestStruct),
 			('hash',        '16s'),
@@ -32,9 +31,9 @@ class kmsRequestV4(kmsBase):
 	class ResponseV4(Structure):
 		commonHdr = ()
 		structure = (
-			('bodyLength1', '<I=len(response) + len(hash)'),
+			('bodyLength1', '<I'),
 			('unknown',     '!I=0x00000200'),
-			('bodyLength2', '<I=len(response) + len(hash)'),
+			('bodyLength2', '<I'),
 			('response',    ':', kmsBase.kmsResponseStruct),
 			('hash',        '16s'),
 			('padding',     ':'),
@@ -46,10 +45,12 @@ class kmsRequestV4(kmsBase):
 		response = self.serverLogic(requestData['request'])
 		hash = self.generateHash(bytearray(str(response)))
 
-		self.responseData = self.generateResponse(response, hash)
+		responseData = self.generateResponse(response, hash)
 
 		time.sleep(1) # request sent back too quick for Windows 2008 R2, slow it down.
 
+		return responseData
+
 	def generateHash(self, message):
 		"""
 		The KMS v4 hash is a variant of CMAC-AES-128. There are two key differences:
@@ -91,35 +92,35 @@ class kmsRequestV4(kmsBase):
 		return str(hashBuffer)
 
 	def generateResponse(self, responseBuffer, hash):
-		bodyLength = len(responseBuffer) + len(hash)
 		response = self.ResponseV4()
+		bodyLength = len(responseBuffer) + len(hash)
+		response['bodyLength1'] = bodyLength
+		response['bodyLength2'] = bodyLength
 		response['response'] = responseBuffer
 		response['hash'] = hash
-		response['padding'] = self.getResponsePadding(bodyLength)
-		
+		response['padding'] = bytearray(self.getPadding(bodyLength))
+
+		## Debug stuff.
 		shell_message(nshell = 16)                
-                logging.debug("KMS V4 Response: %s" % justify(response.dump(print_to_stdout = False)))
-                logging.debug("KMS V4 Response Bytes: %s" % justify(binascii.b2a_hex(str(response))))
+                logging.debug("KMS V4 Response: \n%s\n" % justify(response.dump(print_to_stdout = False)))
+                logging.debug("KMS V4 Response Bytes: \n%s\n" % justify(binascii.b2a_hex(str(response))))
 			
 		return str(response)
 
-	def getResponse(self):
-		return self.responseData
-
 	def generateRequest(self, requestBase):
 		hash = str(self.generateHash(bytearray(str(requestBase))))
-
+		
+		request = self.RequestV4()
 		bodyLength = len(requestBase) + len(hash)
-
-		request = kmsRequestV4.RequestV4()
 		request['bodyLength1'] = bodyLength
 		request['bodyLength2'] = bodyLength
 		request['request'] = requestBase
 		request['hash'] = hash
-		request['padding'] = self.getResponsePadding(bodyLength)
-		
+		request['padding'] = bytearray(self.getPadding(bodyLength))
+
+		## Debug stuff.
 		shell_message(nshell = 10)                
-                logging.debug("Request V4 Data: %s" % justify(request.dump(print_to_stdout = False)))
-                logging.debug("Request V4: %s" % justify(binascii.b2a_hex(str(request))))
+                logging.debug("Request V4 Data: \n%s\n" % justify(request.dump(print_to_stdout = False)))
+                logging.debug("Request V4: \n%s\n" % justify(binascii.b2a_hex(str(request))))
                         
 		return request
diff --git a/py2-kms/kmsRequestV5.py b/py2-kms/kmsRequestV5.py
index baf8c3b..824c55b 100644
--- a/py2-kms/kmsRequestV5.py
+++ b/py2-kms/kmsRequestV5.py
@@ -4,7 +4,6 @@ import logging
 import binascii
 import hashlib
 import random
-import struct
 
 import aes
 from kmsBase import kmsBase
@@ -17,14 +16,14 @@ class kmsRequestV5(kmsBase):
                         commonHdr = ()
                         structure = (
                                 ('salt',      '16s'),
-                                ('encrypted', '236s'), #kmsBase.kmsRequestStruct
+                                ('encrypted', '240s'), # kmsBase.kmsRequestStruct
                                 ('padding',   ':'),
                         )
 
                 commonHdr = ()
                 structure = (
-                        ('bodyLength1',  '<I'),
-                        ('bodyLength2',  '<I'),
+                        ('bodyLength1',  '<I'),  
+                        ('bodyLength2',  '<I'), 
                         ('versionMinor', '<H'),
                         ('versionMajor', '<H'),
                         ('message',      ':', Message),
@@ -40,13 +39,13 @@ class kmsRequestV5(kmsBase):
         class ResponseV5(Structure):
                 commonHdr = ()
                 structure = (
-                        ('bodyLength1',  '<I=2 + 2 + len(salt) + len(encrypted)'),
+                        ('bodyLength1',  '<I'),
                         ('unknown',      '!I=0x00000200'),
-                        ('bodyLength2',  '<I=2 + 2 + len(salt) + len(encrypted)'),
+                        ('bodyLength2',  '<I'),
                         ('versionMinor', '<H'),
                         ('versionMajor', '<H'),
                         ('salt',         '16s'),
-                        ('encrypted',    ':'), #DecryptedResponse
+                        ('encrypted',    ':'), # DecryptedResponse
                         ('padding',      ':'),
                 )
 
@@ -65,15 +64,17 @@ class kmsRequestV5(kmsBase):
         ver = 5
 
         def executeRequestLogic(self):
-                self.requestData = self.RequestV5(self.data)
+                requestData = self.RequestV5(self.data) 
         
-                decrypted = self.decryptRequest(self.requestData)
+                decrypted = self.decryptRequest(requestData)
 
                 responseBuffer = self.serverLogic(decrypted['request'])
         
-                iv, encrypted = self.encryptResponse(self.requestData, decrypted, responseBuffer)
+                iv, encrypted = self.encryptResponse(requestData, decrypted, responseBuffer)
 
-                self.responseData = self.generateResponse(iv, encrypted)
+                responseData = self.generateResponse(iv, encrypted, requestData)
+                
+                return responseData
         
         def decryptRequest(self, request):
                 encrypted = bytearray(str(request['message']))
@@ -88,10 +89,7 @@ class kmsRequestV5(kmsBase):
 
         def encryptResponse(self, request, decrypted, response):
                 randomSalt = self.getRandomSalt()
-                sha256 = hashlib.sha256()
-                sha256.update(str(randomSalt))
-                result = sha256.digest()
-
+                result = hashlib.sha256(str(randomSalt)).digest()
                 iv = bytearray(request['message']['salt'])
 
                 randomStuff = bytearray(16)
@@ -111,7 +109,8 @@ class kmsRequestV5(kmsBase):
                 return str(iv), str(bytearray(crypted))
 
         def decryptResponse(self, response):
-                paddingLength = response['bodyLength1'] % 8
+                paddingLength = self.getPadding(response['bodyLength1'])
+                
                 iv = bytearray(response['salt'])
                 encrypted = bytearray(response['encrypted'][:-paddingLength])
                 moo = aes.AESModeOfOperation()
@@ -124,23 +123,22 @@ class kmsRequestV5(kmsBase):
         def getRandomSalt(self):
                 return bytearray(random.getrandbits(8) for i in range(16))
         
-        def generateResponse(self, iv, encryptedResponse):
-                bodyLength = 4 + len(iv) + len(encryptedResponse)
+        def generateResponse(self, iv, encryptedResponse, requestData):                
                 response = self.ResponseV5()
-                response['versionMinor'] = self.requestData['versionMinor']
-                response['versionMajor'] = self.requestData['versionMajor']
+                bodyLength = 2 + 2 + len(iv) + len(encryptedResponse)
+                response['bodyLength1'] = bodyLength
+                response['bodyLength2'] = bodyLength
+                response['versionMinor'] = requestData['versionMinor']
+                response['versionMajor'] = requestData['versionMajor']
                 response['salt'] = iv
                 response['encrypted'] = encryptedResponse
-                response['padding'] = self.getResponsePadding(bodyLength)
+                response['padding'] = bytearray(self.getPadding(bodyLength))
                 
                 shell_message(nshell = 16)
                 logging.info("KMS V%d Response: \n%s\n" % (self.ver, justify(response.dump(print_to_stdout = False))))
                 logging.info("KMS V%d Structure Bytes: \n%s\n" % (self.ver, justify(binascii.b2a_hex(str(response)))))
                         
                 return str(response)
-        
-        def getResponse(self):
-                return self.responseData
 
         def generateRequest(self, requestBase):
                 esalt = self.getRandomSalt()
@@ -159,9 +157,8 @@ class kmsRequestV5(kmsBase):
 
                 message = self.RequestV5.Message(str(bytearray(crypted)))
 
-                bodyLength = len(message) + 2 + 2
-
                 request = self.RequestV5()
+                bodyLength = 2 + 2 + len(message)
                 request['bodyLength1'] = bodyLength
                 request['bodyLength2'] = bodyLength
                 request['versionMinor'] = requestBase['versionMinor']
diff --git a/py2-kms/kmsRequestV6.py b/py2-kms/kmsRequestV6.py
index 2d0039b..49302b7 100644
--- a/py2-kms/kmsRequestV6.py
+++ b/py2-kms/kmsRequestV6.py
@@ -1,9 +1,7 @@
 #!/usr/bin/env python
 
-import binascii
 import hashlib
 import hmac
-import random
 import struct
 
 import aes
@@ -37,9 +35,7 @@ class kmsRequestV6(kmsRequestV5):
 
         def encryptResponse(self, request, decrypted, response):
                 randomSalt = self.getRandomSalt()
-                sha256 = hashlib.sha256()
-                sha256.update(str(randomSalt))
-                result = sha256.digest()
+                result = hashlib.sha256(str(randomSalt)).digest()
 
                 SaltC = bytearray(request['message']['salt'])
                 DSaltC = bytearray(decrypted['salt'])
@@ -65,10 +61,10 @@ class kmsRequestV6(kmsRequestV5):
 
                 moo = aes.AESModeOfOperation()
                 moo.aes.v6 = True
-                d = moo.decrypt(SaltS, 16, moo.modeOfOperation["CBC"], self.key, moo.aes.keySize["SIZE_128"], SaltS)
+                decry = moo.decrypt(SaltS, 16, moo.modeOfOperation["CBC"], self.key, moo.aes.keySize["SIZE_128"], SaltS)
 
                 # DSaltS
-                DSaltS = bytearray(d)
+                DSaltS = bytearray(decry)
 
                 # HMacMsg
                 HMacMsg = bytearray(16)
@@ -105,4 +101,3 @@ class kmsRequestV6(kmsRequestV5):
                 digest = sha256.digest()
 
                 return digest[16:]
-
diff --git a/py2-kms/rpcBase.py b/py2-kms/rpcBase.py
index 8b417de..b351ad5 100644
--- a/py2-kms/rpcBase.py
+++ b/py2-kms/rpcBase.py
@@ -1,8 +1,5 @@
 #!/usr/bin/env python
 
-import struct
-import uuid
-
 class rpcBase:
         packetType = {
                 'request':              0,
@@ -42,21 +39,7 @@ class rpcBase:
                 self.config = config
 
         def populate(self):
-                self.requestData = self.parseRequest()
-                self.responseData = self.generateResponse()
-                return self
-
-        def getConfig(self):
-                return self.config
-
-        def getOptions(self):
-                return self.config
-
-        def getData(self):
-                return self.data
+                return self.generateResponse(self.parseRequest())
 
         def parseRequest(self):
                 return {}
-
-        def getResponse(self):
-                return self.responseData
diff --git a/py2-kms/rpcBind.py b/py2-kms/rpcBind.py
index bcb0942..42f1a62 100644
--- a/py2-kms/rpcBind.py
+++ b/py2-kms/rpcBind.py
@@ -2,7 +2,6 @@
 
 import logging
 import binascii
-import struct
 import uuid
 
 import rpcBase
@@ -78,12 +77,12 @@ class handler(rpcBase.rpcBase):
                 logging.debug("RPC Bind Request Bytes: \n%s\n" % justify(binascii.b2a_hex(self.data)))
                 logging.debug("RPC Bind Request: \n%s\n%s\n" % (justify(request.dump(print_to_stdout = False)),
                                                                 justify(MSRPCBind(request['pduData']).dump(print_to_stdout = False))))
-
+                
                 return request
 
-        def generateResponse(self):
+        def generateResponse(self, request):
                 response = MSRPCBindAck()
-                request = self.requestData
+ 
                 bind = MSRPCBind(request['pduData'])
 
                 response['ver_major'] = request['ver_major']
@@ -159,11 +158,10 @@ class handler(rpcBase.rpcBase):
 
                 shell_message(nshell = 0)
                 logging.debug("RPC Bind Request: \n%s\n%s\n" % (justify(request.dump(print_to_stdout = False)),
-                                                            justify(MSRPCBind(request['pduData']).dump(print_to_stdout = False))))
+                                                                justify(MSRPCBind(request['pduData']).dump(print_to_stdout = False))))
                 logging.debug("RPC Bind Request Bytes: \n%s\n" % justify(binascii.b2a_hex(str(request))))
 
                 return request
 
         def parseResponse(self):
                 return response
-
diff --git a/py2-kms/rpcRequest.py b/py2-kms/rpcRequest.py
index d31e296..63b2c4a 100644
--- a/py2-kms/rpcRequest.py
+++ b/py2-kms/rpcRequest.py
@@ -2,8 +2,6 @@
 
 import binascii
 import logging
-import struct
-import uuid
 
 from dcerpc import MSRPCRequestHeader, MSRPCRespHeader
 import kmsBase
@@ -19,9 +17,7 @@ class handler(rpcBase.rpcBase):
                 
                 return request
 
-        def generateResponse(self):
-                request = self.requestData
-
+        def generateResponse(self, request):
                 responseData = kmsBase.generateKmsResponseData(request['pduData'], self.config)
                 envelopeLength = len(responseData)
 
diff --git a/py2-kms/server.py b/py2-kms/server.py
index 85a5e45..950d830 100644
--- a/py2-kms/server.py
+++ b/py2-kms/server.py
@@ -2,15 +2,14 @@
 
 import argparse
 import binascii
-import hashlib
-import random
 import re
+import sys
 import socket
 import SocketServer
-import struct
 import uuid
 import logging
 import os
+import errno
 
 import rpcBind, rpcRequest
 from dcerpc import MSRPCHeader
@@ -19,8 +18,30 @@ from formatText import shell_message
 
 config = {}
 
+# Valid language identifiers to be used in the EPID (see "kms.c" in vlmcsd)
+ValidLcid = [1025, 1026, 1027, 1028, 1029,
+             1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
+             1040, 1041, 1042, 1043, 1044, 1045, 1046, 1048, 1049,
+             1050, 1051, 1052, 1053, 1054, 1056, 1057, 1058, 1059,
+             1060, 1061, 1062, 1063, 1065, 1066, 1067, 1068, 1069,
+             1071, 1074, 1076, 1077, 1078, 1079,
+             1080, 1081, 1082, 1083, 1086, 1087, 1088, 1089,
+             1091, 1092, 1093, 1094, 1095, 1097, 1098, 1099,
+             1100, 1102, 1103, 1104, 1106, 1110, 1111, 1114, 1125, 1131, 1153,
+             2049, 2052, 2055, 2057, 2058, 2060, 2064, 2067, 2068, 2070, 2074, 2077, 2092, 2107, 2110, 2115, 2155,
+             3073, 3076, 3079, 3081, 3082, 3084, 3098, 3131, 3179,
+             4097, 4100, 4103, 4105, 4106, 4108, 4122, 4155,
+             5121, 5124, 5127, 5129, 5130, 5132, 5146, 5179,
+             6145, 6153, 6154, 6156, 6170, 6203,
+             7169, 7177, 7178, 7194, 7227,
+             8193, 8201, 8202, 8251,
+             9217, 9225, 9226, 9275,
+             10241, 10249, 10250, 11265, 11273, 11274, 12289, 12297, 12298,
+             13313, 13321, 13322, 14337, 14346, 15361, 15370, 16385, 16394, 17418, 18442, 19466, 20490]
+
+
 def main():
-        parser = argparse.ArgumentParser(description='py2-kms: KMS Server Emulator written in Python2', epilog="version: py2-kms_2018-03-01")
+        parser = argparse.ArgumentParser(description='py2-kms: KMS Server Emulator written in Python2', epilog="version: py2-kms_2018-11-15")
         parser.add_argument("ip", nargs="?", action="store", default="0.0.0.0",
                             help='The IP address to listen on. The default is \"0.0.0.0\" (all interfaces).', type=str)
         parser.add_argument("port", nargs="?", action="store", default=1688,
@@ -28,10 +49,10 @@ def main():
         parser.add_argument("-e", "--epid", dest="epid", default=None,
                             help='Use this flag to manually specify an ePID to use. If no ePID is specified, a random ePID will be generated.', type=str)
         parser.add_argument("-l", "--lcid", dest="lcid", default=1033,
-                            help='Use this flag to manually specify an LCID for use with randomly generated ePIDs. If an ePID is manually specified,\
-this setting is ignored.', type=int)
+                            help='Use this flag to manually specify an LCID for use with randomly generated ePIDs. Default is 1033 (en-us)', type=int)
         parser.add_argument("-c", "--client-count", dest="CurrentClientCount", default=26,
-                            help='Use this flag to specify the current client count. Default is 26. A number >25 is required to enable activation.', type=int)
+                            help='Use this flag to specify the current client count. Default is 26. A number >=25 is required to enable \
+activation of client OSes; for server OSes and Office >=5', type=int)
         parser.add_argument("-a", "--activation-interval", dest="VLActivationInterval", default=120,
                             help='Use this flag to specify the activation interval (in minutes). Default is 120 minutes (2 hours).', type=int)
         parser.add_argument("-r", "--renewal-interval", dest="VLRenewalInterval", default=1440 * 7,
@@ -47,76 +68,95 @@ The default is \"364F463A8863D35F\" or type \"random\" to auto generate the HWID
                             help='Use this flag to set an output Logfile. The default is \"pykms_server.log\".', type=str)
         
         config.update(vars(parser.parse_args()))
-        #Random HWID
-        if config['hwid'] == "random":
-                randomhwid = uuid.uuid4().hex
-                config['hwid'] = randomhwid[:16]
-        
-        # Sanitize HWID
-        try:
-                config['hwid'] = binascii.a2b_hex(re.sub(r'[^0-9a-fA-F]', '', config['hwid'].strip('0x')))
-                if len(binascii.b2a_hex(config['hwid'])) < 16:
-                        logging.error("HWID \"%s\" is invalid. Hex string is too short." % binascii.b2a_hex(config['hwid']).upper())
-                        return
-                elif len(binascii.b2a_hex(config['hwid'])) > 16:
-                        logging.error("HWID \"%s\" is invalid. Hex string is too long." % binascii.b2a_hex(config['hwid']).upper())
-                        return
-        except TypeError:
-                logging.error("HWID \"%s\" is invalid. Odd-length hex string." % binascii.b2a_hex(config['hwid']).upper())
-                return
 
         logging.basicConfig(level=config['loglevel'], format='%(asctime)s %(levelname)-8s %(message)s',
                             datefmt='%a, %d %b %Y %H:%M:%S', filename=config['logfile'], filemode='w')
         
+        # Random HWID.
+        if config['hwid'] == "random":
+                randomhwid = uuid.uuid4().hex
+                config['hwid'] = randomhwid[:16]
+        
+        # Sanitize HWID.
         try:
-                import sqlite3
-                config['dbSupport'] = True
+                config['hwid'] = binascii.a2b_hex(re.sub(r'[^0-9a-fA-F]', '', config['hwid'].strip('0x')))
+                if len(binascii.b2a_hex(config['hwid'])) < 16:
+                        logging.error("Error: HWID \"%s\" is invalid. Hex string is too short." % binascii.b2a_hex(config['hwid']).upper())
+                        return
+                elif len(binascii.b2a_hex(config['hwid'])) > 16:
+                        logging.error("Error: HWID \"%s\" is invalid. Hex string is too long." % binascii.b2a_hex(config['hwid']).upper())
+                        return
+        except TypeError:
+                logging.error("Error: HWID \"%s\" is invalid. Odd-length hex string." % binascii.b2a_hex(config['hwid']).upper())
+                return
+        
+        # Check LCID.
+        # http://stackoverflow.com/questions/3425294/how-to-detect-the-os-default-language-in-python
+	if not config['lcid'] or (config['lcid'] not in ValidLcid):		
+		if hasattr(sys, 'implementation') and sys.implementation.name == 'cpython':
+			config['lcid'] = 1033
+		elif os.name == 'nt':
+			import ctypes
+
+			config['lcid'] = ctypes.windll.kernel32.GetUserDefaultUILanguage()  # TODO: or GetSystemDefaultUILanguage?
+		else:
+			import locale
+
+			try:
+				config['lcid'] = next(k for k, v in locale.windows_locale.items() if v == locale.getdefaultlocale()[0])
+			except StopIteration:
+				config['lcid'] = 1033
+
+        try:
+                import sqlite3            
         except:
                 logging.warning("Module \"sqlite3\" is not installed, database support disabled.")
                 config['dbSupport'] = False
+        else:
+                config['dbSupport'] = True
+                
         server = SocketServer.TCPServer((config['ip'], config['port']), kmsServer)
         server.timeout = 5
         logging.info("TCP server listening at %s on port %d." % (config['ip'], config['port']))
         logging.info("HWID: %s" % binascii.b2a_hex(config['hwid']).upper())
         server.serve_forever()
+        
 
 class kmsServer(SocketServer.BaseRequestHandler):
         def setup(self):
-                self.connection = self.request
                 logging.info("Connection accepted: %s:%d" % (self.client_address[0], self.client_address[1]))
 
         def handle(self):
                 while True:
                         # self.request is the TCP socket connected to the client
                         try:
-                                self.data = self.connection.recv(1024)
+                                data = self.request.recv(1024)
                         except socket.error, e:
-                                if e[0] == 104:
+                                if e.errno == errno.ECONNRESET:
                                         logging.error("Connection reset by peer.")
                                         break
                                 else:
                                         raise
-                        if self.data == '' or not self.data:
+                        if not data:
                                 logging.warning("No data received !")
                                 break
-                        # self.data = bytearray(self.data.strip())
-                        # logging.debug(binascii.b2a_hex(str(self.data)))
-                        packetType = MSRPCHeader(self.data)['type']
+                        # data = bytearray(self.data.strip())
+                        # logging.debug(binascii.b2a_hex(str(data)))
+                        packetType = MSRPCHeader(data)['type']
                         if packetType == rpcBase.packetType['bindReq']:
                                 logging.info("RPC bind request received.")
                                 shell_message(nshell = [-2, 2])
-                                handler = rpcBind.handler(self.data, config)
+                                handler = rpcBind.handler(data, config)
                         elif packetType == rpcBase.packetType['request']:
                                 logging.info("Received activation request.")
                                 shell_message(nshell = [-2, 13])
-                                handler = rpcRequest.handler(self.data, config)
+                                handler = rpcRequest.handler(data, config)
                         else:
-                                logging.error("Invalid RPC request type ", packetType)
+                                logging.error("Error: Invalid RPC request type ", packetType)
                                 break
 
-                        handler.populate()
-                        res = str(handler.getResponse())
-                        self.connection.send(res)
+                        res = str(handler.populate())
+                        self.request.send(res)
 
                         if packetType == rpcBase.packetType['bindReq']:
                                 logging.info("RPC bind acknowledged.")
@@ -127,7 +167,7 @@ class kmsServer(SocketServer.BaseRequestHandler):
                                 break
 
         def finish(self):
-                self.connection.close()
+                self.request.close()
                 logging.info("Connection closed: %s:%d" % (self.client_address[0], self.client_address[1]))
                 
 if __name__ == "__main__":
diff --git a/py2-kms/structure.py b/py2-kms/structure.py
index c8f738c..3b90ba4 100644
--- a/py2-kms/structure.py
+++ b/py2-kms/structure.py
@@ -7,9 +7,9 @@
 # for more information.
 #
 
-""" Version of https://github.com/CoreSecurity/impacket/blob/master/impacket/structure.py
-    with modifications in the function dump(...).
-    Copyright 2018 Matteo Fan <SystemRage@protonmail.com>
+"""
+Stripped down version of: https://github.com/CoreSecurity/impacket/blob/master/impacket/structure.py
+with modifications in the function dump(...).
 """
 
 from struct import pack, unpack, calcsize
@@ -90,18 +90,6 @@ class Structure:
         else:
             self.data = None
 
-    @classmethod
-    def fromFile(self, file):
-        answer = self()
-        answer.fromString(file.read(len(answer)))
-        return answer
-
-    def setAlignment(self, alignment):
-        self.alignment = alignment
-
-    def setData(self, data):
-        self.data = data
-
     def packField(self, fieldName, format = None):
         if self.debug:
             print "packField( %s | %s )" % (fieldName, format)
@@ -363,7 +351,7 @@ class Structure:
         return unpack(format, data)[0]
 
     def calcPackSize(self, format, data, field = None):
-#        # print "  calcPackSize  %s:%r" %  (format, data)
+        # print "  calcPackSize  %s:%r" %  (format, data)
         if field:
             addressField = self.findAddressFieldFor(field)
             if addressField is not None:
@@ -544,26 +532,10 @@ class Structure:
             if field[1][-l:] == descriptor:
                 return field[0]
         return None
-        
-    def zeroValue(self, format):
-        two = format.split('*')
-        if len(two) == 2:
-            if two[0].isdigit():
-                return (self.zeroValue(two[1]),)*int(two[0])
-                        
-        if not format.find('*') == -1: return ()
-        if 's' in format: return ''
-        if format in ['z',':','u']: return ''
-        if format == 'w': return '\x00\x00'
-
-        return 0
-
-    def clear(self):
-        for field in self.commonHdr + self.structure:
-            self[field[0]] = self.zeroValue(field[1])
 
     def dump(self, msg = None, indent = 0, print_to_stdout = True):
-        if msg is None: msg = self.__class__.__name__
+        if msg is None:
+            msg = self.__class__.__name__
         ind = ' '*indent
         allstr = "\n%s" % msg
         fixedFields = []