@microsoft/terraform-cdk-constructs 1.2.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +54630 -26185
- package/API.md +72091 -23784
- package/lib/azure-actiongroup/index.d.ts +0 -10
- package/lib/azure-actiongroup/index.js +1 -11
- package/lib/azure-actiongroup/lib/action-group.d.ts +0 -10
- package/lib/azure-actiongroup/lib/action-group.js +6 -32
- package/lib/azure-actiongroup/lib/index.d.ts +1 -4
- package/lib/azure-actiongroup/lib/index.js +2 -5
- package/lib/azure-activitylogalert/index.d.ts +0 -10
- package/lib/azure-activitylogalert/index.js +1 -11
- package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +0 -10
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +6 -32
- package/lib/azure-activitylogalert/lib/index.d.ts +1 -4
- package/lib/azure-activitylogalert/lib/index.js +2 -5
- package/lib/azure-aks/index.d.ts +0 -8
- package/lib/azure-aks/index.js +1 -11
- package/lib/azure-aks/lib/aks-cluster.d.ts +4 -13
- package/lib/azure-aks/lib/aks-cluster.js +13 -36
- package/lib/azure-aks/lib/index.d.ts +1 -10
- package/lib/azure-aks/lib/index.js +2 -21
- package/lib/azure-diagnosticsettings/index.d.ts +0 -6
- package/lib/azure-diagnosticsettings/index.js +1 -7
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +0 -10
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +6 -32
- package/lib/azure-diagnosticsettings/lib/index.d.ts +1 -7
- package/lib/azure-diagnosticsettings/lib/index.js +2 -8
- package/lib/azure-dnsforwardingruleset/index.d.ts +1 -0
- package/lib/azure-dnsforwardingruleset/index.js +18 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.d.ts +24 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.js +206 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.d.ts +174 -0
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +214 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.d.ts +24 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.js +242 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.d.ts +193 -0
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +193 -0
- package/lib/azure-dnsforwardingruleset/lib/index.d.ts +6 -0
- package/lib/azure-dnsforwardingruleset/lib/index.js +23 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.d.ts +24 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.js +199 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.d.ts +160 -0
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +178 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.js +133 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.js +350 -0
- package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.js +397 -0
- package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.d.ts +9 -0
- package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.js +285 -0
- package/lib/azure-dnsresolver/index.d.ts +1 -0
- package/lib/azure-dnsresolver/index.js +18 -0
- package/lib/azure-dnsresolver/lib/dns-resolver-schemas.d.ts +24 -0
- package/lib/azure-dnsresolver/lib/dns-resolver-schemas.js +218 -0
- package/lib/azure-dnsresolver/lib/dns-resolver.d.ts +170 -0
- package/lib/azure-dnsresolver/lib/dns-resolver.js +236 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.d.ts +24 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.js +261 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint.d.ts +189 -0
- package/lib/azure-dnsresolver/lib/inbound-endpoint.js +243 -0
- package/lib/azure-dnsresolver/lib/index.d.ts +6 -0
- package/lib/azure-dnsresolver/lib/index.js +23 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.d.ts +24 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.js +231 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint.d.ts +175 -0
- package/lib/azure-dnsresolver/lib/outbound-endpoint.js +234 -0
- package/lib/azure-dnsresolver/test/dns-resolver.integ.d.ts +14 -0
- package/lib/azure-dnsresolver/test/dns-resolver.integ.js +117 -0
- package/lib/azure-dnsresolver/test/dns-resolver.spec.d.ts +9 -0
- package/lib/azure-dnsresolver/test/dns-resolver.spec.js +353 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.integ.d.ts +9 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.integ.js +151 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.spec.d.ts +9 -0
- package/lib/azure-dnsresolver/test/inbound-endpoint.spec.js +441 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.integ.d.ts +9 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.integ.js +149 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.spec.d.ts +9 -0
- package/lib/azure-dnsresolver/test/outbound-endpoint.spec.js +301 -0
- package/lib/azure-dnszone/index.d.ts +1 -0
- package/lib/azure-dnszone/index.js +18 -0
- package/lib/azure-dnszone/lib/dns-zone-schemas.d.ts +24 -0
- package/lib/azure-dnszone/lib/dns-zone-schemas.js +191 -0
- package/lib/azure-dnszone/lib/dns-zone.d.ts +182 -0
- package/lib/azure-dnszone/lib/dns-zone.js +228 -0
- package/lib/azure-dnszone/lib/index.d.ts +2 -0
- package/lib/azure-dnszone/lib/index.js +19 -0
- package/lib/azure-dnszone/test/dns-zone.integ.d.ts +9 -0
- package/lib/azure-dnszone/test/dns-zone.integ.js +85 -0
- package/lib/azure-dnszone/test/dns-zone.spec.d.ts +9 -0
- package/lib/azure-dnszone/test/dns-zone.spec.js +285 -0
- package/lib/azure-metricalert/index.d.ts +0 -10
- package/lib/azure-metricalert/index.js +1 -11
- package/lib/azure-metricalert/lib/index.d.ts +1 -4
- package/lib/azure-metricalert/lib/index.js +2 -5
- package/lib/azure-metricalert/lib/metric-alert.d.ts +0 -10
- package/lib/azure-metricalert/lib/metric-alert.js +6 -32
- package/lib/azure-networkinterface/index.d.ts +0 -3
- package/lib/azure-networkinterface/index.js +1 -4
- package/lib/azure-networkinterface/lib/index.d.ts +1 -5
- package/lib/azure-networkinterface/lib/index.js +2 -5
- package/lib/azure-networkinterface/lib/network-interface.d.ts +4 -9
- package/lib/azure-networkinterface/lib/network-interface.js +14 -29
- package/lib/azure-networkinterface/test/network-interface.integ.js +20 -6
- package/lib/azure-networksecuritygroup/index.d.ts +0 -5
- package/lib/azure-networksecuritygroup/index.js +1 -6
- package/lib/azure-networksecuritygroup/lib/index.d.ts +2 -5
- package/lib/azure-networksecuritygroup/lib/index.js +17 -14
- package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +4 -13
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +14 -36
- package/lib/azure-policyassignment/index.d.ts +1 -0
- package/lib/azure-policyassignment/index.js +18 -0
- package/lib/azure-policyassignment/lib/index.d.ts +2 -0
- package/lib/azure-policyassignment/lib/index.js +19 -0
- package/lib/azure-policyassignment/lib/policy-assignment-schemas.d.ts +25 -0
- package/lib/azure-policyassignment/lib/policy-assignment-schemas.js +260 -0
- package/lib/azure-policyassignment/lib/policy-assignment.d.ts +349 -0
- package/lib/azure-policyassignment/lib/policy-assignment.js +237 -0
- package/lib/azure-policyassignment/test/policy-assignment.integ.d.ts +13 -0
- package/lib/azure-policyassignment/test/policy-assignment.integ.js +153 -0
- package/lib/azure-policyassignment/test/policy-assignment.spec.d.ts +9 -0
- package/lib/azure-policyassignment/test/policy-assignment.spec.js +651 -0
- package/lib/azure-policydefinition/index.d.ts +1 -0
- package/lib/azure-policydefinition/index.js +18 -0
- package/lib/azure-policydefinition/lib/index.d.ts +2 -0
- package/lib/azure-policydefinition/lib/index.js +19 -0
- package/lib/azure-policydefinition/lib/policy-definition-schemas.d.ts +25 -0
- package/lib/azure-policydefinition/lib/policy-definition-schemas.js +210 -0
- package/lib/azure-policydefinition/lib/policy-definition.d.ts +281 -0
- package/lib/azure-policydefinition/lib/policy-definition.js +236 -0
- package/lib/azure-policydefinition/test/policy-definition.integ.d.ts +9 -0
- package/lib/azure-policydefinition/test/policy-definition.integ.js +137 -0
- package/lib/azure-policydefinition/test/policy-definition.spec.d.ts +9 -0
- package/lib/azure-policydefinition/test/policy-definition.spec.js +806 -0
- package/lib/azure-privatednszone/index.d.ts +1 -0
- package/lib/azure-privatednszone/index.js +18 -0
- package/lib/azure-privatednszone/lib/index.d.ts +2 -0
- package/lib/azure-privatednszone/lib/index.js +19 -0
- package/lib/azure-privatednszone/lib/private-dns-zone-schemas.d.ts +24 -0
- package/lib/azure-privatednszone/lib/private-dns-zone-schemas.js +254 -0
- package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +178 -0
- package/lib/azure-privatednszone/lib/private-dns-zone.js +272 -0
- package/lib/azure-privatednszone/test/private-dns-zone.integ.d.ts +9 -0
- package/lib/azure-privatednszone/test/private-dns-zone.integ.js +84 -0
- package/lib/azure-privatednszone/test/private-dns-zone.spec.d.ts +9 -0
- package/lib/azure-privatednszone/test/private-dns-zone.spec.js +341 -0
- package/lib/azure-privatednszonelink/index.d.ts +1 -0
- package/lib/azure-privatednszonelink/index.js +18 -0
- package/lib/azure-privatednszonelink/lib/index.d.ts +2 -0
- package/lib/azure-privatednszonelink/lib/index.js +19 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.d.ts +24 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.js +262 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.d.ts +202 -0
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +250 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.d.ts +9 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.js +110 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.d.ts +9 -0
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.js +465 -0
- package/lib/azure-publicipaddress/index.d.ts +0 -5
- package/lib/azure-publicipaddress/index.js +1 -6
- package/lib/azure-publicipaddress/lib/index.d.ts +2 -9
- package/lib/azure-publicipaddress/lib/index.js +17 -17
- package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +4 -13
- package/lib/azure-publicipaddress/lib/public-ip-address.js +14 -36
- package/lib/azure-resourcegroup/index.d.ts +0 -37
- package/lib/azure-resourcegroup/index.js +1 -39
- package/lib/azure-resourcegroup/lib/index.d.ts +1 -44
- package/lib/azure-resourcegroup/lib/index.js +2 -43
- package/lib/azure-resourcegroup/lib/resource-group.d.ts +9 -23
- package/lib/azure-resourcegroup/lib/resource-group.js +23 -56
- package/lib/azure-resourcegroup/test/resource-group.spec.js +13 -19
- package/lib/azure-roleassignment/index.d.ts +1 -0
- package/lib/azure-roleassignment/index.js +18 -0
- package/lib/azure-roleassignment/lib/index.d.ts +2 -0
- package/lib/azure-roleassignment/lib/index.js +19 -0
- package/lib/azure-roleassignment/lib/role-assignment-schemas.d.ts +25 -0
- package/lib/azure-roleassignment/lib/role-assignment-schemas.js +238 -0
- package/lib/azure-roleassignment/lib/role-assignment.d.ts +294 -0
- package/lib/azure-roleassignment/lib/role-assignment.js +257 -0
- package/lib/azure-roleassignment/test/role-assignment.integ.d.ts +12 -0
- package/lib/azure-roleassignment/test/role-assignment.integ.js +101 -0
- package/lib/azure-roleassignment/test/role-assignment.spec.d.ts +9 -0
- package/lib/azure-roleassignment/test/role-assignment.spec.js +633 -0
- package/lib/azure-roledefinition/index.d.ts +1 -0
- package/lib/azure-roledefinition/index.js +18 -0
- package/lib/azure-roledefinition/lib/index.d.ts +2 -0
- package/lib/azure-roledefinition/lib/index.js +19 -0
- package/lib/azure-roledefinition/lib/role-definition-schemas.d.ts +25 -0
- package/lib/azure-roledefinition/lib/role-definition-schemas.js +195 -0
- package/lib/azure-roledefinition/lib/role-definition.d.ts +236 -0
- package/lib/azure-roledefinition/lib/role-definition.js +192 -0
- package/lib/azure-roledefinition/test/role-definition.integ.d.ts +12 -0
- package/lib/azure-roledefinition/test/role-definition.integ.js +142 -0
- package/lib/azure-roledefinition/test/role-definition.spec.d.ts +9 -0
- package/lib/azure-roledefinition/test/role-definition.spec.js +946 -0
- package/lib/azure-storageaccount/index.d.ts +0 -19
- package/lib/azure-storageaccount/index.js +1 -20
- package/lib/azure-storageaccount/lib/index.d.ts +1 -7
- package/lib/azure-storageaccount/lib/index.js +2 -8
- package/lib/azure-storageaccount/lib/storage-account.d.ts +4 -9
- package/lib/azure-storageaccount/lib/storage-account.js +15 -29
- package/lib/azure-subnet/index.d.ts +0 -3
- package/lib/azure-subnet/index.js +1 -4
- package/lib/azure-subnet/lib/index.d.ts +1 -4
- package/lib/azure-subnet/lib/index.js +2 -5
- package/lib/azure-subnet/lib/subnet.d.ts +3 -14
- package/lib/azure-subnet/lib/subnet.js +28 -47
- package/lib/azure-subnet/test/subnet.integ.js +19 -7
- package/lib/azure-subnet/test/subnet.spec.js +1 -2
- package/lib/azure-virtualmachine/index.d.ts +0 -6
- package/lib/azure-virtualmachine/index.js +1 -7
- package/lib/azure-virtualmachine/lib/index.d.ts +1 -10
- package/lib/azure-virtualmachine/lib/index.js +2 -21
- package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +4 -13
- package/lib/azure-virtualmachine/lib/virtual-machine.js +15 -36
- package/lib/azure-virtualnetwork/index.d.ts +0 -9
- package/lib/azure-virtualnetwork/index.js +1 -11
- package/lib/azure-virtualnetwork/lib/index.d.ts +2 -9
- package/lib/azure-virtualnetwork/lib/index.js +17 -20
- package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +4 -13
- package/lib/azure-virtualnetwork/lib/virtual-network.js +15 -36
- package/lib/azure-virtualnetworkmanager/index.d.ts +1 -0
- package/lib/azure-virtualnetworkmanager/index.js +18 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.d.ts +48 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.js +265 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.d.ts +185 -0
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +206 -0
- package/lib/azure-virtualnetworkmanager/lib/index.d.ts +14 -0
- package/lib/azure-virtualnetworkmanager/lib/index.js +31 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.js +189 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.js +201 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.d.ts +135 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +163 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group.d.ts +139 -0
- package/lib/azure-virtualnetworkmanager/lib/network-group.js +158 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.js +182 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.d.ts +144 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +164 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.d.ts +38 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.js +206 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.d.ts +142 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +162 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.d.ts +39 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.js +359 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.d.ts +221 -0
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +204 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.d.ts +32 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.js +236 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +337 -0
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +283 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +25 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +402 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.d.ts +9 -0
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +1652 -0
- package/lib/azure-vmss/index.d.ts +0 -5
- package/lib/azure-vmss/index.js +1 -6
- package/lib/azure-vmss/lib/index.d.ts +0 -7
- package/lib/azure-vmss/lib/index.js +1 -21
- package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +5 -13
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +29 -53
- package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.d.ts +10 -0
- package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.js +218 -0
- package/lib/core-azure/lib/azapi/azapi-resource.d.ts +206 -26
- package/lib/core-azure/lib/azapi/azapi-resource.js +379 -91
- package/lib/core-azure/lib/azapi/azapi-resource.spec.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +5 -3
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
- package/lib/core-azure/lib/azapi/resource-schema-validator.d.ts +118 -0
- package/lib/core-azure/lib/azapi/resource-schema-validator.js +236 -0
- package/lib/core-azure/lib/azapi/resource-version-manager.d.ts +103 -0
- package/lib/core-azure/lib/azapi/resource-version-manager.js +168 -0
- package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +11 -6
- package/lib/core-azure/lib/index.d.ts +2 -2
- package/lib/core-azure/lib/index.js +5 -5
- package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
- package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
- package/lib/index.d.ts +19 -0
- package/lib/index.js +21 -2
- package/lib/testing/index.js +2 -2
- package/lib/testing/lib/cleanup.d.ts +1 -0
- package/lib/testing/lib/cleanup.js +19 -12
- package/lib/testing/lib/metadata.js +19 -16
- package/package.json +1 -1
- package/scripts/cleanup-test-resources.ts +22 -4
- package/scripts/generate-index.js +25 -8
package/lib/testing/index.js
CHANGED
|
@@ -132,7 +132,7 @@ class BaseTestStack extends cdktf_1.TerraformStack {
|
|
|
132
132
|
}
|
|
133
133
|
exports.BaseTestStack = BaseTestStack;
|
|
134
134
|
_a = JSII_RTTI_SYMBOL_1;
|
|
135
|
-
BaseTestStack[_a] = { fqn: "@microsoft/terraform-cdk-constructs.BaseTestStack", version: "1.
|
|
135
|
+
BaseTestStack[_a] = { fqn: "@microsoft/terraform-cdk-constructs.BaseTestStack", version: "1.3.1" };
|
|
136
136
|
function execTerraformCommand(command, opts, streamOutput) {
|
|
137
137
|
try {
|
|
138
138
|
if (streamOutput) {
|
|
@@ -465,7 +465,7 @@ class AssertionReturn {
|
|
|
465
465
|
}
|
|
466
466
|
exports.AssertionReturn = AssertionReturn;
|
|
467
467
|
_b = JSII_RTTI_SYMBOL_1;
|
|
468
|
-
AssertionReturn[_b] = { fqn: "@microsoft/terraform-cdk-constructs.AssertionReturn", version: "1.
|
|
468
|
+
AssertionReturn[_b] = { fqn: "@microsoft/terraform-cdk-constructs.AssertionReturn", version: "1.3.1" };
|
|
469
469
|
/**
|
|
470
470
|
* Cleanup function for removing all CDKTF output directories in /tmp.
|
|
471
471
|
*
|
|
@@ -80,6 +80,7 @@ export interface CleanupOptions {
|
|
|
80
80
|
readonly dryRun: boolean;
|
|
81
81
|
/**
|
|
82
82
|
* Minimum age in hours before resource can be cleaned up
|
|
83
|
+
* Set to 0 to force cleanup of all resources regardless of age (bypasses safety checks)
|
|
83
84
|
*/
|
|
84
85
|
readonly minAgeHours: number;
|
|
85
86
|
/**
|
|
@@ -90,7 +90,7 @@ class ResourceCleanupService {
|
|
|
90
90
|
}
|
|
91
91
|
exports.ResourceCleanupService = ResourceCleanupService;
|
|
92
92
|
_a = JSII_RTTI_SYMBOL_1;
|
|
93
|
-
ResourceCleanupService[_a] = { fqn: "@microsoft/terraform-cdk-constructs.ResourceCleanupService", version: "1.
|
|
93
|
+
ResourceCleanupService[_a] = { fqn: "@microsoft/terraform-cdk-constructs.ResourceCleanupService", version: "1.3.1" };
|
|
94
94
|
/**
|
|
95
95
|
* Verifies that all resources with a specific test run ID are deleted
|
|
96
96
|
*
|
|
@@ -115,7 +115,7 @@ function verifyResourcesDeleted(runId, expectedResources, subscription) {
|
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
117
|
try {
|
|
118
|
-
const orphanedResources = service.queryAzureResourcesByTags({ "test
|
|
118
|
+
const orphanedResources = service.queryAzureResourcesByTags({ "test-run-id": runId }, subscription);
|
|
119
119
|
if (orphanedResources.length > 0) {
|
|
120
120
|
const resourceIds = orphanedResources.map((r) => r.id);
|
|
121
121
|
return {
|
|
@@ -158,15 +158,17 @@ async function findOrphanedResources(options) {
|
|
|
158
158
|
console.log(`[Cleanup] Searching for orphaned test resources...`);
|
|
159
159
|
console.log(`[Cleanup] Minimum age: ${options.minAgeHours} hours`);
|
|
160
160
|
// Query for test resources
|
|
161
|
+
// NOTE: Tag names use hyphens instead of colons because Azure DNS zones
|
|
162
|
+
// and some other resource types don't support colons in tag names.
|
|
161
163
|
const query = `
|
|
162
164
|
Resources
|
|
163
|
-
| where tags['test
|
|
164
|
-
| where tags['test
|
|
165
|
+
| where tags['test-managed-by'] == 'terraform-cdk-constructs-tests'
|
|
166
|
+
| where tags['test-auto-cleanup'] == 'true'
|
|
165
167
|
| project id, type, name, location, resourceGroup,
|
|
166
|
-
testRunId = tags['test
|
|
167
|
-
createdAt = tags['test
|
|
168
|
-
cleanupAfter = tags['test
|
|
169
|
-
testName = tags['test
|
|
168
|
+
testRunId = tags['test-run-id'],
|
|
169
|
+
createdAt = tags['test-created-at'],
|
|
170
|
+
cleanupAfter = tags['test-cleanup-after'],
|
|
171
|
+
testName = tags['test-name']
|
|
170
172
|
| order by tostring(createdAt) asc
|
|
171
173
|
`;
|
|
172
174
|
try {
|
|
@@ -188,11 +190,14 @@ async function findOrphanedResources(options) {
|
|
|
188
190
|
const cleanupAfter = new Date(resource.cleanupAfter);
|
|
189
191
|
const ageHours = (now.getTime() - createdAt.getTime()) / (60 * 60 * 1000);
|
|
190
192
|
// Apply safety checks
|
|
191
|
-
|
|
193
|
+
// When minAgeHours is 0 (force mode), skip the minimum age validation
|
|
194
|
+
if (options.minAgeHours > 0 && ageHours < MINIMUM_AGE_HOURS) {
|
|
192
195
|
console.log(`[Cleanup] Skipping ${resource.name}: too young (${ageHours.toFixed(1)}h < ${MINIMUM_AGE_HOURS}h)`);
|
|
193
196
|
continue;
|
|
194
197
|
}
|
|
195
|
-
|
|
198
|
+
// Check TTL (cleanup-after timestamp)
|
|
199
|
+
// When minAgeHours is 0 (force mode), skip the TTL check as well
|
|
200
|
+
if (options.minAgeHours > 0 && now < cleanupAfter) {
|
|
196
201
|
console.log(`[Cleanup] Skipping ${resource.name}: not yet eligible for cleanup`);
|
|
197
202
|
continue;
|
|
198
203
|
}
|
|
@@ -263,7 +268,9 @@ async function cleanupOrphanedResources(resources, options) {
|
|
|
263
268
|
try {
|
|
264
269
|
console.log(`[Cleanup] Deleting resource group: ${rgName} (${rgResources.length} resources)`);
|
|
265
270
|
// Validate that all resources in the group are test resources
|
|
266
|
-
|
|
271
|
+
// When minAgeHours is 0 (force mode), allow deletion of resources below minimum age
|
|
272
|
+
const allTestResources = rgResources.every((r) => r.testRunId &&
|
|
273
|
+
(options.minAgeHours === 0 || r.ageHours >= MINIMUM_AGE_HOURS));
|
|
267
274
|
if (!allTestResources) {
|
|
268
275
|
console.warn(`[Cleanup] Skipping ${rgName}: not all resources are valid test resources`);
|
|
269
276
|
failed += rgResources.length;
|
|
@@ -328,4 +335,4 @@ async function verifyResourcesDeletedWithRetry(runId, expectedResources, subscri
|
|
|
328
335
|
console.error(`[Verification] ✗ Failed after ${maxRetries} attempts: ${lastResult.message}`);
|
|
329
336
|
return lastResult;
|
|
330
337
|
}
|
|
331
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW51cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL2xpYi9jbGVhbnVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUF3U0Esd0RBbURDO0FBV0Qsc0RBb0dDO0FBWUQsNERBcUZDO0FBZUQsMEVBK0JDOztBQXpsQkQ7Ozs7O0dBS0c7QUFFSCxpREFBeUM7QUFnTXpDOztHQUVHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFFNUI7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFdEI7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxhQUFhO0FBRTFDOztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7SUFDakM7O09BRUc7SUFDSSxzQkFBc0I7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsSUFBQSx3QkFBUSxFQUFDLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxtQkFBbUIsQ0FBQyxPQUFlO1FBQ3pDLElBQUksQ0FBQztZQUNILE9BQU8sSUFBQSx3QkFBUSxFQUFDLE9BQU8sRUFBRTtnQkFDdkIsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxNQUFNO2FBQ2QsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FDYiw2QkFBNkIsS0FBSyxDQUFDLE9BQU8sSUFBSTtnQkFDNUMsWUFBWSxPQUFPLElBQUk7Z0JBQ3ZCLFdBQVcsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FDakQsQ0FBQztRQUNK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LE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsR0FBRyxDQUNULHdCQUF3QixVQUFVLENBQUMsVUFBVSwyQkFBMkIsV0FBVyxHQUFHLElBQUksTUFBTSxDQUNqRyxDQUFDO1lBQ0YsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQUssQ0FDWCxpQ0FBaUMsVUFBVSxjQUFjLFVBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FDL0UsQ0FBQztJQUNGLE9BQU8sVUFBVyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENsZWFudXAgYW5kIHZlcmlmaWNhdGlvbiB1dGlsaXRpZXMgZm9yIGludGVncmF0aW9uIHRlc3RzXG4gKlxuICogUHJvdmlkZXMgZnVuY3Rpb25zIGZvciB2ZXJpZnlpbmcgcmVzb3VyY2UgZGVsZXRpb24gdmlhIEF6dXJlIFJlc291cmNlIEdyYXBoXG4gKiBhbmQgZmluZGluZy9jbGVhbmluZyBvcnBoYW5lZCByZXNvdXJjZXMgd2l0aCBjb21wcmVoZW5zaXZlIHNhZmV0eSBtZWNoYW5pc21zLlxuICovXG5cbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcblxuLyoqXG4gKiBNZXRhZGF0YSBmb3IgYW4gaW5kaXZpZHVhbCByZXNvdXJjZSBjcmVhdGVkIGR1cmluZyB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBBenVyZSByZXNvdXJjZSBJRFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBenVyZSByZXNvdXJjZSB0eXBlIChlLmcuLCAnTWljcm9zb2Z0LlJlc291cmNlcy9yZXNvdXJjZUdyb3VwcycpXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZVR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBsb2NhdGlvbiAoQXp1cmUgcmVnaW9uKVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRlc3QgcnVuIElEIHRoYXQgY3JlYXRlZCB0aGlzIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSB0ZXN0UnVuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gcmVzb3VyY2Ugd2FzIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRBdDogRGF0ZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJlc291cmNlIHdhcyBzdWNjZXNzZnVsbHkgZGVzdHJveWVkXG4gICAqL1xuICByZWFkb25seSBkZXN0cm95ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiByZXNvdXJjZSB3YXMgZGVzdHJveWVkXG4gICAqL1xuICByZWFkb25seSBkZXN0cm95ZWRBdD86IERhdGU7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHJlc291cmNlIGNsZWFudXAgdmVyaWZpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZpY2F0aW9uUmVzdWx0IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCAoYWxsIHJlc291cmNlcyBkZWxldGVkKVxuICAgKi9cbiAgcmVhZG9ubHkgc3VjY2VzczogYm9vbGVhbjtcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbWVzc2FnZSBkZXNjcmliaW5nIHRoZSByZXN1bHRcbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiBvcnBoYW5lZCByZXNvdXJjZSBJRHMgKGlmIGFueSlcbiAgICovXG4gIHJlYWRvbmx5IG9ycGhhbmVkUmVzb3VyY2VzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHJlc291cmNlcyBleHBlY3RlZCB0byBiZSBkZWxldGVkXG4gICAqL1xuICByZWFkb25seSBleHBlY3RlZENvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzb3VyY2VzIGFjdHVhbGx5IGZvdW5kXG4gICAqL1xuICByZWFkb25seSBmb3VuZENvdW50PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNsZWFudXAgb3BlcmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENsZWFudXBPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcGVyZm9ybSBkcnktcnVuIChubyBhY3R1YWwgZGVsZXRpb24pXG4gICAqL1xuICByZWFkb25seSBkcnlSdW46IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gYWdlIGluIGhvdXJzIGJlZm9yZSByZXNvdXJjZSBjYW4gYmUgY2xlYW5lZCB1cFxuICAgKi9cbiAgcmVhZG9ubHkgbWluQWdlSG91cnM6IG51bWJlcjtcblxuICAvKipcbiAgICogQXp1cmUgc3Vic2NyaXB0aW9uIElEIHRvIHRhcmdldCAob3B0aW9uYWwpXG4gICAqL1xuICByZWFkb25seSBzdWJzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIHJlc291cmNlIGdyb3VwcyB0byB0YXJnZXQgKG9wdGlvbmFsKVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VHcm91cHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgcmVzb3VyY2VzIHRvIGNsZWFuIHVwIGluIG9uZSBvcGVyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG1heFJlc291cmNlcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcnBoYW5lZCByZXNvdXJjZSBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ycGhhbmVkUmVzb3VyY2Uge1xuICAvKipcbiAgICogQXp1cmUgcmVzb3VyY2UgSURcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQXp1cmUgcmVzb3VyY2UgdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2UgbG9jYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIGdyb3VwIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlR3JvdXA6IHN0cmluZztcblxuICAvKipcbiAgICogVGVzdCBydW4gSUQgZnJvbSB0YWdzXG4gICAqL1xuICByZWFkb25seSB0ZXN0UnVuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRpb24gdGltZXN0YW1wIGZyb20gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBDbGVhbnVwIGFmdGVyIHRpbWVzdGFtcCBmcm9tIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IGNsZWFudXBBZnRlcjogRGF0ZTtcblxuICAvKipcbiAgICogVGVzdCBuYW1lIGZyb20gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQWdlIGluIGhvdXJzIHNpbmNlIGNyZWF0aW9uXG4gICAqL1xuICByZWFkb25seSBhZ2VIb3VyczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBjbGVhbnVwIG9wZXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsZWFudXBSZXN1bHQge1xuICAvKipcbiAgICogTnVtYmVyIG9mIHJlc291cmNlcyBzdWNjZXNzZnVsbHkgZGVsZXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzb3VyY2VzIHRoYXQgZmFpbGVkIHRvIGRlbGV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZmFpbGVkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXNvdXJjZXMgc2tpcHBlZCAoZS5nLiwgdG9vIHlvdW5nKVxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcHBlZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZXRhaWxlZCBlcnJvciBtZXNzYWdlcyBmb3IgZmFpbHVyZXNcbiAgICovXG4gIHJlYWRvbmx5IGVycm9ycz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE1pbmltdW0gYWdlIHRocmVzaG9sZCAoaG91cnMpIGJlZm9yZSBjbGVhbnVwIGlzIGFsbG93ZWRcbiAqL1xuY29uc3QgTUlOSU1VTV9BR0VfSE9VUlMgPSAyO1xuXG4vKipcbiAqIE1heGltdW0gcmV0cnkgYXR0ZW1wdHMgZm9yIGV2ZW50dWFsIGNvbnNpc3RlbmN5XG4gKi9cbmNvbnN0IE1BWF9SRVRSSUVTID0gNTtcblxuLyoqXG4gKiBXYWl0IHRpbWUgYmV0d2VlbiByZXRyaWVzIChtaWxsaXNlY29uZHMpXG4gKi9cbmNvbnN0IFJFVFJZX1dBSVRfTVMgPSAzMDAwMDsgLy8gMzAgc2Vjb25kc1xuXG4vKipcbiAqIE1haW4gY2xlYW51cCBzZXJ2aWNlIGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUNsZWFudXBTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIENoZWNrcyBpZiBBenVyZSBDTEkgaXMgYXZhaWxhYmxlXG4gICAqL1xuICBwdWJsaWMgY2hlY2tBenVyZUNsaUF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgZXhlY1N5bmMoXCJheiAtLXZlcnNpb25cIiwgeyBzdGRpbzogXCJwaXBlXCIgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhbiBBenVyZSBDTEkgY29tbWFuZCB3aXRoIGVycm9yIGhhbmRsaW5nXG4gICAqL1xuICBwcml2YXRlIGV4ZWN1dGVBenVyZUNvbW1hbmQoY29tbWFuZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGV4ZWNTeW5jKGNvbW1hbmQsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgc3RkaW86IFwicGlwZVwiLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQXp1cmUgQ0xJIGNvbW1hbmQgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9XFxuYCArXG4gICAgICAgICAgYENvbW1hbmQ6ICR7Y29tbWFuZH1cXG5gICtcbiAgICAgICAgICBgU3RkZXJyOiAke2Vycm9yLnN0ZGVycj8udG9TdHJpbmcoKSB8fCBcIk4vQVwifWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyaWVzIEF6dXJlIFJlc291cmNlIEdyYXBoIGZvciByZXNvdXJjZXMgYnkgdGFnc1xuICAgKlxuICAgKiBSZXR1cm5zIGVtcHR5IGFycmF5IG9uIGVycm9ycyBmb3IgZ3JhY2VmdWwgZGVncmFkYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcXVlcnlBenVyZVJlc291cmNlc0J5VGFncyhcbiAgICB0YWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIHN1YnNjcmlwdGlvbj86IHN0cmluZyxcbiAgKTogYW55W10ge1xuICAgIC8vIEJ1aWxkIHRhZyBmaWx0ZXIgY29uZGl0aW9uc1xuICAgIGNvbnN0IHRhZ0NvbmRpdGlvbnMgPSBPYmplY3QuZW50cmllcyh0YWdzKVxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgdGFnc1snJHtrZXl9J10gPT0gJyR7dmFsdWV9J2ApXG4gICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgY29uc3QgcXVlcnkgPSBgXG4gICAgICBSZXNvdXJjZXNcbiAgICAgIHwgd2hlcmUgJHt0YWdDb25kaXRpb25zfVxuICAgICAgfCBwcm9qZWN0IGlkLCB0eXBlLCBuYW1lLCBsb2NhdGlvbiwgcmVzb3VyY2VHcm91cCwgdGFnc1xuICAgIGA7XG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb25BcmcgPSBzdWJzY3JpcHRpb25cbiAgICAgID8gYC0tc3Vic2NyaXB0aW9ucyBcIiR7c3Vic2NyaXB0aW9ufVwiYFxuICAgICAgOiBcIlwiO1xuXG4gICAgY29uc3QgY29tbWFuZCA9IGBheiBncmFwaCBxdWVyeSAtcSBcIiR7cXVlcnkucmVwbGFjZSgvXFxuL2csIFwiIFwiKX1cIiAke3N1YnNjcmlwdGlvbkFyZ30gLS1vdXRwdXQganNvbmA7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5leGVjdXRlQXp1cmVDb21tYW5kKGNvbW1hbmQpO1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgICAgcmV0dXJuIHBhcnNlZC5kYXRhIHx8IFtdO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcXVlcnkgQXp1cmUgUmVzb3VyY2UgR3JhcGg6XCIsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgYWxsIHJlc291cmNlcyB3aXRoIGEgc3BlY2lmaWMgdGVzdCBydW4gSUQgYXJlIGRlbGV0ZWRcbiAqXG4gKiBQZXJmb3JtcyBBenVyZSBSZXNvdXJjZSBHcmFwaCBxdWVyeSB0byBjaGVjayBmb3IgcmVtYWluaW5nIHJlc291cmNlcy5cbiAqIEltcGxlbWVudHMgcmV0cnkgbG9naWMgdG8gaGFuZGxlIEF6dXJlJ3MgZXZlbnR1YWwgY29uc2lzdGVuY3kuXG4gKlxuICogQHBhcmFtIHJ1bklkIC0gVGVzdCBydW4gVVVJRCB0byB2ZXJpZnlcbiAqIEBwYXJhbSBleHBlY3RlZFJlc291cmNlcyAtIExpc3Qgb2YgcmVzb3VyY2VzIHRoYXQgc2hvdWxkIGJlIGRlbGV0ZWRcbiAqIEBwYXJhbSBzdWJzY3JpcHRpb24gLSBPcHRpb25hbCBzdWJzY3JpcHRpb24gSUQgdG8gcXVlcnlcbiAqIEByZXR1cm5zIFZlcmlmaWNhdGlvbiByZXN1bHQgd2l0aCBkZXRhaWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlSZXNvdXJjZXNEZWxldGVkKFxuICBydW5JZDogc3RyaW5nLFxuICBleHBlY3RlZFJlc291cmNlczogUmVzb3VyY2VNZXRhZGF0YVtdLFxuICBzdWJzY3JpcHRpb24/OiBzdHJpbmcsXG4pOiBWZXJpZmljYXRpb25SZXN1bHQge1xuICBjb25zdCBzZXJ2aWNlID0gbmV3IFJlc291cmNlQ2xlYW51cFNlcnZpY2UoKTtcblxuICAvLyBDaGVjayBpZiBBenVyZSBDTEkgaXMgYXZhaWxhYmxlIGJlZm9yZSBhdHRlbXB0aW5nIHZlcmlmaWNhdGlvblxuICBpZiAoIXNlcnZpY2UuY2hlY2tBenVyZUNsaUF2YWlsYWJsZSgpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgbWVzc2FnZTogXCJWZXJpZmljYXRpb24gZmFpbGVkOiBBenVyZSBDTEkgaXMgbm90IGF2YWlsYWJsZVwiLFxuICAgICAgb3JwaGFuZWRSZXNvdXJjZXM6IFtdLFxuICAgICAgZXhwZWN0ZWRDb3VudDogZXhwZWN0ZWRSZXNvdXJjZXMubGVuZ3RoLFxuICAgICAgZm91bmRDb3VudDogLTEsXG4gICAgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgb3JwaGFuZWRSZXNvdXJjZXMgPSBzZXJ2aWNlLnF1ZXJ5QXp1cmVSZXNvdXJjZXNCeVRhZ3MoXG4gICAgICB7IFwidGVzdDpydW4taWRcIjogcnVuSWQgfSxcbiAgICAgIHN1YnNjcmlwdGlvbixcbiAgICApO1xuXG4gICAgaWYgKG9ycGhhbmVkUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJlc291cmNlSWRzID0gb3JwaGFuZWRSZXNvdXJjZXMubWFwKChyOiBhbnkpID0+IHIuaWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBGb3VuZCAke29ycGhhbmVkUmVzb3VyY2VzLmxlbmd0aH0gb3JwaGFuZWQgcmVzb3VyY2VzIGFmdGVyIGRlc3Ryb3lgLFxuICAgICAgICBvcnBoYW5lZFJlc291cmNlczogcmVzb3VyY2VJZHMsXG4gICAgICAgIGV4cGVjdGVkQ291bnQ6IGV4cGVjdGVkUmVzb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgZm91bmRDb3VudDogb3JwaGFuZWRSZXNvdXJjZXMubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6IFwiQWxsIHJlc291cmNlcyBzdWNjZXNzZnVsbHkgZGVsZXRlZFwiLFxuICAgICAgb3JwaGFuZWRSZXNvdXJjZXM6IFtdLFxuICAgICAgZXhwZWN0ZWRDb3VudDogZXhwZWN0ZWRSZXNvdXJjZXMubGVuZ3RoLFxuICAgICAgZm91bmRDb3VudDogMCxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgbWVzc2FnZTogYFZlcmlmaWNhdGlvbiBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gLFxuICAgICAgb3JwaGFuZWRSZXNvdXJjZXM6IFtdLFxuICAgICAgZXhwZWN0ZWRDb3VudDogZXhwZWN0ZWRSZXNvdXJjZXMubGVuZ3RoLFxuICAgICAgZm91bmRDb3VudDogLTEsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIG9ycGhhbmVkIHRlc3QgcmVzb3VyY2VzIHRoYXQgYXJlIHBhc3QgdGhlaXIgVFRMXG4gKlxuICogUXVlcmllcyBBenVyZSBmb3IgcmVzb3VyY2VzIHdpdGggdGVzdCB0YWdzIHRoYXQgYXJlIG9sZGVyIHRoYW5cbiAqIHRoZWlyIGNsZWFudXAtYWZ0ZXIgdGltZXN0YW1wLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ2xlYW51cCBvcHRpb25zXG4gKiBAcmV0dXJucyBMaXN0IG9mIG9ycGhhbmVkIHJlc291cmNlc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZE9ycGhhbmVkUmVzb3VyY2VzKFxuICBvcHRpb25zOiBDbGVhbnVwT3B0aW9ucyxcbik6IFByb21pc2U8T3JwaGFuZWRSZXNvdXJjZVtdPiB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgY29uc29sZS5sb2coYFtDbGVhbnVwXSBTZWFyY2hpbmcgZm9yIG9ycGhhbmVkIHRlc3QgcmVzb3VyY2VzLi4uYCk7XG4gIGNvbnNvbGUubG9nKGBbQ2xlYW51cF0gTWluaW11bSBhZ2U6ICR7b3B0aW9ucy5taW5BZ2VIb3Vyc30gaG91cnNgKTtcblxuICAvLyBRdWVyeSBmb3IgdGVzdCByZXNvdXJjZXNcbiAgY29uc3QgcXVlcnkgPSBgXG4gICAgUmVzb3VyY2VzXG4gICAgfCB3aGVyZSB0YWdzWyd0ZXN0Om1hbmFnZWQtYnknXSA9PSAndGVycmFmb3JtLWNkay1jb25zdHJ1Y3RzLXRlc3RzJ1xuICAgIHwgd2hlcmUgdGFnc1sndGVzdDphdXRvLWNsZWFudXAnXSA9PSAndHJ1ZSdcbiAgICB8IHByb2plY3QgaWQsIHR5cGUsIG5hbWUsIGxvY2F0aW9uLCByZXNvdXJjZUdyb3VwLFxuICAgICAgICAgICAgICB0ZXN0UnVuSWQgPSB0YWdzWyd0ZXN0OnJ1bi1pZCddLFxuICAgICAgICAgICAgICBjcmVhdGVkQXQgPSB0YWdzWyd0ZXN0OmNyZWF0ZWQtYXQnXSxcbiAgICAgICAgICAgICAgY2xlYW51cEFmdGVyID0gdGFnc1sndGVzdDpjbGVhbnVwLWFmdGVyJ10sXG4gICAgICAgICAgICAgIHRlc3ROYW1lID0gdGFnc1sndGVzdDpuYW1lJ11cbiAgICB8IG9yZGVyIGJ5IHRvc3RyaW5nKGNyZWF0ZWRBdCkgYXNjXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb25BcmcgPSBvcHRpb25zLnN1YnNjcmlwdGlvblxuICAgICAgPyBgLS1zdWJzY3JpcHRpb25zIFwiJHtvcHRpb25zLnN1YnNjcmlwdGlvbn1cImBcbiAgICAgIDogXCJcIjtcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBgYXogZ3JhcGggcXVlcnkgLXEgXCIke3F1ZXJ5LnJlcGxhY2UoL1xcbi9nLCBcIiBcIil9XCIgJHtzdWJzY3JpcHRpb25Bcmd9IC0tb3V0cHV0IGpzb25gO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gZXhlY1N5bmMoY29tbWFuZCwge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBcInBpcGVcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVzdWx0KTtcbiAgICBjb25zdCByZXNvdXJjZXMgPSBwYXJzZWQuZGF0YSB8fCBbXTtcblxuICAgIGNvbnNvbGUubG9nKGBbQ2xlYW51cF0gRm91bmQgJHtyZXNvdXJjZXMubGVuZ3RofSB0ZXN0IHJlc291cmNlc2ApO1xuXG4gICAgLy8gRmlsdGVyIGJ5IGFnZSBhbmQgY2xlYW51cCBlbGlnaWJpbGl0eVxuICAgIGNvbnN0IG9ycGhhbmVkOiBPcnBoYW5lZFJlc291cmNlW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG4gICAgICBjb25zdCBjcmVhdGVkQXQgPSBuZXcgRGF0ZShyZXNvdXJjZS5jcmVhdGVkQXQpO1xuICAgICAgY29uc3QgY2xlYW51cEFmdGVyID0gbmV3IERhdGUocmVzb3VyY2UuY2xlYW51cEFmdGVyKTtcbiAgICAgIGNvbnN0IGFnZUhvdXJzID0gKG5vdy5nZXRUaW1lKCkgLSBjcmVhdGVkQXQuZ2V0VGltZSgpKSAvICg2MCAqIDYwICogMTAwMCk7XG5cbiAgICAgIC8vIEFwcGx5IHNhZmV0eSBjaGVja3NcbiAgICAgIGlmIChhZ2VIb3VycyA8IE1JTklNVU1fQUdFX0hPVVJTKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBbQ2xlYW51cF0gU2tpcHBpbmcgJHtyZXNvdXJjZS5uYW1lfTogdG9vIHlvdW5nICgke2FnZUhvdXJzLnRvRml4ZWQoMSl9aCA8ICR7TUlOSU1VTV9BR0VfSE9VUlN9aClgLFxuICAgICAgICApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vdyA8IGNsZWFudXBBZnRlcikge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgW0NsZWFudXBdIFNraXBwaW5nICR7cmVzb3VyY2UubmFtZX06IG5vdCB5ZXQgZWxpZ2libGUgZm9yIGNsZWFudXBgLFxuICAgICAgICApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFnZUhvdXJzIDwgb3B0aW9ucy5taW5BZ2VIb3Vycykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgW0NsZWFudXBdIFNraXBwaW5nICR7cmVzb3VyY2UubmFtZX06IHlvdW5nZXIgdGhhbiBtaW4gYWdlICgke2FnZUhvdXJzLnRvRml4ZWQoMSl9aCA8ICR7b3B0aW9ucy5taW5BZ2VIb3Vyc31oKWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBvcnBoYW5lZC5wdXNoKHtcbiAgICAgICAgcmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG4gICAgICAgIHJlc291cmNlVHlwZTogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgbmFtZTogcmVzb3VyY2UubmFtZSxcbiAgICAgICAgbG9jYXRpb246IHJlc291cmNlLmxvY2F0aW9uLFxuICAgICAgICByZXNvdXJjZUdyb3VwOiByZXNvdXJjZS5yZXNvdXJjZUdyb3VwLFxuICAgICAgICB0ZXN0UnVuSWQ6IHJlc291cmNlLnRlc3RSdW5JZCxcbiAgICAgICAgY3JlYXRlZEF0LFxuICAgICAgICBjbGVhbnVwQWZ0ZXIsXG4gICAgICAgIHRlc3ROYW1lOiByZXNvdXJjZS50ZXN0TmFtZSxcbiAgICAgICAgYWdlSG91cnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbQ2xlYW51cF0gRm91bmQgJHtvcnBoYW5lZC5sZW5ndGh9IG9ycGhhbmVkIHJlc291cmNlcyBlbGlnaWJsZSBmb3IgY2xlYW51cGAsXG4gICAgKTtcblxuICAgIC8vIExpbWl0IHJlc291cmNlcyBpZiBzcGVjaWZpZWRcbiAgICBpZiAob3B0aW9ucy5tYXhSZXNvdXJjZXMgJiYgb3JwaGFuZWQubGVuZ3RoID4gb3B0aW9ucy5tYXhSZXNvdXJjZXMpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbQ2xlYW51cF0gTGltaXRpbmcgdG8gJHtvcHRpb25zLm1heFJlc291cmNlc30gcmVzb3VyY2VzYCk7XG4gICAgICByZXR1cm4gb3JwaGFuZWQuc2xpY2UoMCwgb3B0aW9ucy5tYXhSZXNvdXJjZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBvcnBoYW5lZDtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBcIltDbGVhbnVwXSBGYWlsZWQgdG8gZmluZCBvcnBoYW5lZCByZXNvdXJjZXM6XCIsXG4gICAgICBlcnJvci5tZXNzYWdlLFxuICAgICk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGVhbnMgdXAgb3JwaGFuZWQgdGVzdCByZXNvdXJjZXNcbiAqXG4gKiBEZWxldGVzIHJlc291cmNlIGdyb3VwcyBjb250YWluaW5nIG9ycGhhbmVkIHRlc3QgcmVzb3VyY2VzLlxuICogSW1wbGVtZW50cyBzYWZldHkgY2hlY2tzIGFuZCBkcnktcnVuIG1vZGUuXG4gKlxuICogQHBhcmFtIHJlc291cmNlcyAtIExpc3Qgb2Ygb3JwaGFuZWQgcmVzb3VyY2VzIHRvIGNsZWFuIHVwXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENsZWFudXAgb3B0aW9uc1xuICogQHJldHVybnMgQ2xlYW51cCByZXN1bHQgd2l0aCBzdGF0aXN0aWNzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhbnVwT3JwaGFuZWRSZXNvdXJjZXMoXG4gIHJlc291cmNlczogT3JwaGFuZWRSZXNvdXJjZVtdLFxuICBvcHRpb25zOiBDbGVhbnVwT3B0aW9ucyxcbik6IFByb21pc2U8Q2xlYW51cFJlc3VsdD4ge1xuICBpZiAocmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiW0NsZWFudXBdIE5vIHJlc291cmNlcyB0byBjbGVhbiB1cFwiKTtcbiAgICByZXR1cm4geyBkZWxldGVkOiAwLCBmYWlsZWQ6IDAsIHNraXBwZWQ6IDAgfTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgIGNvbnNvbGUubG9nKFwiW0NsZWFudXBdIERSWSBSVU4gLSBXb3VsZCBkZWxldGUgdGhlIGZvbGxvd2luZyByZXNvdXJjZXM6XCIpO1xuICAgIHJlc291cmNlcy5mb3JFYWNoKChyKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYCAgLSAke3IubmFtZX0gKCR7ci5yZXNvdXJjZVR5cGV9KSBpbiAke3IucmVzb3VyY2VHcm91cH0gLSBBZ2U6ICR7ci5hZ2VIb3Vycy50b0ZpeGVkKDEpfWhgLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyBkZWxldGVkOiAwLCBmYWlsZWQ6IDAsIHNraXBwZWQ6IHJlc291cmNlcy5sZW5ndGggfTtcbiAgfVxuXG4gIC8vIEdyb3VwIHJlc291cmNlcyBieSByZXNvdXJjZSBncm91cCBmb3IgZWZmaWNpZW50IGRlbGV0aW9uXG4gIGNvbnN0IGJ5UmVzb3VyY2VHcm91cCA9IG5ldyBNYXA8c3RyaW5nLCBPcnBoYW5lZFJlc291cmNlW10+KCk7XG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBieVJlc291cmNlR3JvdXAuZ2V0KHJlc291cmNlLnJlc291cmNlR3JvdXApIHx8IFtdO1xuICAgIGdyb3VwLnB1c2gocmVzb3VyY2UpO1xuICAgIGJ5UmVzb3VyY2VHcm91cC5zZXQocmVzb3VyY2UucmVzb3VyY2VHcm91cCwgZ3JvdXApO1xuICB9XG5cbiAgY29uc29sZS5sb2coXG4gICAgYFtDbGVhbnVwXSBEZWxldGluZyAke2J5UmVzb3VyY2VHcm91cC5zaXplfSByZXNvdXJjZSBncm91cHMgY29udGFpbmluZyAke3Jlc291cmNlcy5sZW5ndGh9IHJlc291cmNlc2AsXG4gICk7XG5cbiAgbGV0IGRlbGV0ZWQgPSAwO1xuICBsZXQgZmFpbGVkID0gMDtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW3JnTmFtZSwgcmdSZXNvdXJjZXNdIG9mIGJ5UmVzb3VyY2VHcm91cCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtDbGVhbnVwXSBEZWxldGluZyByZXNvdXJjZSBncm91cDogJHtyZ05hbWV9ICgke3JnUmVzb3VyY2VzLmxlbmd0aH0gcmVzb3VyY2VzKWAsXG4gICAgICApO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCByZXNvdXJjZXMgaW4gdGhlIGdyb3VwIGFyZSB0ZXN0IHJlc291cmNlc1xuICAgICAgY29uc3QgYWxsVGVzdFJlc291cmNlcyA9IHJnUmVzb3VyY2VzLmV2ZXJ5KFxuICAgICAgICAocikgPT4gci50ZXN0UnVuSWQgJiYgci5hZ2VIb3VycyA+PSBNSU5JTVVNX0FHRV9IT1VSUyxcbiAgICAgICk7XG5cbiAgICAgIGlmICghYWxsVGVzdFJlc291cmNlcykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtDbGVhbnVwXSBTa2lwcGluZyAke3JnTmFtZX06IG5vdCBhbGwgcmVzb3VyY2VzIGFyZSB2YWxpZCB0ZXN0IHJlc291cmNlc2AsXG4gICAgICAgICk7XG4gICAgICAgIGZhaWxlZCArPSByZ1Jlc291cmNlcy5sZW5ndGg7XG4gICAgICAgIGVycm9ycy5wdXNoKGBSZXNvdXJjZSBncm91cCAke3JnTmFtZX0gY29udGFpbnMgbm9uLXRlc3QgcmVzb3VyY2VzYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBEZWxldGUgcmVzb3VyY2UgZ3JvdXAgKGFzeW5jLCBuby13YWl0KVxuICAgICAgZXhlY1N5bmMoYGF6IGdyb3VwIGRlbGV0ZSAtLW5hbWUgXCIke3JnTmFtZX1cIiAtLXllcyAtLW5vLXdhaXRgLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgIHN0ZGlvOiBcInBpcGVcIixcbiAgICAgIH0pO1xuXG4gICAgICBkZWxldGVkICs9IHJnUmVzb3VyY2VzLmxlbmd0aDtcbiAgICAgIGNvbnNvbGUubG9nKGBbQ2xlYW51cF0g4pyTIEluaXRpYXRlZCBkZWxldGlvbiBvZiAke3JnTmFtZX1gKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbQ2xlYW51cF0g4pyXIEZhaWxlZCB0byBkZWxldGUgJHtyZ05hbWV9OmAsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgZmFpbGVkICs9IHJnUmVzb3VyY2VzLmxlbmd0aDtcbiAgICAgIGVycm9ycy5wdXNoKGBGYWlsZWQgdG8gZGVsZXRlICR7cmdOYW1lfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogQ2xlYW51cFJlc3VsdCA9IHtcbiAgICBkZWxldGVkLFxuICAgIGZhaWxlZCxcbiAgICBza2lwcGVkOiAwLFxuICAgIGVycm9yczogZXJyb3JzLmxlbmd0aCA+IDAgPyBlcnJvcnMgOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgY29uc29sZS5sb2coXCJbQ2xlYW51cF0gU3VtbWFyeTpcIik7XG4gIGNvbnNvbGUubG9nKGAgIC0gRGVsZXRlZDogJHtyZXN1bHQuZGVsZXRlZH0gcmVzb3VyY2VzYCk7XG4gIGNvbnNvbGUubG9nKGAgIC0gRmFpbGVkOiAke3Jlc3VsdC5mYWlsZWR9IHJlc291cmNlc2ApO1xuICBpZiAocmVzdWx0LmVycm9ycykge1xuICAgIGNvbnNvbGUubG9nKGAgIC0gRXJyb3JzOiAke3Jlc3VsdC5lcnJvcnMubGVuZ3RofWApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyByZXNvdXJjZSBjbGVhbnVwIHdpdGggcmV0cnkgbG9naWMgZm9yIGV2ZW50dWFsIGNvbnNpc3RlbmN5XG4gKlxuICogV3JhcHBlciBhcm91bmQgdmVyaWZ5UmVzb3VyY2VzRGVsZXRlZCB0aGF0IGltcGxlbWVudHMgcmV0cnkgbG9naWNcbiAqIHRvIGhhbmRsZSBBenVyZSdzIGV2ZW50dWFsIGNvbnNpc3RlbmN5IGRlbGF5cy5cbiAqXG4gKiBAcGFyYW0gcnVuSWQgLSBUZXN0IHJ1biBVVUlEIHRvIHZlcmlmeVxuICogQHBhcmFtIGV4cGVjdGVkUmVzb3VyY2VzIC0gTGlzdCBvZiByZXNvdXJjZXMgdGhhdCBzaG91bGQgYmUgZGVsZXRlZFxuICogQHBhcmFtIHN1YnNjcmlwdGlvbiAtIE9wdGlvbmFsIHN1YnNjcmlwdGlvbiBJRCB0byBxdWVyeVxuICogQHBhcmFtIG1heFJldHJpZXMgLSBNYXhpbXVtIG51bWJlciBvZiByZXRyeSBhdHRlbXB0c1xuICogQHBhcmFtIHJldHJ5V2FpdE1zIC0gV2FpdCB0aW1lIGJldHdlZW4gcmV0cmllcyBpbiBtaWxsaXNlY29uZHNcbiAqIEByZXR1cm5zIEZpbmFsIHZlcmlmaWNhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVJlc291cmNlc0RlbGV0ZWRXaXRoUmV0cnkoXG4gIHJ1bklkOiBzdHJpbmcsXG4gIGV4cGVjdGVkUmVzb3VyY2VzOiBSZXNvdXJjZU1ldGFkYXRhW10sXG4gIHN1YnNjcmlwdGlvbj86IHN0cmluZyxcbiAgbWF4UmV0cmllczogbnVtYmVyID0gTUFYX1JFVFJJRVMsXG4gIHJldHJ5V2FpdE1zOiBudW1iZXIgPSBSRVRSWV9XQUlUX01TLFxuKTogUHJvbWlzZTxWZXJpZmljYXRpb25SZXN1bHQ+IHtcbiAgbGV0IGxhc3RSZXN1bHQ6IFZlcmlmaWNhdGlvblJlc3VsdDtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBtYXhSZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICBjb25zb2xlLmxvZyhgW1ZlcmlmaWNhdGlvbl0gQXR0ZW1wdCAke2F0dGVtcHR9LyR7bWF4UmV0cmllc31gKTtcblxuICAgIGxhc3RSZXN1bHQgPSB2ZXJpZnlSZXNvdXJjZXNEZWxldGVkKHJ1bklkLCBleHBlY3RlZFJlc291cmNlcywgc3Vic2NyaXB0aW9uKTtcblxuICAgIGlmIChsYXN0UmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiW1ZlcmlmaWNhdGlvbl0g4pyTIEFsbCByZXNvdXJjZXMgY29uZmlybWVkIGRlbGV0ZWRcIik7XG4gICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAoYXR0ZW1wdCA8IG1heFJldHJpZXMpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgW1ZlcmlmaWNhdGlvbl0gRm91bmQgJHtsYXN0UmVzdWx0LmZvdW5kQ291bnR9IHJlc291cmNlcywgcmV0cnlpbmcgaW4gJHtyZXRyeVdhaXRNcyAvIDEwMDB9cy4uLmAsXG4gICAgICApO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmV0cnlXYWl0TXMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmVycm9yKFxuICAgIGBbVmVyaWZpY2F0aW9uXSDinJcgRmFpbGVkIGFmdGVyICR7bWF4UmV0cmllc30gYXR0ZW1wdHM6ICR7bGFzdFJlc3VsdCEubWVzc2FnZX1gLFxuICApO1xuICByZXR1cm4gbGFzdFJlc3VsdCE7XG59XG4iXX0=
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW51cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL2xpYi9jbGVhbnVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUF5U0Esd0RBbURDO0FBV0Qsc0RBeUdDO0FBWUQsNERBd0ZDO0FBZUQsMEVBK0JDOztBQWxtQkQ7Ozs7O0dBS0c7QUFFSCxpREFBeUM7QUFpTXpDOztHQUVHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFFNUI7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFdEI7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxhQUFhO0FBRTFDOztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7SUFDakM7O09BRUc7SUFDSSxzQkFBc0I7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsSUFBQSx3QkFBUSxFQUFDLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxtQkFBbUIsQ0FBQyxPQUFlO1FBQ3pDLElBQUksQ0FBQztZQUNILE9BQU8sSUFBQSx3QkFBUSxFQUFDLE9BQU8sRUFBRTtnQkFDdkIsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxNQUFNO2FBQ2QsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FDYiw2QkFBNkIsS0FBSyxDQUFDLE9BQU8sSUFBSTtnQkFDNUMsWUFBWSxPQUFPLElBQUk7Z0JBQ3ZCLFdBQVcsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FDakQsQ0FBQztRQUNK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VUFBVSxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUU1RSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7WUFDaEUsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsd0JBQXdCLFVBQVUsQ0FBQyxVQUFVLDJCQUEyQixXQUFXLEdBQUcsSUFBSSxNQUFNLENBQ2pHLENBQUM7WUFDRixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsS0FBSyxDQUNYLGlDQUFpQyxVQUFVLGNBQWMsVUFBVyxDQUFDLE9BQU8sRUFBRSxDQUMvRSxDQUFDO0lBQ0YsT0FBTyxVQUFXLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xlYW51cCBhbmQgdmVyaWZpY2F0aW9uIHV0aWxpdGllcyBmb3IgaW50ZWdyYXRpb24gdGVzdHNcbiAqXG4gKiBQcm92aWRlcyBmdW5jdGlvbnMgZm9yIHZlcmlmeWluZyByZXNvdXJjZSBkZWxldGlvbiB2aWEgQXp1cmUgUmVzb3VyY2UgR3JhcGhcbiAqIGFuZCBmaW5kaW5nL2NsZWFuaW5nIG9ycGhhbmVkIHJlc291cmNlcyB3aXRoIGNvbXByZWhlbnNpdmUgc2FmZXR5IG1lY2hhbmlzbXMuXG4gKi9cblxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuXG4vKipcbiAqIE1ldGFkYXRhIGZvciBhbiBpbmRpdmlkdWFsIHJlc291cmNlIGNyZWF0ZWQgZHVyaW5nIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZU1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIEF6dXJlIHJlc291cmNlIElEXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF6dXJlIHJlc291cmNlIHR5cGUgKGUuZy4sICdNaWNyb3NvZnQuUmVzb3VyY2VzL3Jlc291cmNlR3JvdXBzJylcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIGxvY2F0aW9uIChBenVyZSByZWdpb24pXG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2UgdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGVzdCBydW4gSUQgdGhhdCBjcmVhdGVkIHRoaXMgcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RSdW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiByZXNvdXJjZSB3YXMgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcmVzb3VyY2Ugd2FzIHN1Y2Nlc3NmdWxseSBkZXN0cm95ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlc3Ryb3llZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHJlc291cmNlIHdhcyBkZXN0cm95ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlc3Ryb3llZEF0PzogRGF0ZTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgcmVzb3VyY2UgY2xlYW51cCB2ZXJpZmljYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZmljYXRpb25SZXN1bHQge1xuICAvKipcbiAgICogV2hldGhlciB2ZXJpZmljYXRpb24gc3VjY2VlZGVkIChhbGwgcmVzb3VyY2VzIGRlbGV0ZWQpXG4gICAqL1xuICByZWFkb25seSBzdWNjZXNzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIHJlc3VsdFxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIG9ycGhhbmVkIHJlc291cmNlIElEcyAoaWYgYW55KVxuICAgKi9cbiAgcmVhZG9ubHkgb3JwaGFuZWRSZXNvdXJjZXM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzb3VyY2VzIGV4cGVjdGVkIHRvIGJlIGRlbGV0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4cGVjdGVkQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXNvdXJjZXMgYWN0dWFsbHkgZm91bmRcbiAgICovXG4gIHJlYWRvbmx5IGZvdW5kQ291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY2xlYW51cCBvcGVyYXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYW51cE9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBwZXJmb3JtIGRyeS1ydW4gKG5vIGFjdHVhbCBkZWxldGlvbilcbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWluaW11bSBhZ2UgaW4gaG91cnMgYmVmb3JlIHJlc291cmNlIGNhbiBiZSBjbGVhbmVkIHVwXG4gICAqIFNldCB0byAwIHRvIGZvcmNlIGNsZWFudXAgb2YgYWxsIHJlc291cmNlcyByZWdhcmRsZXNzIG9mIGFnZSAoYnlwYXNzZXMgc2FmZXR5IGNoZWNrcylcbiAgICovXG4gIHJlYWRvbmx5IG1pbkFnZUhvdXJzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEF6dXJlIHN1YnNjcmlwdGlvbiBJRCB0byB0YXJnZXQgKG9wdGlvbmFsKVxuICAgKi9cbiAgcmVhZG9ubHkgc3Vic2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyByZXNvdXJjZSBncm91cHMgdG8gdGFyZ2V0IChvcHRpb25hbClcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlR3JvdXBzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJlc291cmNlcyB0byBjbGVhbiB1cCBpbiBvbmUgb3BlcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBtYXhSZXNvdXJjZXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3JwaGFuZWQgcmVzb3VyY2UgaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcnBoYW5lZFJlc291cmNlIHtcbiAgLyoqXG4gICAqIEF6dXJlIHJlc291cmNlIElEXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF6dXJlIHJlc291cmNlIHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIGxvY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBncm91cCBuYW1lXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUdyb3VwOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRlc3QgcnVuIElEIGZyb20gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGVzdFJ1bklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0aW9uIHRpbWVzdGFtcCBmcm9tIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRBdDogRGF0ZTtcblxuICAvKipcbiAgICogQ2xlYW51cCBhZnRlciB0aW1lc3RhbXAgZnJvbSB0YWdzXG4gICAqL1xuICByZWFkb25seSBjbGVhbnVwQWZ0ZXI6IERhdGU7XG5cbiAgLyoqXG4gICAqIFRlc3QgbmFtZSBmcm9tIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRlc3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFnZSBpbiBob3VycyBzaW5jZSBjcmVhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYWdlSG91cnM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgY2xlYW51cCBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGVhbnVwUmVzdWx0IHtcbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXNvdXJjZXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0ZWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHJlc291cmNlcyB0aGF0IGZhaWxlZCB0byBkZWxldGVcbiAgICovXG4gIHJlYWRvbmx5IGZhaWxlZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzb3VyY2VzIHNraXBwZWQgKGUuZy4sIHRvbyB5b3VuZylcbiAgICovXG4gIHJlYWRvbmx5IHNraXBwZWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogRGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMgZm9yIGZhaWx1cmVzXG4gICAqL1xuICByZWFkb25seSBlcnJvcnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBNaW5pbXVtIGFnZSB0aHJlc2hvbGQgKGhvdXJzKSBiZWZvcmUgY2xlYW51cCBpcyBhbGxvd2VkXG4gKi9cbmNvbnN0IE1JTklNVU1fQUdFX0hPVVJTID0gMjtcblxuLyoqXG4gKiBNYXhpbXVtIHJldHJ5IGF0dGVtcHRzIGZvciBldmVudHVhbCBjb25zaXN0ZW5jeVxuICovXG5jb25zdCBNQVhfUkVUUklFUyA9IDU7XG5cbi8qKlxuICogV2FpdCB0aW1lIGJldHdlZW4gcmV0cmllcyAobWlsbGlzZWNvbmRzKVxuICovXG5jb25zdCBSRVRSWV9XQUlUX01TID0gMzAwMDA7IC8vIDMwIHNlY29uZHNcblxuLyoqXG4gKiBNYWluIGNsZWFudXAgc2VydmljZSBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VDbGVhbnVwU2VydmljZSB7XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgQXp1cmUgQ0xJIGlzIGF2YWlsYWJsZVxuICAgKi9cbiAgcHVibGljIGNoZWNrQXp1cmVDbGlBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKFwiYXogLS12ZXJzaW9uXCIsIHsgc3RkaW86IFwicGlwZVwiIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYW4gQXp1cmUgQ0xJIGNvbW1hbmQgd2l0aCBlcnJvciBoYW5kbGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBleGVjdXRlQXp1cmVDb21tYW5kKGNvbW1hbmQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBleGVjU3luYyhjb21tYW5kLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgIHN0ZGlvOiBcInBpcGVcIixcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEF6dXJlIENMSSBjb21tYW5kIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfVxcbmAgK1xuICAgICAgICAgIGBDb21tYW5kOiAke2NvbW1hbmR9XFxuYCArXG4gICAgICAgICAgYFN0ZGVycjogJHtlcnJvci5zdGRlcnI/LnRvU3RyaW5nKCkgfHwgXCJOL0FcIn1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUXVlcmllcyBBenVyZSBSZXNvdXJjZSBHcmFwaCBmb3IgcmVzb3VyY2VzIGJ5IHRhZ3NcbiAgICpcbiAgICogUmV0dXJucyBlbXB0eSBhcnJheSBvbiBlcnJvcnMgZm9yIGdyYWNlZnVsIGRlZ3JhZGF0aW9uLlxuICAgKi9cbiAgcHVibGljIHF1ZXJ5QXp1cmVSZXNvdXJjZXNCeVRhZ3MoXG4gICAgdGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBzdWJzY3JpcHRpb24/OiBzdHJpbmcsXG4gICk6IGFueVtdIHtcbiAgICAvLyBCdWlsZCB0YWcgZmlsdGVyIGNvbmRpdGlvbnNcbiAgICBjb25zdCB0YWdDb25kaXRpb25zID0gT2JqZWN0LmVudHJpZXModGFncylcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYHRhZ3NbJyR7a2V5fSddID09ICcke3ZhbHVlfSdgKVxuICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gYFxuICAgICAgUmVzb3VyY2VzXG4gICAgICB8IHdoZXJlICR7dGFnQ29uZGl0aW9uc31cbiAgICAgIHwgcHJvamVjdCBpZCwgdHlwZSwgbmFtZSwgbG9jYXRpb24sIHJlc291cmNlR3JvdXAsIHRhZ3NcbiAgICBgO1xuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uQXJnID0gc3Vic2NyaXB0aW9uXG4gICAgICA/IGAtLXN1YnNjcmlwdGlvbnMgXCIke3N1YnNjcmlwdGlvbn1cImBcbiAgICAgIDogXCJcIjtcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBgYXogZ3JhcGggcXVlcnkgLXEgXCIke3F1ZXJ5LnJlcGxhY2UoL1xcbi9nLCBcIiBcIil9XCIgJHtzdWJzY3JpcHRpb25Bcmd9IC0tb3V0cHV0IGpzb25gO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXhlY3V0ZUF6dXJlQ29tbWFuZChjb21tYW5kKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVzdWx0KTtcbiAgICAgIHJldHVybiBwYXJzZWQuZGF0YSB8fCBbXTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHF1ZXJ5IEF6dXJlIFJlc291cmNlIEdyYXBoOlwiLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IGFsbCByZXNvdXJjZXMgd2l0aCBhIHNwZWNpZmljIHRlc3QgcnVuIElEIGFyZSBkZWxldGVkXG4gKlxuICogUGVyZm9ybXMgQXp1cmUgUmVzb3VyY2UgR3JhcGggcXVlcnkgdG8gY2hlY2sgZm9yIHJlbWFpbmluZyByZXNvdXJjZXMuXG4gKiBJbXBsZW1lbnRzIHJldHJ5IGxvZ2ljIHRvIGhhbmRsZSBBenVyZSdzIGV2ZW50dWFsIGNvbnNpc3RlbmN5LlxuICpcbiAqIEBwYXJhbSBydW5JZCAtIFRlc3QgcnVuIFVVSUQgdG8gdmVyaWZ5XG4gKiBAcGFyYW0gZXhwZWN0ZWRSZXNvdXJjZXMgLSBMaXN0IG9mIHJlc291cmNlcyB0aGF0IHNob3VsZCBiZSBkZWxldGVkXG4gKiBAcGFyYW0gc3Vic2NyaXB0aW9uIC0gT3B0aW9uYWwgc3Vic2NyaXB0aW9uIElEIHRvIHF1ZXJ5XG4gKiBAcmV0dXJucyBWZXJpZmljYXRpb24gcmVzdWx0IHdpdGggZGV0YWlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5UmVzb3VyY2VzRGVsZXRlZChcbiAgcnVuSWQ6IHN0cmluZyxcbiAgZXhwZWN0ZWRSZXNvdXJjZXM6IFJlc291cmNlTWV0YWRhdGFbXSxcbiAgc3Vic2NyaXB0aW9uPzogc3RyaW5nLFxuKTogVmVyaWZpY2F0aW9uUmVzdWx0IHtcbiAgY29uc3Qgc2VydmljZSA9IG5ldyBSZXNvdXJjZUNsZWFudXBTZXJ2aWNlKCk7XG5cbiAgLy8gQ2hlY2sgaWYgQXp1cmUgQ0xJIGlzIGF2YWlsYWJsZSBiZWZvcmUgYXR0ZW1wdGluZyB2ZXJpZmljYXRpb25cbiAgaWYgKCFzZXJ2aWNlLmNoZWNrQXp1cmVDbGlBdmFpbGFibGUoKSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIG1lc3NhZ2U6IFwiVmVyaWZpY2F0aW9uIGZhaWxlZDogQXp1cmUgQ0xJIGlzIG5vdCBhdmFpbGFibGVcIixcbiAgICAgIG9ycGhhbmVkUmVzb3VyY2VzOiBbXSxcbiAgICAgIGV4cGVjdGVkQ291bnQ6IGV4cGVjdGVkUmVzb3VyY2VzLmxlbmd0aCxcbiAgICAgIGZvdW5kQ291bnQ6IC0xLFxuICAgIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IG9ycGhhbmVkUmVzb3VyY2VzID0gc2VydmljZS5xdWVyeUF6dXJlUmVzb3VyY2VzQnlUYWdzKFxuICAgICAgeyBcInRlc3QtcnVuLWlkXCI6IHJ1bklkIH0sXG4gICAgICBzdWJzY3JpcHRpb24sXG4gICAgKTtcblxuICAgIGlmIChvcnBoYW5lZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZXNvdXJjZUlkcyA9IG9ycGhhbmVkUmVzb3VyY2VzLm1hcCgocjogYW55KSA9PiByLmlkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgRm91bmQgJHtvcnBoYW5lZFJlc291cmNlcy5sZW5ndGh9IG9ycGhhbmVkIHJlc291cmNlcyBhZnRlciBkZXN0cm95YCxcbiAgICAgICAgb3JwaGFuZWRSZXNvdXJjZXM6IHJlc291cmNlSWRzLFxuICAgICAgICBleHBlY3RlZENvdW50OiBleHBlY3RlZFJlc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGZvdW5kQ291bnQ6IG9ycGhhbmVkUmVzb3VyY2VzLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBtZXNzYWdlOiBcIkFsbCByZXNvdXJjZXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWRcIixcbiAgICAgIG9ycGhhbmVkUmVzb3VyY2VzOiBbXSxcbiAgICAgIGV4cGVjdGVkQ291bnQ6IGV4cGVjdGVkUmVzb3VyY2VzLmxlbmd0aCxcbiAgICAgIGZvdW5kQ291bnQ6IDAsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIG1lc3NhZ2U6IGBWZXJpZmljYXRpb24gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCxcbiAgICAgIG9ycGhhbmVkUmVzb3VyY2VzOiBbXSxcbiAgICAgIGV4cGVjdGVkQ291bnQ6IGV4cGVjdGVkUmVzb3VyY2VzLmxlbmd0aCxcbiAgICAgIGZvdW5kQ291bnQ6IC0xLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kcyBvcnBoYW5lZCB0ZXN0IHJlc291cmNlcyB0aGF0IGFyZSBwYXN0IHRoZWlyIFRUTFxuICpcbiAqIFF1ZXJpZXMgQXp1cmUgZm9yIHJlc291cmNlcyB3aXRoIHRlc3QgdGFncyB0aGF0IGFyZSBvbGRlciB0aGFuXG4gKiB0aGVpciBjbGVhbnVwLWFmdGVyIHRpbWVzdGFtcC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENsZWFudXAgb3B0aW9uc1xuICogQHJldHVybnMgTGlzdCBvZiBvcnBoYW5lZCByZXNvdXJjZXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRPcnBoYW5lZFJlc291cmNlcyhcbiAgb3B0aW9uczogQ2xlYW51cE9wdGlvbnMsXG4pOiBQcm9taXNlPE9ycGhhbmVkUmVzb3VyY2VbXT4ge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuXG4gIGNvbnNvbGUubG9nKGBbQ2xlYW51cF0gU2VhcmNoaW5nIGZvciBvcnBoYW5lZCB0ZXN0IHJlc291cmNlcy4uLmApO1xuICBjb25zb2xlLmxvZyhgW0NsZWFudXBdIE1pbmltdW0gYWdlOiAke29wdGlvbnMubWluQWdlSG91cnN9IGhvdXJzYCk7XG5cbiAgLy8gUXVlcnkgZm9yIHRlc3QgcmVzb3VyY2VzXG4gIC8vIE5PVEU6IFRhZyBuYW1lcyB1c2UgaHlwaGVucyBpbnN0ZWFkIG9mIGNvbG9ucyBiZWNhdXNlIEF6dXJlIEROUyB6b25lc1xuICAvLyBhbmQgc29tZSBvdGhlciByZXNvdXJjZSB0eXBlcyBkb24ndCBzdXBwb3J0IGNvbG9ucyBpbiB0YWcgbmFtZXMuXG4gIGNvbnN0IHF1ZXJ5ID0gYFxuICAgIFJlc291cmNlc1xuICAgIHwgd2hlcmUgdGFnc1sndGVzdC1tYW5hZ2VkLWJ5J10gPT0gJ3RlcnJhZm9ybS1jZGstY29uc3RydWN0cy10ZXN0cydcbiAgICB8IHdoZXJlIHRhZ3NbJ3Rlc3QtYXV0by1jbGVhbnVwJ10gPT0gJ3RydWUnXG4gICAgfCBwcm9qZWN0IGlkLCB0eXBlLCBuYW1lLCBsb2NhdGlvbiwgcmVzb3VyY2VHcm91cCxcbiAgICAgICAgICAgICAgdGVzdFJ1bklkID0gdGFnc1sndGVzdC1ydW4taWQnXSxcbiAgICAgICAgICAgICAgY3JlYXRlZEF0ID0gdGFnc1sndGVzdC1jcmVhdGVkLWF0J10sXG4gICAgICAgICAgICAgIGNsZWFudXBBZnRlciA9IHRhZ3NbJ3Rlc3QtY2xlYW51cC1hZnRlciddLFxuICAgICAgICAgICAgICB0ZXN0TmFtZSA9IHRhZ3NbJ3Rlc3QtbmFtZSddXG4gICAgfCBvcmRlciBieSB0b3N0cmluZyhjcmVhdGVkQXQpIGFzY1xuICBgO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uQXJnID0gb3B0aW9ucy5zdWJzY3JpcHRpb25cbiAgICAgID8gYC0tc3Vic2NyaXB0aW9ucyBcIiR7b3B0aW9ucy5zdWJzY3JpcHRpb259XCJgXG4gICAgICA6IFwiXCI7XG5cbiAgICBjb25zdCBjb21tYW5kID0gYGF6IGdyYXBoIHF1ZXJ5IC1xIFwiJHtxdWVyeS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpfVwiICR7c3Vic2NyaXB0aW9uQXJnfSAtLW91dHB1dCBqc29uYDtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWNTeW5jKGNvbW1hbmQsIHtcbiAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICBzdGRpbzogXCJwaXBlXCIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlc3VsdCk7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gcGFyc2VkLmRhdGEgfHwgW107XG5cbiAgICBjb25zb2xlLmxvZyhgW0NsZWFudXBdIEZvdW5kICR7cmVzb3VyY2VzLmxlbmd0aH0gdGVzdCByZXNvdXJjZXNgKTtcblxuICAgIC8vIEZpbHRlciBieSBhZ2UgYW5kIGNsZWFudXAgZWxpZ2liaWxpdHlcbiAgICBjb25zdCBvcnBoYW5lZDogT3JwaGFuZWRSZXNvdXJjZVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuICAgICAgY29uc3QgY3JlYXRlZEF0ID0gbmV3IERhdGUocmVzb3VyY2UuY3JlYXRlZEF0KTtcbiAgICAgIGNvbnN0IGNsZWFudXBBZnRlciA9IG5ldyBEYXRlKHJlc291cmNlLmNsZWFudXBBZnRlcik7XG4gICAgICBjb25zdCBhZ2VIb3VycyA9IChub3cuZ2V0VGltZSgpIC0gY3JlYXRlZEF0LmdldFRpbWUoKSkgLyAoNjAgKiA2MCAqIDEwMDApO1xuXG4gICAgICAvLyBBcHBseSBzYWZldHkgY2hlY2tzXG4gICAgICAvLyBXaGVuIG1pbkFnZUhvdXJzIGlzIDAgKGZvcmNlIG1vZGUpLCBza2lwIHRoZSBtaW5pbXVtIGFnZSB2YWxpZGF0aW9uXG4gICAgICBpZiAob3B0aW9ucy5taW5BZ2VIb3VycyA+IDAgJiYgYWdlSG91cnMgPCBNSU5JTVVNX0FHRV9IT1VSUykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgW0NsZWFudXBdIFNraXBwaW5nICR7cmVzb3VyY2UubmFtZX06IHRvbyB5b3VuZyAoJHthZ2VIb3Vycy50b0ZpeGVkKDEpfWggPCAke01JTklNVU1fQUdFX0hPVVJTfWgpYCxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIFRUTCAoY2xlYW51cC1hZnRlciB0aW1lc3RhbXApXG4gICAgICAvLyBXaGVuIG1pbkFnZUhvdXJzIGlzIDAgKGZvcmNlIG1vZGUpLCBza2lwIHRoZSBUVEwgY2hlY2sgYXMgd2VsbFxuICAgICAgaWYgKG9wdGlvbnMubWluQWdlSG91cnMgPiAwICYmIG5vdyA8IGNsZWFudXBBZnRlcikge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgW0NsZWFudXBdIFNraXBwaW5nICR7cmVzb3VyY2UubmFtZX06IG5vdCB5ZXQgZWxpZ2libGUgZm9yIGNsZWFudXBgLFxuICAgICAgICApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFnZUhvdXJzIDwgb3B0aW9ucy5taW5BZ2VIb3Vycykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgW0NsZWFudXBdIFNraXBwaW5nICR7cmVzb3VyY2UubmFtZX06IHlvdW5nZXIgdGhhbiBtaW4gYWdlICgke2FnZUhvdXJzLnRvRml4ZWQoMSl9aCA8ICR7b3B0aW9ucy5taW5BZ2VIb3Vyc31oKWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBvcnBoYW5lZC5wdXNoKHtcbiAgICAgICAgcmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG4gICAgICAgIHJlc291cmNlVHlwZTogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgbmFtZTogcmVzb3VyY2UubmFtZSxcbiAgICAgICAgbG9jYXRpb246IHJlc291cmNlLmxvY2F0aW9uLFxuICAgICAgICByZXNvdXJjZUdyb3VwOiByZXNvdXJjZS5yZXNvdXJjZUdyb3VwLFxuICAgICAgICB0ZXN0UnVuSWQ6IHJlc291cmNlLnRlc3RSdW5JZCxcbiAgICAgICAgY3JlYXRlZEF0LFxuICAgICAgICBjbGVhbnVwQWZ0ZXIsXG4gICAgICAgIHRlc3ROYW1lOiByZXNvdXJjZS50ZXN0TmFtZSxcbiAgICAgICAgYWdlSG91cnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbQ2xlYW51cF0gRm91bmQgJHtvcnBoYW5lZC5sZW5ndGh9IG9ycGhhbmVkIHJlc291cmNlcyBlbGlnaWJsZSBmb3IgY2xlYW51cGAsXG4gICAgKTtcblxuICAgIC8vIExpbWl0IHJlc291cmNlcyBpZiBzcGVjaWZpZWRcbiAgICBpZiAob3B0aW9ucy5tYXhSZXNvdXJjZXMgJiYgb3JwaGFuZWQubGVuZ3RoID4gb3B0aW9ucy5tYXhSZXNvdXJjZXMpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbQ2xlYW51cF0gTGltaXRpbmcgdG8gJHtvcHRpb25zLm1heFJlc291cmNlc30gcmVzb3VyY2VzYCk7XG4gICAgICByZXR1cm4gb3JwaGFuZWQuc2xpY2UoMCwgb3B0aW9ucy5tYXhSZXNvdXJjZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBvcnBoYW5lZDtcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBcIltDbGVhbnVwXSBGYWlsZWQgdG8gZmluZCBvcnBoYW5lZCByZXNvdXJjZXM6XCIsXG4gICAgICBlcnJvci5tZXNzYWdlLFxuICAgICk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGVhbnMgdXAgb3JwaGFuZWQgdGVzdCByZXNvdXJjZXNcbiAqXG4gKiBEZWxldGVzIHJlc291cmNlIGdyb3VwcyBjb250YWluaW5nIG9ycGhhbmVkIHRlc3QgcmVzb3VyY2VzLlxuICogSW1wbGVtZW50cyBzYWZldHkgY2hlY2tzIGFuZCBkcnktcnVuIG1vZGUuXG4gKlxuICogQHBhcmFtIHJlc291cmNlcyAtIExpc3Qgb2Ygb3JwaGFuZWQgcmVzb3VyY2VzIHRvIGNsZWFuIHVwXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENsZWFudXAgb3B0aW9uc1xuICogQHJldHVybnMgQ2xlYW51cCByZXN1bHQgd2l0aCBzdGF0aXN0aWNzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhbnVwT3JwaGFuZWRSZXNvdXJjZXMoXG4gIHJlc291cmNlczogT3JwaGFuZWRSZXNvdXJjZVtdLFxuICBvcHRpb25zOiBDbGVhbnVwT3B0aW9ucyxcbik6IFByb21pc2U8Q2xlYW51cFJlc3VsdD4ge1xuICBpZiAocmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiW0NsZWFudXBdIE5vIHJlc291cmNlcyB0byBjbGVhbiB1cFwiKTtcbiAgICByZXR1cm4geyBkZWxldGVkOiAwLCBmYWlsZWQ6IDAsIHNraXBwZWQ6IDAgfTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgIGNvbnNvbGUubG9nKFwiW0NsZWFudXBdIERSWSBSVU4gLSBXb3VsZCBkZWxldGUgdGhlIGZvbGxvd2luZyByZXNvdXJjZXM6XCIpO1xuICAgIHJlc291cmNlcy5mb3JFYWNoKChyKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYCAgLSAke3IubmFtZX0gKCR7ci5yZXNvdXJjZVR5cGV9KSBpbiAke3IucmVzb3VyY2VHcm91cH0gLSBBZ2U6ICR7ci5hZ2VIb3Vycy50b0ZpeGVkKDEpfWhgLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyBkZWxldGVkOiAwLCBmYWlsZWQ6IDAsIHNraXBwZWQ6IHJlc291cmNlcy5sZW5ndGggfTtcbiAgfVxuXG4gIC8vIEdyb3VwIHJlc291cmNlcyBieSByZXNvdXJjZSBncm91cCBmb3IgZWZmaWNpZW50IGRlbGV0aW9uXG4gIGNvbnN0IGJ5UmVzb3VyY2VHcm91cCA9IG5ldyBNYXA8c3RyaW5nLCBPcnBoYW5lZFJlc291cmNlW10+KCk7XG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBieVJlc291cmNlR3JvdXAuZ2V0KHJlc291cmNlLnJlc291cmNlR3JvdXApIHx8IFtdO1xuICAgIGdyb3VwLnB1c2gocmVzb3VyY2UpO1xuICAgIGJ5UmVzb3VyY2VHcm91cC5zZXQocmVzb3VyY2UucmVzb3VyY2VHcm91cCwgZ3JvdXApO1xuICB9XG5cbiAgY29uc29sZS5sb2coXG4gICAgYFtDbGVhbnVwXSBEZWxldGluZyAke2J5UmVzb3VyY2VHcm91cC5zaXplfSByZXNvdXJjZSBncm91cHMgY29udGFpbmluZyAke3Jlc291cmNlcy5sZW5ndGh9IHJlc291cmNlc2AsXG4gICk7XG5cbiAgbGV0IGRlbGV0ZWQgPSAwO1xuICBsZXQgZmFpbGVkID0gMDtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW3JnTmFtZSwgcmdSZXNvdXJjZXNdIG9mIGJ5UmVzb3VyY2VHcm91cCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtDbGVhbnVwXSBEZWxldGluZyByZXNvdXJjZSBncm91cDogJHtyZ05hbWV9ICgke3JnUmVzb3VyY2VzLmxlbmd0aH0gcmVzb3VyY2VzKWAsXG4gICAgICApO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCByZXNvdXJjZXMgaW4gdGhlIGdyb3VwIGFyZSB0ZXN0IHJlc291cmNlc1xuICAgICAgLy8gV2hlbiBtaW5BZ2VIb3VycyBpcyAwIChmb3JjZSBtb2RlKSwgYWxsb3cgZGVsZXRpb24gb2YgcmVzb3VyY2VzIGJlbG93IG1pbmltdW0gYWdlXG4gICAgICBjb25zdCBhbGxUZXN0UmVzb3VyY2VzID0gcmdSZXNvdXJjZXMuZXZlcnkoXG4gICAgICAgIChyKSA9PlxuICAgICAgICAgIHIudGVzdFJ1bklkICYmXG4gICAgICAgICAgKG9wdGlvbnMubWluQWdlSG91cnMgPT09IDAgfHwgci5hZ2VIb3VycyA+PSBNSU5JTVVNX0FHRV9IT1VSUyksXG4gICAgICApO1xuXG4gICAgICBpZiAoIWFsbFRlc3RSZXNvdXJjZXMpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbQ2xlYW51cF0gU2tpcHBpbmcgJHtyZ05hbWV9OiBub3QgYWxsIHJlc291cmNlcyBhcmUgdmFsaWQgdGVzdCByZXNvdXJjZXNgLFxuICAgICAgICApO1xuICAgICAgICBmYWlsZWQgKz0gcmdSZXNvdXJjZXMubGVuZ3RoO1xuICAgICAgICBlcnJvcnMucHVzaChgUmVzb3VyY2UgZ3JvdXAgJHtyZ05hbWV9IGNvbnRhaW5zIG5vbi10ZXN0IHJlc291cmNlc2ApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gRGVsZXRlIHJlc291cmNlIGdyb3VwIChhc3luYywgbm8td2FpdClcbiAgICAgIGV4ZWNTeW5jKGBheiBncm91cCBkZWxldGUgLS1uYW1lIFwiJHtyZ05hbWV9XCIgLS15ZXMgLS1uby13YWl0YCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICBzdGRpbzogXCJwaXBlXCIsXG4gICAgICB9KTtcblxuICAgICAgZGVsZXRlZCArPSByZ1Jlc291cmNlcy5sZW5ndGg7XG4gICAgICBjb25zb2xlLmxvZyhgW0NsZWFudXBdIOKckyBJbml0aWF0ZWQgZGVsZXRpb24gb2YgJHtyZ05hbWV9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW0NsZWFudXBdIOKclyBGYWlsZWQgdG8gZGVsZXRlICR7cmdOYW1lfTpgLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgIGZhaWxlZCArPSByZ1Jlc291cmNlcy5sZW5ndGg7XG4gICAgICBlcnJvcnMucHVzaChgRmFpbGVkIHRvIGRlbGV0ZSAke3JnTmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IENsZWFudXBSZXN1bHQgPSB7XG4gICAgZGVsZXRlZCxcbiAgICBmYWlsZWQsXG4gICAgc2tpcHBlZDogMCxcbiAgICBlcnJvcnM6IGVycm9ycy5sZW5ndGggPiAwID8gZXJyb3JzIDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIGNvbnNvbGUubG9nKFwiW0NsZWFudXBdIFN1bW1hcnk6XCIpO1xuICBjb25zb2xlLmxvZyhgICAtIERlbGV0ZWQ6ICR7cmVzdWx0LmRlbGV0ZWR9IHJlc291cmNlc2ApO1xuICBjb25zb2xlLmxvZyhgICAtIEZhaWxlZDogJHtyZXN1bHQuZmFpbGVkfSByZXNvdXJjZXNgKTtcbiAgaWYgKHJlc3VsdC5lcnJvcnMpIHtcbiAgICBjb25zb2xlLmxvZyhgICAtIEVycm9yczogJHtyZXN1bHQuZXJyb3JzLmxlbmd0aH1gKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgcmVzb3VyY2UgY2xlYW51cCB3aXRoIHJldHJ5IGxvZ2ljIGZvciBldmVudHVhbCBjb25zaXN0ZW5jeVxuICpcbiAqIFdyYXBwZXIgYXJvdW5kIHZlcmlmeVJlc291cmNlc0RlbGV0ZWQgdGhhdCBpbXBsZW1lbnRzIHJldHJ5IGxvZ2ljXG4gKiB0byBoYW5kbGUgQXp1cmUncyBldmVudHVhbCBjb25zaXN0ZW5jeSBkZWxheXMuXG4gKlxuICogQHBhcmFtIHJ1bklkIC0gVGVzdCBydW4gVVVJRCB0byB2ZXJpZnlcbiAqIEBwYXJhbSBleHBlY3RlZFJlc291cmNlcyAtIExpc3Qgb2YgcmVzb3VyY2VzIHRoYXQgc2hvdWxkIGJlIGRlbGV0ZWRcbiAqIEBwYXJhbSBzdWJzY3JpcHRpb24gLSBPcHRpb25hbCBzdWJzY3JpcHRpb24gSUQgdG8gcXVlcnlcbiAqIEBwYXJhbSBtYXhSZXRyaWVzIC0gTWF4aW11bSBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHNcbiAqIEBwYXJhbSByZXRyeVdhaXRNcyAtIFdhaXQgdGltZSBiZXR3ZWVuIHJldHJpZXMgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcmV0dXJucyBGaW5hbCB2ZXJpZmljYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlSZXNvdXJjZXNEZWxldGVkV2l0aFJldHJ5KFxuICBydW5JZDogc3RyaW5nLFxuICBleHBlY3RlZFJlc291cmNlczogUmVzb3VyY2VNZXRhZGF0YVtdLFxuICBzdWJzY3JpcHRpb24/OiBzdHJpbmcsXG4gIG1heFJldHJpZXM6IG51bWJlciA9IE1BWF9SRVRSSUVTLFxuICByZXRyeVdhaXRNczogbnVtYmVyID0gUkVUUllfV0FJVF9NUyxcbik6IFByb21pc2U8VmVyaWZpY2F0aW9uUmVzdWx0PiB7XG4gIGxldCBsYXN0UmVzdWx0OiBWZXJpZmljYXRpb25SZXN1bHQ7XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4UmV0cmllczsgYXR0ZW1wdCsrKSB7XG4gICAgY29uc29sZS5sb2coYFtWZXJpZmljYXRpb25dIEF0dGVtcHQgJHthdHRlbXB0fS8ke21heFJldHJpZXN9YCk7XG5cbiAgICBsYXN0UmVzdWx0ID0gdmVyaWZ5UmVzb3VyY2VzRGVsZXRlZChydW5JZCwgZXhwZWN0ZWRSZXNvdXJjZXMsIHN1YnNjcmlwdGlvbik7XG5cbiAgICBpZiAobGFzdFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIltWZXJpZmljYXRpb25dIOKckyBBbGwgcmVzb3VyY2VzIGNvbmZpcm1lZCBkZWxldGVkXCIpO1xuICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKGF0dGVtcHQgPCBtYXhSZXRyaWVzKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtWZXJpZmljYXRpb25dIEZvdW5kICR7bGFzdFJlc3VsdC5mb3VuZENvdW50fSByZXNvdXJjZXMsIHJldHJ5aW5nIGluICR7cmV0cnlXYWl0TXMgLyAxMDAwfXMuLi5gLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHJldHJ5V2FpdE1zKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5lcnJvcihcbiAgICBgW1ZlcmlmaWNhdGlvbl0g4pyXIEZhaWxlZCBhZnRlciAke21heFJldHJpZXN9IGF0dGVtcHRzOiAke2xhc3RSZXN1bHQhLm1lc3NhZ2V9YCxcbiAgKTtcbiAgcmV0dXJuIGxhc3RSZXN1bHQhO1xufVxuIl19
|
|
@@ -43,19 +43,22 @@ class TestRunMetadata {
|
|
|
43
43
|
*/
|
|
44
44
|
generateSystemTags() {
|
|
45
45
|
// Build tags object with all properties
|
|
46
|
+
// NOTE: Tag names use hyphens instead of colons because Azure DNS zones
|
|
47
|
+
// and some other resource types don't support colons (":") in tag names.
|
|
48
|
+
// See: https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/tag-resources#limitations
|
|
46
49
|
const tags = {
|
|
47
50
|
// Resource Identification
|
|
48
|
-
"test
|
|
49
|
-
"test
|
|
50
|
-
"test
|
|
51
|
+
"test-run-id": this.runId,
|
|
52
|
+
"test-name": this.testName,
|
|
53
|
+
"test-resource-type": "integration-test",
|
|
51
54
|
// Temporal Tracking
|
|
52
|
-
"test
|
|
53
|
-
"test
|
|
54
|
-
"test
|
|
55
|
+
"test-created-at": this.createdAt.toISOString(),
|
|
56
|
+
"test-cleanup-after": this.cleanupAfter.toISOString(),
|
|
57
|
+
"test-max-age-hours": this.maxAgeHours.toString(),
|
|
55
58
|
// Lifecycle Management
|
|
56
|
-
"test
|
|
57
|
-
"test
|
|
58
|
-
"test
|
|
59
|
+
"test-managed-by": "terraform-cdk-constructs-tests",
|
|
60
|
+
"test-auto-cleanup": this.autoCleanup.toString(),
|
|
61
|
+
"test-cleanup-policy": this.cleanupPolicy,
|
|
59
62
|
// Backward Compatibility
|
|
60
63
|
environment: "integration-test",
|
|
61
64
|
purpose: "integration-test",
|
|
@@ -63,19 +66,19 @@ class TestRunMetadata {
|
|
|
63
66
|
// Add CI/CD context if available
|
|
64
67
|
if (this.ciContext) {
|
|
65
68
|
if (this.ciContext.pipelineId) {
|
|
66
|
-
tags["test
|
|
69
|
+
tags["test-ci-pipeline"] = this.ciContext.pipelineId;
|
|
67
70
|
}
|
|
68
71
|
if (this.ciContext.runId) {
|
|
69
|
-
tags["test
|
|
72
|
+
tags["test-ci-run-id"] = this.ciContext.runId;
|
|
70
73
|
}
|
|
71
74
|
if (this.ciContext.runNumber) {
|
|
72
|
-
tags["test
|
|
75
|
+
tags["test-ci-run-number"] = this.ciContext.runNumber;
|
|
73
76
|
}
|
|
74
77
|
if (this.ciContext.commitShaShort) {
|
|
75
|
-
tags["test
|
|
78
|
+
tags["test-git-commit"] = this.ciContext.commitShaShort;
|
|
76
79
|
}
|
|
77
80
|
if (this.ciContext.branch) {
|
|
78
|
-
tags["test
|
|
81
|
+
tags["test-git-branch"] = this.ciContext.branch;
|
|
79
82
|
}
|
|
80
83
|
}
|
|
81
84
|
return tags;
|
|
@@ -131,7 +134,7 @@ class TestRunMetadata {
|
|
|
131
134
|
}
|
|
132
135
|
exports.TestRunMetadata = TestRunMetadata;
|
|
133
136
|
_a = JSII_RTTI_SYMBOL_1;
|
|
134
|
-
TestRunMetadata[_a] = { fqn: "@microsoft/terraform-cdk-constructs.TestRunMetadata", version: "1.
|
|
137
|
+
TestRunMetadata[_a] = { fqn: "@microsoft/terraform-cdk-constructs.TestRunMetadata", version: "1.3.1" };
|
|
135
138
|
/**
|
|
136
139
|
* Detects and extracts CI context from environment
|
|
137
140
|
*
|
|
@@ -177,4 +180,4 @@ function detectCIContext() {
|
|
|
177
180
|
commitShaShort: "local",
|
|
178
181
|
};
|
|
179
182
|
}
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9saWIvbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQXNRQSwwQ0EwQ0M7O0FBaFREOzs7Ozs7R0FNRztBQUVILCtCQUFvQztBQThFcEM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxlQUFlO0lBeUMxQjs7Ozs7T0FLRztJQUNILFlBQVksUUFBZ0IsRUFBRSxPQUF3QjtRQUNwRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUEsU0FBTSxHQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQztRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxhQUFhLElBQUksV0FBVyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FDN0QsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxrQkFBa0I7UUFDdkIsd0NBQXdDO1FBQ3hDLE1BQU0sSUFBSSxHQUEyQjtZQUNuQywwQkFBMEI7WUFDMUIsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUMxQixvQkFBb0Is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LG1CQUFtQjtZQUMxQyxjQUFjLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0I7WUFDMUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCO1NBQzlDLENBQUM7SUFDSixDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDOUIsT0FBTztZQUNMLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU87UUFDTCxRQUFRLEVBQUUsT0FBTztRQUNqQixjQUFjLEVBQUUsT0FBTztLQUN4QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdCBydW4gbWV0YWRhdGEgbWFuYWdlbWVudFxuICpcbiAqIFByb3ZpZGVzIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBmb3IgZ2VuZXJhdGluZyBhbmQgbWFuYWdpbmdcbiAqIGludGVncmF0aW9uIHRlc3QgbWV0YWRhdGEgaW5jbHVkaW5nIHVuaXF1ZSBJRHMsIHRpbWVzdGFtcHMsXG4gKiBDSSBjb250ZXh0LCBhbmQgc3lzdGVtIHRhZ3MuXG4gKi9cblxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSBcInV1aWRcIjtcblxuLyoqXG4gKiBDSS9DRCBwaXBlbGluZSBjb250ZXh0XG4gKlxuICogRXh0cmFjdGVkIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzIGR1cmluZyB0ZXN0IGV4ZWN1dGlvbi5cbiAqIEVuYWJsZXMgdHJhY2luZyByZXNvdXJjZXMgYmFjayB0byBzcGVjaWZpYyBwaXBlbGluZSBydW5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENJQ29udGV4dCB7XG4gIC8qKlxuICAgKiBDSSBwbGF0Zm9ybSAoJ2dpdGh1Yi1hY3Rpb25zJywgJ2F6dXJlLWRldm9wcycsICdnZW5lcmljLWNpJywgJ2xvY2FsJylcbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93IElEIG9yIGVxdWl2YWxlbnRcbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBBY3Rpb25zIHJ1biBJRCBvciBlcXVpdmFsZW50XG4gICAqL1xuICByZWFkb25seSBydW5JZD86IHN0cmluZztcblxuICAvKipcbiAgICogR2l0SHViIEFjdGlvbnMgcnVuIG51bWJlciBvciBlcXVpdmFsZW50XG4gICAqL1xuICByZWFkb25seSBydW5OdW1iZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdCBjb21taXQgU0hBIChmdWxsKVxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWl0U2hhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXQgY29tbWl0IFNIQSAoc2hvcnQsIDcgY2hhcnMpXG4gICAqL1xuICByZWFkb25seSBjb21taXRTaGFTaG9ydD86IHN0cmluZztcblxuICAvKipcbiAgICogR2l0IGJyYW5jaCBuYW1lXG4gICAqL1xuICByZWFkb25seSBicmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdCByZXBvc2l0b3J5IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBzeXN0ZW0gdGFnc1xuICpcbiAqIFJldHVybnMgYSByZWNvcmQgb2YgdGFnIGtleS12YWx1ZSBwYWlycyBmb3IgQXp1cmUgcmVzb3VyY2VzLlxuICogVXNlcyBBenVyZSB0YWcgbmFtaW5nIGNvbnZlbnRpb25zIHdpdGggY29sb25zIGFuZCBoeXBoZW5zLlxuICovXG5leHBvcnQgdHlwZSBJbnRlZ3JhdGlvblRlc3RUYWdzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuLyoqXG4gKiBUZXN0IHJ1biBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0UnVuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNYXhpbXVtIGFnZSBpbiBob3VycyBiZWZvcmUgY2xlYW51cCBlbGlnaWJsZSAoZGVmYXVsdDogNClcbiAgICovXG4gIHJlYWRvbmx5IG1heEFnZUhvdXJzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgYXV0b21hdGVkIGNsZWFudXAgKGRlZmF1bHQ6IHRydWUpXG4gICAqL1xuICByZWFkb25seSBhdXRvQ2xlYW51cD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENsZWFudXAgcG9saWN5IChkZWZhdWx0OiAnaW1tZWRpYXRlJylcbiAgICovXG4gIHJlYWRvbmx5IGNsZWFudXBQb2xpY3k/OiBcImltbWVkaWF0ZVwiIHwgXCJkZWxheWVkXCIgfCBcIm1hbnVhbFwiO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIGZvciBhbiBpbnRlZ3JhdGlvbiB0ZXN0IHJ1blxuICpcbiAqIEdlbmVyYXRlZCBvbmNlIHBlciB0ZXN0IGV4ZWN1dGlvbiBhbmQgc2hhcmVkIGFjcm9zcyBhbGwgcmVzb3VyY2VzXG4gKiBpbiB0aGF0IHRlc3QuIFByb3ZpZGVzIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiwgdGVtcG9yYWwgdHJhY2tpbmcsXG4gKiBhbmQgQ0kvQ0QgY29udGV4dC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlc3RSdW5NZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyB0ZXN0IHJ1biAoVVVJRCB2NClcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBydW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZWQgdGVzdCBuYW1lIGZyb20gdGhlIGRlc2NyaWJlIGJsb2NrXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIHRlc3QgcnVuIHN0YXJ0ZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ6IERhdGU7XG5cbiAgLyoqXG4gICAqIENsZWFudXAgYWZ0ZXIgdGltZXN0YW1wIChjcmVhdGVkQXQgKyBtYXhBZ2VIb3VycylcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjbGVhbnVwQWZ0ZXI6IERhdGU7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gYWdlIGluIGhvdXJzIGJlZm9yZSBjbGVhbnVwIGVsaWdpYmxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWF4QWdlSG91cnM6IG51bWJlcjtcblxuICAvKipcbiAgICogRW5hYmxlIGF1dG9tYXRlZCBjbGVhbnVwXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0b0NsZWFudXA6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENsZWFudXAgcG9saWN5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xlYW51cFBvbGljeTogXCJpbW1lZGlhdGVcIiB8IFwiZGVsYXllZFwiIHwgXCJtYW51YWxcIjtcblxuICAvKipcbiAgICogQ0kvQ0QgY29udGV4dCAocG9wdWxhdGVkIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNpQ29udGV4dD86IENJQ29udGV4dDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBuZXcgdGVzdCBydW4gbWV0YWRhdGFcbiAgICpcbiAgICogQHBhcmFtIHRlc3ROYW1lIC0gVGVzdCBuYW1lICh3aWxsIGJlIHNhbml0aXplZClcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0ZXN0TmFtZTogc3RyaW5nLCBvcHRpb25zPzogVGVzdFJ1bk9wdGlvbnMpIHtcbiAgICB0aGlzLnJ1bklkID0gdXVpZHY0KCk7XG4gICAgdGhpcy50ZXN0TmFtZSA9IHRoaXMuc2FuaXRpemVUZXN0TmFtZSh0ZXN0TmFtZSk7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMubWF4QWdlSG91cnMgPSBvcHRpb25zPy5tYXhBZ2VIb3VycyA/PyA0O1xuICAgIHRoaXMuYXV0b0NsZWFudXAgPSBvcHRpb25zPy5hdXRvQ2xlYW51cCA/PyB0cnVlO1xuICAgIHRoaXMuY2xlYW51cFBvbGljeSA9IG9wdGlvbnM/LmNsZWFudXBQb2xpY3kgPz8gXCJpbW1lZGlhdGVcIjtcbiAgICB0aGlzLmNsZWFudXBBZnRlciA9IG5ldyBEYXRlKFxuICAgICAgdGhpcy5jcmVhdGVkQXQuZ2V0VGltZSgpICsgdGhpcy5tYXhBZ2VIb3VycyAqIDYwICogNjAgKiAxMDAwLFxuICAgICk7XG4gICAgdGhpcy5jaUNvbnRleHQgPSBkZXRlY3RDSUNvbnRleHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgc3lzdGVtIHRhZ3MgZm9yIHJlc291cmNlc1xuICAgKlxuICAgKiBAcmV0dXJucyBJbnRlZ3JhdGlvbiB0ZXN0IHN5c3RlbSB0YWdzXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVTeXN0ZW1UYWdzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIC8vIEJ1aWxkIHRhZ3Mgb2JqZWN0IHdpdGggYWxsIHByb3BlcnRpZXNcbiAgICBjb25zdCB0YWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLy8gUmVzb3VyY2UgSWRlbnRpZmljYXRpb25cbiAgICAgIFwidGVzdDpydW4taWRcIjogdGhpcy5ydW5JZCxcbiAgICAgIFwidGVzdDpuYW1lXCI6IHRoaXMudGVzdE5hbWUsXG4gICAgICBcInRlc3Q6cmVzb3VyY2UtdHlwZVwiOiBcImludGVncmF0aW9uLXRlc3RcIixcblxuICAgICAgLy8gVGVtcG9yYWwgVHJhY2tpbmdcbiAgICAgIFwidGVzdDpjcmVhdGVkLWF0XCI6IHRoaXMuY3JlYXRlZEF0LnRvSVNPU3RyaW5nKCksXG4gICAgICBcInRlc3Q6Y2xlYW51cC1hZnRlclwiOiB0aGlzLmNsZWFudXBBZnRlci50b0lTT1N0cmluZygpLFxuICAgICAgXCJ0ZXN0Om1heC1hZ2UtaG91cnNcIjogdGhpcy5tYXhBZ2VIb3Vycy50b1N0cmluZygpLFxuXG4gICAgICAvLyBMaWZlY3ljbGUgTWFuYWdlbWVudFxuICAgICAgXCJ0ZXN0Om1hbmFnZWQtYnlcIjogXCJ0ZXJyYWZvcm0tY2RrLWNvbnN0cnVjdHMtdGVzdHNcIixcbiAgICAgIFwidGVzdDphdXRvLWNsZWFudXBcIjogdGhpcy5hdXRvQ2xlYW51cC50b1N0cmluZygpLFxuICAgICAgXCJ0ZXN0OmNsZWFudXAtcG9saWN5XCI6IHRoaXMuY2xlYW51cFBvbGljeSxcblxuICAgICAgLy8gQmFja3dhcmQgQ29tcGF0aWJpbGl0eVxuICAgICAgZW52aXJvbm1lbnQ6IFwiaW50ZWdyYXRpb24tdGVzdFwiLFxuICAgICAgcHVycG9zZTogXCJpbnRlZ3JhdGlvbi10ZXN0XCIsXG4gICAgfTtcblxuICAgIC8vIEFkZCBDSS9DRCBjb250ZXh0IGlmIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLmNpQ29udGV4dCkge1xuICAgICAgaWYgKHRoaXMuY2lDb250ZXh0LnBpcGVsaW5lSWQpIHtcbiAgICAgICAgdGFnc1tcInRlc3Q6Y2ktcGlwZWxpbmVcIl0gPSB0aGlzLmNpQ29udGV4dC5waXBlbGluZUlkO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2lDb250ZXh0LnJ1bklkKSB7XG4gICAgICAgIHRhZ3NbXCJ0ZXN0OmNpLXJ1bi1pZFwiXSA9IHRoaXMuY2lDb250ZXh0LnJ1bklkO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2lDb250ZXh0LnJ1bk51bWJlcikge1xuICAgICAgICB0YWdzW1widGVzdDpjaS1ydW4tbnVtYmVyXCJdID0gdGhpcy5jaUNvbnRleHQucnVuTnVtYmVyO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2lDb250ZXh0LmNvbW1pdFNoYVNob3J0KSB7XG4gICAgICAgIHRhZ3NbXCJ0ZXN0OmdpdC1jb21taXRcIl0gPSB0aGlzLmNpQ29udGV4dC5jb21taXRTaGFTaG9ydDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNpQ29udGV4dC5icmFuY2gpIHtcbiAgICAgICAgdGFnc1tcInRlc3Q6Z2l0LWJyYW5jaFwiXSA9IHRoaXMuY2lDb250ZXh0LmJyYW5jaDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFncyBhcyBJbnRlZ3JhdGlvblRlc3RUYWdzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiByZXNvdXJjZXMgZnJvbSB0aGlzIHJ1biBhcmUgZWxpZ2libGUgZm9yIGNsZWFudXBcbiAgICpcbiAgICogQHBhcmFtIG5vdyAtIEN1cnJlbnQgdGltZSAoZGVmYXVsdHMgdG8gbm93KVxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGNsZWFudXAgaXMgZWxpZ2libGVcbiAgICovXG4gIHB1YmxpYyBpc0NsZWFudXBFbGlnaWJsZShub3c/OiBEYXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBub3cgfHwgbmV3IERhdGUoKTtcbiAgICByZXR1cm4gY3VycmVudFRpbWUgPj0gdGhpcy5jbGVhbnVwQWZ0ZXI7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBtZXRhZGF0YSB0byBKU09OIGZvciBsb2dnaW5nXG4gICAqXG4gICAqIEByZXR1cm5zIEpTT04tc2VyaWFsaXphYmxlIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHRvSlNPTigpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcnVuSWQ6IHRoaXMucnVuSWQsXG4gICAgICB0ZXN0TmFtZTogdGhpcy50ZXN0TmFtZSxcbiAgICAgIGNyZWF0ZWRBdDogdGhpcy5jcmVhdGVkQXQudG9JU09TdHJpbmcoKSxcbiAgICAgIGNsZWFudXBBZnRlcjogdGhpcy5jbGVhbnVwQWZ0ZXIudG9JU09TdHJpbmcoKSxcbiAgICAgIG1heEFnZUhvdXJzOiB0aGlzLm1heEFnZUhvdXJzLFxuICAgICAgYXV0b0NsZWFudXA6IHRoaXMuYXV0b0NsZWFudXAsXG4gICAgICBjbGVhbnVwUG9saWN5OiB0aGlzLmNsZWFudXBQb2xpY3ksXG4gICAgICBjaUNvbnRleHQ6IHRoaXMuY2lDb250ZXh0LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FuaXRpemVzIHRlc3QgbmFtZSB0byBiZSBBenVyZS1jb21wbGlhbnRcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBSYXcgdGVzdCBuYW1lXG4gICAqIEByZXR1cm5zIFNhbml0aXplZCBuYW1lXG4gICAqL1xuICBwcml2YXRlIHNhbml0aXplVGVzdE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgc2FuaXRpemVkID0gbmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC8vIFJlcGxhY2Ugc3BhY2VzIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMgd2l0aCBoeXBoZW5zXG4gICAgICAucmVwbGFjZSgvW15hLXowLTktXS9nLCBcIi1cIilcbiAgICAgIC8vIFJlbW92ZSBjb25zZWN1dGl2ZSBoeXBoZW5zXG4gICAgICAucmVwbGFjZSgvLSsvZywgXCItXCIpXG4gICAgICAvLyBSZW1vdmUgbGVhZGluZy90cmFpbGluZyBoeXBoZW5zXG4gICAgICAucmVwbGFjZSgvXi0rfC0rJC9nLCBcIlwiKTtcblxuICAgIC8vIFRydW5jYXRlIHRvIDYzIGNoYXJhY3RlcnMgKEROUyBsYWJlbCBsaW1pdClcbiAgICBpZiAoc2FuaXRpemVkLmxlbmd0aCA+IDYzKSB7XG4gICAgICBzYW5pdGl6ZWQgPSBzYW5pdGl6ZWQuc3Vic3RyaW5nKDAsIDYzKS5yZXBsYWNlKC8tKyQvLCBcIlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2FuaXRpemVkO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0cyBhbmQgZXh0cmFjdHMgQ0kgY29udGV4dCBmcm9tIGVudmlyb25tZW50XG4gKlxuICogQHJldHVybnMgQ0kgY29udGV4dCBvciB1bmRlZmluZWQgaWYgbm90IGluIENJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RDSUNvbnRleHQoKTogQ0lDb250ZXh0IHwgdW5kZWZpbmVkIHtcbiAgLy8gRGV0ZWN0IEdpdEh1YiBBY3Rpb25zXG4gIGlmIChwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OUyA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhdGZvcm06IFwiZ2l0aHViLWFjdGlvbnNcIixcbiAgICAgIHBpcGVsaW5lSWQ6IHByb2Nlc3MuZW52LkdJVEhVQl9XT1JLRkxPVyxcbiAgICAgIHJ1bklkOiBwcm9jZXNzLmVudi5HSVRIVUJfUlVOX0lELFxuICAgICAgcnVuTnVtYmVyOiBwcm9jZXNzLmVudi5HSVRIVUJfUlVOX05VTUJFUixcbiAgICAgIGNvbW1pdFNoYTogcHJvY2Vzcy5lbnYuR0lUSFVCX1NIQSxcbiAgICAgIGNvbW1pdFNoYVNob3J0OiBwcm9jZXNzLmVudi5HSVRIVUJfU0hBPy5zdWJzdHJpbmcoMCwgNyksXG4gICAgICBicmFuY2g6IHByb2Nlc3MuZW52LkdJVEhVQl9SRUZfTkFNRSxcbiAgICAgIHJlcG9zaXRvcnk6IHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZLFxuICAgIH07XG4gIH1cblxuICAvLyBEZXRlY3QgQXp1cmUgRGV2T3BzXG4gIGlmIChwcm9jZXNzLmVudi5URl9CVUlMRCA9PT0gXCJUcnVlXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhdGZvcm06IFwiYXp1cmUtZGV2b3BzXCIsXG4gICAgICBwaXBlbGluZUlkOiBwcm9jZXNzLmVudi5CVUlMRF9ERUZJTklUSU9OTkFNRSxcbiAgICAgIHJ1bklkOiBwcm9jZXNzLmVudi5CVUlMRF9CVUlMRElELFxuICAgICAgcnVuTnVtYmVyOiBwcm9jZXNzLmVudi5CVUlMRF9CVUlMRE5VTUJFUixcbiAgICAgIGNvbW1pdFNoYTogcHJvY2Vzcy5lbnYuQlVJTERfU09VUkNFVkVSU0lPTixcbiAgICAgIGNvbW1pdFNoYVNob3J0OiBwcm9jZXNzLmVudi5CVUlMRF9TT1VSQ0VWRVJTSU9OPy5zdWJzdHJpbmcoMCwgNyksXG4gICAgICBicmFuY2g6IHByb2Nlc3MuZW52LkJVSUxEX1NPVVJDRUJSQU5DSE5BTUUsXG4gICAgICByZXBvc2l0b3J5OiBwcm9jZXNzLmVudi5CVUlMRF9SRVBPU0lUT1JZX05BTUUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIERldGVjdCBnZW5lcmljIENJXG4gIGlmIChwcm9jZXNzLmVudi5DSSA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhdGZvcm06IFwiZ2VuZXJpYy1jaVwiLFxuICAgICAgY29tbWl0U2hhU2hvcnQ6IFwiY2lcIixcbiAgICB9O1xuICB9XG5cbiAgLy8gTG9jYWwgZXhlY3V0aW9uXG4gIHJldHVybiB7XG4gICAgcGxhdGZvcm06IFwibG9jYWxcIixcbiAgICBjb21taXRTaGFTaG9ydDogXCJsb2NhbFwiLFxuICB9O1xufVxuIl19
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9saWIvbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQXlRQSwwQ0EwQ0M7O0FBblREOzs7Ozs7R0FNRztBQUVILCtCQUFvQztBQThFcEM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxlQUFlO0lBeUMxQjs7Ozs7T0FLRztJQUNILFlBQVksUUFBZ0IsRUFBRSxPQUF3QjtRQUNwRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUEsU0FBTSxHQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQztRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sRUFBRSxhQUFhLElBQUksV0FBVyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FDN0QsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxrQkFBa0I7UUFDdkIsd0NBQXdDO1FBQ3hDLHdFQUF3RTtRQUN4RSx5RUFBeUU7UUFDekUsMkdBQTJHO1FBQzNHLE1BQU0sSUFBSSxHQUEyQjtZQUNuQywwQkFBMEI7WUFDMUIsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ3pC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QWlCO1lBQ3hDLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQjtZQUMxQyxjQUFjLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0I7WUFDMUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCO1NBQzlDLENBQUM7SUFDSixDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDOUIsT0FBTztZQUNMLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU87UUFDTCxRQUFRLEVBQUUsT0FBTztRQUNqQixjQUFjLEVBQUUsT0FBTztLQUN4QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdCBydW4gbWV0YWRhdGEgbWFuYWdlbWVudFxuICpcbiAqIFByb3ZpZGVzIGNsYXNzZXMgYW5kIHV0aWxpdGllcyBmb3IgZ2VuZXJhdGluZyBhbmQgbWFuYWdpbmdcbiAqIGludGVncmF0aW9uIHRlc3QgbWV0YWRhdGEgaW5jbHVkaW5nIHVuaXF1ZSBJRHMsIHRpbWVzdGFtcHMsXG4gKiBDSSBjb250ZXh0LCBhbmQgc3lzdGVtIHRhZ3MuXG4gKi9cblxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSBcInV1aWRcIjtcblxuLyoqXG4gKiBDSS9DRCBwaXBlbGluZSBjb250ZXh0XG4gKlxuICogRXh0cmFjdGVkIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzIGR1cmluZyB0ZXN0IGV4ZWN1dGlvbi5cbiAqIEVuYWJsZXMgdHJhY2luZyByZXNvdXJjZXMgYmFjayB0byBzcGVjaWZpYyBwaXBlbGluZSBydW5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENJQ29udGV4dCB7XG4gIC8qKlxuICAgKiBDSSBwbGF0Zm9ybSAoJ2dpdGh1Yi1hY3Rpb25zJywgJ2F6dXJlLWRldm9wcycsICdnZW5lcmljLWNpJywgJ2xvY2FsJylcbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93IElEIG9yIGVxdWl2YWxlbnRcbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBBY3Rpb25zIHJ1biBJRCBvciBlcXVpdmFsZW50XG4gICAqL1xuICByZWFkb25seSBydW5JZD86IHN0cmluZztcblxuICAvKipcbiAgICogR2l0SHViIEFjdGlvbnMgcnVuIG51bWJlciBvciBlcXVpdmFsZW50XG4gICAqL1xuICByZWFkb25seSBydW5OdW1iZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdCBjb21taXQgU0hBIChmdWxsKVxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWl0U2hhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXQgY29tbWl0IFNIQSAoc2hvcnQsIDcgY2hhcnMpXG4gICAqL1xuICByZWFkb25seSBjb21taXRTaGFTaG9ydD86IHN0cmluZztcblxuICAvKipcbiAgICogR2l0IGJyYW5jaCBuYW1lXG4gICAqL1xuICByZWFkb25seSBicmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdCByZXBvc2l0b3J5IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBzeXN0ZW0gdGFnc1xuICpcbiAqIFJldHVybnMgYSByZWNvcmQgb2YgdGFnIGtleS12YWx1ZSBwYWlycyBmb3IgQXp1cmUgcmVzb3VyY2VzLlxuICogVXNlcyBBenVyZSB0YWcgbmFtaW5nIGNvbnZlbnRpb25zIHdpdGggY29sb25zIGFuZCBoeXBoZW5zLlxuICovXG5leHBvcnQgdHlwZSBJbnRlZ3JhdGlvblRlc3RUYWdzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuLyoqXG4gKiBUZXN0IHJ1biBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0UnVuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNYXhpbXVtIGFnZSBpbiBob3VycyBiZWZvcmUgY2xlYW51cCBlbGlnaWJsZSAoZGVmYXVsdDogNClcbiAgICovXG4gIHJlYWRvbmx5IG1heEFnZUhvdXJzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgYXV0b21hdGVkIGNsZWFudXAgKGRlZmF1bHQ6IHRydWUpXG4gICAqL1xuICByZWFkb25seSBhdXRvQ2xlYW51cD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENsZWFudXAgcG9saWN5IChkZWZhdWx0OiAnaW1tZWRpYXRlJylcbiAgICovXG4gIHJlYWRvbmx5IGNsZWFudXBQb2xpY3k/OiBcImltbWVkaWF0ZVwiIHwgXCJkZWxheWVkXCIgfCBcIm1hbnVhbFwiO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIGZvciBhbiBpbnRlZ3JhdGlvbiB0ZXN0IHJ1blxuICpcbiAqIEdlbmVyYXRlZCBvbmNlIHBlciB0ZXN0IGV4ZWN1dGlvbiBhbmQgc2hhcmVkIGFjcm9zcyBhbGwgcmVzb3VyY2VzXG4gKiBpbiB0aGF0IHRlc3QuIFByb3ZpZGVzIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiwgdGVtcG9yYWwgdHJhY2tpbmcsXG4gKiBhbmQgQ0kvQ0QgY29udGV4dC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlc3RSdW5NZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyB0ZXN0IHJ1biAoVVVJRCB2NClcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBydW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZWQgdGVzdCBuYW1lIGZyb20gdGhlIGRlc2NyaWJlIGJsb2NrXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIHRlc3QgcnVuIHN0YXJ0ZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ6IERhdGU7XG5cbiAgLyoqXG4gICAqIENsZWFudXAgYWZ0ZXIgdGltZXN0YW1wIChjcmVhdGVkQXQgKyBtYXhBZ2VIb3VycylcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjbGVhbnVwQWZ0ZXI6IERhdGU7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gYWdlIGluIGhvdXJzIGJlZm9yZSBjbGVhbnVwIGVsaWdpYmxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWF4QWdlSG91cnM6IG51bWJlcjtcblxuICAvKipcbiAgICogRW5hYmxlIGF1dG9tYXRlZCBjbGVhbnVwXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0b0NsZWFudXA6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENsZWFudXAgcG9saWN5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xlYW51cFBvbGljeTogXCJpbW1lZGlhdGVcIiB8IFwiZGVsYXllZFwiIHwgXCJtYW51YWxcIjtcblxuICAvKipcbiAgICogQ0kvQ0QgY29udGV4dCAocG9wdWxhdGVkIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNpQ29udGV4dD86IENJQ29udGV4dDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBuZXcgdGVzdCBydW4gbWV0YWRhdGFcbiAgICpcbiAgICogQHBhcmFtIHRlc3ROYW1lIC0gVGVzdCBuYW1lICh3aWxsIGJlIHNhbml0aXplZClcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0ZXN0TmFtZTogc3RyaW5nLCBvcHRpb25zPzogVGVzdFJ1bk9wdGlvbnMpIHtcbiAgICB0aGlzLnJ1bklkID0gdXVpZHY0KCk7XG4gICAgdGhpcy50ZXN0TmFtZSA9IHRoaXMuc2FuaXRpemVUZXN0TmFtZSh0ZXN0TmFtZSk7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMubWF4QWdlSG91cnMgPSBvcHRpb25zPy5tYXhBZ2VIb3VycyA/PyA0O1xuICAgIHRoaXMuYXV0b0NsZWFudXAgPSBvcHRpb25zPy5hdXRvQ2xlYW51cCA/PyB0cnVlO1xuICAgIHRoaXMuY2xlYW51cFBvbGljeSA9IG9wdGlvbnM/LmNsZWFudXBQb2xpY3kgPz8gXCJpbW1lZGlhdGVcIjtcbiAgICB0aGlzLmNsZWFudXBBZnRlciA9IG5ldyBEYXRlKFxuICAgICAgdGhpcy5jcmVhdGVkQXQuZ2V0VGltZSgpICsgdGhpcy5tYXhBZ2VIb3VycyAqIDYwICogNjAgKiAxMDAwLFxuICAgICk7XG4gICAgdGhpcy5jaUNvbnRleHQgPSBkZXRlY3RDSUNvbnRleHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgc3lzdGVtIHRhZ3MgZm9yIHJlc291cmNlc1xuICAgKlxuICAgKiBAcmV0dXJucyBJbnRlZ3JhdGlvbiB0ZXN0IHN5c3RlbSB0YWdzXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVTeXN0ZW1UYWdzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIC8vIEJ1aWxkIHRhZ3Mgb2JqZWN0IHdpdGggYWxsIHByb3BlcnRpZXNcbiAgICAvLyBOT1RFOiBUYWcgbmFtZXMgdXNlIGh5cGhlbnMgaW5zdGVhZCBvZiBjb2xvbnMgYmVjYXVzZSBBenVyZSBETlMgem9uZXNcbiAgICAvLyBhbmQgc29tZSBvdGhlciByZXNvdXJjZSB0eXBlcyBkb24ndCBzdXBwb3J0IGNvbG9ucyAoXCI6XCIpIGluIHRhZyBuYW1lcy5cbiAgICAvLyBTZWU6IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9henVyZS1yZXNvdXJjZS1tYW5hZ2VyL21hbmFnZW1lbnQvdGFnLXJlc291cmNlcyNsaW1pdGF0aW9uc1xuICAgIGNvbnN0IHRhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAvLyBSZXNvdXJjZSBJZGVudGlmaWNhdGlvblxuICAgICAgXCJ0ZXN0LXJ1bi1pZFwiOiB0aGlzLnJ1bklkLFxuICAgICAgXCJ0ZXN0LW5hbWVcIjogdGhpcy50ZXN0TmFtZSxcbiAgICAgIFwidGVzdC1yZXNvdXJjZS10eXBlXCI6IFwiaW50ZWdyYXRpb24tdGVzdFwiLFxuXG4gICAgICAvLyBUZW1wb3JhbCBUcmFja2luZ1xuICAgICAgXCJ0ZXN0LWNyZWF0ZWQtYXRcIjogdGhpcy5jcmVhdGVkQXQudG9JU09TdHJpbmcoKSxcbiAgICAgIFwidGVzdC1jbGVhbnVwLWFmdGVyXCI6IHRoaXMuY2xlYW51cEFmdGVyLnRvSVNPU3RyaW5nKCksXG4gICAgICBcInRlc3QtbWF4LWFnZS1ob3Vyc1wiOiB0aGlzLm1heEFnZUhvdXJzLnRvU3RyaW5nKCksXG5cbiAgICAgIC8vIExpZmVjeWNsZSBNYW5hZ2VtZW50XG4gICAgICBcInRlc3QtbWFuYWdlZC1ieVwiOiBcInRlcnJhZm9ybS1jZGstY29uc3RydWN0cy10ZXN0c1wiLFxuICAgICAgXCJ0ZXN0LWF1dG8tY2xlYW51cFwiOiB0aGlzLmF1dG9DbGVhbnVwLnRvU3RyaW5nKCksXG4gICAgICBcInRlc3QtY2xlYW51cC1wb2xpY3lcIjogdGhpcy5jbGVhbnVwUG9saWN5LFxuXG4gICAgICAvLyBCYWNrd2FyZCBDb21wYXRpYmlsaXR5XG4gICAgICBlbnZpcm9ubWVudDogXCJpbnRlZ3JhdGlvbi10ZXN0XCIsXG4gICAgICBwdXJwb3NlOiBcImludGVncmF0aW9uLXRlc3RcIixcbiAgICB9O1xuXG4gICAgLy8gQWRkIENJL0NEIGNvbnRleHQgaWYgYXZhaWxhYmxlXG4gICAgaWYgKHRoaXMuY2lDb250ZXh0KSB7XG4gICAgICBpZiAodGhpcy5jaUNvbnRleHQucGlwZWxpbmVJZCkge1xuICAgICAgICB0YWdzW1widGVzdC1jaS1waXBlbGluZVwiXSA9IHRoaXMuY2lDb250ZXh0LnBpcGVsaW5lSWQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jaUNvbnRleHQucnVuSWQpIHtcbiAgICAgICAgdGFnc1tcInRlc3QtY2ktcnVuLWlkXCJdID0gdGhpcy5jaUNvbnRleHQucnVuSWQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jaUNvbnRleHQucnVuTnVtYmVyKSB7XG4gICAgICAgIHRhZ3NbXCJ0ZXN0LWNpLXJ1bi1udW1iZXJcIl0gPSB0aGlzLmNpQ29udGV4dC5ydW5OdW1iZXI7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jaUNvbnRleHQuY29tbWl0U2hhU2hvcnQpIHtcbiAgICAgICAgdGFnc1tcInRlc3QtZ2l0LWNvbW1pdFwiXSA9IHRoaXMuY2lDb250ZXh0LmNvbW1pdFNoYVNob3J0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2lDb250ZXh0LmJyYW5jaCkge1xuICAgICAgICB0YWdzW1widGVzdC1naXQtYnJhbmNoXCJdID0gdGhpcy5jaUNvbnRleHQuYnJhbmNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YWdzIGFzIEludGVncmF0aW9uVGVzdFRhZ3M7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHJlc291cmNlcyBmcm9tIHRoaXMgcnVuIGFyZSBlbGlnaWJsZSBmb3IgY2xlYW51cFxuICAgKlxuICAgKiBAcGFyYW0gbm93IC0gQ3VycmVudCB0aW1lIChkZWZhdWx0cyB0byBub3cpXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgY2xlYW51cCBpcyBlbGlnaWJsZVxuICAgKi9cbiAgcHVibGljIGlzQ2xlYW51cEVsaWdpYmxlKG5vdz86IERhdGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG5vdyB8fCBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBjdXJyZW50VGltZSA+PSB0aGlzLmNsZWFudXBBZnRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIG1ldGFkYXRhIHRvIEpTT04gZm9yIGxvZ2dpbmdcbiAgICpcbiAgICogQHJldHVybnMgSlNPTi1zZXJpYWxpemFibGUgb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgdG9KU09OKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBydW5JZDogdGhpcy5ydW5JZCxcbiAgICAgIHRlc3ROYW1lOiB0aGlzLnRlc3ROYW1lLFxuICAgICAgY3JlYXRlZEF0OiB0aGlzLmNyZWF0ZWRBdC50b0lTT1N0cmluZygpLFxuICAgICAgY2xlYW51cEFmdGVyOiB0aGlzLmNsZWFudXBBZnRlci50b0lTT1N0cmluZygpLFxuICAgICAgbWF4QWdlSG91cnM6IHRoaXMubWF4QWdlSG91cnMsXG4gICAgICBhdXRvQ2xlYW51cDogdGhpcy5hdXRvQ2xlYW51cCxcbiAgICAgIGNsZWFudXBQb2xpY3k6IHRoaXMuY2xlYW51cFBvbGljeSxcbiAgICAgIGNpQ29udGV4dDogdGhpcy5jaUNvbnRleHQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZXMgdGVzdCBuYW1lIHRvIGJlIEF6dXJlLWNvbXBsaWFudFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFJhdyB0ZXN0IG5hbWVcbiAgICogQHJldHVybnMgU2FuaXRpemVkIG5hbWVcbiAgICovXG4gIHByaXZhdGUgc2FuaXRpemVUZXN0TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBzYW5pdGl6ZWQgPSBuYW1lXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLy8gUmVwbGFjZSBzcGFjZXMgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyB3aXRoIGh5cGhlbnNcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOS1dL2csIFwiLVwiKVxuICAgICAgLy8gUmVtb3ZlIGNvbnNlY3V0aXZlIGh5cGhlbnNcbiAgICAgIC5yZXBsYWNlKC8tKy9nLCBcIi1cIilcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nL3RyYWlsaW5nIGh5cGhlbnNcbiAgICAgIC5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpO1xuXG4gICAgLy8gVHJ1bmNhdGUgdG8gNjMgY2hhcmFjdGVycyAoRE5TIGxhYmVsIGxpbWl0KVxuICAgIGlmIChzYW5pdGl6ZWQubGVuZ3RoID4gNjMpIHtcbiAgICAgIHNhbml0aXplZCA9IHNhbml0aXplZC5zdWJzdHJpbmcoMCwgNjMpLnJlcGxhY2UoLy0rJC8sIFwiXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlY3RzIGFuZCBleHRyYWN0cyBDSSBjb250ZXh0IGZyb20gZW52aXJvbm1lbnRcbiAqXG4gKiBAcmV0dXJucyBDSSBjb250ZXh0IG9yIHVuZGVmaW5lZCBpZiBub3QgaW4gQ0lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdENJQ29udGV4dCgpOiBDSUNvbnRleHQgfCB1bmRlZmluZWQge1xuICAvLyBEZXRlY3QgR2l0SHViIEFjdGlvbnNcbiAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RJT05TID09PSBcInRydWVcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwbGF0Zm9ybTogXCJnaXRodWItYWN0aW9uc1wiLFxuICAgICAgcGlwZWxpbmVJZDogcHJvY2Vzcy5lbnYuR0lUSFVCX1dPUktGTE9XLFxuICAgICAgcnVuSWQ6IHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fSUQsXG4gICAgICBydW5OdW1iZXI6IHByb2Nlc3MuZW52LkdJVEhVQl9SVU5fTlVNQkVSLFxuICAgICAgY29tbWl0U2hhOiBwcm9jZXNzLmVudi5HSVRIVUJfU0hBLFxuICAgICAgY29tbWl0U2hhU2hvcnQ6IHByb2Nlc3MuZW52LkdJVEhVQl9TSEE/LnN1YnN0cmluZygwLCA3KSxcbiAgICAgIGJyYW5jaDogcHJvY2Vzcy5lbnYuR0lUSFVCX1JFRl9OQU1FLFxuICAgICAgcmVwb3NpdG9yeTogcHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUlksXG4gICAgfTtcbiAgfVxuXG4gIC8vIERldGVjdCBBenVyZSBEZXZPcHNcbiAgaWYgKHByb2Nlc3MuZW52LlRGX0JVSUxEID09PSBcIlRydWVcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwbGF0Zm9ybTogXCJhenVyZS1kZXZvcHNcIixcbiAgICAgIHBpcGVsaW5lSWQ6IHByb2Nlc3MuZW52LkJVSUxEX0RFRklOSVRJT05OQU1FLFxuICAgICAgcnVuSWQ6IHByb2Nlc3MuZW52LkJVSUxEX0JVSUxESUQsXG4gICAgICBydW5OdW1iZXI6IHByb2Nlc3MuZW52LkJVSUxEX0JVSUxETlVNQkVSLFxuICAgICAgY29tbWl0U2hhOiBwcm9jZXNzLmVudi5CVUlMRF9TT1VSQ0VWRVJTSU9OLFxuICAgICAgY29tbWl0U2hhU2hvcnQ6IHByb2Nlc3MuZW52LkJVSUxEX1NPVVJDRVZFUlNJT04/LnN1YnN0cmluZygwLCA3KSxcbiAgICAgIGJyYW5jaDogcHJvY2Vzcy5lbnYuQlVJTERfU09VUkNFQlJBTkNITkFNRSxcbiAgICAgIHJlcG9zaXRvcnk6IHByb2Nlc3MuZW52LkJVSUxEX1JFUE9TSVRPUllfTkFNRSxcbiAgICB9O1xuICB9XG5cbiAgLy8gRGV0ZWN0IGdlbmVyaWMgQ0lcbiAgaWYgKHByb2Nlc3MuZW52LkNJID09PSBcInRydWVcIikge1xuICAgIHJldHVybiB7XG4gICAgICBwbGF0Zm9ybTogXCJnZW5lcmljLWNpXCIsXG4gICAgICBjb21taXRTaGFTaG9ydDogXCJjaVwiLFxuICAgIH07XG4gIH1cblxuICAvLyBMb2NhbCBleGVjdXRpb25cbiAgcmV0dXJuIHtcbiAgICBwbGF0Zm9ybTogXCJsb2NhbFwiLFxuICAgIGNvbW1pdFNoYVNob3J0OiBcImxvY2FsXCIsXG4gIH07XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -36,6 +36,7 @@ function parseArgs(): {
|
|
|
36
36
|
subscription?: string;
|
|
37
37
|
help: boolean;
|
|
38
38
|
maxResources?: number;
|
|
39
|
+
force: boolean;
|
|
39
40
|
} {
|
|
40
41
|
const args = process.argv.slice(2);
|
|
41
42
|
|
|
@@ -45,6 +46,7 @@ function parseArgs(): {
|
|
|
45
46
|
subscription: undefined as string | undefined,
|
|
46
47
|
help: false,
|
|
47
48
|
maxResources: undefined as number | undefined,
|
|
49
|
+
force: false,
|
|
48
50
|
};
|
|
49
51
|
|
|
50
52
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -61,12 +63,18 @@ function parseArgs(): {
|
|
|
61
63
|
options.dryRun = true;
|
|
62
64
|
break;
|
|
63
65
|
|
|
66
|
+
case "--force":
|
|
67
|
+
case "-f":
|
|
68
|
+
options.force = true;
|
|
69
|
+
options.minAge = 0; // Override minimum age when force is used
|
|
70
|
+
break;
|
|
71
|
+
|
|
64
72
|
case "--min-age":
|
|
65
73
|
if (i + 1 < args.length) {
|
|
66
74
|
options.minAge = parseInt(args[++i], 10);
|
|
67
|
-
if (isNaN(options.minAge) || options.minAge < 2) {
|
|
75
|
+
if (!options.force && (isNaN(options.minAge) || options.minAge < 2)) {
|
|
68
76
|
console.error(
|
|
69
|
-
`${colors.red}Error: --min-age must be a number >= 2${colors.reset}`,
|
|
77
|
+
`${colors.red}Error: --min-age must be a number >= 2 (use --force to override)${colors.reset}`,
|
|
70
78
|
);
|
|
71
79
|
process.exit(1);
|
|
72
80
|
}
|
|
@@ -124,6 +132,10 @@ ${colors.bright}OPTIONS:${colors.reset}
|
|
|
124
132
|
Perform a dry run (show what would be deleted without deleting)
|
|
125
133
|
${colors.yellow}Recommended for first-time use${colors.reset}
|
|
126
134
|
|
|
135
|
+
${colors.green}--force, -f${colors.reset}
|
|
136
|
+
Force cleanup of all resources regardless of age
|
|
137
|
+
${colors.red}WARNING: Bypasses minimum age safety check${colors.reset}
|
|
138
|
+
|
|
127
139
|
${colors.green}--min-age <hours>${colors.reset}
|
|
128
140
|
Minimum age in hours before resource can be cleaned (default: 2)
|
|
129
141
|
${colors.yellow}Safety feature: prevents deletion of recent resources${colors.reset}
|
|
@@ -146,6 +158,9 @@ ${colors.bright}EXAMPLES:${colors.reset}
|
|
|
146
158
|
# Delete resources older than 4 hours
|
|
147
159
|
npm run cleanup-test-resources -- --min-age 4
|
|
148
160
|
|
|
161
|
+
# Force delete ALL test resources regardless of age
|
|
162
|
+
npm run cleanup-test-resources -- --force
|
|
163
|
+
|
|
149
164
|
# Delete resources in specific subscription
|
|
150
165
|
npm run cleanup-test-resources -- --subscription "abc-123"
|
|
151
166
|
|
|
@@ -158,9 +173,9 @@ ${colors.bright}EXAMPLES:${colors.reset}
|
|
|
158
173
|
${colors.bright}SAFETY FEATURES:${colors.reset}
|
|
159
174
|
• Minimum 2-hour age requirement
|
|
160
175
|
• Dry-run mode for safe previewing
|
|
161
|
-
• Tag validation (requires test
|
|
176
|
+
• Tag validation (requires test-managed-by tag)
|
|
162
177
|
• Confirmation prompts for destructive operations
|
|
163
|
-
• Only deletes resources with test
|
|
178
|
+
• Only deletes resources with test-auto-cleanup=true
|
|
164
179
|
|
|
165
180
|
${colors.bright}NOTES:${colors.reset}
|
|
166
181
|
• Requires Azure CLI (az) to be installed and authenticated
|
|
@@ -266,6 +281,9 @@ async function main(): Promise<void> {
|
|
|
266
281
|
console.log(
|
|
267
282
|
` Mode: ${options.dryRun ? `${colors.yellow}DRY RUN${colors.reset}` : `${colors.red}EXECUTE${colors.reset}`}`,
|
|
268
283
|
);
|
|
284
|
+
if (options.force) {
|
|
285
|
+
console.log(` ${colors.red}FORCE MODE: Bypassing age check${colors.reset}`);
|
|
286
|
+
}
|
|
269
287
|
console.log(` Minimum Age: ${options.minAge} hours`);
|
|
270
288
|
if (options.subscription) {
|
|
271
289
|
console.log(` Subscription: ${options.subscription}`);
|
|
@@ -5,6 +5,12 @@ const baseDir = './src';
|
|
|
5
5
|
const excludeDirs = ['test', 'module', 'util', 'testing']; // Add any directories you want to exclude
|
|
6
6
|
|
|
7
7
|
function generateLibIndex(libDir) {
|
|
8
|
+
// Skip core-azure/lib as it requires manual curation
|
|
9
|
+
if (libDir.includes('core-azure/lib') || libDir.includes('core-azure\\lib')) {
|
|
10
|
+
console.log(`index.ts skipped in ${libDir} (manually curated)`);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
|
|
8
14
|
const files = fs.readdirSync(libDir, { withFileTypes: true });
|
|
9
15
|
const exports = files
|
|
10
16
|
.filter(file => file.isFile() && file.name.endsWith('.ts') && file.name !== 'index.ts')
|
|
@@ -37,16 +43,27 @@ function findSubdirectories(dir, dirList = []) {
|
|
|
37
43
|
|
|
38
44
|
function generateIndex() {
|
|
39
45
|
const subdirectories = findSubdirectories(baseDir);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
console.log('
|
|
46
|
+
|
|
47
|
+
// NOTE: The main src/index.ts file is manually curated to maintain
|
|
48
|
+
// documentation, structured exports, and JSII compatibility.
|
|
49
|
+
// This script only regenerates module-level index.ts files.
|
|
50
|
+
// To add a new module to the main index, manually edit src/index.ts
|
|
51
|
+
|
|
52
|
+
console.log('⚠️ Main src/index.ts is manually curated - skipping generation');
|
|
53
|
+
console.log('📝 To add new modules, manually edit src/index.ts');
|
|
54
|
+
console.log('');
|
|
55
|
+
console.log('Generating module-level index.ts files...');
|
|
48
56
|
|
|
49
57
|
subdirectories.forEach(generateModuleIndex);
|
|
58
|
+
|
|
59
|
+
console.log('');
|
|
60
|
+
console.log('✅ Module index files generated');
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log('Available modules:');
|
|
63
|
+
subdirectories.forEach(dir => {
|
|
64
|
+
const dirName = path.basename(dir).replace(/-/g, '_');
|
|
65
|
+
console.log(` - ${dirName}`);
|
|
66
|
+
});
|
|
50
67
|
}
|
|
51
68
|
|
|
52
69
|
generateIndex();
|