@microsoft/terraform-cdk-constructs 1.5.0 → 1.7.0

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.
Files changed (77) hide show
  1. package/.jsii +2317 -385
  2. package/API.md +5868 -3254
  3. package/LICENSE +1 -1
  4. package/lib/azure-actiongroup/lib/action-group.js +1 -1
  5. package/lib/azure-activitylogalert/lib/activity-log-alert.js +1 -1
  6. package/lib/azure-aks/lib/aks-cluster.js +1 -1
  7. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +1 -1
  8. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +1 -1
  9. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +1 -1
  10. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +1 -1
  11. package/lib/azure-dnsresolver/lib/dns-resolver.js +1 -1
  12. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +1 -1
  13. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +1 -1
  14. package/lib/azure-dnszone/lib/dns-zone.js +1 -1
  15. package/lib/azure-metricalert/lib/metric-alert.js +1 -1
  16. package/lib/azure-networkinterface/lib/network-interface.js +1 -1
  17. package/lib/azure-networksecuritygroup/lib/network-security-group.js +1 -1
  18. package/lib/azure-policyassignment/lib/policy-assignment-schemas.js +2 -2
  19. package/lib/azure-policyassignment/lib/policy-assignment.d.ts +17 -5
  20. package/lib/azure-policyassignment/lib/policy-assignment.js +17 -6
  21. package/lib/azure-policyassignment/test/policy-assignment.spec.js +9 -1
  22. package/lib/azure-policydefinition/lib/policy-definition.d.ts +33 -0
  23. package/lib/azure-policydefinition/lib/policy-definition.js +33 -2
  24. package/lib/azure-policydefinition/test/policy-definition.spec.js +69 -1
  25. package/lib/azure-privatednszone/lib/private-dns-zone.js +1 -1
  26. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +1 -1
  27. package/lib/azure-publicipaddress/lib/public-ip-address.js +1 -1
  28. package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
  29. package/lib/azure-roleassignment/lib/role-assignment-schemas.js +2 -2
  30. package/lib/azure-roleassignment/lib/role-assignment.d.ts +18 -5
  31. package/lib/azure-roleassignment/lib/role-assignment.js +18 -6
  32. package/lib/azure-roleassignment/test/role-assignment.spec.js +11 -1
  33. package/lib/azure-roledefinition/lib/role-definition.d.ts +1 -0
  34. package/lib/azure-roledefinition/lib/role-definition.js +2 -2
  35. package/lib/azure-storageaccount/lib/storage-account.js +1 -1
  36. package/lib/azure-subnet/lib/subnet.js +1 -1
  37. package/lib/azure-virtualmachine/lib/virtual-machine.js +1 -1
  38. package/lib/azure-virtualnetwork/lib/virtual-network.js +1 -1
  39. package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.js +1 -1
  40. package/lib/azure-virtualnetworkgatewayconnection/index.d.ts +6 -0
  41. package/lib/azure-virtualnetworkgatewayconnection/index.js +23 -0
  42. package/lib/azure-virtualnetworkgatewayconnection/lib/index.d.ts +8 -0
  43. package/lib/azure-virtualnetworkgatewayconnection/lib/index.js +25 -0
  44. package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection-schemas.d.ts +32 -0
  45. package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection-schemas.js +322 -0
  46. package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.d.ts +333 -0
  47. package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.js +310 -0
  48. package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.integ.d.ts +12 -0
  49. package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.integ.js +216 -0
  50. package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.spec.d.ts +8 -0
  51. package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.spec.js +706 -0
  52. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
  53. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +1 -1
  54. package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +1 -1
  55. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +1 -1
  56. package/lib/azure-virtualnetworkmanager/lib/network-group.js +1 -1
  57. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +1 -1
  58. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +1 -1
  59. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +1 -1
  60. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +1 -1
  61. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +1 -1
  62. package/lib/core-azure/lib/azapi/azapi-resource.js +2 -2
  63. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
  64. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
  65. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +1 -1
  66. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
  67. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
  68. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
  69. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
  70. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  71. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  72. package/lib/index.d.ts +2 -0
  73. package/lib/index.js +4 -2
  74. package/lib/testing/index.js +2 -2
  75. package/lib/testing/lib/cleanup.js +1 -1
  76. package/lib/testing/lib/metadata.js +1 -1
  77. package/package.json +1 -1
@@ -622,6 +622,14 @@ describe("PolicyAssignment - Unified Implementation", () => {
622
622
  });
623
623
  });
624
624
  describe("Scope Configurations", () => {
625
+ it("should support management group scope", () => {
626
+ const assignment = new policy_assignment_1.PolicyAssignment(stack, "ManagementGroupScope", {
627
+ name: "mg-assignment",
628
+ policyDefinitionId: "/providers/Microsoft.Authorization/policyDefinitions/test-policy",
629
+ scope: "/providers/Microsoft.Management/managementGroups/my-mg",
630
+ });
631
+ expect(assignment.assignmentScope).toContain("/providers/Microsoft.Management/managementGroups/");
632
+ });
625
633
  it("should support subscription scope", () => {
626
634
  const assignment = new policy_assignment_1.PolicyAssignment(stack, "SubscriptionScope", {
627
635
  name: "subscription-assignment",
@@ -648,4 +656,4 @@ describe("PolicyAssignment - Unified Implementation", () => {
648
656
  });
649
657
  });
650
658
  });
651
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWFzc2lnbm1lbnQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9henVyZS1wb2xpY3lhc3NpZ25tZW50L3Rlc3QvcG9saWN5LWFzc2lnbm1lbnQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7R0FPRzs7QUFFSCxpQ0FBZ0M7QUFDaEMsK0JBQStCO0FBQy9CLGtHQUE2RjtBQUM3RiwyR0FBeUc7QUFDekcsZ0VBR2tDO0FBQ2xDLGdGQUcwQztBQUUxQyxRQUFRLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO0lBQ3pELElBQUksR0FBYyxDQUFDO0lBQ25CLElBQUksS0FBMkIsQ0FBQztJQUNoQyxJQUFJLE9BQTBCLENBQUM7SUFFL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEIsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkQsT0FBTyxHQUFHLHVDQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXZDLGtEQUFrRDtRQUNsRCxJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsb0JBQW9CLENBQzFCLGtEQUFzQixFQUN0QiwwREFBOEIsQ0FDL0IsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsK0JBQStCO1FBQ2pDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7UUFDaEQsRUFBRSxDQUFDLDBFQUEwRSxFQUFFLEdBQUcsRUFBRTtZQUNsRixNQUFNLEtBQUssR0FBMEI7Z0JBQ25DLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLGtCQUFrQixFQUNoQixxSEFBcUg7Z0JBQ3ZILEtBQUssRUFDSCw0RUFBNEU7YUFDL0UsQ0FBQztZQUVGLE1BQU0s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QWtCLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7WUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFO2dCQUM5RCxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixrQkFBa0IsRUFDaEIscUhBQXFIO2dCQUN2SCxLQUFLLEVBQ0gsb0lBQW9JO2FBQ3ZJLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tcHJlaGVuc2l2ZSB0ZXN0cyBmb3IgdGhlIHVuaWZpZWQgUG9saWN5QXNzaWdubWVudCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFRoaXMgdGVzdCBzdWl0ZSB2YWxpZGF0ZXMgdGhlIHVuaWZpZWQgUG9saWN5QXNzaWdubWVudCBjbGFzcyB0aGF0IHVzZXNcbiAqIHRoZSBWZXJzaW9uZWRBemFwaVJlc291cmNlIGZyYW1ld29yay4gVGVzdHMgY292ZXIgYXV0b21hdGljIHZlcnNpb24gcmVzb2x1dGlvbixcbiAqIGV4cGxpY2l0IHZlcnNpb24gcGlubmluZywgc2NoZW1hIHZhbGlkYXRpb24sIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uLCBhbmRcbiAqIHBvbGljeSBhc3NpZ25tZW50LXNwZWNpZmljIGZ1bmN0aW9uYWxpdHkuXG4gKi9cblxuaW1wb3J0IHsgVGVzdGluZyB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBBcGlWZXJzaW9uTWFuYWdlciB9IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi92ZXJzaW9uLW1hbmFnZXIvYXBpLXZlcnNpb24tbWFuYWdlclwiO1xuaW1wb3J0IHsgVmVyc2lvblN1cHBvcnRMZXZlbCB9IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi92ZXJzaW9uLW1hbmFnZXIvaW50ZXJmYWNlcy92ZXJzaW9uLWludGVyZmFjZXNcIjtcbmltcG9ydCB7XG4gIFBvbGljeUFzc2lnbm1lbnQsXG4gIFBvbGljeUFzc2lnbm1lbnRQcm9wcyxcbn0gZnJvbSBcIi4uL2xpYi9wb2xpY3ktYXNzaWdubWVudFwiO1xuaW1wb3J0IHtcbiAgQUxMX1BPTElDWV9BU1NJR05NRU5UX1ZFUlNJT05TLFxuICBQT0xJQ1lfQVNTSUdOTUVOVF9UWVBFLFxufSBmcm9tIFwiLi4vbGliL3BvbGljeS1hc3NpZ25tZW50LXNjaGVtYXNcIjtcblxuZGVzY3JpYmUoXCJQb2xpY3lBc3NpZ25tZW50IC0gVW5pZmllZCBJbXBsZW1lbnRhdGlvblwiLCAoKSA9PiB7XG4gIGxldCBhcHA6IGNka3RmLkFwcDtcbiAgbGV0IHN0YWNrOiBjZGt0Zi5UZXJyYWZvcm1TdGFjaztcbiAgbGV0IG1hbmFnZXI6IEFwaVZlcnNpb25NYW5hZ2VyO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGFwcCA9IFRlc3RpbmcuYXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgY2RrdGYuVGVycmFmb3JtU3RhY2soYXBwLCBcIlRlc3RTdGFja1wiKTtcbiAgICBtYW5hZ2VyID0gQXBpVmVyc2lvbk1hbmFnZXIuaW5zdGFuY2UoKTtcblxuICAgIC8vIEVuc3VyZSBQb2xpY3kgQXNzaWdubWVudCBzY2hlbWFzIGFyZSByZWdpc3RlcmVkXG4gICAgdHJ5IHtcbiAgICAgIG1hbmFnZXIucmVnaXN0ZXJSZXNvdXJjZVR5cGUoXG4gICAgICAgIFBPTElDWV9BU1NJR05NRU5UX1RZUEUsXG4gICAgICAgIEFMTF9QT0xJQ1lfQVNTSUdOTUVOVF9WRVJTSU9OUyxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElnbm9yZSBpZiBhbHJlYWR5IHJlZ2lzdGVyZWRcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiQ29uc3RydWN0b3IgYW5kIEJhc2ljIFByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBwb2xpY3kgYXNzaWdubWVudCB3aXRoIGF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzOiBQb2xpY3lBc3NpZ25tZW50UHJvcHMgPSB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvdGVzdC1yZ1wiLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHByb3BzKTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQpLnRvQmVJbnN0YW5jZU9mKFBvbGljeUFzc2lnbm1lbnQpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyMi0wNi0wMVwiKTsgLy8gTGF0ZXN0IHZlcnNpb25cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzKS50b0JlKHByb3BzKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50Lm5hbWUpLnRvQmUoXCJ0ZXN0LWFzc2lnbm1lbnRcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjcmVhdGUgcG9saWN5IGFzc2lnbm1lbnQgd2l0aCBleHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmdcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHM6IFBvbGljeUFzc2lnbm1lbnRQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnQtcGlubmVkXCIsXG4gICAgICAgIGFwaVZlcnNpb246IFwiMjAyMi0wNi0wMVwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHByb3BzKTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyMi0wNi0wMVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBwb2xpY3kgYXNzaWdubWVudCB3aXRoIGFsbCBvcHRpb25hbCBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzOiBQb2xpY3lBc3NpZ25tZW50UHJvcHMgPSB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50LWZ1bGxcIixcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVGVzdCBQb2xpY3kgQXNzaWdubWVudFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJBIHRlc3QgcG9saWN5IGFzc2lnbm1lbnQgZm9yIHVuaXQgdGVzdGluZ1wiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3Rlc3QtcmdcIixcbiAgICAgICAgZW5mb3JjZW1lbnRNb2RlOiBcIkRlZmF1bHRcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIHRhZ05hbWU6IHtcbiAgICAgICAgICAgIHZhbHVlOiBcIkVudmlyb25tZW50XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBhc3NpZ25lZEJ5OiBcImFkbWluQGV4YW1wbGUuY29tXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICBpZGVudGl0eToge1xuICAgICAgICAgIHR5cGU6IFwiU3lzdGVtQXNzaWduZWRcIixcbiAgICAgICAgfSxcbiAgICAgICAgbm90U2NvcGVzOiBbXG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvZXhjbHVkZWQtcmdcIixcbiAgICAgICAgXSxcbiAgICAgICAgbm9uQ29tcGxpYW5jZU1lc3NhZ2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWVzc2FnZTogXCJSZXNvdXJjZSBtdXN0IGNvbXBseSB3aXRoIHBvbGljeVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGlnbm9yZUNoYW5nZXM6IFtcIm1ldGFkYXRhXCJdLFxuICAgICAgICBlbmFibGVWYWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICBlbmFibGVNaWdyYXRpb25BbmFseXNpczogdHJ1ZSxcbiAgICAgICAgZW5hYmxlVHJhbnNmb3JtYXRpb246IHRydWUsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5kaXNwbGF5TmFtZSkudG9CZShcIlRlc3QgUG9saWN5IEFzc2lnbm1lbnRcIik7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5kZXNjcmlwdGlvbikudG9CZShcbiAgICAgICAgXCJBIHRlc3QgcG9saWN5IGFzc2lnbm1lbnQgZm9yIHVuaXQgdGVzdGluZ1wiLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLmVuZm9yY2VtZW50TW9kZSkudG9CZShcIkRlZmF1bHRcIik7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5wYXJhbWV0ZXJzKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMubWV0YWRhdGEpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5pZGVudGl0eSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLm5vdFNjb3BlcykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLm5vbkNvbXBsaWFuY2VNZXNzYWdlcykudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHVzZSBkZWZhdWx0IG5hbWUgd2hlbiBuYW1lIGlzIG5vdCBwcm92aWRlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogUG9saWN5QXNzaWdubWVudFByb3BzID0ge1xuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHByb3BzKTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQubmFtZSkudG9CZShcIlRlc3RBc3NpZ25tZW50XCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmVxdWlyZSBwb2xpY3lEZWZpbml0aW9uSWQgdG8gYmUgcHJvdmlkZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHM6IGFueSA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICB9O1xuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJUZXN0QXNzaWdubWVudFwiLCBwcm9wcyk7XG4gICAgICB9KS50b1Rocm93KFwiUmVxdWlyZWQgcHJvcGVydHkgJ3BvbGljeURlZmluaXRpb25JZCcgaXMgbWlzc2luZ1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHJlcXVpcmUgc2NvcGUgdG8gYmUgcHJvdmlkZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHM6IGFueSA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgfTtcblxuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwgcHJvcHMpO1xuICAgICAgfSkudG9UaHJvdyhcIlJlcXVpcmVkIHByb3BlcnR5ICdzY29wZScgaXMgbWlzc2luZ1wiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJGcmFtZXdvcmsgSW50ZWdyYXRpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHJlc29sdmUgbGF0ZXN0IEFQSSB2ZXJzaW9uIGF1dG9tYXRpY2FsbHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudC5yZXNvbHZlZEFwaVZlcnNpb24pLnRvQmUoXCIyMDIyLTA2LTAxXCIpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQubGF0ZXN0VmVyc2lvbigpKS50b0JlKFwiMjAyMi0wNi0wMVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgYWxsIHJlZ2lzdGVyZWQgQVBJIHZlcnNpb25zXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJUZXN0QXNzaWdubWVudFwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3VwcG9ydGVkVmVyc2lvbnMgPSBhc3NpZ25tZW50LnN1cHBvcnRlZFZlcnNpb25zKCk7XG4gICAgICBleHBlY3Qoc3VwcG9ydGVkVmVyc2lvbnMpLnRvQ29udGFpbihcIjIwMjItMDYtMDFcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB2YWxpZGF0ZSB2ZXJzaW9uIHN1cHBvcnRcIiwgKCkgPT4ge1xuICAgICAgLy8gVmFsaWQgdmVyc2lvblxuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVmFsaWRWZXJzaW9uXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICAgIGFwaVZlcnNpb246IFwiMjAyMi0wNi0wMVwiLFxuICAgICAgICB9KTtcbiAgICAgIH0pLm5vdC50b1Rocm93KCk7XG5cbiAgICAgIC8vIEludmFsaWQgdmVyc2lvblxuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiSW52YWxpZFZlcnNpb25cIiwge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIwLTAxLTAxXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdyhcIlVuc3VwcG9ydGVkIEFQSSB2ZXJzaW9uICcyMDIwLTAxLTAxJ1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGxvYWQgY29ycmVjdCBzY2hlbWEgZm9yIHJlc29sdmVkIHZlcnNpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIyLTA2LTAxXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuc2NoZW1hKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuc2NoZW1hLnJlc291cmNlVHlwZSkudG9CZShQT0xJQ1lfQVNTSUdOTUVOVF9UWVBFKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnNjaGVtYS52ZXJzaW9uKS50b0JlKFwiMjAyMi0wNi0wMVwiKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnNjaGVtYS5wcm9wZXJ0aWVzKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbG9hZCB2ZXJzaW9uIGNvbmZpZ3VyYXRpb24gY29ycmVjdGx5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJUZXN0QXNzaWdubWVudFwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQudmVyc2lvbkNvbmZpZykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnZlcnNpb25Db25maWcudmVyc2lvbikudG9CZShcIjIwMjItMDYtMDFcIik7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC52ZXJzaW9uQ29uZmlnLnN1cHBvcnRMZXZlbCkudG9CZShcbiAgICAgICAgVmVyc2lvblN1cHBvcnRMZXZlbC5BQ1RJVkUsXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIlByb3BlcnR5IFZhbGlkYXRpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHZhbGlkYXRlIHByb3BlcnRpZXMgd2hlbiB2YWxpZGF0aW9uIGlzIGVuYWJsZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHM6IFBvbGljeUFzc2lnbm1lbnRQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgIH07XG5cbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHByb3BzKTtcbiAgICAgIH0pLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYXZlIHZhbGlkYXRpb24gcmVzdWx0cyBmb3IgdmFsaWQgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwge1xuICAgICAgICBuYW1lOiBcInZhbGlkLWFzc2lnbm1lbnRcIixcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVmFsaWQgQXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBlbmFibGVWYWxpZGF0aW9uOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnZhbGlkYXRpb25SZXN1bHQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC52YWxpZGF0aW9uUmVzdWx0IS52YWxpZCkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnZhbGlkYXRpb25SZXN1bHQhLmVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc2tpcCB2YWxpZGF0aW9uIHdoZW4gZGlzYWJsZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiTWlncmF0aW9uIEFuYWx5c2lzXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBza2lwIG1pZ3JhdGlvbiBhbmFseXNpcyBmb3Igc2luZ2xlIHZlcnNpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIyLTA2LTAxXCIsXG4gICAgICB9KTtcblxuICAgICAgLy8gU2luY2UgdGhlcmUncyBvbmx5IG9uZSB2ZXJzaW9uLCBtaWdyYXRpb24gYW5hbHlzaXMgc2hvdWxkIGJlIHNraXBwZWRcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50KS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc2tpcCBtaWdyYXRpb24gYW5hbHlzaXMgd2hlbiBkaXNhYmxlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBlbmFibGVNaWdyYXRpb25BbmFseXNpczogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQubWlncmF0aW9uQW5hbHlzaXMpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJSZXNvdXJjZSBDcmVhdGlvbiBhbmQgQm9keVwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIGNvcnJlY3QgcmVzb3VyY2UgYm9keSB3aXRoIG1pbmltYWwgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3Rlc3QtcmdcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLnBvbGljeURlZmluaXRpb25JZCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLnNjb3BlKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIGNvcnJlY3QgcmVzb3VyY2UgYm9keSB3aXRoIGFsbCBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJUZXN0QXNzaWdubWVudFwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIlRlc3QgQXNzaWdubWVudFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJBIHRlc3QgYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBlbmZvcmNlbWVudE1vZGU6IFwiRG9Ob3RFbmZvcmNlXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICB0YWdOYW1lOiB7XG4gICAgICAgICAgICB2YWx1ZTogXCJFbnZpcm9ubWVudFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgYXNzaWduZWRCeTogXCJhZG1pbkBleGFtcGxlLmNvbVwiLFxuICAgICAgICB9LFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgaWRlbnRpdHk6IHtcbiAgICAgICAgICB0eXBlOiBcIlN5c3RlbUFzc2lnbmVkXCIsXG4gICAgICAgIH0sXG4gICAgICAgIG5vdFNjb3BlczogW1xuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL2V4Y2x1ZGVkLXJnXCIsXG4gICAgICAgIF0sXG4gICAgICAgIG5vbkNvbXBsaWFuY2VNZXNzYWdlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiUmVzb3VyY2UgbXVzdCBjb21wbHlcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMuZGlzcGxheU5hbWUpLnRvQmUoXCJUZXN0IEFzc2lnbm1lbnRcIik7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5lbmZvcmNlbWVudE1vZGUpLnRvQmUoXCJEb05vdEVuZm9yY2VcIik7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5pZGVudGl0eSkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudC1vdXRwdXRzXCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuaWRPdXRwdXQpLnRvQmVJbnN0YW5jZU9mKGNka3RmLlRlcnJhZm9ybU91dHB1dCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5uYW1lT3V0cHV0KS50b0JlSW5zdGFuY2VPZihjZGt0Zi5UZXJyYWZvcm1PdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkVuZm9yY2VtZW50IE1vZGUgQ29uZmlndXJhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgdXNlIERlZmF1bHQgZW5mb3JjZW1lbnQgbW9kZSBieSBkZWZhdWx0XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJEZWZhdWx0RW5mb3JjZW1lbnRcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LmVuZm9yY2VtZW50TW9kZSkudG9CZShcIkRlZmF1bHRcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdXBwb3J0IERvTm90RW5mb3JjZSBlbmZvcmNlbWVudCBtb2RlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJEb05vdEVuZm9yY2VNb2RlXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgZW5mb3JjZW1lbnRNb2RlOiBcIkRvTm90RW5mb3JjZVwiLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LmVuZm9yY2VtZW50TW9kZSkudG9CZShcIkRvTm90RW5mb3JjZVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgZXhwbGljaXQgRGVmYXVsdCBlbmZvcmNlbWVudCBtb2RlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJFeHBsaWNpdERlZmF1bHRcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBlbmZvcmNlbWVudE1vZGU6IFwiRGVmYXVsdFwiLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LmVuZm9yY2VtZW50TW9kZSkudG9CZShcIkRlZmF1bHRcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiSWRlbnRpdHkgQ29uZmlndXJhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgc3VwcG9ydCBTeXN0ZW1Bc3NpZ25lZCBpZGVudGl0eVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiU3lzdGVtSWRlbnRpdHlcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgaWRlbnRpdHk6IHtcbiAgICAgICAgICB0eXBlOiBcIlN5c3RlbUFzc2lnbmVkXCIsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMuaWRlbnRpdHkpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5pZGVudGl0eSEudHlwZSkudG9CZShcIlN5c3RlbUFzc2lnbmVkXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc3VwcG9ydCBVc2VyQXNzaWduZWQgaWRlbnRpdHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlVzZXJJZGVudGl0eVwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICBpZGVudGl0eToge1xuICAgICAgICAgIHR5cGU6IFwiVXNlckFzc2lnbmVkXCIsXG4gICAgICAgICAgdXNlckFzc2lnbmVkSWRlbnRpdGllczoge1xuICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvcmcvcHJvdmlkZXJzL01pY3Jvc29mdC5NYW5hZ2VkSWRlbnRpdHkvdXNlckFzc2lnbmVkSWRlbnRpdGllcy9pZGVudGl0eVwiOlxuICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLmlkZW50aXR5KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMuaWRlbnRpdHkhLnR5cGUpLnRvQmUoXCJVc2VyQXNzaWduZWRcIik7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5pZGVudGl0eSEudXNlckFzc2lnbmVkSWRlbnRpdGllcykudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgTm9uZSBpZGVudGl0eVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiTm9JZGVudGl0eVwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICBpZGVudGl0eToge1xuICAgICAgICAgIHR5cGU6IFwiTm9uZVwiLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLmlkZW50aXR5KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMuaWRlbnRpdHkhLnR5cGUpLnRvQmUoXCJOb25lXCIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIlBhcmFtZXRlcnMgYW5kIE1ldGFkYXRhXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBzdXBwb3J0IHBvbGljeSBwYXJhbWV0ZXJzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJXaXRoUGFyYW1ldGVyc1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICB0YWdOYW1lOiB7XG4gICAgICAgICAgICB2YWx1ZTogXCJFbnZpcm9ubWVudFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGFnVmFsdWU6IHtcbiAgICAgICAgICAgIHZhbHVlOiBcIlByb2R1Y3Rpb25cIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLnBhcmFtZXRlcnMpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5wYXJhbWV0ZXJzLnRhZ05hbWUudmFsdWUpLnRvQmUoXCJFbnZpcm9ubWVudFwiKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLnBhcmFtZXRlcnMudGFnVmFsdWUudmFsdWUpLnRvQmUoXCJQcm9kdWN0aW9uXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc3VwcG9ydCBtZXRhZGF0YVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiV2l0aE1ldGFkYXRhXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBhc3NpZ25lZEJ5OiBcImFkbWluQGV4YW1wbGUuY29tXCIsXG4gICAgICAgICAgYXNzaWduZWREYXRlOiBcIjIwMjQtMDEtMDFcIixcbiAgICAgICAgICBwYXJhbWV0ZXJTY29wZXM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLm1ldGFkYXRhKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMubWV0YWRhdGEuYXNzaWduZWRCeSkudG9CZShcImFkbWluQGV4YW1wbGUuY29tXCIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIk5vdFNjb3BlcyBhbmQgTm9uQ29tcGxpYW5jZU1lc3NhZ2VzXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBzdXBwb3J0IG5vdFNjb3Blc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiV2l0aE5vdFNjb3Blc1wiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgIG5vdFNjb3BlczogW1xuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL2V4Y2x1ZGVkLXJnLTFcIixcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9leGNsdWRlZC1yZy0yXCIsXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMubm90U2NvcGVzKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMubm90U2NvcGVzKS50b0hhdmVMZW5ndGgoMik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdXBwb3J0IG5vbkNvbXBsaWFuY2VNZXNzYWdlc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIldpdGhOb25Db21wbGlhbmNlTWVzc2FnZXNcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgICAgbm9uQ29tcGxpYW5jZU1lc3NhZ2VzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IFwiUmVzb3VyY2UgbXVzdCBoYXZlIHJlcXVpcmVkIHRhZ3NcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IFwiUmVzb3VyY2UgbG9jYXRpb24gaXMgbm90IGNvbXBsaWFudFwiLFxuICAgICAgICAgICAgICBwb2xpY3lEZWZpbml0aW9uUmVmZXJlbmNlSWQ6IFwibG9jYXRpb25Qb2xpY3lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLm5vbkNvbXBsaWFuY2VNZXNzYWdlcykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLm5vbkNvbXBsaWFuY2VNZXNzYWdlcykudG9IYXZlTGVuZ3RoKDIpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMubm9uQ29tcGxpYW5jZU1lc3NhZ2VzIVswXS5tZXNzYWdlKS50b0JlKFxuICAgICAgICBcIlJlc291cmNlIG11c3QgaGF2ZSByZXF1aXJlZCB0YWdzXCIsXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIlB1YmxpYyBNZXRob2RzIGFuZCBQcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICBsZXQgYXNzaWdubWVudDogUG9saWN5QXNzaWdubWVudDtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVGVzdCBBc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvdGVzdC1yZ1wiLFxuICAgICAgICBlbmZvcmNlbWVudE1vZGU6IFwiRGVmYXVsdFwiLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYXZlIGNvcnJlY3QgaWQgZm9ybWF0XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LmlkKS50b01hdGNoKC9eXFwkXFx7LipcXC5pZFxcfSQvKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhdmUgcmVzb3VyY2VJZCBwcm9wZXJ0eSBtYXRjaGluZyBpZFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5yZXNvdXJjZUlkKS50b0JlKGFzc2lnbm1lbnQuaWQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGNvcnJlY3QgcG9saWN5RGVmaW5pdGlvbklkXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnBvbGljeURlZmluaXRpb25JZCkudG9CZShcbiAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGNvcnJlY3Qgc2NvcGVcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuYXNzaWdubWVudFNjb3BlKS50b0JlKFxuICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy90ZXN0LXJnXCIsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGNvcnJlY3QgZW5mb3JjZW1lbnRNb2RlXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LmVuZm9yY2VtZW50TW9kZSkudG9CZShcIkRlZmF1bHRcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiSWdub3JlIENoYW5nZXMgQ29uZmlndXJhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgYXBwbHkgaWdub3JlIGNoYW5nZXMgbGlmZWN5Y2xlIHJ1bGVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJJZ25vcmVDaGFuZ2VzXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgaWdub3JlQ2hhbmdlczogW1wibWV0YWRhdGFcIiwgXCJkZXNjcmlwdGlvblwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudCkudG9CZUluc3RhbmNlT2YoUG9saWN5QXNzaWdubWVudCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgZW1wdHkgaWdub3JlIGNoYW5nZXMgYXJyYXlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIkVtcHR5SWdub3JlXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgaWdub3JlQ2hhbmdlczogW10sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQpLnRvQmVJbnN0YW5jZU9mKFBvbGljeUFzc2lnbm1lbnQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkVycm9yIEhhbmRsaW5nXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBoYW5kbGUgaW52YWxpZCBBUEkgdmVyc2lvbnMgZ3JhY2VmdWxseVwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJJbnZhbGlkQVBJXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICAgIGFwaVZlcnNpb246IFwiaW52YWxpZC12ZXJzaW9uXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdyhcIlVuc3VwcG9ydGVkIEFQSSB2ZXJzaW9uICdpbnZhbGlkLXZlcnNpb24nXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIHZhbGlkYXRpb24gZXJyb3JzIHdoZW4gdmFsaWRhdGlvbiBpcyBlbmFibGVkXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlZhbGlkYXRpb25FcnJvclwiLCB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6IHVuZGVmaW5lZCBhcyBhbnksIC8vIE1pc3NpbmcgcmVxdWlyZWQgcG9saWN5RGVmaW5pdGlvbklkXG4gICAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KFwiUmVxdWlyZWQgcHJvcGVydHkgJ3BvbGljeURlZmluaXRpb25JZCcgaXMgbWlzc2luZ1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBzY2hlbWEgcmVnaXN0cmF0aW9uIGVycm9ycyBncmFjZWZ1bGx5XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlNjaGVtYVRlc3RcIiwge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJKU0lJIENvbXBsaWFuY2VcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGhhdmUgSlNJSS1jb21wbGlhbnQgY29uc3RydWN0b3JcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiSnNpaVRlc3RcIiwge1xuICAgICAgICAgIG5hbWU6IFwianNpaS10ZXN0XCIsXG4gICAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhdmUgSlNJSS1jb21wbGlhbnQgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiSnNpaVByb3BzXCIsIHtcbiAgICAgICAgbmFtZTogXCJqc2lpLXByb3BzXCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHR5cGVvZiBhc3NpZ25tZW50LmlkKS50b0JlKFwic3RyaW5nXCIpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBhc3NpZ25tZW50Lm5hbWUpLnRvQmUoXCJzdHJpbmdcIik7XG4gICAgICBleHBlY3QodHlwZW9mIGFzc2lnbm1lbnQucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwic3RyaW5nXCIpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBhc3NpZ25tZW50LnBvbGljeURlZmluaXRpb25JZCkudG9CZShcInN0cmluZ1wiKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgYXNzaWdubWVudC5hc3NpZ25tZW50U2NvcGUpLnRvQmUoXCJzdHJpbmdcIik7XG4gICAgICBleHBlY3QodHlwZW9mIGFzc2lnbm1lbnQuZW5mb3JjZW1lbnRNb2RlKS50b0JlKFwic3RyaW5nXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGF2ZSBKU0lJLWNvbXBsaWFudCBtZXRob2RzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJKc2lpTWV0aG9kc1wiLCB7XG4gICAgICAgIG5hbWU6IFwianNpaS1tZXRob2RzXCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHR5cGVvZiBhc3NpZ25tZW50LmxhdGVzdFZlcnNpb24pLnRvQmUoXCJmdW5jdGlvblwiKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgYXNzaWdubWVudC5zdXBwb3J0ZWRWZXJzaW9ucykudG9CZShcImZ1bmN0aW9uXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc2VyaWFsaXplIGNvbXBsZXggb2JqZWN0cyBjb3JyZWN0bHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIkpzaWlTZXJpYWxpemF0aW9uXCIsIHtcbiAgICAgICAgbmFtZTogXCJqc2lpLXNlcmlhbGl6YXRpb25cIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIHRlc3RQYXJhbToge1xuICAgICAgICAgICAgdmFsdWU6IFwidGVzdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KCgpID0+IEpTT04uc3RyaW5naWZ5KGFzc2lnbm1lbnQudmFsaWRhdGlvblJlc3VsdCkpLm5vdC50b1Rocm93KCk7XG4gICAgICBleHBlY3QoKCkgPT4gSlNPTi5zdHJpbmdpZnkoYXNzaWdubWVudC5zY2hlbWEpKS5ub3QudG9UaHJvdygpO1xuICAgICAgZXhwZWN0KCgpID0+IEpTT04uc3RyaW5naWZ5KGFzc2lnbm1lbnQudmVyc2lvbkNvbmZpZykpLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiQ0RLIFRlcnJhZm9ybSBJbnRlZ3JhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgc3ludGhlc2l6ZSB0byB2YWxpZCBUZXJyYWZvcm0gY29uZmlndXJhdGlvblwiLCAoKSA9PiB7XG4gICAgICBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJTeW50aFRlc3RcIiwge1xuICAgICAgICBuYW1lOiBcInN5bnRoLXRlc3RcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3Rpbmcuc3ludGgoc3RhY2spO1xuICAgICAgZXhwZWN0KHN5bnRoZXNpemVkKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICBjb25zdCBzdGFja0NvbmZpZyA9IEpTT04ucGFyc2Uoc3ludGhlc2l6ZWQpO1xuICAgICAgZXhwZWN0KHN0YWNrQ29uZmlnLnJlc291cmNlKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgd29yayBpbiBjb21wbGV4IENESyBjb25zdHJ1Y3RzXCIsICgpID0+IHtcbiAgICAgIGNsYXNzIENvbXBsZXhDb25zdHJ1Y3QgZXh0ZW5kcyBjZGt0Zi5UZXJyYWZvcm1TdGFjayB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBjZGt0Zi5BcHAsIGlkOiBzdHJpbmcpIHtcbiAgICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgICAgICAgY29uc3QgYXNzaWdubWVudDEgPSBuZXcgUG9saWN5QXNzaWdubWVudCh0aGlzLCBcIkFzc2lnbm1lbnQxXCIsIHtcbiAgICAgICAgICAgIG5hbWU6IFwiYXNzaWdubWVudC0xXCIsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogXCJGaXJzdCBBc3NpZ25tZW50XCIsXG4gICAgICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy9wb2xpY3ktMVwiLFxuICAgICAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBhc3NpZ25tZW50MiA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHRoaXMsIFwiQXNzaWdubWVudDJcIiwge1xuICAgICAgICAgICAgbmFtZTogXCJhc3NpZ25tZW50LTJcIixcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIlNlY29uZCBBc3NpZ25tZW50XCIsXG4gICAgICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy9wb2xpY3ktMlwiLFxuICAgICAgICAgICAgc2NvcGU6XG4gICAgICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3Rlc3QtcmdcIixcbiAgICAgICAgICAgIGFwaVZlcnNpb246IFwiMjAyMi0wNi0wMVwiLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIkFzc2lnbm1lbnQxSWRcIiwge1xuICAgICAgICAgICAgdmFsdWU6IGFzc2lnbm1lbnQxLmlkLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIkFzc2lnbm1lbnQySWRcIiwge1xuICAgICAgICAgICAgdmFsdWU6IGFzc2lnbm1lbnQyLmlkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBDb21wbGV4Q29uc3RydWN0KGFwcCwgXCJDb21wbGV4U3RhY2tcIik7XG4gICAgICB9KS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIG11bHRpcGxlIHBvbGljeSBhc3NpZ25tZW50cyBpbiB0aGUgc2FtZSBzdGFja1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50MSA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIkFzc2lnbm1lbnQxXCIsIHtcbiAgICAgICAgbmFtZTogXCJhc3NpZ25tZW50LTFcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy9wb2xpY3ktMVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhc3NpZ25tZW50MiA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIkFzc2lnbm1lbnQyXCIsIHtcbiAgICAgICAgbmFtZTogXCJhc3NpZ25tZW50LTJcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy9wb2xpY3ktMlwiLFxuICAgICAgICBzY29wZTpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy90ZXN0LXJnXCIsXG4gICAgICAgIGFwaVZlcnNpb246IFwiMjAyMi0wNi0wMVwiLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50MS5yZXNvbHZlZEFwaVZlcnNpb24pLnRvQmUoXCIyMDIyLTA2LTAxXCIpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQyLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjItMDYtMDFcIik7XG5cbiAgICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBleHBlY3Qoc3ludGhlc2l6ZWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiU2NvcGUgQ29uZmlndXJhdGlvbnNcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgc3Vic2NyaXB0aW9uIHNjb3BlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJTdWJzY3JpcHRpb25TY29wZVwiLCB7XG4gICAgICAgIG5hbWU6IFwic3Vic2NyaXB0aW9uLWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudC5hc3NpZ25tZW50U2NvcGUpLnRvQ29udGFpbihcIi9zdWJzY3JpcHRpb25zL1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgcmVzb3VyY2UgZ3JvdXAgc2NvcGVcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlJlc291cmNlR3JvdXBTY29wZVwiLCB7XG4gICAgICAgIG5hbWU6IFwicmctYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3Rlc3QtcmdcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudC5hc3NpZ25tZW50U2NvcGUpLnRvQ29udGFpbihcIi9yZXNvdXJjZUdyb3Vwcy9cIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdXBwb3J0IHJlc291cmNlIHNjb3BlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJSZXNvdXJjZVNjb3BlXCIsIHtcbiAgICAgICAgbmFtZTogXCJyZXNvdXJjZS1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvdGVzdC1yZy9wcm92aWRlcnMvTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzL3Rlc3RzdG9yYWdlXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuYXNzaWdubWVudFNjb3BlKS50b0NvbnRhaW4oXCIvcHJvdmlkZXJzL1wiKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
659
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWFzc2lnbm1lbnQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9henVyZS1wb2xpY3lhc3NpZ25tZW50L3Rlc3QvcG9saWN5LWFzc2lnbm1lbnQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7R0FPRzs7QUFFSCxpQ0FBZ0M7QUFDaEMsK0JBQStCO0FBQy9CLGtHQUE2RjtBQUM3RiwyR0FBeUc7QUFDekcsZ0VBR2tDO0FBQ2xDLGdGQUcwQztBQUUxQyxRQUFRLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO0lBQ3pELElBQUksR0FBYyxDQUFDO0lBQ25CLElBQUksS0FBMkIsQ0FBQztJQUNoQyxJQUFJLE9BQTBCLENBQUM7SUFFL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEIsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkQsT0FBTyxHQUFHLHVDQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXZDLGtEQUFrRDtRQUNsRCxJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsb0JBQW9CLENBQzFCLGtEQUFzQixFQUN0QiwwREFBOEIsQ0FDL0IsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsK0JBQStCO1FBQ2pDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7UUFDaEQsRUFBRSxDQUFDLDBFQUEwRSxFQUFFLEdBQUcsRUFBRTtZQUNsRixNQUFNLEtBQUssR0FBMEI7Z0JBQ25DLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLGtCQUFrQixFQUNoQixxSEFBcUg7Z0JBQ3ZILEtBQUssRUFDSCw0RUFBNEU7YUFDL0UsQ0FBQztZQUVGLE1BQU0s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QUFpQixDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUUsR0FBRyxFQUFFO1lBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFO2dCQUNuRSxJQUFJLEVBQUUsZUFBZTtnQkFDckIsa0JBQWtCLEVBQ2hCLHFIQUFxSDtnQkFDdkgsS0FBSyxFQUNILDRFQUE0RTthQUMvRSxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtZQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUU7Z0JBQzlELElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLGtCQUFrQixFQUNoQixxSEFBcUg7Z0JBQ3ZILEtBQUssRUFDSCxvSUFBb0k7YUFDdkksQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21wcmVoZW5zaXZlIHRlc3RzIGZvciB0aGUgdW5pZmllZCBQb2xpY3lBc3NpZ25tZW50IGltcGxlbWVudGF0aW9uXG4gKlxuICogVGhpcyB0ZXN0IHN1aXRlIHZhbGlkYXRlcyB0aGUgdW5pZmllZCBQb2xpY3lBc3NpZ25tZW50IGNsYXNzIHRoYXQgdXNlc1xuICogdGhlIFZlcnNpb25lZEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrLiBUZXN0cyBjb3ZlciBhdXRvbWF0aWMgdmVyc2lvbiByZXNvbHV0aW9uLFxuICogZXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nLCBzY2hlbWEgdmFsaWRhdGlvbiwgcHJvcGVydHkgdHJhbnNmb3JtYXRpb24sIGFuZFxuICogcG9saWN5IGFzc2lnbm1lbnQtc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS5cbiAqL1xuXG5pbXBvcnQgeyBUZXN0aW5nIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IEFwaVZlcnNpb25NYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9hcGktdmVyc2lvbi1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBWZXJzaW9uU3VwcG9ydExldmVsIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtcbiAgUG9saWN5QXNzaWdubWVudCxcbiAgUG9saWN5QXNzaWdubWVudFByb3BzLFxufSBmcm9tIFwiLi4vbGliL3BvbGljeS1hc3NpZ25tZW50XCI7XG5pbXBvcnQge1xuICBBTExfUE9MSUNZX0FTU0lHTk1FTlRfVkVSU0lPTlMsXG4gIFBPTElDWV9BU1NJR05NRU5UX1RZUEUsXG59IGZyb20gXCIuLi9saWIvcG9saWN5LWFzc2lnbm1lbnQtc2NoZW1hc1wiO1xuXG5kZXNjcmliZShcIlBvbGljeUFzc2lnbm1lbnQgLSBVbmlmaWVkIEltcGxlbWVudGF0aW9uXCIsICgpID0+IHtcbiAgbGV0IGFwcDogY2RrdGYuQXBwO1xuICBsZXQgc3RhY2s6IGNka3RmLlRlcnJhZm9ybVN0YWNrO1xuICBsZXQgbWFuYWdlcjogQXBpVmVyc2lvbk1hbmFnZXI7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICBzdGFjayA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1TdGFjayhhcHAsIFwiVGVzdFN0YWNrXCIpO1xuICAgIG1hbmFnZXIgPSBBcGlWZXJzaW9uTWFuYWdlci5pbnN0YW5jZSgpO1xuXG4gICAgLy8gRW5zdXJlIFBvbGljeSBBc3NpZ25tZW50IHNjaGVtYXMgYXJlIHJlZ2lzdGVyZWRcbiAgICB0cnkge1xuICAgICAgbWFuYWdlci5yZWdpc3RlclJlc291cmNlVHlwZShcbiAgICAgICAgUE9MSUNZX0FTU0lHTk1FTlRfVFlQRSxcbiAgICAgICAgQUxMX1BPTElDWV9BU1NJR05NRU5UX1ZFUlNJT05TLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSWdub3JlIGlmIGFscmVhZHkgcmVnaXN0ZXJlZFxuICAgIH1cbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJDb25zdHJ1Y3RvciBhbmQgQmFzaWMgUHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIHBvbGljeSBhc3NpZ25tZW50IHdpdGggYXV0b21hdGljIGxhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHM6IFBvbGljeUFzc2lnbm1lbnRQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy90ZXN0LXJnXCIsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudCkudG9CZUluc3RhbmNlT2YoUG9saWN5QXNzaWdubWVudCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5yZXNvbHZlZEFwaVZlcnNpb24pLnRvQmUoXCIyMDIyLTA2LTAxXCIpOyAvLyBMYXRlc3QgdmVyc2lvblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMpLnRvQmUocHJvcHMpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQubmFtZSkudG9CZShcInRlc3QtYXNzaWdubWVudFwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBwb2xpY3kgYXNzaWdubWVudCB3aXRoIGV4cGxpY2l0IHZlcnNpb24gcGlubmluZ1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogUG9saWN5QXNzaWdubWVudFByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudC1waW5uZWRcIixcbiAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIyLTA2LTAxXCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudC5yZXNvbHZlZEFwaVZlcnNpb24pLnRvQmUoXCIyMDIyLTA2LTAxXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIHBvbGljeSBhc3NpZ25tZW50IHdpdGggYWxsIG9wdGlvbmFsIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHM6IFBvbGljeUFzc2lnbm1lbnRQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnQtZnVsbFwiLFxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUZXN0IFBvbGljeSBBc3NpZ25tZW50XCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkEgdGVzdCBwb2xpY3kgYXNzaWdubWVudCBmb3IgdW5pdCB0ZXN0aW5nXCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvdGVzdC1yZ1wiLFxuICAgICAgICBlbmZvcmNlbWVudE1vZGU6IFwiRGVmYXVsdFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgdGFnTmFtZToge1xuICAgICAgICAgICAgdmFsdWU6IFwiRW52aXJvbm1lbnRcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGFzc2lnbmVkQnk6IFwiYWRtaW5AZXhhbXBsZS5jb21cIixcbiAgICAgICAgfSxcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIGlkZW50aXR5OiB7XG4gICAgICAgICAgdHlwZTogXCJTeXN0ZW1Bc3NpZ25lZFwiLFxuICAgICAgICB9LFxuICAgICAgICBub3RTY29wZXM6IFtcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9leGNsdWRlZC1yZ1wiLFxuICAgICAgICBdLFxuICAgICAgICBub25Db21wbGlhbmNlTWVzc2FnZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtZXNzYWdlOiBcIlJlc291cmNlIG11c3QgY29tcGx5IHdpdGggcG9saWN5XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgaWdub3JlQ2hhbmdlczogW1wibWV0YWRhdGFcIl0sXG4gICAgICAgIGVuYWJsZVZhbGlkYXRpb246IHRydWUsXG4gICAgICAgIGVuYWJsZU1pZ3JhdGlvbkFuYWx5c2lzOiB0cnVlLFxuICAgICAgICBlbmFibGVUcmFuc2Zvcm1hdGlvbjogdHJ1ZSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJUZXN0QXNzaWdubWVudFwiLCBwcm9wcyk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLmRpc3BsYXlOYW1lKS50b0JlKFwiVGVzdCBQb2xpY3kgQXNzaWdubWVudFwiKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLmRlc2NyaXB0aW9uKS50b0JlKFxuICAgICAgICBcIkEgdGVzdCBwb2xpY3kgYXNzaWdubWVudCBmb3IgdW5pdCB0ZXN0aW5nXCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMuZW5mb3JjZW1lbnRNb2RlKS50b0JlKFwiRGVmYXVsdFwiKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLnBhcmFtZXRlcnMpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5tZXRhZGF0YSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLmlkZW50aXR5KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMubm90U2NvcGVzKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMubm9uQ29tcGxpYW5jZU1lc3NhZ2VzKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgdXNlIGRlZmF1bHQgbmFtZSB3aGVuIG5hbWUgaXMgbm90IHByb3ZpZGVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzOiBQb2xpY3lBc3NpZ25tZW50UHJvcHMgPSB7XG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudC5uYW1lKS50b0JlKFwiVGVzdEFzc2lnbm1lbnRcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXF1aXJlIHBvbGljeURlZmluaXRpb25JZCB0byBiZSBwcm92aWRlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogYW55ID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgIH07XG5cbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHByb3BzKTtcbiAgICAgIH0pLnRvVGhyb3coXCJSZXF1aXJlZCBwcm9wZXJ0eSAncG9saWN5RGVmaW5pdGlvbklkJyBpcyBtaXNzaW5nXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmVxdWlyZSBzY29wZSB0byBiZSBwcm92aWRlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogYW55ID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICB9O1xuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJUZXN0QXNzaWdubWVudFwiLCBwcm9wcyk7XG4gICAgICB9KS50b1Rocm93KFwiUmVxdWlyZWQgcHJvcGVydHkgJ3Njb3BlJyBpcyBtaXNzaW5nXCIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkZyYW1ld29yayBJbnRlZ3JhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgcmVzb2x2ZSBsYXRlc3QgQVBJIHZlcnNpb24gYXV0b21hdGljYWxseVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjItMDYtMDFcIik7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5sYXRlc3RWZXJzaW9uKCkpLnRvQmUoXCIyMDIyLTA2LTAxXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc3VwcG9ydCBhbGwgcmVnaXN0ZXJlZCBBUEkgdmVyc2lvbnNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzdXBwb3J0ZWRWZXJzaW9ucyA9IGFzc2lnbm1lbnQuc3VwcG9ydGVkVmVyc2lvbnMoKTtcbiAgICAgIGV4cGVjdChzdXBwb3J0ZWRWZXJzaW9ucykudG9Db250YWluKFwiMjAyMi0wNi0wMVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHZhbGlkYXRlIHZlcnNpb24gc3VwcG9ydFwiLCAoKSA9PiB7XG4gICAgICAvLyBWYWxpZCB2ZXJzaW9uXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJWYWxpZFZlcnNpb25cIiwge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIyLTA2LTAxXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcblxuICAgICAgLy8gSW52YWxpZCB2ZXJzaW9uXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJJbnZhbGlkVmVyc2lvblwiLCB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgICBhcGlWZXJzaW9uOiBcIjIwMjAtMDEtMDFcIixcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KFwiVW5zdXBwb3J0ZWQgQVBJIHZlcnNpb24gJzIwMjAtMDEtMDEnXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbG9hZCBjb3JyZWN0IHNjaGVtYSBmb3IgcmVzb2x2ZWQgdmVyc2lvblwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBhcGlWZXJzaW9uOiBcIjIwMjItMDYtMDFcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudC5zY2hlbWEpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5zY2hlbWEucmVzb3VyY2VUeXBlKS50b0JlKFBPTElDWV9BU1NJR05NRU5UX1RZUEUpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuc2NoZW1hLnZlcnNpb24pLnRvQmUoXCIyMDIyLTA2LTAxXCIpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuc2NoZW1hLnByb3BlcnRpZXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBsb2FkIHZlcnNpb24gY29uZmlndXJhdGlvbiBjb3JyZWN0bHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudC52ZXJzaW9uQ29uZmlnKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQudmVyc2lvbkNvbmZpZy52ZXJzaW9uKS50b0JlKFwiMjAyMi0wNi0wMVwiKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnZlcnNpb25Db25maWcuc3VwcG9ydExldmVsKS50b0JlKFxuICAgICAgICBWZXJzaW9uU3VwcG9ydExldmVsLkFDVElWRSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiUHJvcGVydHkgVmFsaWRhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgdmFsaWRhdGUgcHJvcGVydGllcyB3aGVuIHZhbGlkYXRpb24gaXMgZW5hYmxlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogUG9saWN5QXNzaWdubWVudFByb3BzID0ge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBlbmFibGVWYWxpZGF0aW9uOiB0cnVlLFxuICAgICAgfTtcblxuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwgcHJvcHMpO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhdmUgdmFsaWRhdGlvbiByZXN1bHRzIGZvciB2YWxpZCBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJUZXN0QXNzaWdubWVudFwiLCB7XG4gICAgICAgIG5hbWU6IFwidmFsaWQtYXNzaWdubWVudFwiLFxuICAgICAgICBkaXNwbGF5TmFtZTogXCJWYWxpZCBBc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgIGVuYWJsZVZhbGlkYXRpb246IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQudmFsaWRhdGlvblJlc3VsdCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnZhbGlkYXRpb25SZXN1bHQhLnZhbGlkKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQudmFsaWRhdGlvblJlc3VsdCEuZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBza2lwIHZhbGlkYXRpb24gd2hlbiBkaXNhYmxlZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBlbmFibGVWYWxpZGF0aW9uOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudCkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJNaWdyYXRpb24gQW5hbHlzaXNcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHNraXAgbWlncmF0aW9uIGFuYWx5c2lzIGZvciBzaW5nbGUgdmVyc2lvblwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBhcGlWZXJzaW9uOiBcIjIwMjItMDYtMDFcIixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaW5jZSB0aGVyZSdzIG9ubHkgb25lIHZlcnNpb24sIG1pZ3JhdGlvbiBhbmFseXNpcyBzaG91bGQgYmUgc2tpcHBlZFxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBza2lwIG1pZ3JhdGlvbiBhbmFseXNpcyB3aGVuIGRpc2FibGVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJUZXN0QXNzaWdubWVudFwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgIGVuYWJsZU1pZ3JhdGlvbkFuYWx5c2lzOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudC5taWdyYXRpb25BbmFseXNpcykudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIlJlc291cmNlIENyZWF0aW9uIGFuZCBCb2R5XCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBjcmVhdGUgY29ycmVjdCByZXNvdXJjZSBib2R5IHdpdGggbWluaW1hbCBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJUZXN0QXNzaWdubWVudFwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvdGVzdC1yZ1wiLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMucG9saWN5RGVmaW5pdGlvbklkKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMuc2NvcGUpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjcmVhdGUgY29ycmVjdCByZXNvdXJjZSBib2R5IHdpdGggYWxsIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlRlc3RBc3NpZ25tZW50XCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVGVzdCBBc3NpZ25tZW50XCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkEgdGVzdCBhc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgIGVuZm9yY2VtZW50TW9kZTogXCJEb05vdEVuZm9yY2VcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIHRhZ05hbWU6IHtcbiAgICAgICAgICAgIHZhbHVlOiBcIkVudmlyb25tZW50XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBhc3NpZ25lZEJ5OiBcImFkbWluQGV4YW1wbGUuY29tXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICBpZGVudGl0eToge1xuICAgICAgICAgIHR5cGU6IFwiU3lzdGVtQXNzaWduZWRcIixcbiAgICAgICAgfSxcbiAgICAgICAgbm90U2NvcGVzOiBbXG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvZXhjbHVkZWQtcmdcIixcbiAgICAgICAgXSxcbiAgICAgICAgbm9uQ29tcGxpYW5jZU1lc3NhZ2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWVzc2FnZTogXCJSZXNvdXJjZSBtdXN0IGNvbXBseVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5kaXNwbGF5TmFtZSkudG9CZShcIlRlc3QgQXNzaWdubWVudFwiKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLmVuZm9yY2VtZW50TW9kZSkudG9CZShcIkRvTm90RW5mb3JjZVwiKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLmlkZW50aXR5KS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIFRlcnJhZm9ybSBvdXRwdXRzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJUZXN0QXNzaWdubWVudFwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50LW91dHB1dHNcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudC5pZE91dHB1dCkudG9CZUluc3RhbmNlT2YoY2RrdGYuVGVycmFmb3JtT3V0cHV0KTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50Lm5hbWVPdXRwdXQpLnRvQmVJbnN0YW5jZU9mKGNka3RmLlRlcnJhZm9ybU91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiRW5mb3JjZW1lbnQgTW9kZSBDb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCB1c2UgRGVmYXVsdCBlbmZvcmNlbWVudCBtb2RlIGJ5IGRlZmF1bHRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIkRlZmF1bHRFbmZvcmNlbWVudFwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuZW5mb3JjZW1lbnRNb2RlKS50b0JlKFwiRGVmYXVsdFwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgRG9Ob3RFbmZvcmNlIGVuZm9yY2VtZW50IG1vZGVcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIkRvTm90RW5mb3JjZU1vZGVcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBlbmZvcmNlbWVudE1vZGU6IFwiRG9Ob3RFbmZvcmNlXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuZW5mb3JjZW1lbnRNb2RlKS50b0JlKFwiRG9Ob3RFbmZvcmNlXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc3VwcG9ydCBleHBsaWNpdCBEZWZhdWx0IGVuZm9yY2VtZW50IG1vZGVcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIkV4cGxpY2l0RGVmYXVsdFwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgIGVuZm9yY2VtZW50TW9kZTogXCJEZWZhdWx0XCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuZW5mb3JjZW1lbnRNb2RlKS50b0JlKFwiRGVmYXVsdFwiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJJZGVudGl0eSBDb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBzdXBwb3J0IFN5c3RlbUFzc2lnbmVkIGlkZW50aXR5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJTeXN0ZW1JZGVudGl0eVwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICBpZGVudGl0eToge1xuICAgICAgICAgIHR5cGU6IFwiU3lzdGVtQXNzaWduZWRcIixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5pZGVudGl0eSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLmlkZW50aXR5IS50eXBlKS50b0JlKFwiU3lzdGVtQXNzaWduZWRcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdXBwb3J0IFVzZXJBc3NpZ25lZCBpZGVudGl0eVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVXNlcklkZW50aXR5XCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIGlkZW50aXR5OiB7XG4gICAgICAgICAgdHlwZTogXCJVc2VyQXNzaWduZWRcIixcbiAgICAgICAgICB1c2VyQXNzaWduZWRJZGVudGl0aWVzOiB7XG4gICAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9yZy9wcm92aWRlcnMvTWljcm9zb2Z0Lk1hbmFnZWRJZGVudGl0eS91c2VyQXNzaWduZWRJZGVudGl0aWVzL2lkZW50aXR5XCI6XG4gICAgICAgICAgICAgIHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMuaWRlbnRpdHkpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5pZGVudGl0eSEudHlwZSkudG9CZShcIlVzZXJBc3NpZ25lZFwiKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLmlkZW50aXR5IS51c2VyQXNzaWduZWRJZGVudGl0aWVzKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc3VwcG9ydCBOb25lIGlkZW50aXR5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJOb0lkZW50aXR5XCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIGlkZW50aXR5OiB7XG4gICAgICAgICAgdHlwZTogXCJOb25lXCIsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMuaWRlbnRpdHkpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5pZGVudGl0eSEudHlwZSkudG9CZShcIk5vbmVcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiUGFyYW1ldGVycyBhbmQgTWV0YWRhdGFcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgcG9saWN5IHBhcmFtZXRlcnNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIldpdGhQYXJhbWV0ZXJzXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIHRhZ05hbWU6IHtcbiAgICAgICAgICAgIHZhbHVlOiBcIkVudmlyb25tZW50XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0YWdWYWx1ZToge1xuICAgICAgICAgICAgdmFsdWU6IFwiUHJvZHVjdGlvblwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMucGFyYW1ldGVycykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnByb3BzLnBhcmFtZXRlcnMudGFnTmFtZS52YWx1ZSkudG9CZShcIkVudmlyb25tZW50XCIpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMucGFyYW1ldGVycy50YWdWYWx1ZS52YWx1ZSkudG9CZShcIlByb2R1Y3Rpb25cIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdXBwb3J0IG1ldGFkYXRhXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJXaXRoTWV0YWRhdGFcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGFzc2lnbmVkQnk6IFwiYWRtaW5AZXhhbXBsZS5jb21cIixcbiAgICAgICAgICBhc3NpZ25lZERhdGU6IFwiMjAyNC0wMS0wMVwiLFxuICAgICAgICAgIHBhcmFtZXRlclNjb3Blczoge30sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMubWV0YWRhdGEpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5tZXRhZGF0YS5hc3NpZ25lZEJ5KS50b0JlKFwiYWRtaW5AZXhhbXBsZS5jb21cIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiTm90U2NvcGVzIGFuZCBOb25Db21wbGlhbmNlTWVzc2FnZXNcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgbm90U2NvcGVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJXaXRoTm90U2NvcGVzXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgbm90U2NvcGVzOiBbXG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvZXhjbHVkZWQtcmctMVwiLFxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL2V4Y2x1ZGVkLXJnLTJcIixcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5ub3RTY29wZXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5ub3RTY29wZXMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgbm9uQ29tcGxpYW5jZU1lc3NhZ2VzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiV2l0aE5vbkNvbXBsaWFuY2VNZXNzYWdlc1wiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgICBub25Db21wbGlhbmNlTWVzc2FnZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogXCJSZXNvdXJjZSBtdXN0IGhhdmUgcmVxdWlyZWQgdGFnc1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogXCJSZXNvdXJjZSBsb2NhdGlvbiBpcyBub3QgY29tcGxpYW50XCIsXG4gICAgICAgICAgICAgIHBvbGljeURlZmluaXRpb25SZWZlcmVuY2VJZDogXCJsb2NhdGlvblBvbGljeVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMubm9uQ29tcGxpYW5jZU1lc3NhZ2VzKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucHJvcHMubm9uQ29tcGxpYW5jZU1lc3NhZ2VzKS50b0hhdmVMZW5ndGgoMik7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5wcm9wcy5ub25Db21wbGlhbmNlTWVzc2FnZXMhWzBdLm1lc3NhZ2UpLnRvQmUoXG4gICAgICAgIFwiUmVzb3VyY2UgbXVzdCBoYXZlIHJlcXVpcmVkIHRhZ3NcIixcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiUHVibGljIE1ldGhvZHMgYW5kIFByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICAgIGxldCBhc3NpZ25tZW50OiBQb2xpY3lBc3NpZ25tZW50O1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVGVzdEFzc2lnbm1lbnRcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUZXN0IEFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy90ZXN0LXJnXCIsXG4gICAgICAgIGVuZm9yY2VtZW50TW9kZTogXCJEZWZhdWx0XCIsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhdmUgY29ycmVjdCBpZCBmb3JtYXRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuaWQpLnRvTWF0Y2goL15cXCRcXHsuKlxcLmlkXFx9JC8pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGF2ZSByZXNvdXJjZUlkIHByb3BlcnR5IG1hdGNoaW5nIGlkXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LnJlc291cmNlSWQpLnRvQmUoYXNzaWdubWVudC5pZCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gY29ycmVjdCBwb2xpY3lEZWZpbml0aW9uSWRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQucG9saWN5RGVmaW5pdGlvbklkKS50b0JlKFxuICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gY29ycmVjdCBzY29wZVwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoYXNzaWdubWVudC5hc3NpZ25tZW50U2NvcGUpLnRvQmUoXG4gICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3Rlc3QtcmdcIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gY29ycmVjdCBlbmZvcmNlbWVudE1vZGVcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuZW5mb3JjZW1lbnRNb2RlKS50b0JlKFwiRGVmYXVsdFwiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJJZ25vcmUgQ2hhbmdlcyBDb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBhcHBseSBpZ25vcmUgY2hhbmdlcyBsaWZlY3ljbGUgcnVsZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIklnbm9yZUNoYW5nZXNcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBpZ25vcmVDaGFuZ2VzOiBbXCJtZXRhZGF0YVwiLCBcImRlc2NyaXB0aW9uXCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50KS50b0JlSW5zdGFuY2VPZihQb2xpY3lBc3NpZ25tZW50KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBlbXB0eSBpZ25vcmUgY2hhbmdlcyBhcnJheVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiRW1wdHlJZ25vcmVcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBpZ25vcmVDaGFuZ2VzOiBbXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYXNzaWdubWVudCkudG9CZUluc3RhbmNlT2YoUG9saWN5QXNzaWdubWVudCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiRXJyb3IgSGFuZGxpbmdcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBpbnZhbGlkIEFQSSB2ZXJzaW9ucyBncmFjZWZ1bGx5XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIkludmFsaWRBUElcIiwge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1hc3NpZ25tZW50XCIsXG4gICAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgICAgYXBpVmVyc2lvbjogXCJpbnZhbGlkLXZlcnNpb25cIixcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KFwiVW5zdXBwb3J0ZWQgQVBJIHZlcnNpb24gJ2ludmFsaWQtdmVyc2lvbidcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgdmFsaWRhdGlvbiBlcnJvcnMgd2hlbiB2YWxpZGF0aW9uIGlzIGVuYWJsZWRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiVmFsaWRhdGlvbkVycm9yXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtYXNzaWdubWVudFwiLFxuICAgICAgICAgIHBvbGljeURlZmluaXRpb25JZDogdW5kZWZpbmVkIGFzIGFueSwgLy8gTWlzc2luZyByZXF1aXJlZCBwb2xpY3lEZWZpbml0aW9uSWRcbiAgICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgICBlbmFibGVWYWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coXCJSZXF1aXJlZCBwcm9wZXJ0eSAncG9saWN5RGVmaW5pdGlvbklkJyBpcyBtaXNzaW5nXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIHNjaGVtYSByZWdpc3RyYXRpb24gZXJyb3JzIGdyYWNlZnVsbHlcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiU2NoZW1hVGVzdFwiLCB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LWFzc2lnbm1lbnRcIixcbiAgICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgfSk7XG4gICAgICB9KS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkpTSUkgQ29tcGxpYW5jZVwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgaGF2ZSBKU0lJLWNvbXBsaWFudCBjb25zdHJ1Y3RvclwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJKc2lpVGVzdFwiLCB7XG4gICAgICAgICAgbmFtZTogXCJqc2lpLXRlc3RcIixcbiAgICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgfSk7XG4gICAgICB9KS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGF2ZSBKU0lJLWNvbXBsaWFudCBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJKc2lpUHJvcHNcIiwge1xuICAgICAgICBuYW1lOiBcImpzaWktcHJvcHNcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QodHlwZW9mIGFzc2lnbm1lbnQuaWQpLnRvQmUoXCJzdHJpbmdcIik7XG4gICAgICBleHBlY3QodHlwZW9mIGFzc2lnbm1lbnQubmFtZSkudG9CZShcInN0cmluZ1wiKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgYXNzaWdubWVudC5yZXNvbHZlZEFwaVZlcnNpb24pLnRvQmUoXCJzdHJpbmdcIik7XG4gICAgICBleHBlY3QodHlwZW9mIGFzc2lnbm1lbnQucG9saWN5RGVmaW5pdGlvbklkKS50b0JlKFwic3RyaW5nXCIpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBhc3NpZ25tZW50LmFzc2lnbm1lbnRTY29wZSkudG9CZShcInN0cmluZ1wiKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgYXNzaWdubWVudC5lbmZvcmNlbWVudE1vZGUpLnRvQmUoXCJzdHJpbmdcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYXZlIEpTSUktY29tcGxpYW50IG1ldGhvZHNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIkpzaWlNZXRob2RzXCIsIHtcbiAgICAgICAgbmFtZTogXCJqc2lpLW1ldGhvZHNcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QodHlwZW9mIGFzc2lnbm1lbnQubGF0ZXN0VmVyc2lvbikudG9CZShcImZ1bmN0aW9uXCIpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBhc3NpZ25tZW50LnN1cHBvcnRlZFZlcnNpb25zKS50b0JlKFwiZnVuY3Rpb25cIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzZXJpYWxpemUgY29tcGxleCBvYmplY3RzIGNvcnJlY3RseVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiSnNpaVNlcmlhbGl6YXRpb25cIiwge1xuICAgICAgICBuYW1lOiBcImpzaWktc2VyaWFsaXphdGlvblwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgdGVzdFBhcmFtOiB7XG4gICAgICAgICAgICB2YWx1ZTogXCJ0ZXN0XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoKCkgPT4gSlNPTi5zdHJpbmdpZnkoYXNzaWdubWVudC52YWxpZGF0aW9uUmVzdWx0KSkubm90LnRvVGhyb3coKTtcbiAgICAgIGV4cGVjdCgoKSA9PiBKU09OLnN0cmluZ2lmeShhc3NpZ25tZW50LnNjaGVtYSkpLm5vdC50b1Rocm93KCk7XG4gICAgICBleHBlY3QoKCkgPT4gSlNPTi5zdHJpbmdpZnkoYXNzaWdubWVudC52ZXJzaW9uQ29uZmlnKSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJDREsgVGVycmFmb3JtIEludGVncmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBzeW50aGVzaXplIHRvIHZhbGlkIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICAgIG5ldyBQb2xpY3lBc3NpZ25tZW50KHN0YWNrLCBcIlN5bnRoVGVzdFwiLCB7XG4gICAgICAgIG5hbWU6IFwic3ludGgtdGVzdFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBleHBlY3Qoc3ludGhlc2l6ZWQpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIGNvbnN0IHN0YWNrQ29uZmlnID0gSlNPTi5wYXJzZShzeW50aGVzaXplZCk7XG4gICAgICBleHBlY3Qoc3RhY2tDb25maWcucmVzb3VyY2UpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB3b3JrIGluIGNvbXBsZXggQ0RLIGNvbnN0cnVjdHNcIiwgKCkgPT4ge1xuICAgICAgY2xhc3MgQ29tcGxleENvbnN0cnVjdCBleHRlbmRzIGNka3RmLlRlcnJhZm9ybVN0YWNrIHtcbiAgICAgICAgY29uc3RydWN0b3Ioc2NvcGU6IGNka3RmLkFwcCwgaWQ6IHN0cmluZykge1xuICAgICAgICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAgICAgICBjb25zdCBhc3NpZ25tZW50MSA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHRoaXMsIFwiQXNzaWdubWVudDFcIiwge1xuICAgICAgICAgICAgbmFtZTogXCJhc3NpZ25tZW50LTFcIixcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIkZpcnN0IEFzc2lnbm1lbnRcIixcbiAgICAgICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3BvbGljeS0xXCIsXG4gICAgICAgICAgICBzY29wZTogXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGFzc2lnbm1lbnQyID0gbmV3IFBvbGljeUFzc2lnbm1lbnQodGhpcywgXCJBc3NpZ25tZW50MlwiLCB7XG4gICAgICAgICAgICBuYW1lOiBcImFzc2lnbm1lbnQtMlwiLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiU2Vjb25kIEFzc2lnbm1lbnRcIixcbiAgICAgICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3BvbGljeS0yXCIsXG4gICAgICAgICAgICBzY29wZTpcbiAgICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvdGVzdC1yZ1wiLFxuICAgICAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIyLTA2LTAxXCIsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiQXNzaWdubWVudDFJZFwiLCB7XG4gICAgICAgICAgICB2YWx1ZTogYXNzaWdubWVudDEuaWQsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiQXNzaWdubWVudDJJZFwiLCB7XG4gICAgICAgICAgICB2YWx1ZTogYXNzaWdubWVudDIuaWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IENvbXBsZXhDb25zdHJ1Y3QoYXBwLCBcIkNvbXBsZXhTdGFja1wiKTtcbiAgICAgIH0pLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgbXVsdGlwbGUgcG9saWN5IGFzc2lnbm1lbnRzIGluIHRoZSBzYW1lIHN0YWNrXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQxID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiQXNzaWdubWVudDFcIiwge1xuICAgICAgICBuYW1lOiBcImFzc2lnbm1lbnQtMVwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3BvbGljeS0xXCIsXG4gICAgICAgIHNjb3BlOiBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQyID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiQXNzaWdubWVudDJcIiwge1xuICAgICAgICBuYW1lOiBcImFzc2lnbm1lbnQtMlwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3BvbGljeS0yXCIsXG4gICAgICAgIHNjb3BlOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3Rlc3QtcmdcIixcbiAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIyLTA2LTAxXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQxLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjItMDYtMDFcIik7XG4gICAgICBleHBlY3QoYXNzaWdubWVudDIucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyMi0wNi0wMVwiKTtcblxuICAgICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLnN5bnRoKHN0YWNrKTtcbiAgICAgIGV4cGVjdChzeW50aGVzaXplZCkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJTY29wZSBDb25maWd1cmF0aW9uc1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgc3VwcG9ydCBtYW5hZ2VtZW50IGdyb3VwIHNjb3BlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJNYW5hZ2VtZW50R3JvdXBTY29wZVwiLCB7XG4gICAgICAgIG5hbWU6IFwibWctYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOiBcIi9wcm92aWRlcnMvTWljcm9zb2Z0Lk1hbmFnZW1lbnQvbWFuYWdlbWVudEdyb3Vwcy9teS1tZ1wiLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LmFzc2lnbm1lbnRTY29wZSkudG9Db250YWluKFxuICAgICAgICBcIi9wcm92aWRlcnMvTWljcm9zb2Z0Lk1hbmFnZW1lbnQvbWFuYWdlbWVudEdyb3Vwcy9cIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdXBwb3J0IHN1YnNjcmlwdGlvbiBzY29wZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiU3Vic2NyaXB0aW9uU2NvcGVcIiwge1xuICAgICAgICBuYW1lOiBcInN1YnNjcmlwdGlvbi1hc3NpZ25tZW50XCIsXG4gICAgICAgIHBvbGljeURlZmluaXRpb25JZDpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9wcm92aWRlcnMvTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnMvdGVzdC1wb2xpY3lcIixcbiAgICAgICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuYXNzaWdubWVudFNjb3BlKS50b0NvbnRhaW4oXCIvc3Vic2NyaXB0aW9ucy9cIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdXBwb3J0IHJlc291cmNlIGdyb3VwIHNjb3BlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgUG9saWN5QXNzaWdubWVudChzdGFjaywgXCJSZXNvdXJjZUdyb3VwU2NvcGVcIiwge1xuICAgICAgICBuYW1lOiBcInJnLWFzc2lnbm1lbnRcIixcbiAgICAgICAgcG9saWN5RGVmaW5pdGlvbklkOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy90ZXN0LXBvbGljeVwiLFxuICAgICAgICBzY29wZTpcbiAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy90ZXN0LXJnXCIsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFzc2lnbm1lbnQuYXNzaWdubWVudFNjb3BlKS50b0NvbnRhaW4oXCIvcmVzb3VyY2VHcm91cHMvXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgc3VwcG9ydCByZXNvdXJjZSBzY29wZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQoc3RhY2ssIFwiUmVzb3VyY2VTY29wZVwiLCB7XG4gICAgICAgIG5hbWU6IFwicmVzb3VyY2UtYXNzaWdubWVudFwiLFxuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6XG4gICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zL3Rlc3QtcG9saWN5XCIsXG4gICAgICAgIHNjb3BlOlxuICAgICAgICAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3Rlc3QtcmcvcHJvdmlkZXJzL01pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy90ZXN0c3RvcmFnZVwiLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhc3NpZ25tZW50LmFzc2lnbm1lbnRTY29wZSkudG9Db250YWluKFwiL3Byb3ZpZGVycy9cIik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -96,6 +96,16 @@ export interface PolicyDefinitionProps extends AzapiResourceProps {
96
96
  * }
97
97
  */
98
98
  readonly metadata?: any;
99
+ /**
100
+ * The parent scope where the policy definition should be created
101
+ * Can be a management group or subscription scope
102
+ * If not specified, defaults to subscription scope
103
+ *
104
+ * @example "/providers/Microsoft.Management/managementGroups/my-mg"
105
+ * @example "/subscriptions/00000000-0000-0000-0000-000000000000"
106
+ * @defaultValue Subscription scope (auto-detected from client config)
107
+ */
108
+ readonly parentId?: string;
99
109
  /**
100
110
  * The lifecycle rules to ignore changes
101
111
  * @example ["metadata"]
@@ -198,6 +208,24 @@ export interface PolicyDefinitionBody {
198
208
  * }
199
209
  * });
200
210
  *
211
+ * @example
212
+ * // Policy definition at management group scope:
213
+ * const mgPolicyDefinition = new PolicyDefinition(this, "mgPolicy", {
214
+ * name: "mg-require-tag-policy",
215
+ * parentId: "/providers/Microsoft.Management/managementGroups/my-mg",
216
+ * displayName: "Management Group Tag Policy",
217
+ * description: "Enforces tags across the management group hierarchy",
218
+ * policyRule: {
219
+ * if: {
220
+ * field: "tags['CostCenter']",
221
+ * exists: "false"
222
+ * },
223
+ * then: {
224
+ * effect: "deny"
225
+ * }
226
+ * }
227
+ * });
228
+ *
201
229
  * @stability stable
202
230
  */
203
231
  export declare class PolicyDefinition extends AzapiResource {
@@ -261,6 +289,11 @@ export declare class PolicyDefinition extends AzapiResource {
261
289
  * @override
262
290
  */
263
291
  protected customizeResourceConfig(config: any): any;
292
+ /**
293
+ * Overrides parent ID resolution to use parentId from props if provided
294
+ * Policy definitions can be deployed at subscription or management group scope
295
+ */
296
+ protected resolveParentId(props: any): string;
264
297
  /**
265
298
  * Get the full resource identifier for use in other Azure resources
266
299
  * Alias for the id property
@@ -75,6 +75,24 @@ const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
75
75
  * }
76
76
  * });
77
77
  *
78
+ * @example
79
+ * // Policy definition at management group scope:
80
+ * const mgPolicyDefinition = new PolicyDefinition(this, "mgPolicy", {
81
+ * name: "mg-require-tag-policy",
82
+ * parentId: "/providers/Microsoft.Management/managementGroups/my-mg",
83
+ * displayName: "Management Group Tag Policy",
84
+ * description: "Enforces tags across the management group hierarchy",
85
+ * policyRule: {
86
+ * if: {
87
+ * field: "tags['CostCenter']",
88
+ * exists: "false"
89
+ * },
90
+ * then: {
91
+ * effect: "deny"
92
+ * }
93
+ * }
94
+ * });
95
+ *
78
96
  * @stability stable
79
97
  */
80
98
  class PolicyDefinition extends azapi_resource_1.AzapiResource {
@@ -189,6 +207,19 @@ class PolicyDefinition extends azapi_resource_1.AzapiResource {
189
207
  ignoreMissingProperty: true,
190
208
  };
191
209
  }
210
+ /**
211
+ * Overrides parent ID resolution to use parentId from props if provided
212
+ * Policy definitions can be deployed at subscription or management group scope
213
+ */
214
+ resolveParentId(props) {
215
+ const typedProps = props;
216
+ // If explicit parentId is provided, use it (management group or subscription)
217
+ if (typedProps.parentId) {
218
+ return typedProps.parentId;
219
+ }
220
+ // Otherwise, fall back to default subscription scope
221
+ return super.resolveParentId(props);
222
+ }
192
223
  // =============================================================================
193
224
  // PUBLIC METHODS FOR POLICY DEFINITION OPERATIONS
194
225
  // =============================================================================
@@ -229,8 +260,8 @@ class PolicyDefinition extends azapi_resource_1.AzapiResource {
229
260
  }
230
261
  exports.PolicyDefinition = PolicyDefinition;
231
262
  _a = JSII_RTTI_SYMBOL_1;
232
- PolicyDefinition[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PolicyDefinition", version: "1.5.0" };
263
+ PolicyDefinition[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PolicyDefinition", version: "1.7.0" };
233
264
  (() => {
234
265
  azapi_resource_1.AzapiResource.registerSchemas(policy_definition_schemas_1.POLICY_DEFINITION_TYPE, policy_definition_schemas_1.ALL_POLICY_DEFINITION_VERSIONS);
235
266
  })();
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWRlZmluaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtcG9saWN5ZGVmaW5pdGlvbi9saWIvcG9saWN5LWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVILCtCQUErQjtBQUUvQiwyRUFHcUM7QUFDckMsOEVBR21EO0FBa0puRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxREc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLDhCQUFhO0lBaUJqRCxvQkFBb0I7SUFFcEI7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixtRkFBbUY7UUFFbkYsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLGlDQUFpQztTQUMvQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLG1DQUFtQztTQUNqRCxDQUFDLENBQUM7UUFFSCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLCtDQUErQztJQUMvQyxnRkFBZ0Y7SUFFaEY7OztPQUdHO0lBQ08sY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZO1FBQ3BCLE9BQU8sa0RBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGtCQUFrQixDQUFDLEtBQVU7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBOEIsQ0FBQztRQUNsRCxPQUFPO1lBQ0wsVUFBVSxFQUFFO2dCQUNWLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztnQkFDbkMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2dCQUNuQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsSUFBSSxRQUFRO2dCQUM3QyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksSUFBSSxLQUFLO2dCQUM5QixvRkFBb0Y7Z0JBQ3BGLDBGQUEwRjtnQkFDMUYsdUZBQXVGO2dCQUN2RixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDN0QsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO2dCQUNqQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7YUFDOUI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sWUFBWTtRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDTyx1QkFBdUIsQ0FBQyxNQUFXO1FBQzNDLE9BQU87WUFDTCxHQUFHLE1BQU07WUFDVCw4REFBOEQ7WUFDOUQsbUZBQW1GO1lBQ25GLGdFQUFnRTtZQUNoRSx1QkFBdUIsRUFBRSxLQUFLO1lBQzlCLDRFQUE0RTtZQUM1RSxpRkFBaUY7WUFDakYscUJBQXFCLEVBQUUsSUFBSTtTQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVELGdGQUFnRjtJQUNoRixrREFBa0Q7SUFDbEQsZ0ZBQWdGO0lBRWhGOzs7T0FHRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLHlCQUF5QjtJQUN6QixnRkFBZ0Y7SUFFaEY7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzlDO29CQUNFLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7aUJBQ3pDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7O0FBeExILDRDQXlMQzs7O0FBeExDO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQzNCLGtEQUFzQixFQUN0QiwwREFBOEIsQ0FDL0IsQ0FBQztBQUNKLENBQUMsR0FBQSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uIGltcGxlbWVudGF0aW9uIHVzaW5nIFZlcnNpb25lZEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gZm9yIG1hbmFnaW5nIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uc1xuICogdXNpbmcgdGhlIEFaQVBJIHByb3ZpZGVyLiBQb2xpY3kgZGVmaW5pdGlvbnMgYXJlIGRlcGxveWVkIGF0IHN1YnNjcmlwdGlvbiBvciBtYW5hZ2VtZW50XG4gKiBncm91cCBzY29wZSBhbmQgZGVmaW5lIHRoZSBydWxlcyBhbmQgcGFyYW1ldGVycyBmb3IgcG9saWN5IGVuZm9yY2VtZW50LlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjEtMDYtMDEgKEFjdGl2ZSwgTGF0ZXN0KVxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBBdXRvbWF0aWMgbGF0ZXN0IHZlcnNpb24gcmVzb2x1dGlvbiB3aGVuIG5vIHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gKiAtIEV4cGxpY2l0IHZlcnNpb24gcGlubmluZyBmb3Igc3RhYmlsaXR5IHJlcXVpcmVtZW50c1xuICogLSBTY2hlbWEtZHJpdmVuIHZhbGlkYXRpb24gYW5kIHRyYW5zZm9ybWF0aW9uXG4gKiAtIFN1cHBvcnQgZm9yIGN1c3RvbSBwb2xpY3kgcnVsZXMgYW5kIHBhcmFtZXRlcnNcbiAqIC0gSlNJSSBjb21wbGlhbmNlIGZvciBtdWx0aS1sYW5ndWFnZSBzdXBwb3J0XG4gKi9cblxuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQUxMX1BPTElDWV9ERUZJTklUSU9OX1ZFUlNJT05TLFxuICBQT0xJQ1lfREVGSU5JVElPTl9UWVBFLFxufSBmcm9tIFwiLi9wb2xpY3ktZGVmaW5pdGlvbi1zY2hlbWFzXCI7XG5pbXBvcnQge1xuICBBemFwaVJlc291cmNlLFxuICBBemFwaVJlc291cmNlUHJvcHMsXG59IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi9hemFwaS9hemFwaS1yZXNvdXJjZVwiO1xuaW1wb3J0IHsgQXBpU2NoZW1hIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSB1bmlmaWVkIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uXG4gKlxuICogRXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMgd2l0aCBQb2xpY3kgRGVmaW5pdGlvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RGVmaW5pdGlvblByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqIFByb3ZpZGVzIGEgaHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIHBvbGljeVxuICAgKlxuICAgKiBAZXhhbXBsZSBcIlJlcXVpcmUgdGFnIGFuZCBpdHMgdmFsdWUgb24gcmVzb3VyY2VzXCJcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IGRlZmluaXRpb24gZGVzY3JpcHRpb25cbiAgICogUHJvdmlkZXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0aGUgcG9saWN5IGVuZm9yY2VzXG4gICAqXG4gICAqIEBleGFtcGxlIFwiRW5mb3JjZXMgYSByZXF1aXJlZCB0YWcgYW5kIGl0cyB2YWx1ZSBvbiByZXNvdXJjZXNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHBvbGljeSBkZWZpbml0aW9uXG4gICAqIEBkZWZhdWx0IFwiQ3VzdG9tXCJcbiAgICogQGV4YW1wbGUgXCJDdXN0b21cIiwgXCJCdWlsdEluXCIsIFwiU3RhdGljXCIsIFwiTm90U3BlY2lmaWVkXCJcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgbW9kZVxuICAgKiBEZXRlcm1pbmVzIHdoaWNoIHJlc291cmNlIHR5cGVzIHdpbGwgYmUgZXZhbHVhdGVkXG4gICAqIEBkZWZhdWx0IFwiQWxsXCJcbiAgICogQGV4YW1wbGUgXCJBbGxcIiwgXCJJbmRleGVkXCIsIFwiTWljcm9zb2Z0LktleVZhdWx0LkRhdGFcIlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBydWxlIGFzIGEgSlNPTiBvYmplY3RcbiAgICogRGVmaW5lcyB0aGUgaWYvdGhlbiBsb2dpYyB0aGF0IGRldGVybWluZXMgcG9saWN5IGVuZm9yY2VtZW50XG4gICAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGFsbCBwb2xpY3kgZGVmaW5pdGlvbnNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIGlmOiB7XG4gICAqICAgICBmaWVsZDogXCJ0YWdzWydFbnZpcm9ubWVudCddXCIsXG4gICAqICAgICBleGlzdHM6IFwiZmFsc2VcIlxuICAgKiAgIH0sXG4gICAqICAgdGhlbjoge1xuICAgKiAgICAgZWZmZWN0OiBcImRlbnlcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5UnVsZTogYW55O1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIGZvciB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICogQWxsb3dzIHBvbGljeSBhc3NpZ25tZW50cyB0byBwcm92aWRlIHZhbHVlcyB0aGF0IGFyZSB1c2VkIGluIHRoZSBwb2xpY3kgcnVsZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgdGFnTmFtZToge1xuICAgKiAgICAgdHlwZTogXCJTdHJpbmdcIixcbiAgICogICAgIG1ldGFkYXRhOiB7XG4gICAqICAgICAgIGRpc3BsYXlOYW1lOiBcIlRhZyBOYW1lXCIsXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBcIk5hbWUgb2YgdGhlIHRhZyB0byBlbmZvcmNlXCJcbiAgICogICAgIH1cbiAgICogICB9XG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGZvciB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICogVXNlZCB0byBzdG9yZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGxpa2UgY2F0ZWdvcnksIHZlcnNpb24sIGV0Yy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIGNhdGVnb3J5OiBcIlRhZ3NcIixcbiAgICogICB2ZXJzaW9uOiBcIjEuMC4wXCJcbiAgICogfVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgcnVsZXMgdG8gaWdub3JlIGNoYW5nZXNcbiAgICogQGV4YW1wbGUgW1wibWV0YWRhdGFcIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGludGVyZmFjZSBmb3IgQXp1cmUgUG9saWN5IERlZmluaXRpb25cbiAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIEpTSUkgY29tcGxpYW5jZSB0byBzdXBwb3J0IG11bHRpLWxhbmd1YWdlIGNvZGUgZ2VuZXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeURlZmluaXRpb25Qcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBkZWZpbml0aW9uIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcG9saWN5IGRlZmluaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBydWxlIG9iamVjdFxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5UnVsZTogYW55O1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIGZvciB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIGZvciB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogYW55O1xufVxuXG4vKipcbiAqIFRoZSByZXNvdXJjZSBib2R5IGludGVyZmFjZSBmb3IgQXp1cmUgUG9saWN5IERlZmluaXRpb24gQVBJIGNhbGxzXG4gKiBUaGlzIG1hdGNoZXMgdGhlIEF6dXJlIFJFU1QgQVBJIHNjaGVtYSBmb3IgcG9saWN5IGRlZmluaXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RGVmaW5pdGlvbkJvZHkge1xuICAvKipcbiAgICogVGhlIHByb3BlcnRpZXMgb2YgdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0aWVzOiBQb2xpY3lEZWZpbml0aW9uUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFBvbGljeSBEZWZpbml0aW9uIGltcGxlbWVudGF0aW9uXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHNpbmdsZSwgdmVyc2lvbi1hd2FyZSBpbXBsZW1lbnRhdGlvbiBmb3IgbWFuYWdpbmcgQXp1cmVcbiAqIFBvbGljeSBEZWZpbml0aW9ucy4gSXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gcmVzb2x1dGlvbiwgc2NoZW1hIHZhbGlkYXRpb24sXG4gKiBhbmQgcHJvcGVydHkgdHJhbnNmb3JtYXRpb24uXG4gKlxuICogTm90ZTogUG9saWN5IGRlZmluaXRpb25zIGFyZSBkZXBsb3llZCBhdCBzdWJzY3JpcHRpb24gb3IgbWFuYWdlbWVudCBncm91cCBzY29wZS5cbiAqIFVubGlrZSBtb3N0IEF6dXJlIHJlc291cmNlcywgdGhleSBkbyBub3QgaGF2ZSBhIGxvY2F0aW9uIHByb3BlcnR5IGFzIHRoZXkgYXJlXG4gKiBub3QgcmVnaW9uLXNwZWNpZmljLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyBjdXN0b20gcG9saWN5IGRlZmluaXRpb246XG4gKiBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24odGhpcywgXCJwb2xpY3lcIiwge1xuICogICBuYW1lOiBcInJlcXVpcmUtdGFnLXBvbGljeVwiLFxuICogICBkaXNwbGF5TmFtZTogXCJSZXF1aXJlIHRhZyBvbiByZXNvdXJjZXNcIixcbiAqICAgZGVzY3JpcHRpb246IFwiRW5mb3JjZXMgYSByZXF1aXJlZCB0YWcgb24gcmVzb3VyY2VzXCIsXG4gKiAgIHBvbGljeVJ1bGU6IHtcbiAqICAgICBpZjoge1xuICogICAgICAgZmllbGQ6IFwidGFnc1snRW52aXJvbm1lbnQnXVwiLFxuICogICAgICAgZXhpc3RzOiBcImZhbHNlXCJcbiAqICAgICB9LFxuICogICAgIHRoZW46IHtcbiAqICAgICAgIGVmZmVjdDogXCJkZW55XCJcbiAqICAgICB9XG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBQb2xpY3kgZGVmaW5pdGlvbiB3aXRoIHBhcmFtZXRlcnM6XG4gKiBjb25zdCBwb2xpY3lEZWZpbml0aW9uID0gbmV3IFBvbGljeURlZmluaXRpb24odGhpcywgXCJwb2xpY3lcIiwge1xuICogICBuYW1lOiBcInJlcXVpcmUtdGFnLXBvbGljeVwiLFxuICogICBkaXNwbGF5TmFtZTogXCJSZXF1aXJlIHRhZyBvbiByZXNvdXJjZXNcIixcbiAqICAgcG9saWN5UnVsZToge1xuICogICAgIGlmOiB7XG4gKiAgICAgICBmaWVsZDogXCJbY29uY2F0KCd0YWdzWycsIHBhcmFtZXRlcnMoJ3RhZ05hbWUnKSwgJ10nKV1cIixcbiAqICAgICAgIGV4aXN0czogXCJmYWxzZVwiXG4gKiAgICAgfSxcbiAqICAgICB0aGVuOiB7XG4gKiAgICAgICBlZmZlY3Q6IFwiZGVueVwiXG4gKiAgICAgfVxuICogICB9LFxuICogICBwYXJhbWV0ZXJzOiB7XG4gKiAgICAgdGFnTmFtZToge1xuICogICAgICAgdHlwZTogXCJTdHJpbmdcIixcbiAqICAgICAgIG1ldGFkYXRhOiB7XG4gKiAgICAgICAgIGRpc3BsYXlOYW1lOiBcIlRhZyBOYW1lXCJcbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2xpY3lEZWZpbml0aW9uIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBQT0xJQ1lfREVGSU5JVElPTl9UWVBFLFxuICAgICAgQUxMX1BPTElDWV9ERUZJTklUSU9OX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgUG9saWN5IERlZmluaXRpb24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogUG9saWN5RGVmaW5pdGlvblByb3BzO1xuXG4gIC8vIE91dHB1dCBwcm9wZXJ0aWVzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmdcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgLy8gUHVibGljIHByb3BlcnRpZXNcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBenVyZSBQb2xpY3kgRGVmaW5pdGlvbiB1c2luZyB0aGUgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIHJlc29sdXRpb24sIHNjaGVtYSByZWdpc3RyYXRpb24sXG4gICAqIHZhbGlkYXRpb24sIGFuZCByZXNvdXJjZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgUG9saWN5IERlZmluaXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQb2xpY3lEZWZpbml0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIEV4dHJhY3QgcHJvcGVydGllcyBmcm9tIHRoZSBBWkFQSSByZXNvdXJjZSBvdXRwdXRzIHVzaW5nIFRlcnJhZm9ybSBpbnRlcnBvbGF0aW9uXG5cbiAgICAvLyBDcmVhdGUgVGVycmFmb3JtIG91dHB1dHMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZyBmcm9tIG90aGVyIHJlc291cmNlc1xuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFBvbGljeSBEZWZpbml0aW9uXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgUG9saWN5IERlZmluaXRpb25cIixcbiAgICB9KTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzIHRvIG1hdGNoIG9yaWdpbmFsIG5hbWluZyBjb252ZW50aW9uXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG5cbiAgICAvLyBBcHBseSBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICogUmV0dXJucyB0aGUgbW9zdCByZWNlbnQgc3RhYmxlIHZlcnNpb24gYXMgdGhlIGRlZmF1bHRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjEtMDYtMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBQb2xpY3kgRGVmaW5pdGlvbnNcbiAgICovXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUE9MSUNZX0RFRklOSVRJT05fVFlQRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgc2NoZW1hIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKiBVc2VzIHRoZSBmcmFtZXdvcmsncyBzY2hlbWEgcmVzb2x1dGlvbiB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHNjaGVtYVxuICAgKi9cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgcHJvcGVydGllcyBpbnRvIHRoZSBKU09OIGZvcm1hdCBleHBlY3RlZCBieSBBenVyZSBSRVNUIEFQSVxuICAgKlxuICAgKiBOb3RlOiBQb2xpY3kgZGVmaW5pdGlvbnMgZG8gbm90IGhhdmUgYSBsb2NhdGlvbiBwcm9wZXJ0eSBhcyB0aGV5IGFyZVxuICAgKiBzdWJzY3JpcHRpb24gb3IgbWFuYWdlbWVudCBncm91cCBzY29wZWQgcmVzb3VyY2VzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgUG9saWN5RGVmaW5pdGlvblByb3BzO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiB0eXBlZFByb3BzLmRpc3BsYXlOYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdHlwZWRQcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgICAgcG9saWN5VHlwZTogdHlwZWRQcm9wcy5wb2xpY3lUeXBlIHx8IFwiQ3VzdG9tXCIsXG4gICAgICAgIG1vZGU6IHR5cGVkUHJvcHMubW9kZSB8fCBcIkFsbFwiLFxuICAgICAgICAvLyBEZWVwIGNsb25lIHBvbGljeVJ1bGUgdG8gcHJlc2VydmUgYWxsIG5lc3RlZCBvYmplY3RzIGFuZCBBenVyZSBQb2xpY3kgZXhwcmVzc2lvbnNcbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIGNvbXBsZXggRGVwbG95SWZOb3RFeGlzdHMgcG9saWNpZXMgd2l0aCBBUk0gdGVtcGxhdGVzIGFyZSBmdWxseSBzZXJpYWxpemVkXG4gICAgICAgIC8vIEF6dXJlIFBvbGljeSBleHByZXNzaW9ucyBsaWtlIFtmaWVsZCgpXSwgW3BhcmFtZXRlcnMoKV0sIFt2YXJpYWJsZXMoKV0gYXJlIHByZXNlcnZlZFxuICAgICAgICBwb2xpY3lSdWxlOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR5cGVkUHJvcHMucG9saWN5UnVsZSkpLFxuICAgICAgICBwYXJhbWV0ZXJzOiB0eXBlZFByb3BzLnBhcmFtZXRlcnMsXG4gICAgICAgIG1ldGFkYXRhOiB0eXBlZFByb3BzLm1ldGFkYXRhLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGljeSBEZWZpbml0aW9ucyBkbyBub3Qgc3VwcG9ydCB0YWdzIGF0IHRoZSByZXNvdXJjZSBsZXZlbFxuICAgKiBUYWdzIGFyZSBub3QgYSB2YWxpZCBwcm9wZXJ0eSBmb3IgTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5RGVmaW5pdGlvbnNcbiAgICogQHJldHVybnMgZmFsc2UgLSBQb2xpY3kgRGVmaW5pdGlvbnMgY2Fubm90IGhhdmUgdGFnc1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RlY3RlZCBzdXBwb3J0c1RhZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1c3RvbWl6ZXMgdGhlIEFaQVBJIFJlc291cmNlQ29uZmlnIGZvciBwb2xpY3ktc3BlY2lmaWMgcmVxdWlyZW1lbnRzXG4gICAqXG4gICAqIFBvbGljeSBkZWZpbml0aW9ucyByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcgYmVjYXVzZTpcbiAgICogMS4gVGhleSBjb250YWluIGNvbXBsZXggbmVzdGVkIG9iamVjdHMgKEFSTSB0ZW1wbGF0ZXMgaW4gRGVwbG95SWZOb3RFeGlzdHMgcG9saWNpZXMpXG4gICAqIDIuIFRoZXkgdXNlIEF6dXJlIFBvbGljeSBleHByZXNzaW9ucyBsaWtlIFtmaWVsZCgpXSwgW3BhcmFtZXRlcnMoKV0sIFt2YXJpYWJsZXMoKV1cbiAgICogICAgd2hpY2ggYXJlIE5PVCBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvbnMgYnV0IEF6dXJlLW5hdGl2ZSBleHByZXNzaW9uc1xuICAgKiAzLiBTY2hlbWEgdmFsaWRhdGlvbiBtYXkgc3RyaXAgdW5rbm93biBwcm9wZXJ0aWVzIGZyb20gZGVlcGx5IG5lc3RlZCBzdHJ1Y3R1cmVzXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgYmFzZSBSZXNvdXJjZUNvbmZpZ1xuICAgKiBAcmV0dXJucyBNb2RpZmllZCBSZXNvdXJjZUNvbmZpZyB3aXRoIHBvbGljeS1zcGVjaWZpYyBzZXR0aW5nc1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RlY3RlZCBjdXN0b21pemVSZXNvdXJjZUNvbmZpZyhjb25maWc6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIC8vIERpc2FibGUgc2NoZW1hIHZhbGlkYXRpb24gdG8gcHJlc2VydmUgYWxsIG5lc3RlZCBwcm9wZXJ0aWVzXG4gICAgICAvLyBBenVyZSBQb2xpY3kgZGVmaW5pdGlvbnMgY2FuIGNvbnRhaW4gZGVlcGx5IG5lc3RlZCBBUk0gdGVtcGxhdGVzIGFuZCBleHByZXNzaW9uc1xuICAgICAgLy8gdGhhdCB0aGUgQVpBUEkgcHJvdmlkZXIncyBzY2hlbWEgdmFsaWRhdGlvbiBtYXkgbm90IHJlY29nbml6ZVxuICAgICAgc2NoZW1hVmFsaWRhdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgLy8gQWxsb3cgcHJvcGVydGllcyBub3QgaW4gdGhlIHNjaGVtYSB0byBwcmV2ZW50IHN0cmlwcGluZyBvZiBuZXN0ZWQgY29udGVudFxuICAgICAgLy8gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIERlcGxveUlmTm90RXhpc3RzIHBvbGljaWVzIHdpdGggQVJNIHRlbXBsYXRlIGRlcGxveW1lbnRzXG4gICAgICBpZ25vcmVNaXNzaW5nUHJvcGVydHk6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBVQkxJQyBNRVRIT0RTIEZPUiBQT0xJQ1kgREVGSU5JVElPTiBPUEVSQVRJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVsbCByZXNvdXJjZSBpZGVudGlmaWVyIGZvciB1c2UgaW4gb3RoZXIgQXp1cmUgcmVzb3VyY2VzXG4gICAqIEFsaWFzIGZvciB0aGUgaWQgcHJvcGVydHlcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9saWN5IHR5cGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcG9saWN5VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBvbGljeVR5cGUgfHwgXCJDdXN0b21cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBvbGljeSBtb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBvbGljeU1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlIHx8IFwiQWxsXCI7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgaWdub3JlIGNoYW5nZXMgbGlmZWN5Y2xlIHJ1bGVzIGlmIHNwZWNpZmllZCBpbiBwcm9wc1xuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlJZ25vcmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMgJiYgdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoXCJsaWZlY3ljbGVcIiwgW1xuICAgICAgICB7XG4gICAgICAgICAgaWdub3JlX2NoYW5nZXM6IHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxufVxuIl19
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWRlZmluaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtcG9saWN5ZGVmaW5pdGlvbi9saWIvcG9saWN5LWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVILCtCQUErQjtBQUUvQiwyRUFHcUM7QUFDckMsOEVBR21EO0FBNkpuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLDhCQUFhO0lBaUJqRCxvQkFBb0I7SUFFcEI7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixtRkFBbUY7UUFFbkYsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLGlDQUFpQztTQUMvQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLG1DQUFtQztTQUNqRCxDQUFDLENBQUM7UUFFSCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENB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QUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUF4TUgsNENBeU1DOzs7QUF4TUM7SUFDRSw4QkFBYSxDQUFDLGVBQWUsQ0FDM0Isa0RBQXNCLEVBQ3RCLDBEQUE4QixDQUMvQixDQUFDO0FBQ0osQ0FBQyxHQUFBLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWZpZWQgQXp1cmUgUG9saWN5IERlZmluaXRpb24gaW1wbGVtZW50YXRpb24gdXNpbmcgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgdmVyc2lvbi1hd2FyZSBpbXBsZW1lbnRhdGlvbiBmb3IgbWFuYWdpbmcgQXp1cmUgUG9saWN5IERlZmluaXRpb25zXG4gKiB1c2luZyB0aGUgQVpBUEkgcHJvdmlkZXIuIFBvbGljeSBkZWZpbml0aW9ucyBhcmUgZGVwbG95ZWQgYXQgc3Vic2NyaXB0aW9uIG9yIG1hbmFnZW1lbnRcbiAqIGdyb3VwIHNjb3BlIGFuZCBkZWZpbmUgdGhlIHJ1bGVzIGFuZCBwYXJhbWV0ZXJzIGZvciBwb2xpY3kgZW5mb3JjZW1lbnQuXG4gKlxuICogU3VwcG9ydGVkIEFQSSBWZXJzaW9uczpcbiAqIC0gMjAyMS0wNi0wMSAoQWN0aXZlLCBMYXRlc3QpXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gRXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHkgcmVxdWlyZW1lbnRzXG4gKiAtIFNjaGVtYS1kcml2ZW4gdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gU3VwcG9ydCBmb3IgY3VzdG9tIHBvbGljeSBydWxlcyBhbmQgcGFyYW1ldGVyc1xuICogLSBKU0lJIGNvbXBsaWFuY2UgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfUE9MSUNZX0RFRklOSVRJT05fVkVSU0lPTlMsXG4gIFBPTElDWV9ERUZJTklUSU9OX1RZUEUsXG59IGZyb20gXCIuL3BvbGljeS1kZWZpbml0aW9uLXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIHVuaWZpZWQgQXp1cmUgUG9saWN5IERlZmluaXRpb25cbiAqXG4gKiBFeHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB3aXRoIFBvbGljeSBEZWZpbml0aW9uIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lEZWZpbml0aW9uUHJvcHMgZXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICogUHJvdmlkZXMgYSBodW1hbi1yZWFkYWJsZSBuYW1lIGZvciB0aGUgcG9saWN5XG4gICAqXG4gICAqIEBleGFtcGxlIFwiUmVxdWlyZSB0YWcgYW5kIGl0cyB2YWx1ZSBvbiByZXNvdXJjZXNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgZGVmaW5pdGlvbiBkZXNjcmlwdGlvblxuICAgKiBQcm92aWRlcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoZSBwb2xpY3kgZW5mb3JjZXNcbiAgICpcbiAgICogQGV4YW1wbGUgXCJFbmZvcmNlcyBhIHJlcXVpcmVkIHRhZyBhbmQgaXRzIHZhbHVlIG9uIHJlc291cmNlc1wiXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcG9saWN5IGRlZmluaXRpb25cbiAgICogQGRlZmF1bHQgXCJDdXN0b21cIlxuICAgKiBAZXhhbXBsZSBcIkN1c3RvbVwiLCBcIkJ1aWx0SW5cIiwgXCJTdGF0aWNcIiwgXCJOb3RTcGVjaWZpZWRcIlxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5VHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBtb2RlXG4gICAqIERldGVybWluZXMgd2hpY2ggcmVzb3VyY2UgdHlwZXMgd2lsbCBiZSBldmFsdWF0ZWRcbiAgICogQGRlZmF1bHQgXCJBbGxcIlxuICAgKiBAZXhhbXBsZSBcIkFsbFwiLCBcIkluZGV4ZWRcIiwgXCJNaWNyb3NvZnQuS2V5VmF1bHQuRGF0YVwiXG4gICAqL1xuICByZWFkb25seSBtb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IHJ1bGUgYXMgYSBKU09OIG9iamVjdFxuICAgKiBEZWZpbmVzIHRoZSBpZi90aGVuIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyBwb2xpY3kgZW5mb3JjZW1lbnRcbiAgICogVGhpcyBpcyByZXF1aXJlZCBmb3IgYWxsIHBvbGljeSBkZWZpbml0aW9uc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgaWY6IHtcbiAgICogICAgIGZpZWxkOiBcInRhZ3NbJ0Vudmlyb25tZW50J11cIixcbiAgICogICAgIGV4aXN0czogXCJmYWxzZVwiXG4gICAqICAgfSxcbiAgICogICB0aGVuOiB7XG4gICAqICAgICBlZmZlY3Q6IFwiZGVueVwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBwb2xpY3lSdWxlOiBhbnk7XG5cbiAgLyoqXG4gICAqIFBhcmFtZXRlcnMgZm9yIHRoZSBwb2xpY3kgZGVmaW5pdGlvblxuICAgKiBBbGxvd3MgcG9saWN5IGFzc2lnbm1lbnRzIHRvIHByb3ZpZGUgdmFsdWVzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHBvbGljeSBydWxlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHtcbiAgICogICB0YWdOYW1lOiB7XG4gICAqICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICAgKiAgICAgbWV0YWRhdGE6IHtcbiAgICogICAgICAgZGlzcGxheU5hbWU6IFwiVGFnIE5hbWVcIixcbiAgICogICAgICAgZGVzY3JpcHRpb246IFwiTmFtZSBvZiB0aGUgdGFnIHRvIGVuZm9yY2VcIlxuICAgKiAgICAgfVxuICAgKiAgIH1cbiAgICogfVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IGFueTtcblxuICAvKipcbiAgICogTWV0YWRhdGEgZm9yIHRoZSBwb2xpY3kgZGVmaW5pdGlvblxuICAgKiBVc2VkIHRvIHN0b3JlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbGlrZSBjYXRlZ29yeSwgdmVyc2lvbiwgZXRjLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgY2F0ZWdvcnk6IFwiVGFnc1wiLFxuICAgKiAgIHZlcnNpb246IFwiMS4wLjBcIlxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IGFueTtcblxuICAvKipcbiAgICogVGhlIHBhcmVudCBzY29wZSB3aGVyZSB0aGUgcG9saWN5IGRlZmluaXRpb24gc2hvdWxkIGJlIGNyZWF0ZWRcbiAgICogQ2FuIGJlIGEgbWFuYWdlbWVudCBncm91cCBvciBzdWJzY3JpcHRpb24gc2NvcGVcbiAgICogSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gc3Vic2NyaXB0aW9uIHNjb3BlXG4gICAqXG4gICAqIEBleGFtcGxlIFwiL3Byb3ZpZGVycy9NaWNyb3NvZnQuTWFuYWdlbWVudC9tYW5hZ2VtZW50R3JvdXBzL215LW1nXCJcbiAgICogQGV4YW1wbGUgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIlxuICAgKiBAZGVmYXVsdFZhbHVlIFN1YnNjcmlwdGlvbiBzY29wZSAoYXV0by1kZXRlY3RlZCBmcm9tIGNsaWVudCBjb25maWcpXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBydWxlcyB0byBpZ25vcmUgY2hhbmdlc1xuICAgKiBAZXhhbXBsZSBbXCJtZXRhZGF0YVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlQ2hhbmdlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgaW50ZXJmYWNlIGZvciBBenVyZSBQb2xpY3kgRGVmaW5pdGlvblxuICogVGhpcyBpcyByZXF1aXJlZCBmb3IgSlNJSSBjb21wbGlhbmNlIHRvIHN1cHBvcnQgbXVsdGktbGFuZ3VhZ2UgY29kZSBnZW5lcmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RGVmaW5pdGlvblByb3BlcnRpZXMge1xuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IGRlZmluaXRpb24gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBwb2xpY3kgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5VHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBtb2RlXG4gICAqL1xuICByZWFkb25seSBtb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IHJ1bGUgb2JqZWN0XG4gICAqL1xuICByZWFkb25seSBwb2xpY3lSdWxlOiBhbnk7XG5cbiAgLyoqXG4gICAqIFBhcmFtZXRlcnMgZm9yIHRoZSBwb2xpY3kgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IGFueTtcblxuICAvKipcbiAgICogTWV0YWRhdGEgZm9yIHRoZSBwb2xpY3kgZGVmaW5pdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBhbnk7XG59XG5cbi8qKlxuICogVGhlIHJlc291cmNlIGJvZHkgaW50ZXJmYWNlIGZvciBBenVyZSBQb2xpY3kgRGVmaW5pdGlvbiBBUEkgY2FsbHNcbiAqIFRoaXMgbWF0Y2hlcyB0aGUgQXp1cmUgUkVTVCBBUEkgc2NoZW1hIGZvciBwb2xpY3kgZGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lEZWZpbml0aW9uQm9keSB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGUgcG9saWN5IGRlZmluaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IFBvbGljeURlZmluaXRpb25Qcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIFVuaWZpZWQgQXp1cmUgUG9saWN5IERlZmluaXRpb24gaW1wbGVtZW50YXRpb25cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2luZ2xlLCB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBtYW5hZ2luZyBBenVyZVxuICogUG9saWN5IERlZmluaXRpb25zLiBJdCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgdmFsaWRhdGlvbixcbiAqIGFuZCBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvbi5cbiAqXG4gKiBOb3RlOiBQb2xpY3kgZGVmaW5pdGlvbnMgYXJlIGRlcGxveWVkIGF0IHN1YnNjcmlwdGlvbiBvciBtYW5hZ2VtZW50IGdyb3VwIHNjb3BlLlxuICogVW5saWtlIG1vc3QgQXp1cmUgcmVzb3VyY2VzLCB0aGV5IGRvIG5vdCBoYXZlIGEgbG9jYXRpb24gcHJvcGVydHkgYXMgdGhleSBhcmVcbiAqIG5vdCByZWdpb24tc3BlY2lmaWMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEJhc2ljIGN1c3RvbSBwb2xpY3kgZGVmaW5pdGlvbjpcbiAqIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbih0aGlzLCBcInBvbGljeVwiLCB7XG4gKiAgIG5hbWU6IFwicmVxdWlyZS10YWctcG9saWN5XCIsXG4gKiAgIGRpc3BsYXlOYW1lOiBcIlJlcXVpcmUgdGFnIG9uIHJlc291cmNlc1wiLFxuICogICBkZXNjcmlwdGlvbjogXCJFbmZvcmNlcyBhIHJlcXVpcmVkIHRhZyBvbiByZXNvdXJjZXNcIixcbiAqICAgcG9saWN5UnVsZToge1xuICogICAgIGlmOiB7XG4gKiAgICAgICBmaWVsZDogXCJ0YWdzWydFbnZpcm9ubWVudCddXCIsXG4gKiAgICAgICBleGlzdHM6IFwiZmFsc2VcIlxuICogICAgIH0sXG4gKiAgICAgdGhlbjoge1xuICogICAgICAgZWZmZWN0OiBcImRlbnlcIlxuICogICAgIH1cbiAqICAgfVxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFBvbGljeSBkZWZpbml0aW9uIHdpdGggcGFyYW1ldGVyczpcbiAqIGNvbnN0IHBvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbih0aGlzLCBcInBvbGljeVwiLCB7XG4gKiAgIG5hbWU6IFwicmVxdWlyZS10YWctcG9saWN5XCIsXG4gKiAgIGRpc3BsYXlOYW1lOiBcIlJlcXVpcmUgdGFnIG9uIHJlc291cmNlc1wiLFxuICogICBwb2xpY3lSdWxlOiB7XG4gKiAgICAgaWY6IHtcbiAqICAgICAgIGZpZWxkOiBcIltjb25jYXQoJ3RhZ3NbJywgcGFyYW1ldGVycygndGFnTmFtZScpLCAnXScpXVwiLFxuICogICAgICAgZXhpc3RzOiBcImZhbHNlXCJcbiAqICAgICB9LFxuICogICAgIHRoZW46IHtcbiAqICAgICAgIGVmZmVjdDogXCJkZW55XCJcbiAqICAgICB9XG4gKiAgIH0sXG4gKiAgIHBhcmFtZXRlcnM6IHtcbiAqICAgICB0YWdOYW1lOiB7XG4gKiAgICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICogICAgICAgbWV0YWRhdGE6IHtcbiAqICAgICAgICAgZGlzcGxheU5hbWU6IFwiVGFnIE5hbWVcIlxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfVxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFBvbGljeSBkZWZpbml0aW9uIGF0IG1hbmFnZW1lbnQgZ3JvdXAgc2NvcGU6XG4gKiBjb25zdCBtZ1BvbGljeURlZmluaXRpb24gPSBuZXcgUG9saWN5RGVmaW5pdGlvbih0aGlzLCBcIm1nUG9saWN5XCIsIHtcbiAqICAgbmFtZTogXCJtZy1yZXF1aXJlLXRhZy1wb2xpY3lcIixcbiAqICAgcGFyZW50SWQ6IFwiL3Byb3ZpZGVycy9NaWNyb3NvZnQuTWFuYWdlbWVudC9tYW5hZ2VtZW50R3JvdXBzL215LW1nXCIsXG4gKiAgIGRpc3BsYXlOYW1lOiBcIk1hbmFnZW1lbnQgR3JvdXAgVGFnIFBvbGljeVwiLFxuICogICBkZXNjcmlwdGlvbjogXCJFbmZvcmNlcyB0YWdzIGFjcm9zcyB0aGUgbWFuYWdlbWVudCBncm91cCBoaWVyYXJjaHlcIixcbiAqICAgcG9saWN5UnVsZToge1xuICogICAgIGlmOiB7XG4gKiAgICAgICBmaWVsZDogXCJ0YWdzWydDb3N0Q2VudGVyJ11cIixcbiAqICAgICAgIGV4aXN0czogXCJmYWxzZVwiXG4gKiAgICAgfSxcbiAqICAgICB0aGVuOiB7XG4gKiAgICAgICBlZmZlY3Q6IFwiZGVueVwiXG4gKiAgICAgfVxuICogICB9XG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgUG9saWN5RGVmaW5pdGlvbiBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgUE9MSUNZX0RFRklOSVRJT05fVFlQRSxcbiAgICAgIEFMTF9QT0xJQ1lfREVGSU5JVElPTl9WRVJTSU9OUyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBwcm9wZXJ0aWVzIGZvciB0aGlzIFBvbGljeSBEZWZpbml0aW9uIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IFBvbGljeURlZmluaXRpb25Qcm9wcztcblxuICAvLyBPdXRwdXQgcHJvcGVydGllcyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nXG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIC8vIFB1YmxpYyBwcm9wZXJ0aWVzXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQXp1cmUgUG9saWN5IERlZmluaXRpb24gdXNpbmcgdGhlIFZlcnNpb25lZEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gICAqXG4gICAqIFRoZSBjb25zdHJ1Y3RvciBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgcmVnaXN0cmF0aW9uLFxuICAgKiB2YWxpZGF0aW9uLCBhbmQgcmVzb3VyY2UgY3JlYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIFBvbGljeSBEZWZpbml0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUG9saWN5RGVmaW5pdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICAvLyBFeHRyYWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgQVpBUEkgcmVzb3VyY2Ugb3V0cHV0cyB1c2luZyBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvblxuXG4gICAgLy8gQ3JlYXRlIFRlcnJhZm9ybSBvdXRwdXRzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmcgZnJvbSBvdGhlciByZXNvdXJjZXNcbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBQb2xpY3kgRGVmaW5pdGlvblwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIFBvbGljeSBEZWZpbml0aW9uXCIsXG4gICAgfSk7XG5cbiAgICAvLyBPdmVycmlkZSBsb2dpY2FsIElEcyB0byBtYXRjaCBvcmlnaW5hbCBuYW1pbmcgY29udmVudGlvblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuXG4gICAgLy8gQXBwbHkgaWdub3JlIGNoYW5nZXMgaWYgc3BlY2lmaWVkXG4gICAgdGhpcy5fYXBwbHlJZ25vcmVDaGFuZ2VzKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRVFVSVJFRCBBQlNUUkFDVCBNRVRIT0RTIEZST00gQXphcGlSZXNvdXJjZVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkZWZhdWx0IEFQSSB2ZXJzaW9uIHRvIHVzZSB3aGVuIG5vIGV4cGxpY2l0IHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gICAqIFJldHVybnMgdGhlIG1vc3QgcmVjZW50IHN0YWJsZSB2ZXJzaW9uIGFzIHRoZSBkZWZhdWx0XG4gICAqL1xuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDIxLTA2LTAxXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQXp1cmUgcmVzb3VyY2UgdHlwZSBmb3IgUG9saWN5IERlZmluaXRpb25zXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFBPTElDWV9ERUZJTklUSU9OX1RZUEU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQVBJIHNjaGVtYSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb25cbiAgICogVXNlcyB0aGUgZnJhbWV3b3JrJ3Mgc2NoZW1hIHJlc29sdXRpb24gdG8gZ2V0IHRoZSBhcHByb3ByaWF0ZSBzY2hlbWFcbiAgICovXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcmVzb3VyY2UgYm9keSBmb3IgdGhlIEF6dXJlIEFQSSBjYWxsXG4gICAqIFRyYW5zZm9ybXMgdGhlIGlucHV0IHByb3BlcnRpZXMgaW50byB0aGUgSlNPTiBmb3JtYXQgZXhwZWN0ZWQgYnkgQXp1cmUgUkVTVCBBUElcbiAgICpcbiAgICogTm90ZTogUG9saWN5IGRlZmluaXRpb25zIGRvIG5vdCBoYXZlIGEgbG9jYXRpb24gcHJvcGVydHkgYXMgdGhleSBhcmVcbiAgICogc3Vic2NyaXB0aW9uIG9yIG1hbmFnZW1lbnQgZ3JvdXAgc2NvcGVkIHJlc291cmNlcy5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIFBvbGljeURlZmluaXRpb25Qcm9wcztcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBkaXNwbGF5TmFtZTogdHlwZWRQcm9wcy5kaXNwbGF5TmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHR5cGVkUHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgIHBvbGljeVR5cGU6IHR5cGVkUHJvcHMucG9saWN5VHlwZSB8fCBcIkN1c3RvbVwiLFxuICAgICAgICBtb2RlOiB0eXBlZFByb3BzLm1vZGUgfHwgXCJBbGxcIixcbiAgICAgICAgLy8gRGVlcCBjbG9uZSBwb2xpY3lSdWxlIHRvIHByZXNlcnZlIGFsbCBuZXN0ZWQgb2JqZWN0cyBhbmQgQXp1cmUgUG9saWN5IGV4cHJlc3Npb25zXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyBjb21wbGV4IERlcGxveUlmTm90RXhpc3RzIHBvbGljaWVzIHdpdGggQVJNIHRlbXBsYXRlcyBhcmUgZnVsbHkgc2VyaWFsaXplZFxuICAgICAgICAvLyBBenVyZSBQb2xpY3kgZXhwcmVzc2lvbnMgbGlrZSBbZmllbGQoKV0sIFtwYXJhbWV0ZXJzKCldLCBbdmFyaWFibGVzKCldIGFyZSBwcmVzZXJ2ZWRcbiAgICAgICAgcG9saWN5UnVsZTogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0eXBlZFByb3BzLnBvbGljeVJ1bGUpKSxcbiAgICAgICAgcGFyYW1ldGVyczogdHlwZWRQcm9wcy5wYXJhbWV0ZXJzLFxuICAgICAgICBtZXRhZGF0YTogdHlwZWRQcm9wcy5tZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb2xpY3kgRGVmaW5pdGlvbnMgZG8gbm90IHN1cHBvcnQgdGFncyBhdCB0aGUgcmVzb3VyY2UgbGV2ZWxcbiAgICogVGFncyBhcmUgbm90IGEgdmFsaWQgcHJvcGVydHkgZm9yIE1pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeURlZmluaXRpb25zXG4gICAqIEByZXR1cm5zIGZhbHNlIC0gUG9saWN5IERlZmluaXRpb25zIGNhbm5vdCBoYXZlIHRhZ3NcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXN0b21pemVzIHRoZSBBWkFQSSBSZXNvdXJjZUNvbmZpZyBmb3IgcG9saWN5LXNwZWNpZmljIHJlcXVpcmVtZW50c1xuICAgKlxuICAgKiBQb2xpY3kgZGVmaW5pdGlvbnMgcmVxdWlyZSBzcGVjaWFsIGhhbmRsaW5nIGJlY2F1c2U6XG4gICAqIDEuIFRoZXkgY29udGFpbiBjb21wbGV4IG5lc3RlZCBvYmplY3RzIChBUk0gdGVtcGxhdGVzIGluIERlcGxveUlmTm90RXhpc3RzIHBvbGljaWVzKVxuICAgKiAyLiBUaGV5IHVzZSBBenVyZSBQb2xpY3kgZXhwcmVzc2lvbnMgbGlrZSBbZmllbGQoKV0sIFtwYXJhbWV0ZXJzKCldLCBbdmFyaWFibGVzKCldXG4gICAqICAgIHdoaWNoIGFyZSBOT1QgVGVycmFmb3JtIGludGVycG9sYXRpb25zIGJ1dCBBenVyZS1uYXRpdmUgZXhwcmVzc2lvbnNcbiAgICogMy4gU2NoZW1hIHZhbGlkYXRpb24gbWF5IHN0cmlwIHVua25vd24gcHJvcGVydGllcyBmcm9tIGRlZXBseSBuZXN0ZWQgc3RydWN0dXJlc1xuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIGJhc2UgUmVzb3VyY2VDb25maWdcbiAgICogQHJldHVybnMgTW9kaWZpZWQgUmVzb3VyY2VDb25maWcgd2l0aCBwb2xpY3ktc3BlY2lmaWMgc2V0dGluZ3NcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwcm90ZWN0ZWQgY3VzdG9taXplUmVzb3VyY2VDb25maWcoY29uZmlnOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jb25maWcsXG4gICAgICAvLyBEaXNhYmxlIHNjaGVtYSB2YWxpZGF0aW9uIHRvIHByZXNlcnZlIGFsbCBuZXN0ZWQgcHJvcGVydGllc1xuICAgICAgLy8gQXp1cmUgUG9saWN5IGRlZmluaXRpb25zIGNhbiBjb250YWluIGRlZXBseSBuZXN0ZWQgQVJNIHRlbXBsYXRlcyBhbmQgZXhwcmVzc2lvbnNcbiAgICAgIC8vIHRoYXQgdGhlIEFaQVBJIHByb3ZpZGVyJ3Mgc2NoZW1hIHZhbGlkYXRpb24gbWF5IG5vdCByZWNvZ25pemVcbiAgICAgIHNjaGVtYVZhbGlkYXRpb25FbmFibGVkOiBmYWxzZSxcbiAgICAgIC8vIEFsbG93IHByb3BlcnRpZXMgbm90IGluIHRoZSBzY2hlbWEgdG8gcHJldmVudCBzdHJpcHBpbmcgb2YgbmVzdGVkIGNvbnRlbnRcbiAgICAgIC8vIFRoaXMgaXMgZXNzZW50aWFsIGZvciBEZXBsb3lJZk5vdEV4aXN0cyBwb2xpY2llcyB3aXRoIEFSTSB0ZW1wbGF0ZSBkZXBsb3ltZW50c1xuICAgICAgaWdub3JlTWlzc2luZ1Byb3BlcnR5OiB0cnVlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHBhcmVudCBJRCByZXNvbHV0aW9uIHRvIHVzZSBwYXJlbnRJZCBmcm9tIHByb3BzIGlmIHByb3ZpZGVkXG4gICAqIFBvbGljeSBkZWZpbml0aW9ucyBjYW4gYmUgZGVwbG95ZWQgYXQgc3Vic2NyaXB0aW9uIG9yIG1hbmFnZW1lbnQgZ3JvdXAgc2NvcGVcbiAgICovXG4gIHByb3RlY3RlZCByZXNvbHZlUGFyZW50SWQocHJvcHM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIFBvbGljeURlZmluaXRpb25Qcm9wcztcblxuICAgIC8vIElmIGV4cGxpY2l0IHBhcmVudElkIGlzIHByb3ZpZGVkLCB1c2UgaXQgKG1hbmFnZW1lbnQgZ3JvdXAgb3Igc3Vic2NyaXB0aW9uKVxuICAgIGlmICh0eXBlZFByb3BzLnBhcmVudElkKSB7XG4gICAgICByZXR1cm4gdHlwZWRQcm9wcy5wYXJlbnRJZDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGZhbGwgYmFjayB0byBkZWZhdWx0IHN1YnNjcmlwdGlvbiBzY29wZVxuICAgIHJldHVybiBzdXBlci5yZXNvbHZlUGFyZW50SWQocHJvcHMpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFVCTElDIE1FVEhPRFMgRk9SIFBPTElDWSBERUZJTklUSU9OIE9QRVJBVElPTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIHJlc291cmNlIGlkZW50aWZpZXIgZm9yIHVzZSBpbiBvdGhlciBBenVyZSByZXNvdXJjZXNcbiAgICogQWxpYXMgZm9yIHRoZSBpZCBwcm9wZXJ0eVxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwb2xpY3kgdHlwZVxuICAgKi9cbiAgcHVibGljIGdldCBwb2xpY3lUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucG9saWN5VHlwZSB8fCBcIkN1c3RvbVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9saWN5IG1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcG9saWN5TW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGUgfHwgXCJBbGxcIjtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgSEVMUEVSIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXBwbGllcyBpZ25vcmUgY2hhbmdlcyBsaWZlY3ljbGUgcnVsZXMgaWYgc3BlY2lmaWVkIGluIHByb3BzXG4gICAqL1xuICBwcml2YXRlIF9hcHBseUlnbm9yZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyAmJiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5hZGRPdmVycmlkZShcImxpZmVjeWNsZVwiLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZ25vcmVfY2hhbmdlczogdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfVxuICB9XG59XG4iXX0=