@horietakehiro/aws-cdk-utul 0.33.0 → 0.33.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/buildspec_schedule.yaml +42 -0
- package/lib/types/cfn-resource-types/aws-amazonmq-broker.d.ts +2 -1
- package/lib/types/cfn-resource-types/aws-amazonmq-broker.js +1 -1
- package/lib/types/cfn-resource-types/aws-appconfig-configurationprofile.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-appconfig-configurationprofile.js +1 -1
- package/lib/types/cfn-resource-types/aws-appconfig-deployment.d.ts +40 -4
- package/lib/types/cfn-resource-types/aws-appconfig-deployment.js +1 -1
- package/lib/types/cfn-resource-types/aws-appconfig-environment.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-appconfig-environment.js +1 -1
- package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.d.ts +17 -0
- package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.js +1 -1
- package/lib/types/cfn-resource-types/aws-bedrock-agent.d.ts +5 -0
- package/lib/types/cfn-resource-types/aws-bedrock-agent.js +1 -1
- package/lib/types/cfn-resource-types/aws-bedrock-datasource.d.ts +25 -16
- package/lib/types/cfn-resource-types/aws-bedrock-datasource.js +1 -1
- package/lib/types/cfn-resource-types/aws-bedrock-knowledgebase.d.ts +48 -3
- package/lib/types/cfn-resource-types/aws-bedrock-knowledgebase.js +1 -1
- package/lib/types/cfn-resource-types/aws-bedrock-prompt.d.ts +158 -3
- package/lib/types/cfn-resource-types/aws-bedrock-prompt.js +1 -1
- package/lib/types/cfn-resource-types/aws-cassandra-keyspace.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-cassandra-keyspace.js +1 -1
- package/lib/types/cfn-resource-types/aws-cassandra-type.d.ts +41 -0
- package/lib/types/cfn-resource-types/aws-cassandra-type.js +3 -0
- package/lib/types/cfn-resource-types/aws-cleanrooms-collaboration.d.ts +18 -0
- package/lib/types/cfn-resource-types/aws-cleanrooms-collaboration.js +1 -1
- package/lib/types/cfn-resource-types/aws-cleanrooms-membership.d.ts +11 -0
- package/lib/types/cfn-resource-types/aws-cleanrooms-membership.js +1 -1
- package/lib/types/cfn-resource-types/aws-cloudformation-guardhook.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-cloudformation-guardhook.js +1 -1
- package/lib/types/cfn-resource-types/aws-cloudformation-lambdahook.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-cloudformation-lambdahook.js +1 -1
- package/lib/types/cfn-resource-types/aws-cloudfront-anycastiplist.d.ts +27 -0
- package/lib/types/cfn-resource-types/aws-cloudfront-anycastiplist.js +3 -0
- package/lib/types/cfn-resource-types/aws-cloudfront-distribution.d.ts +24 -7
- package/lib/types/cfn-resource-types/aws-cloudfront-distribution.js +1 -1
- package/lib/types/cfn-resource-types/aws-connect-queue.d.ts +0 -1
- package/lib/types/cfn-resource-types/aws-connect-queue.js +1 -1
- package/lib/types/cfn-resource-types/aws-customerprofiles-eventtrigger.d.ts +162 -0
- package/lib/types/cfn-resource-types/aws-customerprofiles-eventtrigger.js +3 -0
- package/lib/types/cfn-resource-types/aws-databrew-dataset.d.ts +9 -0
- package/lib/types/cfn-resource-types/aws-databrew-dataset.js +1 -1
- package/lib/types/cfn-resource-types/aws-datazone-datasource.d.ts +23 -1
- package/lib/types/cfn-resource-types/aws-datazone-datasource.js +1 -1
- package/lib/types/cfn-resource-types/aws-datazone-projectmembership.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-datazone-projectmembership.js +1 -1
- package/lib/types/cfn-resource-types/aws-datazone-subscriptiontarget.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-datazone-subscriptiontarget.js +1 -1
- package/lib/types/cfn-resource-types/aws-dms-dataprovider.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-dms-dataprovider.js +1 -1
- package/lib/types/cfn-resource-types/aws-docdb-dbcluster.d.ts +3 -0
- package/lib/types/cfn-resource-types/aws-docdb-dbcluster.js +1 -1
- package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.d.ts +5 -3
- package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.js +1 -1
- package/lib/types/cfn-resource-types/aws-dynamodb-table.d.ts +1 -0
- package/lib/types/cfn-resource-types/aws-dynamodb-table.js +1 -1
- package/lib/types/cfn-resource-types/aws-ec2-ec2fleet.d.ts +10 -0
- package/lib/types/cfn-resource-types/aws-ec2-ec2fleet.js +1 -1
- package/lib/types/cfn-resource-types/aws-ec2-launchtemplate.d.ts +1022 -0
- package/lib/types/cfn-resource-types/aws-ec2-launchtemplate.js +3 -0
- package/lib/types/cfn-resource-types/aws-ec2-networkacl.d.ts +1 -0
- package/lib/types/cfn-resource-types/aws-ec2-networkacl.js +1 -1
- package/lib/types/cfn-resource-types/aws-ec2-spotfleet.d.ts +136 -126
- package/lib/types/cfn-resource-types/aws-ec2-spotfleet.js +1 -1
- package/lib/types/cfn-resource-types/aws-ec2-volume.d.ts +5 -5
- package/lib/types/cfn-resource-types/aws-ec2-volume.js +1 -1
- package/lib/types/cfn-resource-types/aws-ec2-vpccidrblock.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-ec2-vpccidrblock.js +1 -1
- package/lib/types/cfn-resource-types/aws-ec2-vpcendpoint.d.ts +27 -14
- package/lib/types/cfn-resource-types/aws-ec2-vpcendpoint.js +1 -1
- package/lib/types/cfn-resource-types/aws-ec2-vpcendpointservice.d.ts +8 -0
- package/lib/types/cfn-resource-types/aws-ec2-vpcendpointservice.js +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +6 -3
- package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-taskdefinition.d.ts +5 -2
- package/lib/types/cfn-resource-types/aws-ecs-taskdefinition.js +1 -1
- package/lib/types/cfn-resource-types/aws-efs-filesystem.d.ts +10 -1
- package/lib/types/cfn-resource-types/aws-efs-filesystem.js +1 -1
- package/lib/types/cfn-resource-types/aws-fis-experimenttemplate.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-fis-experimenttemplate.js +1 -1
- package/lib/types/cfn-resource-types/aws-imagebuilder-image.d.ts +45 -45
- package/lib/types/cfn-resource-types/aws-imagebuilder-image.js +1 -1
- package/lib/types/cfn-resource-types/aws-lex-bot.d.ts +17 -0
- package/lib/types/cfn-resource-types/aws-lex-bot.js +1 -1
- package/lib/types/cfn-resource-types/aws-logs-loggroup.d.ts +11 -0
- package/lib/types/cfn-resource-types/aws-logs-loggroup.js +1 -1
- package/lib/types/cfn-resource-types/aws-logs-metricfilter.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-logs-metricfilter.js +1 -1
- package/lib/types/cfn-resource-types/aws-logs-subscriptionfilter.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-logs-subscriptionfilter.js +1 -1
- package/lib/types/cfn-resource-types/aws-mediaconnect-bridge.d.ts +10 -0
- package/lib/types/cfn-resource-types/aws-mediaconnect-bridge.js +1 -1
- package/lib/types/cfn-resource-types/aws-mediaconnect-bridgesource.d.ts +10 -0
- package/lib/types/cfn-resource-types/aws-mediaconnect-bridgesource.js +1 -1
- package/lib/types/cfn-resource-types/aws-mediaconvert-queue.d.ts +1 -0
- package/lib/types/cfn-resource-types/aws-mediaconvert-queue.js +1 -1
- package/lib/types/cfn-resource-types/aws-opensearchservice-domain.d.ts +10 -0
- package/lib/types/cfn-resource-types/aws-opensearchservice-domain.js +1 -1
- package/lib/types/cfn-resource-types/aws-pcs-cluster.d.ts +151 -0
- package/lib/types/cfn-resource-types/aws-pcs-cluster.js +3 -0
- package/lib/types/cfn-resource-types/aws-pcs-computenodegroup.d.ts +142 -0
- package/lib/types/cfn-resource-types/aws-pcs-computenodegroup.js +3 -0
- package/lib/types/cfn-resource-types/aws-pcs-queue.d.ts +65 -0
- package/lib/types/cfn-resource-types/aws-pcs-queue.js +3 -0
- package/lib/types/cfn-resource-types/aws-qbusiness-dataaccessor.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-qbusiness-dataaccessor.js +1 -1
- package/lib/types/cfn-resource-types/aws-quicksight-analysis.d.ts +4218 -0
- package/lib/types/cfn-resource-types/aws-quicksight-analysis.js +3 -0
- package/lib/types/cfn-resource-types/aws-quicksight-custompermissions.d.ts +48 -0
- package/lib/types/cfn-resource-types/aws-quicksight-custompermissions.js +3 -0
- package/lib/types/cfn-resource-types/aws-quicksight-dashboard.d.ts +4338 -0
- package/lib/types/cfn-resource-types/aws-quicksight-dashboard.js +3 -0
- package/lib/types/cfn-resource-types/aws-quicksight-dataset.d.ts +16 -22
- package/lib/types/cfn-resource-types/aws-quicksight-dataset.js +1 -1
- package/lib/types/cfn-resource-types/aws-quicksight-template.d.ts +4018 -0
- package/lib/types/cfn-resource-types/aws-quicksight-template.js +3 -0
- package/lib/types/cfn-resource-types/aws-rds-dbcluster.d.ts +24 -13
- package/lib/types/cfn-resource-types/aws-rds-dbcluster.js +1 -1
- package/lib/types/cfn-resource-types/aws-rds-dbinstance.d.ts +1 -0
- package/lib/types/cfn-resource-types/aws-rds-dbinstance.js +1 -1
- package/lib/types/cfn-resource-types/aws-redshift-integration.d.ts +3 -5
- package/lib/types/cfn-resource-types/aws-redshift-integration.js +1 -1
- package/lib/types/cfn-resource-types/aws-resiliencehub-app.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-resiliencehub-app.js +1 -1
- package/lib/types/cfn-resource-types/aws-sagemaker-cluster.d.ts +52 -52
- package/lib/types/cfn-resource-types/aws-sagemaker-cluster.js +1 -1
- package/lib/types/cfn-resource-types/aws-sagemaker-domain.d.ts +5 -0
- package/lib/types/cfn-resource-types/aws-sagemaker-domain.js +1 -1
- package/lib/types/cfn-resource-types/aws-sagemaker-endpointconfig.d.ts +0 -1
- package/lib/types/cfn-resource-types/aws-sagemaker-endpointconfig.js +1 -1
- package/lib/types/cfn-resource-types/aws-sagemaker-partnerapp.d.ts +89 -0
- package/lib/types/cfn-resource-types/aws-sagemaker-partnerapp.js +3 -0
- package/lib/types/cfn-resource-types/aws-sagemaker-space.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-sagemaker-space.js +1 -1
- package/lib/types/cfn-resource-types/aws-sagemaker-userprofile.d.ts +5 -0
- package/lib/types/cfn-resource-types/aws-sagemaker-userprofile.js +1 -1
- package/lib/types/cfn-resource-types/aws-securityhub-configurationpolicy.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-securityhub-configurationpolicy.js +1 -1
- package/lib/types/cfn-resource-types/aws-ses-configurationset.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-ses-configurationset.js +1 -1
- package/lib/types/cfn-resource-types/aws-ses-mailmanagerruleset.d.ts +10 -1
- package/lib/types/cfn-resource-types/aws-ses-mailmanagerruleset.js +1 -1
- package/lib/types/cfn-resource-types/aws-ssmquicksetup-configurationmanager.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-ssmquicksetup-configurationmanager.js +1 -1
- package/lib/types/cfn-resource-types/aws-synthetics-canary.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-synthetics-canary.js +1 -1
- package/lib/types/cfn-resource-types/aws-wisdom-aiagent.d.ts +1 -0
- package/lib/types/cfn-resource-types/aws-wisdom-aiagent.js +1 -1
- package/lib/types/cfn-resource-types/aws-wisdom-aiprompt.d.ts +1 -0
- package/lib/types/cfn-resource-types/aws-wisdom-aiprompt.js +1 -1
- package/lib/types/cfn-resource-types.d.ts +24 -6
- package/lib/types/cfn-resource-types.js +50 -32
- package/package.json +2 -2
- package/lib/types/cfn-resource-types/aws-iot1click-device.d.ts +0 -8
- package/lib/types/cfn-resource-types/aws-iot1click-device.js +0 -3
- package/lib/types/cfn-resource-types/aws-iot1click-placement.d.ts +0 -14
- package/lib/types/cfn-resource-types/aws-iot1click-placement.js +0 -3
- package/lib/types/cfn-resource-types/aws-iot1click-project.d.ts +0 -18
- package/lib/types/cfn-resource-types/aws-iot1click-project.js +0 -3
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSB0aGUgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VDb25uZWN0U2VydmljZWBgIG11c3QgaGF2ZSBhIG5hbWUgdGhhdCBpcyB1bmlxdWUgaW4gdGhlIG5hbWVzcGFjZS5cbiAqICAgIFN0YXJ0aW5nIEFwcmlsIDE1LCAyMDIzLCBBV1M7IHdpbGwgbm90IG9uYm9hcmQgbmV3IGN1c3RvbWVycyB0byBBbWF6b24gRWxhc3RpYyBJbmZlcmVuY2UgKEVJKSwgYW5kIHdpbGwgaGVscCBjdXJyZW50IGN1c3RvbWVycyBtaWdyYXRlIHRoZWlyIHdvcmtsb2FkcyB0byBvcHRpb25zIHRoYXQgb2ZmZXIgYmV0dGVyIHByaWNlIGFuZCBwZXJmb3JtYW5jZS4gQWZ0ZXIgQXByaWwgMTUsIDIwMjMsIG5ldyBjdXN0b21lcnMgd2lsbCBub3QgYmUgYWJsZSB0byBsYXVuY2ggaW5zdGFuY2VzIHdpdGggQW1hem9uIEVJIGFjY2VsZXJhdG9ycyBpbiBBbWF6b24gU2FnZU1ha2VyLCBFQ1MsIG9yIEVDMi4gSG93ZXZlciwgY3VzdG9tZXJzIHdobyBoYXZlIHVzZWQgQW1hem9uIEVJIGF0IGxlYXN0IG9uY2UgZHVyaW5nIHRoZSBwYXN0IDMwLWRheSBwZXJpb2QgYXJlIGNvbnNpZGVyZWQgY3VycmVudCBjdXN0b21lcnMgYW5kIHdpbGwgYmUgYWJsZSB0byBjb250aW51ZSB1c2luZyB0aGUgc2VydmljZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VDU19TRVJWSUNFIHtcbi8qKlxuICogVGhlIHBsYXRmb3JtIHZlcnNpb24gdGhhdCB5b3VyIHRhc2tzIGluIHRoZSBzZXJ2aWNlIGFyZSBydW5uaW5nIG9uLiBBIHBsYXRmb3JtIHZlcnNpb24gaXMgc3BlY2lmaWVkIG9ubHkgZm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLiBJZiBvbmUgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgYGBMQVRFU1RgYCBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHVzZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW3BsYXRmb3JtIHZlcnNpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9wbGF0Zm9ybV92ZXJzaW9ucy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblBsYXRmb3JtVmVyc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIHRoZSB0YXNrLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCBwcm9wYWdhdGVkLiBUYWdzIGNhbiBvbmx5IGJlIHByb3BhZ2F0ZWQgdG8gdGhlIHRhc2sgZHVyaW5nIHRhc2sgY3JlYXRpb24uIFRvIGFkZCB0YWdzIHRvIGEgdGFzayBhZnRlciB0YXNrIGNyZWF0aW9uLCB1c2UgdGhlIFtUYWdSZXNvdXJjZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9UYWdSZXNvdXJjZS5odG1sKSBBUEkgYWN0aW9uLlxuICogIFlvdSBtdXN0IHNldCB0aGlzIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5PTkVgYCB3aGVuIHlvdSB1c2UgQ29zdCBFeHBsb3Jlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyB1c2FnZSByZXBvcnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2FnZS1yZXBvcnRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgZGVmYXVsdCBpcyBgYE5PTkVgYC5cbiAqL1xuUHJvcGFnYXRlVGFncz86IChcIlNFUlZJQ0VcIiB8IFwiVEFTS19ERUZJTklUSU9OXCIpXG5TZXJ2aWNlQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgb2JqZWN0cyB0byB1c2UgZm9yIHRhc2tzIGluIHlvdXIgc2VydmljZS4gWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSBvZiA1IHN0cmF0ZWd5IHJ1bGVzIGZvciBlYWNoIHNlcnZpY2UuXG4gKi9cblBsYWNlbWVudFN0cmF0ZWdpZXM/OiBQbGFjZW1lbnRTdHJhdGVneVtdXG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZWdpc3RyeSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgZGlzY292ZXJ5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWRpc2NvdmVyeS5odG1sKS5cbiAqICAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuU2VydmljZVJlZ2lzdHJpZXM/OiBTZXJ2aWNlUmVnaXN0cnlbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgYSB2b2x1bWUgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYXMgYSB2b2x1bWUgdGhhdCBpcyBjb25maWd1cmVkIGF0IGxhdW5jaCB0aW1lLiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCB2b2x1bWUgdHlwZSBpcyBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuVm9sdW1lQ29uZmlndXJhdGlvbnM/OiBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICogIElmIGEgYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGxhdW5jaFR5cGVgYCBwYXJhbWV0ZXIgbXVzdCBiZSBvbWl0dGVkLiBJZiBubyBgYGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIG9yIGBgbGF1bmNoVHlwZWBgIGlzIHNwZWNpZmllZCwgdGhlIGBgZGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIGZvciB0aGUgY2x1c3RlciBpcyB1c2VkLlxuICogIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgbWF5IGNvbnRhaW4gYSBtYXhpbXVtIG9mIDYgY2FwYWNpdHkgcHJvdmlkZXJzLlxuICovXG5DYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3k/OiBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtW11cbi8qKlxuICogVGhlIGxhdW5jaCB0eXBlIG9uIHdoaWNoIHRvIHJ1biB5b3VyIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgTGF1bmNoIFR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5MYXVuY2hUeXBlPzogKFwiRUMyXCIgfCBcIkZBUkdBVEVcIiB8IFwiRVhURVJOQUxcIilcbk5hbWU/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIEF2YWlsYWJpbGl0eSBab25lIHJlYmFsYW5jaW5nIGZvciB0aGUgc2VydmljZS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCYWxhbmNpbmcgYW4gQW1hem9uIEVDUyBzZXJ2aWNlIGFjcm9zcyBBdmFpbGFiaWxpdHkgWm9uZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtcmViYWxhbmNpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5BdmFpbGFiaWxpdHlab25lUmViYWxhbmNpbmc/OiAoXCJFTkFCTEVEXCIgfCBcIkRJU0FCTEVEXCIpXG4vKipcbiAqIFRoZSBzY2hlZHVsaW5nIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuXG4gKiAgVGhlcmUgYXJlIHR3byBzZXJ2aWNlIHNjaGVkdWxlciBzdHJhdGVnaWVzIGF2YWlsYWJsZTpcbiAqICAgKyAgIGBgUkVQTElDQWBgLVRoZSByZXBsaWNhIHNjaGVkdWxpbmcgc3RyYXRlZ3kgcGxhY2VzIGFuZCBtYWludGFpbnMgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHRhc2tzIGFjcm9zcyB5b3VyIGNsdXN0ZXIuIEJ5IGRlZmF1bHQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBzcHJlYWRzIHRhc2tzIGFjcm9zcyBBdmFpbGFiaWxpdHkgWm9uZXMuIFlvdSBjYW4gdXNlIHRhc2sgcGxhY2VtZW50IHN0cmF0ZWdpZXMgYW5kIGNvbnN0cmFpbnRzIHRvIGN1c3RvbWl6ZSB0YXNrIHBsYWNlbWVudCBkZWNpc2lvbnMuIFRoaXMgc2NoZWR1bGVyIHN0cmF0ZWd5IGlzIHJlcXVpcmVkIGlmIHRoZSBzZXJ2aWNlIHVzZXMgdGhlIGBgQ09ERV9ERVBMT1lgYCBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGVzLlxuICogICArICAgYGBEQUVNT05gYC1UaGUgZGFlbW9uIHNjaGVkdWxpbmcgc3RyYXRlZ3kgZGVwbG95cyBleGFjdGx5IG9uZSB0YXNrIG9uIGVhY2ggYWN0aXZlIGNvbnRhaW5lciBpbnN0YW5jZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgdGhhdCB5b3Ugc3BlY2lmeSBpbiB5b3VyIGNsdXN0ZXIuIFRoZSBzZXJ2aWNlIHNjaGVkdWxlciBhbHNvIGV2YWx1YXRlcyB0aGUgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgZm9yIHJ1bm5pbmcgdGFza3MgYW5kIHdpbGwgc3RvcCB0YXNrcyB0aGF0IGRvbid0IG1lZXQgdGhlIHBsYWNlbWVudCBjb25zdHJhaW50cy4gV2hlbiB5b3UncmUgdXNpbmcgdGhpcyBzdHJhdGVneSwgeW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhIGRlc2lyZWQgbnVtYmVyIG9mIHRhc2tzLCBhIHRhc2sgcGxhY2VtZW50IHN0cmF0ZWd5LCBvciB1c2UgU2VydmljZSBBdXRvIFNjYWxpbmcgcG9saWNpZXMuXG4gKiAgIFRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlIG9yIHRoZSBgYENPREVfREVQTE9ZYGAgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcyBkb24ndCBzdXBwb3J0IHRoZSBgYERBRU1PTmBgIHNjaGVkdWxpbmcgc3RyYXRlZ3kuXG4gKi9cblNjaGVkdWxpbmdTdHJhdGVneT86IChcIkRBRU1PTlwiIHwgXCJSRVBMSUNBXCIpXG5OZXR3b3JrQ29uZmlndXJhdGlvbj86IE5ldHdvcmtDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byB0aGUgc2VydmljZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUsIGJvdGggb2Ygd2hpY2ggeW91IGRlZmluZS4gV2hlbiBhIHNlcnZpY2UgaXMgZGVsZXRlZCwgdGhlIHRhZ3MgYXJlIGRlbGV0ZWQgYXMgd2VsbC5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICovXG5UYWdzPzogVGFnW11cbi8qKlxuICogVGhlIHBlcmlvZCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugc2NoZWR1bGVyIGlnbm9yZXMgdW5oZWFsdGh5IEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIFZQQyBMYXR0aWNlLCBhbmQgY29udGFpbmVyIGhlYWx0aCBjaGVja3MgYWZ0ZXIgYSB0YXNrIGhhcyBmaXJzdCBzdGFydGVkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIGhlYWx0aCBjaGVjayBncmFjZSBwZXJpb2QgdmFsdWUsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuIElmIHlvdSBkb24ndCB1c2UgYW55IG9mIHRoZSBoZWFsdGggY2hlY2tzLCB0aGVuIGBgaGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFNlY29uZHNgYCBpcyB1bnVzZWQuXG4gKiAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGFrZSBhIHdoaWxlIHRvIHN0YXJ0IGFuZCByZXNwb25kIHRvIGhlYWx0aCBjaGVja3MsIHlvdSBjYW4gc3BlY2lmeSBhIGhlYWx0aCBjaGVjayBncmFjZSBwZXJpb2Qgb2YgdXAgdG8gMiwxNDcsNDgzLDY0NyBzZWNvbmRzIChhYm91dCA2OSB5ZWFycykuIER1cmluZyB0aGF0IHRpbWUsIHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugc2NoZWR1bGVyIGlnbm9yZXMgaGVhbHRoIGNoZWNrIHN0YXR1cy4gVGhpcyBncmFjZSBwZXJpb2QgY2FuIHByZXZlbnQgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGZyb20gbWFya2luZyB0YXNrcyBhcyB1bmhlYWx0aHkgYW5kIHN0b3BwaW5nIHRoZW0gYmVmb3JlIHRoZXkgaGF2ZSB0aW1lIHRvIGNvbWUgdXAuXG4gKi9cbkhlYWx0aENoZWNrR3JhY2VQZXJpb2RTZWNvbmRzPzogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHR1cm4gb24gQW1hem9uIEVDUyBtYW5hZ2VkIHRhZ3MgZm9yIHRoZSB0YXNrcyB3aXRoaW4gdGhlIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1RhZ2dpbmcgeW91ciBBbWF6b24gRUNTIHJlc291cmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLXVzaW5nLXRhZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFdoZW4geW91IHVzZSBBbWF6b24gRUNTIG1hbmFnZWQgdGFncywgeW91IG5lZWQgdG8gc2V0IHRoZSBgYHByb3BhZ2F0ZVRhZ3NgYCByZXF1ZXN0IHBhcmFtZXRlci5cbiAqL1xuRW5hYmxlRUNTTWFuYWdlZFRhZ3M/OiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9uYWxpdHkgaXMgdHVybmVkIG9uIGZvciB0aGUgc2VydmljZS4gSWYgYGB0cnVlYGAsIHRoZSBleGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25hbGl0eSBpcyB0dXJuZWQgb24gZm9yIGFsbCBjb250YWluZXJzIGluIHRhc2tzIGFzIHBhcnQgb2YgdGhlIHNlcnZpY2UuXG4gKi9cbkVuYWJsZUV4ZWN1dGVDb21tYW5kPzogYm9vbGVhblxuLyoqXG4gKiBBbiBhcnJheSBvZiBwbGFjZW1lbnQgY29uc3RyYWludCBvYmplY3RzIHRvIHVzZSBmb3IgdGFza3MgaW4geW91ciBzZXJ2aWNlLiBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIG9mIDEwIGNvbnN0cmFpbnRzIGZvciBlYWNoIHRhc2suIFRoaXMgbGltaXQgaW5jbHVkZXMgY29uc3RyYWludHMgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhbmQgdGhvc2Ugc3BlY2lmaWVkIGF0IHJ1bnRpbWUuXG4gKi9cblBsYWNlbWVudENvbnN0cmFpbnRzPzogUGxhY2VtZW50Q29uc3RyYWludFtdXG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGNsdXN0ZXIgdGhhdCB5b3UgcnVuIHlvdXIgc2VydmljZSBvbi4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgY2x1c3RlciwgdGhlIGRlZmF1bHQgY2x1c3RlciBpcyBhc3N1bWVkLlxuICovXG5DbHVzdGVyPzogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBsb2FkIGJhbGFuY2VyIG9iamVjdHMgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHNlcnZpY2UuIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFJvbGVgYCBwcm9wZXJ0eSwgYGBMb2FkQmFsYW5jZXJzYGAgbXVzdCBiZSBzcGVjaWZpZWQgYXMgd2VsbC4gRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBudW1iZXIgb2YgbG9hZCBiYWxhbmNlcnMgdGhhdCB5b3UgY2FuIHNwZWNpZnkgcGVyIHNlcnZpY2UsIHNlZSBbU2VydmljZSBMb2FkIEJhbGFuY2luZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1sb2FkLWJhbGFuY2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkxvYWRCYWxhbmNlcnM/OiBMb2FkQmFsYW5jZXJbXVxuU2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uPzogU2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgaW5zdGFudGlhdGlvbnMgb2YgdGhlIHNwZWNpZmllZCB0YXNrIGRlZmluaXRpb24gdG8gcGxhY2UgYW5kIGtlZXAgcnVubmluZyBpbiB5b3VyIHNlcnZpY2UuXG4gKiAgRm9yIG5ldyBzZXJ2aWNlcywgaWYgYSBkZXNpcmVkIGNvdW50IGlzIG5vdCBzcGVjaWZpZWQsIGEgZGVmYXVsdCB2YWx1ZSBvZiBgYDFgYCBpcyB1c2VkLiBXaGVuIHVzaW5nIHRoZSBgYERBRU1PTmBgIHNjaGVkdWxpbmcgc3RyYXRlZ3ksIHRoZSBkZXNpcmVkIGNvdW50IGlzIG5vdCByZXF1aXJlZC5cbiAqICBGb3IgZXhpc3Rpbmcgc2VydmljZXMsIGlmIGEgZGVzaXJlZCBjb3VudCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBpcyBvbWl0dGVkIGZyb20gdGhlIG9wZXJhdGlvbi5cbiAqL1xuRGVzaXJlZENvdW50PzogbnVtYmVyXG4vKipcbiAqIFRoZSBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VydmljZSBiZWluZyBjcmVhdGVkLlxuICovXG5WcGNMYXR0aWNlQ29uZmlndXJhdGlvbnM/OiBWcGNMYXR0aWNlQ29uZmlndXJhdGlvbltdXG5EZXBsb3ltZW50Q29udHJvbGxlcj86IERlcGxveW1lbnRDb250cm9sbGVyXG4vKipcbiAqIFRoZSBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQgYWxsb3dzIEFtYXpvbiBFQ1MgdG8gbWFrZSBjYWxscyB0byB5b3VyIGxvYWQgYmFsYW5jZXIgb24geW91ciBiZWhhbGYuIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgcGVybWl0dGVkIGlmIHlvdSBhcmUgdXNpbmcgYSBsb2FkIGJhbGFuY2VyIHdpdGggeW91ciBzZXJ2aWNlIGFuZCB5b3VyIHRhc2sgZGVmaW5pdGlvbiBkb2Vzbid0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUuIElmIHlvdSBzcGVjaWZ5IHRoZSBgYHJvbGVgYCBwYXJhbWV0ZXIsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSBhIGxvYWQgYmFsYW5jZXIgb2JqZWN0IHdpdGggdGhlIGBgbG9hZEJhbGFuY2Vyc2BgIHBhcmFtZXRlci5cbiAqICAgSWYgeW91ciBhY2NvdW50IGhhcyBhbHJlYWR5IGNyZWF0ZWQgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZS1saW5rZWQgcm9sZSwgdGhhdCByb2xlIGlzIHVzZWQgZm9yIHlvdXIgc2VydmljZSB1bmxlc3MgeW91IHNwZWNpZnkgYSByb2xlIGhlcmUuIFRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIGlzIHJlcXVpcmVkIGlmIHlvdXIgdGFzayBkZWZpbml0aW9uIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIG9yIGlmIHRoZSBzZXJ2aWNlIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHNlcnZpY2UgZGlzY292ZXJ5LCBhbiBleHRlcm5hbCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIG11bHRpcGxlIHRhcmdldCBncm91cHMsIG9yIEVsYXN0aWMgSW5mZXJlbmNlIGFjY2VsZXJhdG9ycyBpbiB3aGljaCBjYXNlIHlvdSBkb24ndCBzcGVjaWZ5IGEgcm9sZSBoZXJlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2luZyBzZXJ2aWNlLWxpbmtlZCByb2xlcyBmb3IgQW1hem9uIEVDU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmctc2VydmljZS1saW5rZWQtcm9sZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3VyIHNwZWNpZmllZCByb2xlIGhhcyBhIHBhdGggb3RoZXIgdGhhbiBgYC9gYCwgdGhlbiB5b3UgbXVzdCBlaXRoZXIgc3BlY2lmeSB0aGUgZnVsbCByb2xlIEFSTiAodGhpcyBpcyByZWNvbW1lbmRlZCkgb3IgcHJlZml4IHRoZSByb2xlIG5hbWUgd2l0aCB0aGUgcGF0aC4gRm9yIGV4YW1wbGUsIGlmIGEgcm9sZSB3aXRoIHRoZSBuYW1lIGBgYmFyYGAgaGFzIGEgcGF0aCBvZiBgYC9mb28vYGAgdGhlbiB5b3Ugd291bGQgc3BlY2lmeSBgYC9mb28vYmFyYGAgYXMgdGhlIHJvbGUgbmFtZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRnJpZW5kbHkgbmFtZXMgYW5kIHBhdGhzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX2lkZW50aWZpZXJzLmh0bWwjaWRlbnRpZmllcnMtZnJpZW5kbHktbmFtZXMpIGluIHRoZSAqSUFNIFVzZXIgR3VpZGUqLlxuICovXG5Sb2xlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBgYGZhbWlseWBgIGFuZCBgYHJldmlzaW9uYGAgKGBgZmFtaWx5OnJldmlzaW9uYGApIG9yIGZ1bGwgQVJOIG9mIHRoZSB0YXNrIGRlZmluaXRpb24gdG8gcnVuIGluIHlvdXIgc2VydmljZS4gSWYgYSBgYHJldmlzaW9uYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgbGF0ZXN0IGBgQUNUSVZFYGAgcmV2aXNpb24gaXMgdXNlZC5cbiAqICBBIHRhc2sgZGVmaW5pdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBpZiB0aGUgc2VydmljZSB1c2VzIGVpdGhlciB0aGUgYGBFQ1NgYCBvciBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVycy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBkZXBsb3ltZW50IHR5cGVzLCBzZWUgW0FtYXpvbiBFQ1MgZGVwbG95bWVudCB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlcy5odG1sKS5cbiAqL1xuVGFza0RlZmluaXRpb24/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgeW91ciBzZXJ2aWNlLiBVcCB0byAyNTUgbGV0dGVycyAodXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UpLCBudW1iZXJzLCB1bmRlcnNjb3JlcywgYW5kIGh5cGhlbnMgYXJlIGFsbG93ZWQuIFNlcnZpY2UgbmFtZXMgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgY2x1c3RlciwgYnV0IHlvdSBjYW4gaGF2ZSBzaW1pbGFybHkgbmFtZWQgc2VydmljZXMgaW4gbXVsdGlwbGUgY2x1c3RlcnMgd2l0aGluIGEgUmVnaW9uIG9yIGFjcm9zcyBtdWx0aXBsZSBSZWdpb25zLlxuICogICBUaGUgc3RhY2sgdXBkYXRlIGZhaWxzIGlmIHlvdSBjaGFuZ2UgYW55IHByb3BlcnRpZXMgdGhhdCByZXF1aXJlIHJlcGxhY2VtZW50IGFuZCB0aGUgYGBTZXJ2aWNlTmFtZWBgIGlzIGNvbmZpZ3VyZWQuIFRoaXMgaXMgYmVjYXVzZSBBV1MgQ2xvdWRGb3JtYXRpb24gY3JlYXRlcyB0aGUgcmVwbGFjZW1lbnQgc2VydmljZSBmaXJzdCwgYnV0IGVhY2ggYGBTZXJ2aWNlTmFtZWBgIG11c3QgYmUgdW5pcXVlIGluIHRoZSBjbHVzdGVyLlxuICovXG5TZXJ2aWNlTmFtZT86IHN0cmluZ1xuRGVwbG95bWVudENvbmZpZ3VyYXRpb24/OiBEZXBsb3ltZW50Q29uZmlndXJhdGlvblxufVxuLyoqXG4gKiBUaGUgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ3kgZm9yIGEgdGFzayBvciBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIHBsYWNlbWVudCBzdHJhdGVnaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLXBsYWNlbWVudC1zdHJhdGVnaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRTdHJhdGVneSB7XG4vKipcbiAqIFRoZSBmaWVsZCB0byBhcHBseSB0aGUgcGxhY2VtZW50IHN0cmF0ZWd5IGFnYWluc3QuIEZvciB0aGUgYGBzcHJlYWRgYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHZhbGlkIHZhbHVlcyBhcmUgYGBpbnN0YW5jZUlkYGAgKG9yIGBgaG9zdGBgLCB3aGljaCBoYXMgdGhlIHNhbWUgZWZmZWN0KSwgb3IgYW55IHBsYXRmb3JtIG9yIGN1c3RvbSBhdHRyaWJ1dGUgdGhhdCdzIGFwcGxpZWQgdG8gYSBjb250YWluZXIgaW5zdGFuY2UsIHN1Y2ggYXMgYGBhdHRyaWJ1dGU6ZWNzLmF2YWlsYWJpbGl0eS16b25lYGAuIEZvciB0aGUgYGBiaW5wYWNrYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB2YWxpZCB2YWx1ZXMgYXJlIGBgY3B1YGAgYW5kIGBgbWVtb3J5YGAuIEZvciB0aGUgYGByYW5kb21gYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHRoaXMgZmllbGQgaXMgbm90IHVzZWQuXG4gKi9cbkZpZWxkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0eXBlIG9mIHBsYWNlbWVudCBzdHJhdGVneS4gVGhlIGBgcmFuZG9tYGAgcGxhY2VtZW50IHN0cmF0ZWd5IHJhbmRvbWx5IHBsYWNlcyB0YXNrcyBvbiBhdmFpbGFibGUgY2FuZGlkYXRlcy4gVGhlIGBgc3ByZWFkYGAgcGxhY2VtZW50IHN0cmF0ZWd5IHNwcmVhZHMgcGxhY2VtZW50IGFjcm9zcyBhdmFpbGFibGUgY2FuZGlkYXRlcyBldmVubHkgYmFzZWQgb24gdGhlIGBgZmllbGRgYCBwYXJhbWV0ZXIuIFRoZSBgYGJpbnBhY2tgYCBzdHJhdGVneSBwbGFjZXMgdGFza3Mgb24gYXZhaWxhYmxlIGNhbmRpZGF0ZXMgdGhhdCBoYXZlIHRoZSBsZWFzdCBhdmFpbGFibGUgYW1vdW50IG9mIHRoZSByZXNvdXJjZSB0aGF0J3Mgc3BlY2lmaWVkIHdpdGggdGhlIGBgZmllbGRgYCBwYXJhbWV0ZXIuIEZvciBleGFtcGxlLCBpZiB5b3UgYmlucGFjayBvbiBtZW1vcnksIGEgdGFzayBpcyBwbGFjZWQgb24gdGhlIGluc3RhbmNlIHdpdGggdGhlIGxlYXN0IGFtb3VudCBvZiByZW1haW5pbmcgbWVtb3J5IGJ1dCBzdGlsbCBlbm91Z2ggdG8gcnVuIHRoZSB0YXNrLlxuICovXG5UeXBlOiAoXCJiaW5wYWNrXCIgfCBcInJhbmRvbVwiIHwgXCJzcHJlYWRcIilcbn1cbi8qKlxuICogVGhlIGRldGFpbHMgZm9yIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5LlxuICogIEVhY2ggc2VydmljZSBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIG9uZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBNdWx0aXBsZSBzZXJ2aWNlIHJlZ2lzdHJpZXMgZm9yIGVhY2ggc2VydmljZSBhcmUgbm90IHN1cHBvcnRlZC5cbiAqICBXaGVuIHlvdSBhZGQsIHVwZGF0ZSwgb3IgcmVtb3ZlIHRoZSBzZXJ2aWNlIHJlZ2lzdHJpZXMgY29uZmlndXJhdGlvbiwgQW1hem9uIEVDUyBzdGFydHMgYSBuZXcgZGVwbG95bWVudC4gTmV3IHRhc2tzIGFyZSByZWdpc3RlcmVkIGFuZCBkZXJlZ2lzdGVyZWQgdG8gdGhlIHVwZGF0ZWQgc2VydmljZSByZWdpc3RyeSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VSZWdpc3RyeSB7XG4vKipcbiAqIFRoZSBjb250YWluZXIgbmFtZSB2YWx1ZSB0byBiZSB1c2VkIGZvciB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2UuIEl0J3MgYWxyZWFkeSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGJyaWRnZWBgIG9yIGBgaG9zdGBgIG5ldHdvcmsgbW9kZSwgeW91IG11c3Qgc3BlY2lmeSBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIGEgdHlwZSBTUlYgRE5TIHJlY29yZCBpcyB1c2VkLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBvciBhIGBgcG9ydGBgIHZhbHVlLiBIb3dldmVyLCB5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoLlxuICovXG5Db250YWluZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwb3J0IHZhbHVlIHVzZWQgaWYgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlIHNwZWNpZmllZCBhbiBTUlYgcmVjb3JkLiBUaGlzIGZpZWxkIG1pZ2h0IGJlIHVzZWQgaWYgYm90aCB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIFNSViByZWNvcmRzIGFyZSB1c2VkLlxuICovXG5Qb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBwb3J0IHZhbHVlIHRvIGJlIHVzZWQgZm9yIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZS4gSXQncyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGJyaWRnZWBgIG9yIGBgaG9zdGBgIG5ldHdvcmsgbW9kZSwgeW91IG11c3Qgc3BlY2lmeSBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24geW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBhIHR5cGUgU1JWIEROUyByZWNvcmQgaXMgdXNlZCwgeW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gb3IgYSBgYHBvcnRgYCB2YWx1ZS4gSG93ZXZlciwgeW91IGNhbid0IHNwZWNpZnkgYm90aC5cbiAqL1xuQ29udGFpbmVyUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHNlcnZpY2UgcmVnaXN0cnkuIFRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIHNlcnZpY2UgcmVnaXN0cnkgaXMgQ01BUC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRlU2VydmljZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkLW1hcC9sYXRlc3QvYXBpL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWwpLlxuICovXG5SZWdpc3RyeUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgYSB2b2x1bWUgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYXMgYSB2b2x1bWUgdGhhdCBpcyBjb25maWd1cmVkIGF0IGxhdW5jaCB0aW1lLiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCB2b2x1bWUgdHlwZSBpcyBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbiB7XG5NYW5hZ2VkRUJTVm9sdW1lPzogU2VydmljZU1hbmFnZWRFQlNWb2x1bWVDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSB2b2x1bWUuIFRoaXMgdmFsdWUgbXVzdCBtYXRjaCB0aGUgdm9sdW1lIG5hbWUgZnJvbSB0aGUgYGBWb2x1bWVgYCBvYmplY3QgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi5cbiAqL1xuTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQW1hem9uIEVCUyB2b2x1bWUgdGhhdCBBbWF6b24gRUNTIGNyZWF0ZXMgYW5kIG1hbmFnZXMgb24geW91ciBiZWhhbGYuIFRoZXNlIHNldHRpbmdzIGFyZSB1c2VkIHRvIGNyZWF0ZSBlYWNoIEFtYXpvbiBFQlMgdm9sdW1lLCB3aXRoIG9uZSB2b2x1bWUgY3JlYXRlZCBmb3IgZWFjaCB0YXNrIGluIHRoZSBzZXJ2aWNlLiBUaGUgQW1hem9uIEVCUyB2b2x1bWVzIGFyZSB2aXNpYmxlIGluIHlvdXIgYWNjb3VudCBpbiB0aGUgQW1hem9uIEVDMiBjb25zb2xlIG9uY2UgdGhleSBhcmUgY3JlYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlTWFuYWdlZEVCU1ZvbHVtZUNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgc25hcHNob3QgdGhhdCBBbWF6b24gRUNTIHVzZXMgdG8gY3JlYXRlIHRoZSB2b2x1bWUuIFlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgc25hcHNob3QgSUQgb3IgYSB2b2x1bWUgc2l6ZS4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBTbmFwc2hvdElkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5TbmFwc2hvdElkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB2b2x1bWUgdHlwZS4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBWb2x1bWVUeXBlYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUJTIHZvbHVtZSB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUqLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGVzLlxuICogICArICBHZW5lcmFsIFB1cnBvc2UgU1NEOiBgYGdwMmBgfGBgZ3AzYGAgXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgU1NEOiBgYGlvMWBgfGBgaW8yYGAgXG4gKiAgICsgIFRocm91Z2hwdXQgT3B0aW1pemVkIEhERDogYGBzdDFgYCBcbiAqICAgKyAgQ29sZCBIREQ6IGBgc2MxYGAgXG4gKiAgICsgIE1hZ25ldGljOiBgYHN0YW5kYXJkYGAgXG4gKiAgIFRoZSBtYWduZXRpYyB2b2x1bWUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIG9uIEZhcmdhdGUuXG4gKi9cblZvbHVtZVR5cGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIGlkZW50aWZpZXIgb2YgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSB0byB1c2UgZm9yIEFtYXpvbiBFQlMgZW5jcnlwdGlvbi4gV2hlbiBlbmNyeXB0aW9uIGlzIHR1cm5lZCBvbiBhbmQgbm8gQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgQVdTIG1hbmFnZWQga2V5IGZvciBBbWF6b24gRUJTIHZvbHVtZXMgaXMgdXNlZC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBLbXNLZXlJZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqICAgIEFXUyBhdXRoZW50aWNhdGVzIHRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgYXN5bmNocm9ub3VzbHkuIFRoZXJlZm9yZSwgaWYgeW91IHNwZWNpZnkgYW4gSUQsIGFsaWFzLCBvciBBUk4gdGhhdCBpcyBpbnZhbGlkLCB0aGUgYWN0aW9uIGNhbiBhcHBlYXIgdG8gY29tcGxldGUsIGJ1dCBldmVudHVhbGx5IGZhaWxzLlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgdm9sdW1lLiBBbWF6b24gRUNTIGFwcGxpZXMgc2VydmljZS1tYW5hZ2VkIHRhZ3MgYnkgZGVmYXVsdC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBUYWdTcGVjaWZpY2F0aW9ucy5OYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5UYWdTcGVjaWZpY2F0aW9ucz86IEVCU1RhZ1NwZWNpZmljYXRpb25bXVxuLyoqXG4gKiBUaGUgZmlsZXN5c3RlbSB0eXBlIGZvciB0aGUgdm9sdW1lLiBGb3Igdm9sdW1lcyBjcmVhdGVkIGZyb20gYSBzbmFwc2hvdCwgeW91IG11c3Qgc3BlY2lmeSB0aGUgc2FtZSBmaWxlc3lzdGVtIHR5cGUgdGhhdCB0aGUgdm9sdW1lIHdhcyB1c2luZyB3aGVuIHRoZSBzbmFwc2hvdCB3YXMgY3JlYXRlZC4gSWYgdGhlcmUgaXMgYSBmaWxlc3lzdGVtIHR5cGUgbWlzbWF0Y2gsIHRoZSB0YXNrIHdpbGwgZmFpbCB0byBzdGFydC5cbiAqICBUaGUgYXZhaWxhYmxlIExpbnV4IGZpbGVzeXN0ZW0gdHlwZXMgYXJl4oCoIGBgZXh0M2BgLCBgYGV4dDRgYCwgYW5kIGBgeGZzYGAuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGBgeGZzYGAgZmlsZXN5c3RlbSB0eXBlIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqICBUaGUgYXZhaWxhYmxlIFdpbmRvd3MgZmlsZXN5c3RlbSB0eXBlcyBhcmUgYGBOVEZTYGAuXG4gKi9cbkZpbGVzeXN0ZW1UeXBlPzogc3RyaW5nXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB2b2x1bWUgc2hvdWxkIGJlIGVuY3J5cHRlZC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCBlbmNyeXB0aW9uIGlzIHR1cm5lZCBvbiBieSBkZWZhdWx0LiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYEVuY3J5cHRlZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuRW5jcnlwdGVkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgdGhyb3VnaHB1dCB0byBwcm92aXNpb24gZm9yIGEgdm9sdW1lLCBpbiBNaUIvcywgd2l0aCBhIG1heGltdW0gb2YgMSwwMDAgTWlCL3MuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgVGhyb3VnaHB1dGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRoZSBgYGdwM2BgIHZvbHVtZSB0eXBlLlxuICovXG5UaHJvdWdocHV0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgSS9PIG9wZXJhdGlvbnMgcGVyIHNlY29uZCAoSU9QUykuIEZvciBgYGdwM2BgLCBgYGlvMWBgLCBhbmQgYGBpbzJgYCB2b2x1bWVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBJT1BTIHRoYXQgYXJlIHByb3Zpc2lvbmVkIGZvciB0aGUgdm9sdW1lLiBGb3IgYGBncDJgYCB2b2x1bWVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIGJhc2VsaW5lIHBlcmZvcm1hbmNlIG9mIHRoZSB2b2x1bWUgYW5kIHRoZSByYXRlIGF0IHdoaWNoIHRoZSB2b2x1bWUgYWNjdW11bGF0ZXMgSS9PIGNyZWRpdHMgZm9yIGJ1cnN0aW5nLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIGZvciBlYWNoIHZvbHVtZSB0eXBlLlxuICogICArICAgYGBncDNgYDogMywwMDAgLSAxNiwwMDAgSU9QU1xuICogICArICAgYGBpbzFgYDogMTAwIC0gNjQsMDAwIElPUFNcbiAqICAgKyAgIGBgaW8yYGA6IDEwMCAtIDI1NiwwMDAgSU9QU1xuICogICBcbiAqICBUaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgYGBpbzFgYCBhbmQgYGBpbzJgYCB2b2x1bWUgdHlwZXMuIFRoZSBkZWZhdWx0IGZvciBgYGdwM2BgIHZvbHVtZXMgaXMgYGAzLDAwMCBJT1BTYGAuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGBgc3QxYGAsIGBgc2MxYGAsIG9yIGBgc3RhbmRhcmRgYCB2b2x1bWUgdHlwZXMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBJb3BzYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5Jb3BzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBzaXplIG9mIHRoZSB2b2x1bWUgaW4gR2lCLiBZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIHZvbHVtZSBzaXplIG9yIGEgc25hcHNob3QgSUQuIElmIHlvdSBzcGVjaWZ5IGEgc25hcHNob3QgSUQsIHRoZSBzbmFwc2hvdCBzaXplIGlzIHVzZWQgZm9yIHRoZSB2b2x1bWUgc2l6ZSBieSBkZWZhdWx0LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhIHZvbHVtZSBzaXplIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc25hcHNob3Qgc2l6ZS4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBTaXplYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdm9sdW1lIHNpemUgdmFsdWVzIGZvciBlYWNoIHZvbHVtZSB0eXBlLlxuICogICArICAgYGBncDJgYCBhbmQgYGBncDNgYDogMS0xNiwzODRcbiAqICAgKyAgIGBgaW8xYGAgYW5kIGBgaW8yYGA6IDQtMTYsMzg0XG4gKiAgICsgICBgYHN0MWBgIGFuZCBgYHNjMWBgOiAxMjUtMTYsMzg0XG4gKiAgICsgICBgYHN0YW5kYXJkYGA6IDEtMSwwMjRcbiAqL1xuU2l6ZUluR2lCPzogbnVtYmVyXG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIElBTSByb2xlIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgdm9sdW1lLiBUaGlzIGlzIHRoZSBBbWF6b24gRUNTIGluZnJhc3RydWN0dXJlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBtYW5hZ2UgeW91ciBBV1MgaW5mcmFzdHJ1Y3R1cmUuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgQW1hem9uIEVDUy1tYW5hZ2VkIGBgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yVm9sdW1lc2BgIElBTSBwb2xpY3kgd2l0aCB0aGlzIHJvbGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2luZnJhc3RydWN0dXJlX0lBTV9yb2xlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDUyBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHRhZyBzcGVjaWZpY2F0aW9ucyBvZiBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFQlNUYWdTcGVjaWZpY2F0aW9uIHtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHByb3BhZ2F0ZSB0aGUgdGFncyBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gdG8g4oCodGhlIEFtYXpvbiBFQlMgdm9sdW1lLiBUYWdzIGNhbiBvbmx5IHByb3BhZ2F0ZSB0byBhIGBgU0VSVklDRWBgIHNwZWNpZmllZCBpbiDigKhgYFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uYGAuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIHRhZ3MgYXJlbid0IOKAqHByb3BhZ2F0ZWQuXG4gKi9cblByb3BhZ2F0ZVRhZ3M/OiAoXCJTRVJWSUNFXCIgfCBcIlRBU0tfREVGSU5JVElPTlwiKVxuLyoqXG4gKiBUaGUgdHlwZSBvZiB2b2x1bWUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlVHlwZTogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIGFwcGxpZWQgdG8gdGhpcyBBbWF6b24gRUJTIHZvbHVtZS4gYGBBbWF6b25FQ1NDcmVhdGVkYGAgYW5kIGBgQW1hem9uRUNTTWFuYWdlZGBgIGFyZSByZXNlcnZlZCB0YWdzIHRoYXQgY2FuJ3QgYmUgdXNlZC5cbiAqL1xuVGFncz86IFRhZ1tdXG59XG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byBhIHJlc291cmNlIHRvIGhlbHAgeW91IGNhdGVnb3JpemUgYW5kIG9yZ2FuaXplIHRoZW0uIEVhY2ggdGFnIGNvbnNpc3RzIG9mIGEga2V5IGFuZCBhbiBvcHRpb25hbCB2YWx1ZS4gWW91IGRlZmluZSB0aGVtLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVGhlIG9wdGlvbmFsIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGB2YWx1ZWBgIGFjdHMgYXMgYSBkZXNjcmlwdG9yIHdpdGhpbiBhIHRhZyBjYXRlZ29yeSAoa2V5KS5cbiAqL1xuVmFsdWU/OiBzdHJpbmdcbi8qKlxuICogT25lIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGBrZXlgYCBpcyBhIGdlbmVyYWwgbGFiZWwgdGhhdCBhY3RzIGxpa2UgYSBjYXRlZ29yeSBmb3IgbW9yZSBzcGVjaWZpYyB0YWcgdmFsdWVzLlxuICovXG5LZXk/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRldGFpbHMgb2YgYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS4gQSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBjYW4gYmUgc2V0IHdoZW4gdXNpbmcgdGhlIGBgUnVuVGFza2BgIG9yIGBgQ3JlYXRlU2VydmljZWBgIEFQSXMgb3IgYXMgdGhlIGRlZmF1bHQgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgZm9yIGEgY2x1c3RlciB3aXRoIHRoZSBgYENyZWF0ZUNsdXN0ZXJgYCBBUEkuXG4gKiAgT25seSBjYXBhY2l0eSBwcm92aWRlcnMgdGhhdCBhcmUgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBjbHVzdGVyIGFuZCBoYXZlIGFuIGBgQUNUSVZFYGAgb3IgYGBVUERBVElOR2BgIHN0YXR1cyBjYW4gYmUgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LiBUaGUgYGBQdXRDbHVzdGVyQ2FwYWNpdHlQcm92aWRlcnNgYCBBUEkgaXMgdXNlZCB0byBhc3NvY2lhdGUgYSBjYXBhY2l0eSBwcm92aWRlciB3aXRoIGEgY2x1c3Rlci5cbiAqICBJZiBzcGVjaWZ5aW5nIGEgY2FwYWNpdHkgcHJvdmlkZXIgdGhhdCB1c2VzIGFuIEF1dG8gU2NhbGluZyBncm91cCwgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIG11c3QgYWxyZWFkeSBiZSBjcmVhdGVkLiBOZXcgQXV0byBTY2FsaW5nIGdyb3VwIGNhcGFjaXR5IHByb3ZpZGVycyBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBgYENyZWF0ZUNhcGFjaXR5UHJvdmlkZXJgYCBBUEkgb3BlcmF0aW9uLlxuICogIFRvIHVzZSBhbiBGQVJHQVRFbG9uZyBjYXBhY2l0eSBwcm92aWRlciwgc3BlY2lmeSBlaXRoZXIgdGhlIGBgRkFSR0FURWBgIG9yIGBgRkFSR0FURV9TUE9UYGAgY2FwYWNpdHkgcHJvdmlkZXJzLiBUaGUgRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgdG8gYWxsIGFjY291bnRzIGFuZCBvbmx5IG5lZWQgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciB0byBiZSB1c2VkIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbSB7XG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBjYXBhY2l0eSBwcm92aWRlci5cbiAqL1xuQ2FwYWNpdHlQcm92aWRlcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgKmJhc2UqIHZhbHVlIGRlc2lnbmF0ZXMgaG93IG1hbnkgdGFza3MsIGF0IGEgbWluaW11bSwgdG8gcnVuIG9uIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgcHJvdmlkZXIuIE9ubHkgb25lIGNhcGFjaXR5IHByb3ZpZGVyIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGhhdmUgYSAqYmFzZSogZGVmaW5lZC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLlxuICovXG5CYXNlPzogbnVtYmVyXG4vKipcbiAqIFRoZSAqd2VpZ2h0KiB2YWx1ZSBkZXNpZ25hdGVzIHRoZSByZWxhdGl2ZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgdGFza3MgbGF1bmNoZWQgdGhhdCBzaG91bGQgdXNlIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgcHJvdmlkZXIuIFRoZSBgYHdlaWdodGBgIHZhbHVlIGlzIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBhZnRlciB0aGUgYGBiYXNlYGAgdmFsdWUsIGlmIGRlZmluZWQsIGlzIHNhdGlzZmllZC5cbiAqICBJZiBubyBgYHdlaWdodGBgIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC4gV2hlbiBtdWx0aXBsZSBjYXBhY2l0eSBwcm92aWRlcnMgYXJlIHNwZWNpZmllZCB3aXRoaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBjYXBhY2l0eSBwcm92aWRlcnMgbXVzdCBoYXZlIGEgd2VpZ2h0IHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBhbnkgY2FwYWNpdHkgcHJvdmlkZXJzIHdpdGggYSB3ZWlnaHQgb2YgYGAwYGAgY2FuJ3QgYmUgdXNlZCB0byBwbGFjZSB0YXNrcy4gSWYgeW91IHNwZWNpZnkgbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGluIGEgc3RyYXRlZ3kgdGhhdCBhbGwgaGF2ZSBhIHdlaWdodCBvZiBgYDBgYCwgYW55IGBgUnVuVGFza2BgIG9yIGBgQ3JlYXRlU2VydmljZWBgIGFjdGlvbnMgdXNpbmcgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHdpbGwgZmFpbC5cbiAqICBBbiBleGFtcGxlIHNjZW5hcmlvIGZvciB1c2luZyB3ZWlnaHRzIGlzIGRlZmluaW5nIGEgc3RyYXRlZ3kgdGhhdCBjb250YWlucyB0d28gY2FwYWNpdHkgcHJvdmlkZXJzIGFuZCBib3RoIGhhdmUgYSB3ZWlnaHQgb2YgYGAxYGAsIHRoZW4gd2hlbiB0aGUgYGBiYXNlYGAgaXMgc2F0aXNmaWVkLCB0aGUgdGFza3Mgd2lsbCBiZSBzcGxpdCBldmVubHkgYWNyb3NzIHRoZSB0d28gY2FwYWNpdHkgcHJvdmlkZXJzLiBVc2luZyB0aGF0IHNhbWUgbG9naWMsIGlmIHlvdSBzcGVjaWZ5IGEgd2VpZ2h0IG9mIGBgMWBgIGZvciAqY2FwYWNpdHlQcm92aWRlckEqIGFuZCBhIHdlaWdodCBvZiBgYDRgYCBmb3IgKmNhcGFjaXR5UHJvdmlkZXJCKiwgdGhlbiBmb3IgZXZlcnkgb25lIHRhc2sgdGhhdCdzIHJ1biB1c2luZyAqY2FwYWNpdHlQcm92aWRlckEqLCBmb3VyIHRhc2tzIHdvdWxkIHVzZSAqY2FwYWNpdHlQcm92aWRlckIqLlxuICovXG5XZWlnaHQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciB0YXNrIGRlZmluaXRpb25zIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSB0byByZWNlaXZlIHRoZWlyIG93biBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBhbmQgaXQgaXMgbm90IHN1cHBvcnRlZCBmb3Igb3RoZXIgbmV0d29yayBtb2Rlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBOZXR3b3JraW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLW5ldHdvcmtpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtDb25maWd1cmF0aW9uIHtcbkF3c3ZwY0NvbmZpZ3VyYXRpb24/OiBBd3NWcGNDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSBWUEMgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIHRhc2suXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzVnBjQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHNlY3VyaXR5IGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2sgb3Igc2VydmljZS4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBzZWN1cml0eSBncm91cCwgdGhlIGRlZmF1bHQgc2VjdXJpdHkgZ3JvdXAgZm9yIHRoZSBWUEMgaXMgdXNlZC4gVGhlcmUncyBhIGxpbWl0IG9mIDUgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBwZXIgYGBhd3N2cGNDb25maWd1cmF0aW9uYGAuXG4gKiAgIEFsbCBzcGVjaWZpZWQgc2VjdXJpdHkgZ3JvdXBzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cblNlY3VyaXR5R3JvdXBzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIElEcyBvZiB0aGUgc3VibmV0cyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2sgb3Igc2VydmljZS4gVGhlcmUncyBhIGxpbWl0IG9mIDE2IHN1Ym5ldHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIHBlciBgYGF3c3ZwY0NvbmZpZ3VyYXRpb25gYC5cbiAqICAgQWxsIHNwZWNpZmllZCBzdWJuZXRzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cblN1Ym5ldHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHRoZSB0YXNrJ3MgZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSByZWNlaXZlcyBhIHB1YmxpYyBJUCBhZGRyZXNzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgYEVOQUJMRURgYC5cbiAqL1xuQXNzaWduUHVibGljSXA/OiAoXCJESVNBQkxFRFwiIHwgXCJFTkFCTEVEXCIpXG59XG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb25zdHJhaW50IG9uIHRhc2sgcGxhY2VtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIHBsYWNlbWVudCBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtY29uc3RyYWludHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3UncmUgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGFyZW4ndCBzdXBwb3J0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50Q29uc3RyYWludCB7XG4vKipcbiAqIFRoZSB0eXBlIG9mIGNvbnN0cmFpbnQuIFVzZSBgYGRpc3RpbmN0SW5zdGFuY2VgYCB0byBlbnN1cmUgdGhhdCBlYWNoIHRhc2sgaW4gYSBwYXJ0aWN1bGFyIGdyb3VwIGlzIHJ1bm5pbmcgb24gYSBkaWZmZXJlbnQgY29udGFpbmVyIGluc3RhbmNlLiBVc2UgYGBtZW1iZXJPZmBgIHRvIHJlc3RyaWN0IHRoZSBzZWxlY3Rpb24gdG8gYSBncm91cCBvZiB2YWxpZCBjYW5kaWRhdGVzLlxuICovXG5UeXBlOiAoXCJkaXN0aW5jdEluc3RhbmNlXCIgfCBcIm1lbWJlck9mXCIpXG4vKipcbiAqIEEgY2x1c3RlciBxdWVyeSBsYW5ndWFnZSBleHByZXNzaW9uIHRvIGFwcGx5IHRvIHRoZSBjb25zdHJhaW50LiBUaGUgZXhwcmVzc2lvbiBjYW4gaGF2ZSBhIG1heGltdW0gbGVuZ3RoIG9mIDIwMDAgY2hhcmFjdGVycy4gWW91IGNhbid0IHNwZWNpZnkgYW4gZXhwcmVzc2lvbiBpZiB0aGUgY29uc3RyYWludCB0eXBlIGlzIGBgZGlzdGluY3RJbnN0YW5jZWBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDbHVzdGVyIHF1ZXJ5IGxhbmd1YWdlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jbHVzdGVyLXF1ZXJ5LWxhbmd1YWdlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRXhwcmVzc2lvbj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYGBMb2FkQmFsYW5jZXJgYCBwcm9wZXJ0eSBzcGVjaWZpZXMgZGV0YWlscyBvbiBhIGxvYWQgYmFsYW5jZXIgdGhhdCBpcyB1c2VkIHdpdGggYSBzZXJ2aWNlLlxuICogIElmIHRoZSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB0aGUgc2VydmljZSBpcyByZXF1aXJlZCB0byB1c2UgZWl0aGVyIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBXaGVuIHlvdSBhcmUgY3JlYXRpbmcgYW4gQUNEbG9uZyBkZXBsb3ltZW50IGdyb3VwLCB5b3Ugc3BlY2lmeSB0d28gdGFyZ2V0IGdyb3VwcyAocmVmZXJyZWQgdG8gYXMgYSBgYHRhcmdldEdyb3VwUGFpcmBgKS4gRWFjaCB0YXJnZXQgZ3JvdXAgYmluZHMgdG8gYSBzZXBhcmF0ZSB0YXNrIHNldCBpbiB0aGUgZGVwbG95bWVudC4gVGhlIGxvYWQgYmFsYW5jZXIgY2FuIGFsc28gaGF2ZSB1cCB0byB0d28gbGlzdGVuZXJzLCBhIHJlcXVpcmVkIGxpc3RlbmVyIGZvciBwcm9kdWN0aW9uIHRyYWZmaWMgYW5kIGFuIG9wdGlvbmFsIGxpc3RlbmVyIHRoYXQgYWxsb3dzIHlvdSB0byB0ZXN0IG5ldyByZXZpc2lvbnMgb2YgdGhlIHNlcnZpY2UgYmVmb3JlIHJvdXRpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIGl0LlxuICogIFNlcnZpY2VzIHdpdGggdGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIChmb3IgZXhhbXBsZSwgdGhvc2Ugd2l0aCB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSkgb25seSBzdXBwb3J0IEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzIGFuZCBOZXR3b3JrIExvYWQgQmFsYW5jZXJzLiBDbGFzc2ljIExvYWQgQmFsYW5jZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiBBbHNvLCB3aGVuIHlvdSBjcmVhdGUgYW55IHRhcmdldCBncm91cHMgZm9yIHRoZXNlIHNlcnZpY2VzLCB5b3UgbXVzdCBjaG9vc2UgYGBpcGBgIGFzIHRoZSB0YXJnZXQgdHlwZSwgbm90IGBgaW5zdGFuY2VgYC4gVGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgbm90IGFuIEFtYXpvbiBFQzIgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyIHtcbi8qKlxuICogVGhlIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgdGFyZ2V0IGdyb3VwIG9yIGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggYSBzZXJ2aWNlIG9yIHRhc2sgc2V0LlxuICogIEEgdGFyZ2V0IGdyb3VwIEFSTiBpcyBvbmx5IHNwZWNpZmllZCB3aGVuIHVzaW5nIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBcbiAqICBGb3Igc2VydmljZXMgdXNpbmcgdGhlIGBgRUNTYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UgY2FuIHNwZWNpZnkgb25lIG9yIG11bHRpcGxlIHRhcmdldCBncm91cHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JlZ2lzdGVyaW5nIG11bHRpcGxlIHRhcmdldCBncm91cHMgd2l0aCBhIHNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3JlZ2lzdGVyLW11bHRpcGxlLXRhcmdldGdyb3Vwcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIHNlcnZpY2VzIHVzaW5nIHRoZSBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UncmUgcmVxdWlyZWQgdG8gZGVmaW5lIHR3byB0YXJnZXQgZ3JvdXBzIGZvciB0aGUgbG9hZCBiYWxhbmNlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQmx1ZS9ncmVlbiBkZXBsb3ltZW50IHdpdGggQ29kZURlcGxveV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWJsdWVncmVlbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc2VydmljZSdzIHRhc2sgZGVmaW5pdGlvbiB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSwgeW91IG11c3QgY2hvb3NlIGBgaXBgYCBhcyB0aGUgdGFyZ2V0IHR5cGUsIG5vdCBgYGluc3RhbmNlYGAuIERvIHRoaXMgd2hlbiBjcmVhdGluZyB5b3VyIHRhcmdldCBncm91cHMgYmVjYXVzZSB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS4gVGhpcyBuZXR3b3JrIG1vZGUgaXMgcmVxdWlyZWQgZm9yIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLlxuICovXG5UYXJnZXRHcm91cEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbG9hZCBiYWxhbmNlciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIG9yIHRhc2sgc2V0LlxuICogIElmIHlvdSBhcmUgdXNpbmcgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBhIE5ldHdvcmsgTG9hZCBCYWxhbmNlciB0aGUgbG9hZCBiYWxhbmNlciBuYW1lIHBhcmFtZXRlciBzaG91bGQgYmUgb21pdHRlZC5cbiAqL1xuTG9hZEJhbGFuY2VyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIChhcyBpdCBhcHBlYXJzIGluIGEgY29udGFpbmVyIGRlZmluaXRpb24pIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLlxuICogIFlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGNvbnRhaW5lciBuYW1lIHdoZW4gY29uZmlndXJpbmcgdGhlIHRhcmdldCBncm91cCBmb3IgYW4gQW1hem9uIEVDUyBsb2FkIGJhbGFuY2VyLlxuICovXG5Db250YWluZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwb3J0IG9uIHRoZSBjb250YWluZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuIFRoaXMgcG9ydCBtdXN0IGNvcnJlc3BvbmQgdG8gYSBgYGNvbnRhaW5lclBvcnRgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBhcmUgdXNpbmcuIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgY29udGFpbmVyIGluc3RhbmNlIHRoZXkncmUgbGF1bmNoZWQgb24gbXVzdCBhbGxvdyBpbmdyZXNzIHRyYWZmaWMgb24gdGhlIGBgaG9zdFBvcnRgYCBvZiB0aGUgcG9ydCBtYXBwaW5nLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHNlcnZpY2UgdG8gZGlzY292ZXIgYW5kIGNvbm5lY3QgdG8gc2VydmljZXMsIGFuZCBiZSBkaXNjb3ZlcmVkIGJ5LCBhbmQgY29ubmVjdGVkIGZyb20sIG90aGVyIHNlcnZpY2VzIHdpdGhpbiBhIG5hbWVzcGFjZS5cbiAqICBUYXNrcyB0aGF0IHJ1biBpbiBhIG5hbWVzcGFjZSBjYW4gdXNlIHNob3J0IG5hbWVzIHRvIGNvbm5lY3QgdG8gc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY2FuIGNvbm5lY3QgdG8gc2VydmljZXMgYWNyb3NzIGFsbCBvZiB0aGUgY2x1c3RlcnMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY29ubmVjdCB0aHJvdWdoIGEgbWFuYWdlZCBwcm94eSBjb250YWluZXIgdGhhdCBjb2xsZWN0cyBsb2dzIGFuZCBtZXRyaWNzIGZvciBpbmNyZWFzZWQgdmlzaWJpbGl0eS4gT25seSB0aGUgdGFza3MgdGhhdCBBbWF6b24gRUNTIHNlcnZpY2VzIGNyZWF0ZSBhcmUgc3VwcG9ydGVkIHdpdGggU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGxpc3Qgb2YgU2VydmljZSBDb25uZWN0IHNlcnZpY2Ugb2JqZWN0cy4gVGhlc2UgYXJlIG5hbWVzIGFuZCBhbGlhc2VzIChhbHNvIGtub3duIGFzIGVuZHBvaW50cykgdGhhdCBhcmUgdXNlZCBieSBvdGhlciBBbWF6b24gRUNTIHNlcnZpY2VzIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLiBcbiAqICBUaGlzIGZpZWxkIGlzIG5vdCByZXF1aXJlZCBmb3IgYSBcImNsaWVudFwiIEFtYXpvbiBFQ1Mgc2VydmljZSB0aGF0J3MgYSBtZW1iZXIgb2YgYSBuYW1lc3BhY2Ugb25seSB0byBjb25uZWN0IHRvIG90aGVyIHNlcnZpY2VzIHdpdGhpbiB0aGUgbmFtZXNwYWNlLiBBbiBleGFtcGxlIG9mIHRoaXMgd291bGQgYmUgYSBmcm9udGVuZCBhcHBsaWNhdGlvbiB0aGF0IGFjY2VwdHMgaW5jb21pbmcgcmVxdWVzdHMgZnJvbSBlaXRoZXIgYSBsb2FkIGJhbGFuY2VyIHRoYXQncyBhdHRhY2hlZCB0byB0aGUgc2VydmljZSBvciBieSBvdGhlciBtZWFucy5cbiAqICBBbiBvYmplY3Qgc2VsZWN0cyBhIHBvcnQgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLCBhc3NpZ25zIGEgbmFtZSBmb3IgdGhlIENNQVBsb25nIHNlcnZpY2UsIGFuZCBhIGxpc3Qgb2YgYWxpYXNlcyAoZW5kcG9pbnRzKSBhbmQgcG9ydHMgZm9yIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gcmVmZXIgdG8gdGhpcyBzZXJ2aWNlLlxuICovXG5TZXJ2aWNlcz86IFNlcnZpY2VDb25uZWN0U2VydmljZVtdXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHVzZSBTZXJ2aWNlIENvbm5lY3Qgd2l0aCB0aGlzIHNlcnZpY2UuXG4gKi9cbkVuYWJsZWQ6IGJvb2xlYW5cbkxvZ0NvbmZpZ3VyYXRpb24/OiBMb2dDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBuYW1lc3BhY2UgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBDTUFQbG9uZyBuYW1lc3BhY2UgZm9yIHVzZSB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gVGhlIG5hbWVzcGFjZSBtdXN0IGJlIGluIHRoZSBzYW1lIEFXUyBSZWdpb24gYXMgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBhbmQgY2x1c3Rlci4gVGhlIHR5cGUgb2YgbmFtZXNwYWNlIGRvZXNuJ3QgYWZmZWN0IFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ01BUGxvbmcsIHNlZSBbV29ya2luZyB3aXRoIFNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9kZy93b3JraW5nLXdpdGgtc2VydmljZXMuaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5OYW1lc3BhY2U/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlIG9iamVjdCBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RTZXJ2aWNlIHtcblRpbWVvdXQ/OiBUaW1lb3V0Q29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgcG9ydCBudW1iZXIgZm9yIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkgdG8gbGlzdGVuIG9uLlxuICogIFVzZSB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCB0byBieXBhc3MgdGhlIHByb3h5IGZvciB0cmFmZmljIG9uIHRoZSBwb3J0IG51bWJlciBzcGVjaWZpZWQgaW4gdGhlIG5hbWVkIGBgcG9ydE1hcHBpbmdgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIG9mIHRoaXMgYXBwbGljYXRpb24sIGFuZCB0aGVuIHVzZSBpdCBpbiB5b3VyIFZQQyBzZWN1cml0eSBncm91cHMgdG8gYWxsb3cgdHJhZmZpYyBpbnRvIHRoZSBwcm94eSBmb3IgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKiAgSW4gYGBhd3N2cGNgYCBtb2RlIGFuZCBGYXJnYXRlLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgY29udGFpbmVyIHBvcnQgbnVtYmVyLiBUaGUgY29udGFpbmVyIHBvcnQgbnVtYmVyIGlzIGluIHRoZSBgYHBvcnRNYXBwaW5nYGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSW4gYnJpZGdlIG1vZGUsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBlcGhlbWVyYWwgcG9ydCBvZiB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5LlxuICovXG5JbmdyZXNzUG9ydE92ZXJyaWRlPzogbnVtYmVyXG4vKipcbiAqIFRoZSBsaXN0IG9mIGNsaWVudCBhbGlhc2VzIGZvciB0aGlzIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlLiBZb3UgdXNlIHRoZXNlIHRvIGFzc2lnbiBuYW1lcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbnMuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjbGllbnQgYWxpYXNlcyB0aGF0IHlvdSBjYW4gaGF2ZSBpbiB0aGlzIGxpc3QgaXMgMS5cbiAqICBFYWNoIGFsaWFzIChcImVuZHBvaW50XCIpIGlzIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgYW5kIHBvcnQgbnVtYmVyIHRoYXQgb3RoZXIgQW1hem9uIEVDUyB0YXNrcyAoXCJjbGllbnRzXCIpIGNhbiB1c2UgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuXG4gKiAgRWFjaCBuYW1lIGFuZCBwb3J0IG1hcHBpbmcgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBuYW1lc3BhY2UuXG4gKiAgRm9yIGVhY2ggYGBTZXJ2aWNlQ29ubmVjdFNlcnZpY2VgYCwgeW91IG11c3QgcHJvdmlkZSBhdCBsZWFzdCBvbmUgYGBjbGllbnRBbGlhc2BgIHdpdGggb25lIGBgcG9ydGBgLlxuICovXG5DbGllbnRBbGlhc2VzPzogU2VydmljZUNvbm5lY3RDbGllbnRBbGlhc1tdXG5UbHM/OiBTZXJ2aWNlQ29ubmVjdFRsc0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzIHRoZSBuYW1lIG9mIHRoZSBuZXcgQ01BUCBzZXJ2aWNlIHRoYXQgQW1hem9uIEVDUyBjcmVhdGVzIGZvciB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS4gVGhpcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIENNQVAgbmFtZXNwYWNlLiBUaGUgbmFtZSBjYW4gY29udGFpbiB1cCB0byA2NCBjaGFyYWN0ZXJzLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSBsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMgKF8pLCBhbmQgaHlwaGVucyAoLSkuIFRoZSBuYW1lIGNhbid0IHN0YXJ0IHdpdGggYSBoeXBoZW4uXG4gKiAgSWYgdGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzbid0IHNwZWNpZmllZCwgdGhlIHBvcnQgbWFwcGluZyBuYW1lIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiBpcyB1c2VkIGluIGBgcG9ydE5hbWUubmFtZXNwYWNlYGAuXG4gKi9cbkRpc2NvdmVyeU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgcG9ydE5hbWVgYCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGUgYGBwb3J0TWFwcGluZ3NgYCBmcm9tIGFsbCB0aGUgY29udGFpbmVycyBpbiB0aGUgdGFzayBkZWZpbml0aW9uIG9mIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLlxuICovXG5Qb3J0TmFtZTogc3RyaW5nXG59XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGNvbmZpZ3VyZWQgdGltZW91dHMgZm9yIFNlcnZpY2UgQ29ubmVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lb3V0Q29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSB3YWl0aW5nIGZvciB0aGUgdXBzdHJlYW0gdG8gcmVzcG9uZCB3aXRoIGEgY29tcGxldGUgcmVzcG9uc2UgcGVyIHJlcXVlc3QuIEEgdmFsdWUgb2YgYGAwYGAgY2FuIGJlIHNldCB0byBkaXNhYmxlIGBgcGVyUmVxdWVzdFRpbWVvdXRgYC4gYGBwZXJSZXF1ZXN0VGltZW91dGBgIGNhbiBvbmx5IGJlIHNldCBpZiBTZXJ2aWNlIENvbm5lY3QgYGBhcHBQcm90b2NvbGBgIGlzbid0IGBgVENQYGAuIE9ubHkgYGBpZGxlVGltZW91dGBgIGlzIGFsbG93ZWQgZm9yIGBgVENQYGAgYGBhcHBQcm90b2NvbGBgLlxuICovXG5QZXJSZXF1ZXN0VGltZW91dFNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgYSBjb25uZWN0aW9uIHdpbGwgc3RheSBhY3RpdmUgd2hpbGUgaWRsZS4gQSB2YWx1ZSBvZiBgYDBgYCBjYW4gYmUgc2V0IHRvIGRpc2FibGUgYGBpZGxlVGltZW91dGBgLlxuICogIFRoZSBgYGlkbGVUaW1lb3V0YGAgZGVmYXVsdCBmb3IgYGBIVFRQYGAvYGBIVFRQMmBgL2BgR1JQQ2BgIGlzIDUgbWludXRlcy5cbiAqICBUaGUgYGBpZGxlVGltZW91dGBgIGRlZmF1bHQgZm9yIGBgVENQYGAgaXMgMSBob3VyLlxuICovXG5JZGxlVGltZW91dFNlY29uZHM/OiBudW1iZXJcbn1cbi8qKlxuICogRWFjaCBhbGlhcyAoXCJlbmRwb2ludFwiKSBpcyBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGFuZCBwb3J0IG51bWJlciB0aGF0IG90aGVyIHRhc2tzIChcImNsaWVudHNcIikgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS5cbiAqICBFYWNoIG5hbWUgYW5kIHBvcnQgbWFwcGluZyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZS5cbiAqICBUYXNrcyB0aGF0IHJ1biBpbiBhIG5hbWVzcGFjZSBjYW4gdXNlIHNob3J0IG5hbWVzIHRvIGNvbm5lY3QgdG8gc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY2FuIGNvbm5lY3QgdG8gc2VydmljZXMgYWNyb3NzIGFsbCBvZiB0aGUgY2x1c3RlcnMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY29ubmVjdCB0aHJvdWdoIGEgbWFuYWdlZCBwcm94eSBjb250YWluZXIgdGhhdCBjb2xsZWN0cyBsb2dzIGFuZCBtZXRyaWNzIGZvciBpbmNyZWFzZWQgdmlzaWJpbGl0eS4gT25seSB0aGUgdGFza3MgdGhhdCBBbWF6b24gRUNTIHNlcnZpY2VzIGNyZWF0ZSBhcmUgc3VwcG9ydGVkIHdpdGggU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RDbGllbnRBbGlhcyB7XG4vKipcbiAqIFRoZSBgYGRuc05hbWVgYCBpcyB0aGUgbmFtZSB0aGF0IHlvdSB1c2UgaW4gdGhlIGFwcGxpY2F0aW9ucyBvZiBjbGllbnQgdGFza3MgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuIFRoZSBuYW1lIG11c3QgYmUgYSB2YWxpZCBETlMgbmFtZSBidXQgZG9lc24ndCBuZWVkIHRvIGJlIGZ1bGx5LXF1YWxpZmllZC4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgdXAgdG8gMTI3IGNoYXJhY3RlcnMuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcyAoXyksIGh5cGhlbnMgKC0pLCBhbmQgcGVyaW9kcyAoLikuIFRoZSBuYW1lIGNhbid0IHN0YXJ0IHdpdGggYSBoeXBoZW4uXG4gKiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYGRpc2NvdmVyeU5hbWUubmFtZXNwYWNlYGAgaXMgdXNlZC4gSWYgdGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzbid0IHNwZWNpZmllZCwgdGhlIHBvcnQgbWFwcGluZyBuYW1lIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiBpcyB1c2VkIGluIGBgcG9ydE5hbWUubmFtZXNwYWNlYGAuXG4gKiAgVG8gYXZvaWQgY2hhbmdpbmcgeW91ciBhcHBsaWNhdGlvbnMgaW4gY2xpZW50IEFtYXpvbiBFQ1Mgc2VydmljZXMsIHNldCB0aGlzIHRvIHRoZSBzYW1lIG5hbWUgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHVzZXMgYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIGEgZmV3IGNvbW1vbiBuYW1lcyBhcmUgYGBkYXRhYmFzZWBgLCBgYGRiYGAsIG9yIHRoZSBsb3dlcmNhc2UgbmFtZSBvZiBhIGRhdGFiYXNlLCBzdWNoIGFzIGBgbXlzcWxgYCBvciBgYHJlZGlzYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRG5zTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlzdGVuaW5nIHBvcnQgbnVtYmVyIGZvciB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5LiBUaGlzIHBvcnQgaXMgYXZhaWxhYmxlIGluc2lkZSBvZiBhbGwgb2YgdGhlIHRhc2tzIHdpdGhpbiB0aGUgc2FtZSBuYW1lc3BhY2UuXG4gKiAgVG8gYXZvaWQgY2hhbmdpbmcgeW91ciBhcHBsaWNhdGlvbnMgaW4gY2xpZW50IEFtYXpvbiBFQ1Mgc2VydmljZXMsIHNldCB0aGlzIHRvIHRoZSBzYW1lIHBvcnQgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHVzZXMgYnkgZGVmYXVsdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Qb3J0OiBudW1iZXJcbn1cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0VGxzQ29uZmlndXJhdGlvbiB7XG5Jc3N1ZXJDZXJ0aWZpY2F0ZUF1dGhvcml0eTogU2VydmljZUNvbm5lY3RUbHNDZXJ0aWZpY2F0ZUF1dGhvcml0eVxuLyoqXG4gKiBUaGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5LlxuICovXG5LbXNLZXk/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBTZXJ2aWNlIENvbm5lY3QgVExTLlxuICovXG5Sb2xlQXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBzaWduZXIgY2VydGlmaWNhdGUgYXV0aG9yaXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0VGxzQ2VydGlmaWNhdGVBdXRob3JpdHkge1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgY2VydGlmaWNhdGUuXG4gKi9cbkF3c1BjYUF1dGhvcml0eUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBMb2dDb25maWdgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS1sb2ctZHJpdmVyYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgQnkgZGVmYXVsdCwgY29udGFpbmVycyB1c2UgdGhlIHNhbWUgbG9nZ2luZyBkcml2ZXIgdGhhdCB0aGUgRG9ja2VyIGRhZW1vbiB1c2VzLiBIb3dldmVyLCB0aGUgY29udGFpbmVyIG1pZ2h0IHVzZSBhIGRpZmZlcmVudCBsb2dnaW5nIGRyaXZlciB0aGFuIHRoZSBEb2NrZXIgZGFlbW9uIGJ5IHNwZWNpZnlpbmcgYSBsb2cgZHJpdmVyIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGNvbnRhaW5lciBkZWZpbml0aW9uLlxuICogIFVuZGVyc3RhbmQgdGhlIGZvbGxvd2luZyB3aGVuIHNwZWNpZnlpbmcgYSBsb2cgY29uZmlndXJhdGlvbiBmb3IgeW91ciBjb250YWluZXJzLlxuICogICArICBBbWF6b24gRUNTIGN1cnJlbnRseSBzdXBwb3J0cyBhIHN1YnNldCBvZiB0aGUgbG9nZ2luZyBkcml2ZXJzIGF2YWlsYWJsZSB0byB0aGUgRG9ja2VyIGRhZW1vbi4gQWRkaXRpb25hbCBsb2cgZHJpdmVycyBtYXkgYmUgYXZhaWxhYmxlIGluIGZ1dHVyZSByZWxlYXNlcyBvZiB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQuXG4gKiAgRm9yIHRhc2tzIG9uIEZBUkdBVEVsb25nLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgdGFza3MgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBmbHVlbnRkYGAsIGBgZ2VsZmBgLCBgYGpzb24tZmlsZWBgLCBgYGpvdXJuYWxkYGAsYGBzeXNsb2dgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICAgKyAgVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjE4IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLlxuICogICArICBGb3IgdGFza3MgdGhhdCBhcmUgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgbXVzdCByZWdpc3RlciB0aGUgYXZhaWxhYmxlIGxvZ2dpbmcgZHJpdmVycyB3aXRoIHRoZSBgYEVDU19BVkFJTEFCTEVfTE9HR0lOR19EUklWRVJTYGAgZW52aXJvbm1lbnQgdmFyaWFibGUgYmVmb3JlIGNvbnRhaW5lcnMgcGxhY2VkIG9uIHRoYXQgaW5zdGFuY2UgY2FuIHVzZSB0aGVzZSBsb2cgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBjb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtYWdlbnQtY29uZmlnLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgKyAgRm9yIHRhc2tzIHRoYXQgYXJlIG9uIEZBUkdBVEVsb25nLCBiZWNhdXNlIHlvdSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSB5b3VyIHRhc2tzIGFyZSBob3N0ZWQgb24sIGFueSBhZGRpdGlvbmFsIHNvZnR3YXJlIG5lZWRlZCBtdXN0IGJlIGluc3RhbGxlZCBvdXRzaWRlIG9mIHRoZSB0YXNrLiBGb3IgZXhhbXBsZSwgdGhlIEZsdWVudGQgb3V0cHV0IGFnZ3JlZ2F0b3JzIG9yIGEgcmVtb3RlIGhvc3QgcnVubmluZyBMb2dzdGFzaCB0byBzZW5kIEdlbGYgbG9ncyB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIHNlY3JldHMgdG8gcGFzcyB0byB0aGUgbG9nIGNvbmZpZ3VyYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgc2Vuc2l0aXZlIGRhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5TZWNyZXRPcHRpb25zPzogU2VjcmV0W11cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZW5kIHRvIHRoZSBsb2cgZHJpdmVyLlxuICogIFRoZSBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSBkZXBlbmQgb24gdGhlIGxvZyBkcml2ZXIuIFNvbWUgb2YgdGhlIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IHdoZW4geW91IHVzZSB0aGUgYGBhd3Nsb2dzYGAgbG9nIGRyaXZlciB0byByb3V0ZSBsb2dzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIGluY2x1ZGUgdGhlIGZvbGxvd2luZzpcbiAqICAgKyBhd3Nsb2dzLWNyZWF0ZS1ncm91cCBSZXF1aXJlZDogTm8gU3BlY2lmeSB3aGV0aGVyIHlvdSB3YW50IHRoZSBsb2cgZ3JvdXAgdG8gYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LiBJZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGZhbHNlLiBZb3VyIElBTSBwb2xpY3kgbXVzdCBpbmNsdWRlIHRoZSBsb2dzOkNyZWF0ZUxvZ0dyb3VwIHBlcm1pc3Npb24gYmVmb3JlIHlvdSBhdHRlbXB0IHRvIHVzZSBhd3Nsb2dzLWNyZWF0ZS1ncm91cC4gKyBhd3Nsb2dzLXJlZ2lvbiBSZXF1aXJlZDogWWVzIFNwZWNpZnkgdGhlIFJlZ2lvbiB0aGF0IHRoZSBhd3Nsb2dzIGxvZyBkcml2ZXIgaXMgdG8gc2VuZCB5b3VyIERvY2tlciBsb2dzIHRvLiBZb3UgY2FuIGNob29zZSB0byBzZW5kIGFsbCBvZiB5b3VyIGxvZ3MgZnJvbSBjbHVzdGVycyBpbiBkaWZmZXJlbnQgUmVnaW9ucyB0byBhIHNpbmdsZSByZWdpb24gaW4gQ2xvdWRXYXRjaCBMb2dzLiBUaGlzIGlzIHNvIHRoYXQgdGhleSdyZSBhbGwgdmlzaWJsZSBpbiBvbmUgbG9jYXRpb24uIE90aGVyd2lzZSwgeW91IGNhbiBzZXBhcmF0ZSB0aGVtIGJ5IFJlZ2lvbiBmb3IgbW9yZSBncmFudWxhcml0eS4gTWFrZSBzdXJlIHRoYXQgdGhlIHNwZWNpZmllZCBsb2cgZ3JvdXAgZXhpc3RzIGluIHRoZSBSZWdpb24gdGhhdCB5b3Ugc3BlY2lmeSB3aXRoIHRoaXMgb3B0aW9uLiArIGF3c2xvZ3MtZ3JvdXAgUmVxdWlyZWQ6IFllcyBNYWtlIHN1cmUgdG8gc3BlY2lmeSBhIGxvZyBncm91cCB0aGF0IHRoZSBhd3Nsb2dzIGxvZyBkcml2ZXIgc2VuZHMgaXRzIGxvZyBzdHJlYW1zIHRvLiArIGF3c2xvZ3Mtc3RyZWFtLXByZWZpeCBSZXF1aXJlZDogWWVzLCB3aGVuIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLk9wdGlvbmFsIGZvciB0aGUgRUMyIGxhdW5jaCB0eXBlLCByZXF1aXJlZCBmb3IgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuIFVzZSB0aGUgYXdzbG9ncy1zdHJlYW0tcHJlZml4IG9wdGlvbiB0byBhc3NvY2lhdGUgYSBsb2cgc3RyZWFtIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXgsIHRoZSBjb250YWluZXIgbmFtZSwgYW5kIHRoZSBJRCBvZiB0aGUgQW1hem9uIEVDUyB0YXNrIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLiBJZiB5b3Ugc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLCB0aGVuIHRoZSBsb2cgc3RyZWFtIHRha2VzIHRoZSBmb3JtYXQgcHJlZml4LW5hbWUvY29udGFpbmVyLW5hbWUvZWNzLXRhc2staWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24sIHRoZW4gdGhlIGxvZyBzdHJlYW0gaXMgbmFtZWQgYWZ0ZXIgdGhlIGNvbnRhaW5lciBJRCB0aGF0J3MgYXNzaWduZWQgYnkgdGhlIERvY2tlciBkYWVtb24gb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZS4gQmVjYXVzZSBpdCdzIGRpZmZpY3VsdCB0byB0cmFjZSBsb2dzIGJhY2sgdG8gdGhlIGNvbnRhaW5lciB0aGF0IHNlbnQgdGhlbSB3aXRoIGp1c3QgdGhlIERvY2tlciBjb250YWluZXIgSUQgKHdoaWNoIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UpLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3Ugc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLiBGb3IgQW1hem9uIEVDUyBzZXJ2aWNlcywgeW91IGNhbiB1c2UgdGhlIHNlcnZpY2UgbmFtZSBhcyB0aGUgcHJlZml4LiBEb2luZyBzbywgeW91IGNhbiB0cmFjZSBsb2cgc3RyZWFtcyB0byB0aGUgc2VydmljZSB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0bywgdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0aGF0IHNlbnQgdGhlbSwgYW5kIHRoZSBJRCBvZiB0aGUgdGFzayB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0by4gWW91IG11c3Qgc3BlY2lmeSBhIHN0cmVhbS1wcmVmaXggZm9yIHlvdXIgbG9ncyB0byBoYXZlIHlvdXIgbG9ncyBhcHBlYXIgaW4gdGhlIExvZyBwYW5lIHdoZW4gdXNpbmcgdGhlIEFtYXpvbiBFQ1MgY29uc29sZS4gKyBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBSZXF1aXJlZDogTm8gVGhpcyBvcHRpb24gZGVmaW5lcyBhIG11bHRpbGluZSBzdGFydCBwYXR0ZXJuIGluIFB5dGhvbiBzdHJmdGltZSBmb3JtYXQuIEEgbG9nIG1lc3NhZ2UgY29uc2lzdHMgb2YgYSBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybiBhbmQgYW55IGZvbGxvd2luZyBsaW5lcyB0aGF0IGRvbuKAmXQgbWF0Y2ggdGhlIHBhdHRlcm4uIFRoZSBtYXRjaGVkIGxpbmUgaXMgdGhlIGRlbGltaXRlciBiZXR3ZWVuIGxvZyBtZXNzYWdlcy4gT25lIGV4YW1wbGUgb2YgYSB1c2UgY2FzZSBmb3IgdXNpbmcgdGhpcyBmb3JtYXQgaXMgZm9yIHBhcnNpbmcgb3V0cHV0IHN1Y2ggYXMgYSBzdGFjayBkdW1wLCB3aGljaCBtaWdodCBvdGhlcndpc2UgYmUgbG9nZ2VkIGluIG11bHRpcGxlIGVudHJpZXMuIFRoZSBjb3JyZWN0IHBhdHRlcm4gYWxsb3dzIGl0IHRvIGJlIGNhcHR1cmVkIGluIGEgc2luZ2xlIGVudHJ5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0LiBZb3UgY2Fubm90IGNvbmZpZ3VyZSBib3RoIHRoZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBhbmQgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybiBvcHRpb25zLiBNdWx0aWxpbmUgbG9nZ2luZyBwZXJmb3JtcyByZWd1bGFyIGV4cHJlc3Npb24gcGFyc2luZyBhbmQgbWF0Y2hpbmcgb2YgYWxsIGxvZyBtZXNzYWdlcy4gVGhpcyBtaWdodCBoYXZlIGEgbmVnYXRpdmUgaW1wYWN0IG9uIGxvZ2dpbmcgcGVyZm9ybWFuY2UuICsgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybiBSZXF1aXJlZDogTm8gVGhpcyBvcHRpb24gZGVmaW5lcyBhIG11bHRpbGluZSBzdGFydCBwYXR0ZXJuIHRoYXQgdXNlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gQSBsb2cgbWVzc2FnZSBjb25zaXN0cyBvZiBhIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGFuZCBhbnkgZm9sbG93aW5nIGxpbmVzIHRoYXQgZG9u4oCZdCBtYXRjaCB0aGUgcGF0dGVybi4gVGhlIG1hdGNoZWQgbGluZSBpcyB0aGUgZGVsaW1pdGVyIGJldHdlZW4gbG9nIG1lc3NhZ2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4uIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgaXMgYWxzbyBjb25maWd1cmVkLiBZb3UgY2Fubm90IGNvbmZpZ3VyZSBib3RoIHRoZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBhbmQgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybiBvcHRpb25zLiBNdWx0aWxpbmUgbG9nZ2luZyBwZXJmb3JtcyByZWd1bGFyIGV4cHJlc3Npb24gcGFyc2luZyBhbmQgbWF0Y2hpbmcgb2YgYWxsIGxvZyBtZXNzYWdlcy4gVGhpcyBtaWdodCBoYXZlIGEgbmVnYXRpdmUgaW1wYWN0IG9uIGxvZ2dpbmcgcGVyZm9ybWFuY2UuICsgbW9kZSBSZXF1aXJlZDogTm8gVmFsaWQgdmFsdWVzOiBub24tYmxvY2tpbmcgfCBibG9ja2luZyBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBkZWxpdmVyeSBtb2RlIG9mIGxvZyBtZXNzYWdlcyBmcm9tIHRoZSBjb250YWluZXIgdG8gQ2xvdWRXYXRjaCBMb2dzLiBUaGUgZGVsaXZlcnkgbW9kZSB5b3UgY2hvb3NlIGFmZmVjdHMgYXBwbGljYXRpb24gYXZhaWxhYmlsaXR5IHdoZW4gdGhlIGZsb3cgb2YgbG9ncyBmcm9tIGNvbnRhaW5lciB0byBDbG91ZFdhdGNoIGlzIGludGVycnVwdGVkLiBJZiB5b3UgdXNlIHRoZSBibG9ja2luZyBtb2RlIGFuZCB0aGUgZmxvdyBvZiBsb2dzIHRvIENsb3VkV2F0Y2ggaXMgaW50ZXJydXB0ZWQsIGNhbGxzIGZyb20gY29udGFpbmVyIGNvZGUgdG8gd3JpdGUgdG8gdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHN0cmVhbXMgd2lsbCBibG9jay4gVGhlIGxvZ2dpbmcgdGhyZWFkIG9mIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJsb2NrIGFzIGEgcmVzdWx0LiBUaGlzIG1heSBjYXVzZSB0aGUgYXBwbGljYXRpb24gdG8gYmVjb21lIHVucmVzcG9uc2l2ZSBhbmQgbGVhZCB0byBjb250YWluZXIgaGVhbHRoY2hlY2sgZmFpbHVyZS4gSWYgeW91IHVzZSB0aGUgbm9uLWJsb2NraW5nIG1vZGUsIHRoZSBjb250YWluZXIncyBsb2dzIGFyZSBpbnN0ZWFkIHN0b3JlZCBpbiBhbiBpbi1tZW1vcnkgaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb25maWd1cmVkIHdpdGggdGhlIG1heC1idWZmZXItc2l6ZSBvcHRpb24uIFRoaXMgcHJldmVudHMgdGhlIGFwcGxpY2F0aW9uIGZyb20gYmVjb21pbmcgdW5yZXNwb25zaXZlIHdoZW4gbG9ncyBjYW5ub3QgYmUgc2VudCB0byBDbG91ZFdhdGNoLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhpcyBtb2RlIGlmIHlvdSB3YW50IHRvIGVuc3VyZSBzZXJ2aWNlIGF2YWlsYWJpbGl0eSBhbmQgYXJlIG9rYXkgd2l0aCBzb21lIGxvZyBsb3NzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFByZXZlbnRpbmcgbG9nIGxvc3Mgd2l0aCBub24tYmxvY2tpbmcgbW9kZSBpbiB0aGUgYXdzbG9ncyBjb250YWluZXIgbG9nIGRyaXZlci4gKyBtYXgtYnVmZmVyLXNpemUgUmVxdWlyZWQ6IE5vIERlZmF1bHQgdmFsdWU6IDFtIFdoZW4gbm9uLWJsb2NraW5nIG1vZGUgaXMgdXNlZCwgdGhlIG1heC1idWZmZXItc2l6ZSBsb2cgb3B0aW9uIGNvbnRyb2xzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdGhhdCdzIHVzZWQgZm9yIGludGVybWVkaWF0ZSBtZXNzYWdlIHN0b3JhZ2UuIE1ha2Ugc3VyZSB0byBzcGVjaWZ5IGFuIGFkZXF1YXRlIGJ1ZmZlciBzaXplIGJhc2VkIG9uIHlvdXIgYXBwbGljYXRpb24uIFdoZW4gdGhlIGJ1ZmZlciBmaWxscyB1cCwgZnVydGhlciBsb2dzIGNhbm5vdCBiZSBzdG9yZWQuIExvZ3MgdGhhdCBjYW5ub3QgYmUgc3RvcmVkIGFyZSBsb3N0LiBcbiAqICBUbyByb3V0ZSBsb2dzIHVzaW5nIHRoZSBgYHNwbHVua2BgIGxvZyByb3V0ZXIsIHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBgYHNwbHVuay10b2tlbmBgIGFuZCBhIGBgc3BsdW5rLXVybGBgLlxuICogIFdoZW4geW91IHVzZSB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyByb3V0ZXIgdG8gcm91dGUgbG9ncyB0byBhbiBBV1MgU2VydmljZSBvciBBV1MgUGFydG5lciBOZXR3b3JrIGRlc3RpbmF0aW9uIGZvciBsb2cgc3RvcmFnZSBhbmQgYW5hbHl0aWNzLCB5b3UgY2FuIHNldCB0aGUgYGBsb2ctZHJpdmVyLWJ1ZmZlci1saW1pdGBgIG9wdGlvbiB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGV2ZW50cyB0aGF0IGFyZSBidWZmZXJlZCBpbiBtZW1vcnksIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBsb2cgcm91dGVyIGNvbnRhaW5lci4gSXQgY2FuIGhlbHAgdG8gcmVzb2x2ZSBwb3RlbnRpYWwgbG9nIGxvc3MgaXNzdWUgYmVjYXVzZSBoaWdoIHRocm91Z2hwdXQgbWlnaHQgcmVzdWx0IGluIG1lbW9yeSBydW5uaW5nIG91dCBmb3IgdGhlIGJ1ZmZlciBpbnNpZGUgb2YgRG9ja2VyLlxuICogIE90aGVyIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IHdoZW4gdXNpbmcgYGBhd3NmaXJlbGVuc2BgIHRvIHJvdXRlIGxvZ3MgZGVwZW5kIG9uIHRoZSBkZXN0aW5hdGlvbi4gV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIERhdGEgRmlyZWhvc2UsIHlvdSBjYW4gc3BlY2lmeSB0aGUgQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgbmFtZSBmb3IgdGhlIGxvZyBzdHJlYW0gd2l0aCBgYGRlbGl2ZXJ5X3N0cmVhbWBgLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBLaW5lc2lzIERhdGEgU3RyZWFtcywgeW91IGNhbiBzcGVjaWZ5IGFuIEFXUyBSZWdpb24gd2l0aCBgYHJlZ2lvbmBgIGFuZCBhIGRhdGEgc3RyZWFtIG5hbWUgd2l0aCBgYHN0cmVhbWBgLlxuICogICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlLCB5b3UgY2FuIHNwZWNpZnkgb3B0aW9ucyBsaWtlIGBgTmFtZWBgLCBgYEhvc3RgYCAoT3BlblNlYXJjaCBTZXJ2aWNlIGVuZHBvaW50IHdpdGhvdXQgcHJvdG9jb2wpLCBgYFBvcnRgYCwgYGBJbmRleGBgLCBgYFR5cGVgYCwgYGBBd3NfYXV0aGBgLCBgYEF3c19yZWdpb25gYCwgYGBTdXBwcmVzc19UeXBlX05hbWVgYCwgYW5kIGBgdGxzYGAuXG4gKiAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIFMzLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGJ1Y2tldCB1c2luZyB0aGUgYGBidWNrZXRgYCBvcHRpb24uIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGBgcmVnaW9uYGAsIGBgdG90YWxfZmlsZV9zaXplYGAsIGBgdXBsb2FkX3RpbWVvdXRgYCwgYW5kIGBgdXNlX3B1dF9vYmplY3RgYCBhcyBvcHRpb25zLlxuICogIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOSBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS4gVG8gY2hlY2sgdGhlIERvY2tlciBSZW1vdGUgQVBJIHZlcnNpb24gb24geW91ciBjb250YWluZXIgaW5zdGFuY2UsIGxvZyBpbiB0byB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogYGBzdWRvIGRvY2tlciB2ZXJzaW9uIC0tZm9ybWF0ICd7ey5TZXJ2ZXIuQVBJVmVyc2lvbn19J2BgXG4gKi9cbk9wdGlvbnM/OiB7XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi57MSx9XCIuXG4gKi9cbltrOiBzdHJpbmddOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGxvZyBkcml2ZXIgdG8gdXNlIGZvciB0aGUgY29udGFpbmVyLlxuICogIEZvciB0YXNrcyBvbiBGQVJHQVRFbG9uZywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIHRhc2tzIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgZmx1ZW50ZGBgLCBgYGdlbGZgYCwgYGBqc29uLWZpbGVgYCwgYGBqb3VybmFsZGBgLCBgYHN5c2xvZ2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIHRoZSBgYGF3c2xvZ3NgYCBsb2cgZHJpdmVyLCBzZWUgW1NlbmQgQW1hem9uIEVDUyBsb2dzIHRvIENsb3VkV2F0Y2hdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nX2F3c2xvZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIHRoZSBgYGF3c2ZpcmVsZW5zYGAgbG9nIGRyaXZlciwgc2VlIFtTZW5kIEFtYXpvbiBFQ1MgbG9ncyB0byBhbiBzZXJ2aWNlIG9yIFBhcnRuZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nX2ZpcmVsZW5zLmh0bWwpLlxuICogICBJZiB5b3UgaGF2ZSBhIGN1c3RvbSBkcml2ZXIgdGhhdCBpc24ndCBsaXN0ZWQsIHlvdSBjYW4gZm9yayB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgcHJvamVjdCB0aGF0J3MgW2F2YWlsYWJsZSBvbiBHaXRIdWJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2dpdGh1Yi5jb20vYXdzL2FtYXpvbi1lY3MtYWdlbnQpIGFuZCBjdXN0b21pemUgaXQgdG8gd29yayB3aXRoIHRoYXQgZHJpdmVyLiBXZSBlbmNvdXJhZ2UgeW91IHRvIHN1Ym1pdCBwdWxsIHJlcXVlc3RzIGZvciBjaGFuZ2VzIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gaGF2ZSBpbmNsdWRlZC4gSG93ZXZlciwgd2UgZG9uJ3QgY3VycmVudGx5IHByb3ZpZGUgc3VwcG9ydCBmb3IgcnVubmluZyBtb2RpZmllZCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS5cbiAqL1xuTG9nRHJpdmVyPzogc3RyaW5nXG59XG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNlY3JldCB0byBleHBvc2UgdG8geW91ciBjb250YWluZXIuIFNlY3JldHMgY2FuIGJlIGV4cG9zZWQgdG8gYSBjb250YWluZXIgaW4gdGhlIGZvbGxvd2luZyB3YXlzOlxuICogICArICBUbyBpbmplY3Qgc2Vuc2l0aXZlIGRhdGEgaW50byB5b3VyIGNvbnRhaW5lcnMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCB1c2UgdGhlIGBgc2VjcmV0c2BgIGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlci5cbiAqICAgKyAgVG8gcmVmZXJlbmNlIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBpbiB0aGUgbG9nIGNvbmZpZ3VyYXRpb24gb2YgYSBjb250YWluZXIsIHVzZSB0aGUgYGBzZWNyZXRPcHRpb25zYGAgY29udGFpbmVyIGRlZmluaXRpb24gcGFyYW1ldGVyLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTcGVjaWZ5aW5nIHNlbnNpdGl2ZSBkYXRhXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXQge1xuLyoqXG4gKiBUaGUgc2VjcmV0IHRvIGV4cG9zZSB0byB0aGUgY29udGFpbmVyLiBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmUgZWl0aGVyIHRoZSBmdWxsIEFSTiBvZiB0aGUgQVNNbG9uZyBzZWNyZXQgb3IgdGhlIGZ1bGwgQVJOIG9mIHRoZSBwYXJhbWV0ZXIgaW4gdGhlIFNTTSBQYXJhbWV0ZXIgU3RvcmUuXG4gKiAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXF1aXJlIElBTWxvbmcgcGVybWlzc2lvbnMsIHNlZSBbUmVxdWlyZWQgSUFNIHBlcm1pc3Npb25zIGZvciBBbWF6b24gRUNTIHNlY3JldHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEtc2VjcmV0cy5odG1sI3NlY3JldHMtaWFtKSAoZm9yIFNlY3JldHMgTWFuYWdlcikgb3IgW1JlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIEVDUyBzZWNyZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLXBhcmFtZXRlcnMuaHRtbCkgKGZvciBTeXN0ZW1zIE1hbmFnZXIgUGFyYW1ldGVyIHN0b3JlKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHRoZSBTU00gUGFyYW1ldGVyIFN0b3JlIHBhcmFtZXRlciBleGlzdHMgaW4gdGhlIHNhbWUgUmVnaW9uIGFzIHRoZSB0YXNrIHlvdSdyZSBsYXVuY2hpbmcsIHRoZW4geW91IGNhbiB1c2UgZWl0aGVyIHRoZSBmdWxsIEFSTiBvciBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuIElmIHRoZSBwYXJhbWV0ZXIgZXhpc3RzIGluIGEgZGlmZmVyZW50IFJlZ2lvbiwgdGhlbiB0aGUgZnVsbCBBUk4gbXVzdCBiZSBzcGVjaWZpZWQuXG4gKi9cblZhbHVlRnJvbTogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQuXG4gKi9cbk5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiBmb3IgeW91ciBzZXJ2aWNlIHRoYXQgaG9sZHMgdGhlIGluZm9ybWF0aW9uIGZvciB0aGUgdGFyZ2V0IGdyb3VwKHMpIEFtYXpvbiBFQ1MgdGFza3Mgd2lsbCBiZSByZWdpc3RlcmVkIHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY0xhdHRpY2VDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHRhcmdldCBncm91cCBvciBncm91cHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uIHRoYXQgdGhlIEFtYXpvbiBFQ1MgdGFza3Mgd2lsbCBiZSByZWdpc3RlcmVkIHRvLlxuICovXG5UYXJnZXRHcm91cEFybjogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBwb3J0IG1hcHBpbmcgdG8gcmVnaXN0ZXIgaW4gdGhlIFZQQyBMYXR0aWNlIHRhcmdldCBncm91cC4gVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYGBwb3J0TWFwcGluZ2BgIHlvdSBkZWZpbmVkIGluIHlvdXIgdGFzayBkZWZpbml0aW9uLlxuICovXG5Qb3J0TmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIElBTSByb2xlIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbi4gVGhpcyBpcyB0aGUgQW1hem9uIEVDU+KAqCBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gbWFuYWdlIHlvdXIgVlBDIExhdHRpY2UgaW5mcmFzdHJ1Y3R1cmUuXG4gKi9cblJvbGVBcm46IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjb250cm9sbGVyIHRvIHVzZSBmb3IgdGhlIHNlcnZpY2UuIElmIG5vIGRlcGxveW1lbnQgY29udHJvbGxlciBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgRUNTYGAgaXMgdXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q29udHJvbGxlciB7XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZSB0byB1c2UuIFRoZXJlIGFyZSB0aHJlZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMgYXZhaWxhYmxlOlxuICogICArIEVDUyBUaGUgcm9sbGluZyB1cGRhdGUgKEVDUykgZGVwbG95bWVudCB0eXBlIGludm9sdmVzIHJlcGxhY2luZyB0aGUgY3VycmVudCBydW5uaW5nIHZlcnNpb24gb2YgdGhlIGNvbnRhaW5lciB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbi4gVGhlIG51bWJlciBvZiBjb250YWluZXJzIEFtYXpvbiBFQ1MgYWRkcyBvciByZW1vdmVzIGZyb20gdGhlIHNlcnZpY2UgZHVyaW5nIGEgcm9sbGluZyB1cGRhdGUgaXMgY29udHJvbGxlZCBieSBhZGp1c3RpbmcgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gbnVtYmVyIG9mIGhlYWx0aHkgdGFza3MgYWxsb3dlZCBkdXJpbmcgYSBzZXJ2aWNlIGRlcGxveW1lbnQsIGFzIHNwZWNpZmllZCBpbiB0aGUgRGVwbG95bWVudENvbmZpZ3VyYXRpb24uICsgQ09ERV9ERVBMT1kgVGhlIGJsdWUvZ3JlZW4gKENPREVfREVQTE9ZKSBkZXBsb3ltZW50IHR5cGUgdXNlcyB0aGUgYmx1ZS9ncmVlbiBkZXBsb3ltZW50IG1vZGVsIHBvd2VyZWQgYnkgLCB3aGljaCBhbGxvd3MgeW91IHRvIHZlcmlmeSBhIG5ldyBkZXBsb3ltZW50IG9mIGEgc2VydmljZSBiZWZvcmUgc2VuZGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gaXQuICsgRVhURVJOQUwgVGhlIGV4dGVybmFsIChFWFRFUk5BTCkgZGVwbG95bWVudCB0eXBlIGVuYWJsZXMgeW91IHRvIHVzZSBhbnkgdGhpcmQtcGFydHkgZGVwbG95bWVudCBjb250cm9sbGVyIGZvciBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgZGVwbG95bWVudCBwcm9jZXNzIGZvciBhbiBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKi9cblR5cGU/OiAoXCJDT0RFX0RFUExPWVwiIHwgXCJFQ1NcIiB8IFwiRVhURVJOQUxcIilcbn1cbi8qKlxuICogT3B0aW9uYWwgZGVwbG95bWVudCBwYXJhbWV0ZXJzIHRoYXQgY29udHJvbCBob3cgbWFueSB0YXNrcyBydW4gZHVyaW5nIHRoZSBkZXBsb3ltZW50IGFuZCB0aGUgb3JkZXJpbmcgb2Ygc3RvcHBpbmcgYW5kIHN0YXJ0aW5nIHRhc2tzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDb25maWd1cmF0aW9uIHtcbkFsYXJtcz86IERlcGxveW1lbnRBbGFybXNcbkRlcGxveW1lbnRDaXJjdWl0QnJlYWtlcj86IERlcGxveW1lbnRDaXJjdWl0QnJlYWtlclxuLyoqXG4gKiBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUsIHRoZSBgYG1heGltdW1QZXJjZW50YGAgcGFyYW1ldGVyIHJlcHJlc2VudHMgYW4gdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0aGF0IGFyZSBhbGxvd2VkIGluIHRoZSBgYFJVTk5JTkdgYCBvciBgYFBFTkRJTkdgYCBzdGF0ZSBkdXJpbmcgYSBkZXBsb3ltZW50LCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGBgZGVzaXJlZENvdW50YGAgKHJvdW5kZWQgZG93biB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKS4gVGhpcyBwYXJhbWV0ZXIgZW5hYmxlcyB5b3UgdG8gZGVmaW5lIHRoZSBkZXBsb3ltZW50IGJhdGNoIHNpemUuIEZvciBleGFtcGxlLCBpZiB5b3VyIHNlcnZpY2UgaXMgdXNpbmcgdGhlIGBgUkVQTElDQWBgIHNlcnZpY2Ugc2NoZWR1bGVyIGFuZCBoYXMgYSBgYGRlc2lyZWRDb3VudGBgIG9mIGZvdXIgdGFza3MgYW5kIGEgYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIG9mIDIwMCUsIHRoZSBzY2hlZHVsZXIgbWF5IHN0YXJ0IGZvdXIgbmV3IHRhc2tzIGJlZm9yZSBzdG9wcGluZyB0aGUgZm91ciBvbGRlciB0YXNrcyAocHJvdmlkZWQgdGhhdCB0aGUgY2x1c3RlciByZXNvdXJjZXMgcmVxdWlyZWQgdG8gZG8gdGhpcyBhcmUgYXZhaWxhYmxlKS4gVGhlIGRlZmF1bHQgYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdXNpbmcgdGhlIGBgUkVQTElDQWBgIHNlcnZpY2Ugc2NoZWR1bGVyIGlzIDIwMCUuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcywgYW5kIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBUaGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdGhhdCB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaGFzIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUuXG4gKiAgIElmIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB1c2UgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSBtYXhpbXVtIHBlcmNlbnQgdmFsdWUgaXMgbm90IHVzZWQsIGFsdGhvdWdoIGl0IGlzIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1heGltdW1QZXJjZW50PzogbnVtYmVyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgcmVwcmVzZW50cyBhIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBtdXN0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBgYGRlc2lyZWRDb3VudGBgIChyb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZXBsb3kgd2l0aG91dCB1c2luZyBhZGRpdGlvbmFsIGNsdXN0ZXIgY2FwYWNpdHkuIEZvciBleGFtcGxlLCBpZiB5b3VyIHNlcnZpY2UgaGFzIGEgYGBkZXNpcmVkQ291bnRgYCBvZiBmb3VyIHRhc2tzIGFuZCBhIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgb2YgNTAlLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgbWF5IHN0b3AgdHdvIGV4aXN0aW5nIHRhc2tzIHRvIGZyZWUgdXAgY2x1c3RlciBjYXBhY2l0eSBiZWZvcmUgc3RhcnRpbmcgdHdvIG5ldyB0YXNrcy4gXG4gKiAgRm9yIHNlcnZpY2VzIHRoYXQgKmRvIG5vdCogdXNlIGEgbG9hZCBiYWxhbmNlciwgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgbm90ZWQ6XG4gKiAgICsgIEEgc2VydmljZSBpcyBjb25zaWRlcmVkIGhlYWx0aHkgaWYgYWxsIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGhpbiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgcGFzcyB0aGVpciBoZWFsdGggY2hlY2tzLlxuICogICArICBJZiBhIHRhc2sgaGFzIG5vIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgNDAgc2Vjb25kcyBhZnRlciBhIHRhc2sgcmVhY2hlcyBhIGBgUlVOTklOR2BgIHN0YXRlIGJlZm9yZSB0aGUgdGFzayBpcyBjb3VudGVkIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICArICBJZiBhIHRhc2sgaGFzIG9uZSBvciBtb3JlIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgdGhlIHRhc2sgdG8gcmVhY2ggYSBoZWFsdGh5IHN0YXR1cyBiZWZvcmUgY291bnRpbmcgaXQgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuIEEgdGFzayBpcyBjb25zaWRlcmVkIGhlYWx0aHkgd2hlbiBhbGwgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSB0YXNrIGhhdmUgcGFzc2VkIHRoZWlyIGhlYWx0aCBjaGVja3MuIFRoZSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmljZSBzY2hlZHVsZXIgY2FuIHdhaXQgZm9yIGlzIGRldGVybWluZWQgYnkgdGhlIGNvbnRhaW5lciBoZWFsdGggY2hlY2sgc2V0dGluZ3MuIFxuICogICBcbiAqICBGb3Igc2VydmljZXMgdGhhdCAqZG8qIHVzZSBhIGxvYWQgYmFsYW5jZXIsIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIG5vdGVkOlxuICogICArICBJZiBhIHRhc2sgaGFzIG5vIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgdGhlIGxvYWQgYmFsYW5jZXIgdGFyZ2V0IGdyb3VwIGhlYWx0aCBjaGVjayB0byByZXR1cm4gYSBoZWFsdGh5IHN0YXR1cyBiZWZvcmUgY291bnRpbmcgdGhlIHRhc2sgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgYW4gZXNzZW50aWFsIGNvbnRhaW5lciB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIGJvdGggdGhlIHRhc2sgdG8gcmVhY2ggYSBoZWFsdGh5IHN0YXR1cyBhbmQgdGhlIGxvYWQgYmFsYW5jZXIgdGFyZ2V0IGdyb3VwIGhlYWx0aCBjaGVjayB0byByZXR1cm4gYSBoZWFsdGh5IHN0YXR1cyBiZWZvcmUgY291bnRpbmcgdGhlIHRhc2sgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgIFxuICogIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIHJlcGxpY2Egc2VydmljZSBmb3IgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBpcyAxMDAlLiBUaGUgZGVmYXVsdCBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdXNpbmcgdGhlIGBgREFFTU9OYGAgc2VydmljZSBzY2hlZHVsZSBpcyAwJSBmb3IgdGhlIENMSSwgdGhlIEFXUyBTREtzLCBhbmQgdGhlIEFQSXMgYW5kIDUwJSBmb3IgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuXG4gKiAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIGhlYWx0aHkgdGFza3MgZHVyaW5nIGEgZGVwbG95bWVudCBpcyB0aGUgYGBkZXNpcmVkQ291bnRgYCBtdWx0aXBsaWVkIGJ5IHRoZSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgLzEwMCwgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHZhbHVlLlxuICogIElmIGEgc2VydmljZSBpcyB1c2luZyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGlzIHJ1bm5pbmcgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlICptaW5pbXVtIGhlYWx0aHkgcGVyY2VudCogdmFsdWUgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBUaGUgKm1pbmltdW0gaGVhbHRoeSBwZXJjZW50KiB2YWx1ZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgbG93ZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgdGhhdCByZW1haW4gaW4gdGhlIGBgUlVOTklOR2BgIHN0YXRlIHdoaWxlIHRoZSBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBpbiB0aGUgYGBEUkFJTklOR2BgIHN0YXRlLlxuICogICBZb3UgY2FuJ3Qgc3BlY2lmeSBhIGN1c3RvbSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdGhhdCB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaGFzIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUuXG4gKiAgIElmIGEgc2VydmljZSBpcyB1c2luZyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGlzIHJ1bm5pbmcgdGFza3MgdGhhdCB1c2UgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB2YWx1ZSBpcyBub3QgdXNlZCwgYWx0aG91Z2ggaXQgaXMgcmV0dXJuZWQgd2hlbiBkZXNjcmliaW5nIHlvdXIgc2VydmljZS5cbiAqL1xuTWluaW11bUhlYWx0aHlQZXJjZW50PzogbnVtYmVyXG59XG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBDbG91ZFdhdGNoIGFsYXJtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50QWxhcm1zIHtcbi8qKlxuICogT25lIG9yIG1vcmUgQ2xvdWRXYXRjaCBhbGFybSBuYW1lcy4gVXNlIGEgXCIsXCIgdG8gc2VwYXJhdGUgdGhlIGFsYXJtcy5cbiAqL1xuQWxhcm1OYW1lczogc3RyaW5nW11cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgQ2xvdWRXYXRjaCBhbGFybSBvcHRpb24gaW4gdGhlIHNlcnZpY2UgZGVwbG95bWVudCBwcm9jZXNzLlxuICovXG5FbmFibGU6IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNvbmZpZ3VyZSBBbWF6b24gRUNTIHRvIHJvbGwgYmFjayB0aGUgc2VydmljZSBpZiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscy4gSWYgcm9sbGJhY2sgaXMgdXNlZCwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gKi9cblJvbGxiYWNrOiBib29sZWFuXG59XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciBjYW4gb25seSBiZSB1c2VkIGZvciBzZXJ2aWNlcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZS5cbiAqICAgVGhlICpkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciogZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc2VydmljZSBkZXBsb3ltZW50IHdpbGwgZmFpbCBpZiB0aGUgc2VydmljZSBjYW4ndCByZWFjaCBhIHN0ZWFkeSBzdGF0ZS4gSWYgeW91IHVzZSB0aGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIsIGEgc2VydmljZSBkZXBsb3ltZW50IHdpbGwgdHJhbnNpdGlvbiB0byBhIGZhaWxlZCBzdGF0ZSBhbmQgc3RvcCBsYXVuY2hpbmcgbmV3IHRhc2tzLiBJZiB5b3UgdXNlIHRoZSByb2xsYmFjayBvcHRpb24sIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSb2xsaW5nIHVwZGF0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWVjcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXIge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciBsb2dpYyBmb3IgdGhlIHNlcnZpY2UuXG4gKi9cbkVuYWJsZTogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29uZmlndXJlIEFtYXpvbiBFQ1MgdG8gcm9sbCBiYWNrIHRoZSBzZXJ2aWNlIGlmIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLiBJZiByb2xsYmFjayBpcyBvbiwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gKi9cblJvbGxiYWNrOiBib29sZWFuXG59XG4iXX0=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSB0aGUgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VDb25uZWN0U2VydmljZWBgIG11c3QgaGF2ZSBhIG5hbWUgdGhhdCBpcyB1bmlxdWUgaW4gdGhlIG5hbWVzcGFjZS5cbiAqICAgIFN0YXJ0aW5nIEFwcmlsIDE1LCAyMDIzLCBBV1M7IHdpbGwgbm90IG9uYm9hcmQgbmV3IGN1c3RvbWVycyB0byBBbWF6b24gRWxhc3RpYyBJbmZlcmVuY2UgKEVJKSwgYW5kIHdpbGwgaGVscCBjdXJyZW50IGN1c3RvbWVycyBtaWdyYXRlIHRoZWlyIHdvcmtsb2FkcyB0byBvcHRpb25zIHRoYXQgb2ZmZXIgYmV0dGVyIHByaWNlIGFuZCBwZXJmb3JtYW5jZS4gQWZ0ZXIgQXByaWwgMTUsIDIwMjMsIG5ldyBjdXN0b21lcnMgd2lsbCBub3QgYmUgYWJsZSB0byBsYXVuY2ggaW5zdGFuY2VzIHdpdGggQW1hem9uIEVJIGFjY2VsZXJhdG9ycyBpbiBBbWF6b24gU2FnZU1ha2VyLCBFQ1MsIG9yIEVDMi4gSG93ZXZlciwgY3VzdG9tZXJzIHdobyBoYXZlIHVzZWQgQW1hem9uIEVJIGF0IGxlYXN0IG9uY2UgZHVyaW5nIHRoZSBwYXN0IDMwLWRheSBwZXJpb2QgYXJlIGNvbnNpZGVyZWQgY3VycmVudCBjdXN0b21lcnMgYW5kIHdpbGwgYmUgYWJsZSB0byBjb250aW51ZSB1c2luZyB0aGUgc2VydmljZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VDU19TRVJWSUNFIHtcbi8qKlxuICogVGhlIHBsYXRmb3JtIHZlcnNpb24gdGhhdCB5b3VyIHRhc2tzIGluIHRoZSBzZXJ2aWNlIGFyZSBydW5uaW5nIG9uLiBBIHBsYXRmb3JtIHZlcnNpb24gaXMgc3BlY2lmaWVkIG9ubHkgZm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLiBJZiBvbmUgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgYGBMQVRFU1RgYCBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHVzZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW3BsYXRmb3JtIHZlcnNpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9wbGF0Zm9ybV92ZXJzaW9ucy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblBsYXRmb3JtVmVyc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIHRoZSB0YXNrLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCBwcm9wYWdhdGVkLiBUYWdzIGNhbiBvbmx5IGJlIHByb3BhZ2F0ZWQgdG8gdGhlIHRhc2sgZHVyaW5nIHRhc2sgY3JlYXRpb24uIFRvIGFkZCB0YWdzIHRvIGEgdGFzayBhZnRlciB0YXNrIGNyZWF0aW9uLCB1c2UgdGhlIFtUYWdSZXNvdXJjZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9UYWdSZXNvdXJjZS5odG1sKSBBUEkgYWN0aW9uLlxuICogIFlvdSBtdXN0IHNldCB0aGlzIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5PTkVgYCB3aGVuIHlvdSB1c2UgQ29zdCBFeHBsb3Jlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyB1c2FnZSByZXBvcnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2FnZS1yZXBvcnRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgZGVmYXVsdCBpcyBgYE5PTkVgYC5cbiAqL1xuUHJvcGFnYXRlVGFncz86IChcIlNFUlZJQ0VcIiB8IFwiVEFTS19ERUZJTklUSU9OXCIpXG5TZXJ2aWNlQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgb2JqZWN0cyB0byB1c2UgZm9yIHRhc2tzIGluIHlvdXIgc2VydmljZS4gWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSBvZiA1IHN0cmF0ZWd5IHJ1bGVzIGZvciBlYWNoIHNlcnZpY2UuXG4gKi9cblBsYWNlbWVudFN0cmF0ZWdpZXM/OiBQbGFjZW1lbnRTdHJhdGVneVtdXG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZWdpc3RyeSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgZGlzY292ZXJ5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWRpc2NvdmVyeS5odG1sKS5cbiAqICAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuU2VydmljZVJlZ2lzdHJpZXM/OiBTZXJ2aWNlUmVnaXN0cnlbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgYSB2b2x1bWUgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYXMgYSB2b2x1bWUgdGhhdCBpcyBjb25maWd1cmVkIGF0IGxhdW5jaCB0aW1lLiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCB2b2x1bWUgdHlwZSBpcyBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuVm9sdW1lQ29uZmlndXJhdGlvbnM/OiBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICogIElmIGEgYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGxhdW5jaFR5cGVgYCBwYXJhbWV0ZXIgbXVzdCBiZSBvbWl0dGVkLiBJZiBubyBgYGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIG9yIGBgbGF1bmNoVHlwZWBgIGlzIHNwZWNpZmllZCwgdGhlIGBgZGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIGZvciB0aGUgY2x1c3RlciBpcyB1c2VkLlxuICogIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGNvbnRhaW4gYSBtYXhpbXVtIG9mIDIwIGNhcGFjaXR5IHByb3ZpZGVycy5cbiAqL1xuQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5PzogQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbVtdXG4vKipcbiAqIFRoZSBsYXVuY2ggdHlwZSBvbiB3aGljaCB0byBydW4geW91ciBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIExhdW5jaCBUeXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvbGF1bmNoX3R5cGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTGF1bmNoVHlwZT86IChcIkVDMlwiIHwgXCJGQVJHQVRFXCIgfCBcIkVYVEVSTkFMXCIpXG5OYW1lPzogc3RyaW5nXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBBdmFpbGFiaWxpdHkgWm9uZSByZWJhbGFuY2luZyBmb3IgdGhlIHNlcnZpY2UuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQmFsYW5jaW5nIGFuIEFtYXpvbiBFQ1Mgc2VydmljZSBhY3Jvc3MgQXZhaWxhYmlsaXR5IFpvbmVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLXJlYmFsYW5jaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQXZhaWxhYmlsaXR5Wm9uZVJlYmFsYW5jaW5nPzogKFwiRU5BQkxFRFwiIHwgXCJESVNBQkxFRFwiKVxuLyoqXG4gKiBUaGUgc2NoZWR1bGluZyBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzX3NlcnZpY2VzLmh0bWwpLlxuICogIFRoZXJlIGFyZSB0d28gc2VydmljZSBzY2hlZHVsZXIgc3RyYXRlZ2llcyBhdmFpbGFibGU6XG4gKiAgICsgICBgYFJFUExJQ0FgYC1UaGUgcmVwbGljYSBzY2hlZHVsaW5nIHN0cmF0ZWd5IHBsYWNlcyBhbmQgbWFpbnRhaW5zIHRoZSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcyBhY3Jvc3MgeW91ciBjbHVzdGVyLiBCeSBkZWZhdWx0LCB0aGUgc2VydmljZSBzY2hlZHVsZXIgc3ByZWFkcyB0YXNrcyBhY3Jvc3MgQXZhaWxhYmlsaXR5IFpvbmVzLiBZb3UgY2FuIHVzZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVnaWVzIGFuZCBjb25zdHJhaW50cyB0byBjdXN0b21pemUgdGFzayBwbGFjZW1lbnQgZGVjaXNpb25zLiBUaGlzIHNjaGVkdWxlciBzdHJhdGVneSBpcyByZXF1aXJlZCBpZiB0aGUgc2VydmljZSB1c2VzIHRoZSBgYENPREVfREVQTE9ZYGAgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcy5cbiAqICAgKyAgIGBgREFFTU9OYGAtVGhlIGRhZW1vbiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRlcGxveXMgZXhhY3RseSBvbmUgdGFzayBvbiBlYWNoIGFjdGl2ZSBjb250YWluZXIgaW5zdGFuY2UgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIHRoYXQgeW91IHNwZWNpZnkgaW4geW91ciBjbHVzdGVyLiBUaGUgc2VydmljZSBzY2hlZHVsZXIgYWxzbyBldmFsdWF0ZXMgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGZvciBydW5uaW5nIHRhc2tzIGFuZCB3aWxsIHN0b3AgdGFza3MgdGhhdCBkb24ndCBtZWV0IHRoZSBwbGFjZW1lbnQgY29uc3RyYWludHMuIFdoZW4geW91J3JlIHVzaW5nIHRoaXMgc3RyYXRlZ3ksIHlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcywgYSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSwgb3IgdXNlIFNlcnZpY2UgQXV0byBTY2FsaW5nIHBvbGljaWVzLlxuICogICBUYXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSBvciB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMgZG9uJ3Qgc3VwcG9ydCB0aGUgYGBEQUVNT05gYCBzY2hlZHVsaW5nIHN0cmF0ZWd5LlxuICovXG5TY2hlZHVsaW5nU3RyYXRlZ3k/OiAoXCJEQUVNT05cIiB8IFwiUkVQTElDQVwiKVxuTmV0d29ya0NvbmZpZ3VyYXRpb24/OiBOZXR3b3JrQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gdGhlIHNlcnZpY2UgdG8gaGVscCB5b3UgY2F0ZWdvcml6ZSBhbmQgb3JnYW5pemUgdGhlbS4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLCBib3RoIG9mIHdoaWNoIHlvdSBkZWZpbmUuIFdoZW4gYSBzZXJ2aWNlIGlzIGRlbGV0ZWQsIHRoZSB0YWdzIGFyZSBkZWxldGVkIGFzIHdlbGwuXG4gKiAgVGhlIGZvbGxvd2luZyBiYXNpYyByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGFnczpcbiAqICAgKyAgTWF4aW11bSBudW1iZXIgb2YgdGFncyBwZXIgcmVzb3VyY2UgLSA1MFxuICogICArICBGb3IgZWFjaCByZXNvdXJjZSwgZWFjaCB0YWcga2V5IG11c3QgYmUgdW5pcXVlLCBhbmQgZWFjaCB0YWcga2V5IGNhbiBoYXZlIG9ubHkgb25lIHZhbHVlLlxuICogICArICBNYXhpbXVtIGtleSBsZW5ndGggLSAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIE1heGltdW0gdmFsdWUgbGVuZ3RoIC0gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBJZiB5b3VyIHRhZ2dpbmcgc2NoZW1hIGlzIHVzZWQgYWNyb3NzIG11bHRpcGxlIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIHJlbWVtYmVyIHRoYXQgb3RoZXIgc2VydmljZXMgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhcmFjdGVycy4gR2VuZXJhbGx5IGFsbG93ZWQgY2hhcmFjdGVycyBhcmU6IGxldHRlcnMsIG51bWJlcnMsIGFuZCBzcGFjZXMgcmVwcmVzZW50YWJsZSBpbiBVVEYtOCwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogKyAtID0gLiBfIDogLyBALlxuICogICArICBUYWcga2V5cyBhbmQgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqICAgKyAgRG8gbm90IHVzZSBgYGF3czpgYCwgYGBBV1M6YGAsIG9yIGFueSB1cHBlciBvciBsb3dlcmNhc2UgY29tYmluYXRpb24gb2Ygc3VjaCBhcyBhIHByZWZpeCBmb3IgZWl0aGVyIGtleXMgb3IgdmFsdWVzIGFzIGl0IGlzIHJlc2VydmVkIGZvciBBV1MgdXNlLiBZb3UgY2Fubm90IGVkaXQgb3IgZGVsZXRlIHRhZyBrZXlzIG9yIHZhbHVlcyB3aXRoIHRoaXMgcHJlZml4LiBUYWdzIHdpdGggdGhpcyBwcmVmaXggZG8gbm90IGNvdW50IGFnYWluc3QgeW91ciB0YWdzIHBlciByZXNvdXJjZSBsaW1pdC5cbiAqL1xuVGFncz86IFRhZ1tdXG4vKipcbiAqIFRoZSBwZXJpb2Qgb2YgdGltZSwgaW4gc2Vjb25kcywgdGhhdCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciBpZ25vcmVzIHVuaGVhbHRoeSBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBWUEMgTGF0dGljZSwgYW5kIGNvbnRhaW5lciBoZWFsdGggY2hlY2tzIGFmdGVyIGEgdGFzayBoYXMgZmlyc3Qgc3RhcnRlZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIHZhbHVlLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLiBJZiB5b3UgZG9uJ3QgdXNlIGFueSBvZiB0aGUgaGVhbHRoIGNoZWNrcywgdGhlbiBgYGhlYWx0aENoZWNrR3JhY2VQZXJpb2RTZWNvbmRzYGAgaXMgdW51c2VkLlxuICogIElmIHlvdXIgc2VydmljZSdzIHRhc2tzIHRha2UgYSB3aGlsZSB0byBzdGFydCBhbmQgcmVzcG9uZCB0byBoZWFsdGggY2hlY2tzLCB5b3UgY2FuIHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIG9mIHVwIHRvIDIsMTQ3LDQ4Myw2NDcgc2Vjb25kcyAoYWJvdXQgNjkgeWVhcnMpLiBEdXJpbmcgdGhhdCB0aW1lLCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciBpZ25vcmVzIGhlYWx0aCBjaGVjayBzdGF0dXMuIFRoaXMgZ3JhY2UgcGVyaW9kIGNhbiBwcmV2ZW50IHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBmcm9tIG1hcmtpbmcgdGFza3MgYXMgdW5oZWFsdGh5IGFuZCBzdG9wcGluZyB0aGVtIGJlZm9yZSB0aGV5IGhhdmUgdGltZSB0byBjb21lIHVwLlxuICovXG5IZWFsdGhDaGVja0dyYWNlUGVyaW9kU2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byB0dXJuIG9uIEFtYXpvbiBFQ1MgbWFuYWdlZCB0YWdzIGZvciB0aGUgdGFza3Mgd2l0aGluIHRoZSBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYWdnaW5nIHlvdXIgQW1hem9uIEVDUyByZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy11c2luZy10YWdzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBXaGVuIHlvdSB1c2UgQW1hem9uIEVDUyBtYW5hZ2VkIHRhZ3MsIHlvdSBuZWVkIHRvIHNldCB0aGUgYGBwcm9wYWdhdGVUYWdzYGAgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKi9cbkVuYWJsZUVDU01hbmFnZWRUYWdzPzogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbmFsaXR5IGlzIHR1cm5lZCBvbiBmb3IgdGhlIHNlcnZpY2UuIElmIGBgdHJ1ZWBgLCB0aGUgZXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9uYWxpdHkgaXMgdHVybmVkIG9uIGZvciBhbGwgY29udGFpbmVycyBpbiB0YXNrcyBhcyBwYXJ0IG9mIHRoZSBzZXJ2aWNlLlxuICovXG5FbmFibGVFeGVjdXRlQ29tbWFuZD86IGJvb2xlYW5cbi8qKlxuICogQW4gYXJyYXkgb2YgcGxhY2VtZW50IGNvbnN0cmFpbnQgb2JqZWN0cyB0byB1c2UgZm9yIHRhc2tzIGluIHlvdXIgc2VydmljZS4gWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSBvZiAxMCBjb25zdHJhaW50cyBmb3IgZWFjaCB0YXNrLiBUaGlzIGxpbWl0IGluY2x1ZGVzIGNvbnN0cmFpbnRzIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYW5kIHRob3NlIHNwZWNpZmllZCBhdCBydW50aW1lLlxuICovXG5QbGFjZW1lbnRDb25zdHJhaW50cz86IFBsYWNlbWVudENvbnN0cmFpbnRbXVxuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBjbHVzdGVyIHRoYXQgeW91IHJ1biB5b3VyIHNlcnZpY2Ugb24uIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIGNsdXN0ZXIsIHRoZSBkZWZhdWx0IGNsdXN0ZXIgaXMgYXNzdW1lZC5cbiAqL1xuQ2x1c3Rlcj86IHN0cmluZ1xuLyoqXG4gKiBBIGxpc3Qgb2YgbG9hZCBiYWxhbmNlciBvYmplY3RzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBzZXJ2aWNlLiBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBSb2xlYGAgcHJvcGVydHksIGBgTG9hZEJhbGFuY2Vyc2BgIG11c3QgYmUgc3BlY2lmaWVkIGFzIHdlbGwuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbnVtYmVyIG9mIGxvYWQgYmFsYW5jZXJzIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHBlciBzZXJ2aWNlLCBzZWUgW1NlcnZpY2UgTG9hZCBCYWxhbmNpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtbG9hZC1iYWxhbmNpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Mb2FkQmFsYW5jZXJzPzogTG9hZEJhbGFuY2VyW11cblNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvbj86IFNlcnZpY2VDb25uZWN0Q29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIGluc3RhbnRpYXRpb25zIG9mIHRoZSBzcGVjaWZpZWQgdGFzayBkZWZpbml0aW9uIHRvIHBsYWNlIGFuZCBrZWVwIHJ1bm5pbmcgaW4geW91ciBzZXJ2aWNlLlxuICogIEZvciBuZXcgc2VydmljZXMsIGlmIGEgZGVzaXJlZCBjb3VudCBpcyBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgdmFsdWUgb2YgYGAxYGAgaXMgdXNlZC4gV2hlbiB1c2luZyB0aGUgYGBEQUVNT05gYCBzY2hlZHVsaW5nIHN0cmF0ZWd5LCB0aGUgZGVzaXJlZCBjb3VudCBpcyBub3QgcmVxdWlyZWQuXG4gKiAgRm9yIGV4aXN0aW5nIHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgb21pdHRlZCBmcm9tIHRoZSBvcGVyYXRpb24uXG4gKi9cbkRlc2lyZWRDb3VudD86IG51bWJlclxuLyoqXG4gKiBUaGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UgYmVpbmcgY3JlYXRlZC5cbiAqL1xuVnBjTGF0dGljZUNvbmZpZ3VyYXRpb25zPzogVnBjTGF0dGljZUNvbmZpZ3VyYXRpb25bXVxuRGVwbG95bWVudENvbnRyb2xsZXI/OiBEZXBsb3ltZW50Q29udHJvbGxlclxuLyoqXG4gKiBUaGUgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyBBbWF6b24gRUNTIHRvIG1ha2UgY2FsbHMgdG8geW91ciBsb2FkIGJhbGFuY2VyIG9uIHlvdXIgYmVoYWxmLiBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHBlcm1pdHRlZCBpZiB5b3UgYXJlIHVzaW5nIGEgbG9hZCBiYWxhbmNlciB3aXRoIHlvdXIgc2VydmljZSBhbmQgeW91ciB0YXNrIGRlZmluaXRpb24gZG9lc24ndCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLiBJZiB5b3Ugc3BlY2lmeSB0aGUgYGByb2xlYGAgcGFyYW1ldGVyLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgYSBsb2FkIGJhbGFuY2VyIG9iamVjdCB3aXRoIHRoZSBgYGxvYWRCYWxhbmNlcnNgYCBwYXJhbWV0ZXIuXG4gKiAgIElmIHlvdXIgYWNjb3VudCBoYXMgYWxyZWFkeSBjcmVhdGVkIHRoZSBBbWF6b24gRUNTIHNlcnZpY2UtbGlua2VkIHJvbGUsIHRoYXQgcm9sZSBpcyB1c2VkIGZvciB5b3VyIHNlcnZpY2UgdW5sZXNzIHlvdSBzcGVjaWZ5IGEgcm9sZSBoZXJlLiBUaGUgc2VydmljZS1saW5rZWQgcm9sZSBpcyByZXF1aXJlZCBpZiB5b3VyIHRhc2sgZGVmaW5pdGlvbiB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBvciBpZiB0aGUgc2VydmljZSBpcyBjb25maWd1cmVkIHRvIHVzZSBzZXJ2aWNlIGRpc2NvdmVyeSwgYW4gZXh0ZXJuYWwgZGVwbG95bWVudCBjb250cm9sbGVyLCBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzLCBvciBFbGFzdGljIEluZmVyZW5jZSBhY2NlbGVyYXRvcnMgaW4gd2hpY2ggY2FzZSB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHJvbGUgaGVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgc2VydmljZS1saW5rZWQgcm9sZXMgZm9yIEFtYXpvbiBFQ1NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nLXNlcnZpY2UtbGlua2VkLXJvbGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91ciBzcGVjaWZpZWQgcm9sZSBoYXMgYSBwYXRoIG90aGVyIHRoYW4gYGAvYGAsIHRoZW4geW91IG11c3QgZWl0aGVyIHNwZWNpZnkgdGhlIGZ1bGwgcm9sZSBBUk4gKHRoaXMgaXMgcmVjb21tZW5kZWQpIG9yIHByZWZpeCB0aGUgcm9sZSBuYW1lIHdpdGggdGhlIHBhdGguIEZvciBleGFtcGxlLCBpZiBhIHJvbGUgd2l0aCB0aGUgbmFtZSBgYGJhcmBgIGhhcyBhIHBhdGggb2YgYGAvZm9vL2BgIHRoZW4geW91IHdvdWxkIHNwZWNpZnkgYGAvZm9vL2JhcmBgIGFzIHRoZSByb2xlIG5hbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0ZyaWVuZGx5IG5hbWVzIGFuZCBwYXRoc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pZGVudGlmaWVycy5odG1sI2lkZW50aWZpZXJzLWZyaWVuZGx5LW5hbWVzKSBpbiB0aGUgKklBTSBVc2VyIEd1aWRlKi5cbiAqL1xuUm9sZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYGBmYW1pbHlgYCBhbmQgYGByZXZpc2lvbmBgIChgYGZhbWlseTpyZXZpc2lvbmBgKSBvciBmdWxsIEFSTiBvZiB0aGUgdGFzayBkZWZpbml0aW9uIHRvIHJ1biBpbiB5b3VyIHNlcnZpY2UuIElmIGEgYGByZXZpc2lvbmBgIGlzbid0IHNwZWNpZmllZCwgdGhlIGxhdGVzdCBgYEFDVElWRWBgIHJldmlzaW9uIGlzIHVzZWQuXG4gKiAgQSB0YXNrIGRlZmluaXRpb24gbXVzdCBiZSBzcGVjaWZpZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyBlaXRoZXIgdGhlIGBgRUNTYGAgb3IgYGBDT0RFX0RFUExPWWBgIGRlcGxveW1lbnQgY29udHJvbGxlcnMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGVwbG95bWVudCB0eXBlcywgc2VlIFtBbWF6b24gRUNTIGRlcGxveW1lbnQgdHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZXMuaHRtbCkuXG4gKi9cblRhc2tEZWZpbml0aW9uPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHlvdXIgc2VydmljZS4gVXAgdG8gMjU1IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgdW5kZXJzY29yZXMsIGFuZCBoeXBoZW5zIGFyZSBhbGxvd2VkLiBTZXJ2aWNlIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIGNsdXN0ZXIsIGJ1dCB5b3UgY2FuIGhhdmUgc2ltaWxhcmx5IG5hbWVkIHNlcnZpY2VzIGluIG11bHRpcGxlIGNsdXN0ZXJzIHdpdGhpbiBhIFJlZ2lvbiBvciBhY3Jvc3MgbXVsdGlwbGUgUmVnaW9ucy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgdGhlIGBgU2VydmljZU5hbWVgYCBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZU5hbWVgYCBtdXN0IGJlIHVuaXF1ZSBpbiB0aGUgY2x1c3Rlci5cbiAqL1xuU2VydmljZU5hbWU/OiBzdHJpbmdcbkRlcGxveW1lbnRDb25maWd1cmF0aW9uPzogRGVwbG95bWVudENvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIHRhc2sgcGxhY2VtZW50IHN0cmF0ZWd5IGZvciBhIHRhc2sgb3Igc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtc3RyYXRlZ2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50U3RyYXRlZ3kge1xuLyoqXG4gKiBUaGUgZmllbGQgdG8gYXBwbHkgdGhlIHBsYWNlbWVudCBzdHJhdGVneSBhZ2FpbnN0LiBGb3IgdGhlIGBgc3ByZWFkYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB2YWxpZCB2YWx1ZXMgYXJlIGBgaW5zdGFuY2VJZGBgIChvciBgYGhvc3RgYCwgd2hpY2ggaGFzIHRoZSBzYW1lIGVmZmVjdCksIG9yIGFueSBwbGF0Zm9ybSBvciBjdXN0b20gYXR0cmlidXRlIHRoYXQncyBhcHBsaWVkIHRvIGEgY29udGFpbmVyIGluc3RhbmNlLCBzdWNoIGFzIGBgYXR0cmlidXRlOmVjcy5hdmFpbGFiaWxpdHktem9uZWBgLiBGb3IgdGhlIGBgYmlucGFja2BgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGNwdWBgIGFuZCBgYG1lbW9yeWBgLiBGb3IgdGhlIGBgcmFuZG9tYGAgcGxhY2VtZW50IHN0cmF0ZWd5LCB0aGlzIGZpZWxkIGlzIG5vdCB1c2VkLlxuICovXG5GaWVsZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdHlwZSBvZiBwbGFjZW1lbnQgc3RyYXRlZ3kuIFRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSByYW5kb21seSBwbGFjZXMgdGFza3Mgb24gYXZhaWxhYmxlIGNhbmRpZGF0ZXMuIFRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSBzcHJlYWRzIHBsYWNlbWVudCBhY3Jvc3MgYXZhaWxhYmxlIGNhbmRpZGF0ZXMgZXZlbmx5IGJhc2VkIG9uIHRoZSBgYGZpZWxkYGAgcGFyYW1ldGVyLiBUaGUgYGBiaW5wYWNrYGAgc3RyYXRlZ3kgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzIHRoYXQgaGF2ZSB0aGUgbGVhc3QgYXZhaWxhYmxlIGFtb3VudCBvZiB0aGUgcmVzb3VyY2UgdGhhdCdzIHNwZWNpZmllZCB3aXRoIHRoZSBgYGZpZWxkYGAgcGFyYW1ldGVyLiBGb3IgZXhhbXBsZSwgaWYgeW91IGJpbnBhY2sgb24gbWVtb3J5LCBhIHRhc2sgaXMgcGxhY2VkIG9uIHRoZSBpbnN0YW5jZSB3aXRoIHRoZSBsZWFzdCBhbW91bnQgb2YgcmVtYWluaW5nIG1lbW9yeSBidXQgc3RpbGwgZW5vdWdoIHRvIHJ1biB0aGUgdGFzay5cbiAqL1xuVHlwZTogKFwiYmlucGFja1wiIHwgXCJyYW5kb21cIiB8IFwic3ByZWFkXCIpXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIGZvciB0aGUgc2VydmljZSByZWdpc3RyeS5cbiAqICBFYWNoIHNlcnZpY2UgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBvbmUgc2VydmljZSByZWdpc3RyeS4gTXVsdGlwbGUgc2VydmljZSByZWdpc3RyaWVzIGZvciBlYWNoIHNlcnZpY2UgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gKiAgV2hlbiB5b3UgYWRkLCB1cGRhdGUsIG9yIHJlbW92ZSB0aGUgc2VydmljZSByZWdpc3RyaWVzIGNvbmZpZ3VyYXRpb24sIEFtYXpvbiBFQ1Mgc3RhcnRzIGEgbmV3IGRlcGxveW1lbnQuIE5ldyB0YXNrcyBhcmUgcmVnaXN0ZXJlZCBhbmQgZGVyZWdpc3RlcmVkIHRvIHRoZSB1cGRhdGVkIHNlcnZpY2UgcmVnaXN0cnkgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlUmVnaXN0cnkge1xuLyoqXG4gKiBUaGUgY29udGFpbmVyIG5hbWUgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBicmlkZ2VgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IHNwZWNpZnkgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBhIHR5cGUgU1JWIEROUyByZWNvcmQgaXMgdXNlZCwgeW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gb3IgYSBgYHBvcnRgYCB2YWx1ZS4gSG93ZXZlciwgeW91IGNhbid0IHNwZWNpZnkgYm90aC5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCB2YWx1ZSB1c2VkIGlmIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZSBzcGVjaWZpZWQgYW4gU1JWIHJlY29yZC4gVGhpcyBmaWVsZCBtaWdodCBiZSB1c2VkIGlmIGJvdGggdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFuZCBTUlYgcmVjb3JkcyBhcmUgdXNlZC5cbiAqL1xuUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgcG9ydCB2YWx1ZSB0byBiZSB1c2VkIGZvciB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2UuIEl0J3MgYWxyZWFkeSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBicmlkZ2VgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IHNwZWNpZnkgYSBgYGNvbnRhaW5lck5hbWVgYCBhbmQgYGBjb250YWluZXJQb3J0YGAgY29tYmluYXRpb24gZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lclBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBUaGUgY3VycmVudGx5IHN1cHBvcnRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGlzIENNQVAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0ZVNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlU2VydmljZS5odG1sKS5cbiAqL1xuUmVnaXN0cnlBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgdm9sdW1lIHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFzIGEgdm9sdW1lIHRoYXQgaXMgY29uZmlndXJlZCBhdCBsYXVuY2ggdGltZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgdm9sdW1lIHR5cGUgaXMgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb24ge1xuTWFuYWdlZEVCU1ZvbHVtZT86IFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgdm9sdW1lLiBUaGlzIHZhbHVlIG11c3QgbWF0Y2ggdGhlIHZvbHVtZSBuYW1lIGZyb20gdGhlIGBgVm9sdW1lYGAgb2JqZWN0IGluIHRoZSB0YXNrIGRlZmluaXRpb24uXG4gKi9cbk5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIEFtYXpvbiBFQlMgdm9sdW1lIHRoYXQgQW1hem9uIEVDUyBjcmVhdGVzIGFuZCBtYW5hZ2VzIG9uIHlvdXIgYmVoYWxmLiBUaGVzZSBzZXR0aW5ncyBhcmUgdXNlZCB0byBjcmVhdGUgZWFjaCBBbWF6b24gRUJTIHZvbHVtZSwgd2l0aCBvbmUgdm9sdW1lIGNyZWF0ZWQgZm9yIGVhY2ggdGFzayBpbiB0aGUgc2VydmljZS4gVGhlIEFtYXpvbiBFQlMgdm9sdW1lcyBhcmUgdmlzaWJsZSBpbiB5b3VyIGFjY291bnQgaW4gdGhlIEFtYXpvbiBFQzIgY29uc29sZSBvbmNlIHRoZXkgYXJlIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZU1hbmFnZWRFQlNWb2x1bWVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIHNuYXBzaG90IHRoYXQgQW1hem9uIEVDUyB1c2VzIHRvIGNyZWF0ZSB0aGUgdm9sdW1lLiBZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIHNuYXBzaG90IElEIG9yIGEgdm9sdW1lIHNpemUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgU25hcHNob3RJZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuU25hcHNob3RJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdm9sdW1lIHR5cGUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgVm9sdW1lVHlwZWBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVCUyB2b2x1bWUgdHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlKi5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZvbHVtZSB0eXBlcy5cbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIFNTRDogYGBncDJgYHxgYGdwM2BgIFxuICogICArICBQcm92aXNpb25lZCBJT1BTIFNTRDogYGBpbzFgYHxgYGlvMmBgIFxuICogICArICBUaHJvdWdocHV0IE9wdGltaXplZCBIREQ6IGBgc3QxYGAgXG4gKiAgICsgIENvbGQgSEREOiBgYHNjMWBgIFxuICogICArICBNYWduZXRpYzogYGBzdGFuZGFyZGBgIFxuICogICBUaGUgbWFnbmV0aWMgdm9sdW1lIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBvbiBGYXJnYXRlLlxuICovXG5Wb2x1bWVUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBpZGVudGlmaWVyIG9mIHRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgdG8gdXNlIGZvciBBbWF6b24gRUJTIGVuY3J5cHRpb24uIFdoZW4gZW5jcnlwdGlvbiBpcyB0dXJuZWQgb24gYW5kIG5vIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IEFXUyBtYW5hZ2VkIGtleSBmb3IgQW1hem9uIEVCUyB2b2x1bWVzIGlzIHVzZWQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgS21zS2V5SWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKiAgICBBV1MgYXV0aGVudGljYXRlcyB0aGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IGFzeW5jaHJvbm91c2x5LiBUaGVyZWZvcmUsIGlmIHlvdSBzcGVjaWZ5IGFuIElELCBhbGlhcywgb3IgQVJOIHRoYXQgaXMgaW52YWxpZCwgdGhlIGFjdGlvbiBjYW4gYXBwZWFyIHRvIGNvbXBsZXRlLCBidXQgZXZlbnR1YWxseSBmYWlscy5cbiAqL1xuS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIHZvbHVtZS4gQW1hem9uIEVDUyBhcHBsaWVzIHNlcnZpY2UtbWFuYWdlZCB0YWdzIGJ5IGRlZmF1bHQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgVGFnU3BlY2lmaWNhdGlvbnMuTmBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuVGFnU3BlY2lmaWNhdGlvbnM/OiBFQlNUYWdTcGVjaWZpY2F0aW9uW11cbi8qKlxuICogVGhlIGZpbGVzeXN0ZW0gdHlwZSBmb3IgdGhlIHZvbHVtZS4gRm9yIHZvbHVtZXMgY3JlYXRlZCBmcm9tIGEgc25hcHNob3QsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIHNhbWUgZmlsZXN5c3RlbSB0eXBlIHRoYXQgdGhlIHZvbHVtZSB3YXMgdXNpbmcgd2hlbiB0aGUgc25hcHNob3Qgd2FzIGNyZWF0ZWQuIElmIHRoZXJlIGlzIGEgZmlsZXN5c3RlbSB0eXBlIG1pc21hdGNoLCB0aGUgdGFzayB3aWxsIGZhaWwgdG8gc3RhcnQuXG4gKiAgVGhlIGF2YWlsYWJsZSBMaW51eCBmaWxlc3lzdGVtIHR5cGVzIGFyZeKAqCBgYGV4dDNgYCwgYGBleHQ0YGAsIGFuZCBgYHhmc2BgLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBgYHhmc2BgIGZpbGVzeXN0ZW0gdHlwZSBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gKiAgVGhlIGF2YWlsYWJsZSBXaW5kb3dzIGZpbGVzeXN0ZW0gdHlwZXMgYXJlIGBgTlRGU2BgLlxuICovXG5GaWxlc3lzdGVtVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdm9sdW1lIHNob3VsZCBiZSBlbmNyeXB0ZWQuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgZW5jcnlwdGlvbiBpcyB0dXJuZWQgb24gYnkgZGVmYXVsdC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBFbmNyeXB0ZWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cbkVuY3J5cHRlZD86IGJvb2xlYW5cbi8qKlxuICogVGhlIHRocm91Z2hwdXQgdG8gcHJvdmlzaW9uIGZvciBhIHZvbHVtZSwgaW4gTWlCL3MsIHdpdGggYSBtYXhpbXVtIG9mIDEsMDAwIE1pQi9zLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRocm91Z2hwdXRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB0aGUgYGBncDNgYCB2b2x1bWUgdHlwZS5cbiAqL1xuVGhyb3VnaHB1dD86IG51bWJlclxuVm9sdW1lSW5pdGlhbGl6YXRpb25SYXRlPzogbnVtYmVyXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgSS9PIG9wZXJhdGlvbnMgcGVyIHNlY29uZCAoSU9QUykuIEZvciBgYGdwM2BgLCBgYGlvMWBgLCBhbmQgYGBpbzJgYCB2b2x1bWVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBJT1BTIHRoYXQgYXJlIHByb3Zpc2lvbmVkIGZvciB0aGUgdm9sdW1lLiBGb3IgYGBncDJgYCB2b2x1bWVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIGJhc2VsaW5lIHBlcmZvcm1hbmNlIG9mIHRoZSB2b2x1bWUgYW5kIHRoZSByYXRlIGF0IHdoaWNoIHRoZSB2b2x1bWUgYWNjdW11bGF0ZXMgSS9PIGNyZWRpdHMgZm9yIGJ1cnN0aW5nLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIGZvciBlYWNoIHZvbHVtZSB0eXBlLlxuICogICArICAgYGBncDNgYDogMywwMDAgLSAxNiwwMDAgSU9QU1xuICogICArICAgYGBpbzFgYDogMTAwIC0gNjQsMDAwIElPUFNcbiAqICAgKyAgIGBgaW8yYGA6IDEwMCAtIDI1NiwwMDAgSU9QU1xuICogICBcbiAqICBUaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgYGBpbzFgYCBhbmQgYGBpbzJgYCB2b2x1bWUgdHlwZXMuIFRoZSBkZWZhdWx0IGZvciBgYGdwM2BgIHZvbHVtZXMgaXMgYGAzLDAwMCBJT1BTYGAuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGBgc3QxYGAsIGBgc2MxYGAsIG9yIGBgc3RhbmRhcmRgYCB2b2x1bWUgdHlwZXMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBJb3BzYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5Jb3BzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBzaXplIG9mIHRoZSB2b2x1bWUgaW4gR2lCLiBZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIHZvbHVtZSBzaXplIG9yIGEgc25hcHNob3QgSUQuIElmIHlvdSBzcGVjaWZ5IGEgc25hcHNob3QgSUQsIHRoZSBzbmFwc2hvdCBzaXplIGlzIHVzZWQgZm9yIHRoZSB2b2x1bWUgc2l6ZSBieSBkZWZhdWx0LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhIHZvbHVtZSBzaXplIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc25hcHNob3Qgc2l6ZS4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBTaXplYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdm9sdW1lIHNpemUgdmFsdWVzIGZvciBlYWNoIHZvbHVtZSB0eXBlLlxuICogICArICAgYGBncDJgYCBhbmQgYGBncDNgYDogMS0xNiwzODRcbiAqICAgKyAgIGBgaW8xYGAgYW5kIGBgaW8yYGA6IDQtMTYsMzg0XG4gKiAgICsgICBgYHN0MWBgIGFuZCBgYHNjMWBgOiAxMjUtMTYsMzg0XG4gKiAgICsgICBgYHN0YW5kYXJkYGA6IDEtMSwwMjRcbiAqL1xuU2l6ZUluR2lCPzogbnVtYmVyXG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIElBTSByb2xlIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgdm9sdW1lLiBUaGlzIGlzIHRoZSBBbWF6b24gRUNTIGluZnJhc3RydWN0dXJlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBtYW5hZ2UgeW91ciBBV1MgaW5mcmFzdHJ1Y3R1cmUuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgQW1hem9uIEVDUy1tYW5hZ2VkIGBgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yVm9sdW1lc2BgIElBTSBwb2xpY3kgd2l0aCB0aGlzIHJvbGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2luZnJhc3RydWN0dXJlX0lBTV9yb2xlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDUyBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHRhZyBzcGVjaWZpY2F0aW9ucyBvZiBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFQlNUYWdTcGVjaWZpY2F0aW9uIHtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHByb3BhZ2F0ZSB0aGUgdGFncyBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gdG8g4oCodGhlIEFtYXpvbiBFQlMgdm9sdW1lLiBUYWdzIGNhbiBvbmx5IHByb3BhZ2F0ZSB0byBhIGBgU0VSVklDRWBgIHNwZWNpZmllZCBpbiDigKhgYFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uYGAuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIHRhZ3MgYXJlbid0IOKAqHByb3BhZ2F0ZWQuXG4gKi9cblByb3BhZ2F0ZVRhZ3M/OiAoXCJTRVJWSUNFXCIgfCBcIlRBU0tfREVGSU5JVElPTlwiKVxuLyoqXG4gKiBUaGUgdHlwZSBvZiB2b2x1bWUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlVHlwZTogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIGFwcGxpZWQgdG8gdGhpcyBBbWF6b24gRUJTIHZvbHVtZS4gYGBBbWF6b25FQ1NDcmVhdGVkYGAgYW5kIGBgQW1hem9uRUNTTWFuYWdlZGBgIGFyZSByZXNlcnZlZCB0YWdzIHRoYXQgY2FuJ3QgYmUgdXNlZC5cbiAqL1xuVGFncz86IFRhZ1tdXG59XG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byBhIHJlc291cmNlIHRvIGhlbHAgeW91IGNhdGVnb3JpemUgYW5kIG9yZ2FuaXplIHRoZW0uIEVhY2ggdGFnIGNvbnNpc3RzIG9mIGEga2V5IGFuZCBhbiBvcHRpb25hbCB2YWx1ZS4gWW91IGRlZmluZSB0aGVtLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVGhlIG9wdGlvbmFsIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGB2YWx1ZWBgIGFjdHMgYXMgYSBkZXNjcmlwdG9yIHdpdGhpbiBhIHRhZyBjYXRlZ29yeSAoa2V5KS5cbiAqL1xuVmFsdWU/OiBzdHJpbmdcbi8qKlxuICogT25lIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGBrZXlgYCBpcyBhIGdlbmVyYWwgbGFiZWwgdGhhdCBhY3RzIGxpa2UgYSBjYXRlZ29yeSBmb3IgbW9yZSBzcGVjaWZpYyB0YWcgdmFsdWVzLlxuICovXG5LZXk/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRldGFpbHMgb2YgYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS4gQSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBjYW4gYmUgc2V0IHdoZW4gdXNpbmcgdGhlIGBgUnVuVGFza2BgIG9yIGBgQ3JlYXRlU2VydmljZWBgIEFQSXMgb3IgYXMgdGhlIGRlZmF1bHQgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgZm9yIGEgY2x1c3RlciB3aXRoIHRoZSBgYENyZWF0ZUNsdXN0ZXJgYCBBUEkuXG4gKiAgT25seSBjYXBhY2l0eSBwcm92aWRlcnMgdGhhdCBhcmUgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBjbHVzdGVyIGFuZCBoYXZlIGFuIGBgQUNUSVZFYGAgb3IgYGBVUERBVElOR2BgIHN0YXR1cyBjYW4gYmUgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LiBUaGUgYGBQdXRDbHVzdGVyQ2FwYWNpdHlQcm92aWRlcnNgYCBBUEkgaXMgdXNlZCB0byBhc3NvY2lhdGUgYSBjYXBhY2l0eSBwcm92aWRlciB3aXRoIGEgY2x1c3Rlci5cbiAqICBJZiBzcGVjaWZ5aW5nIGEgY2FwYWNpdHkgcHJvdmlkZXIgdGhhdCB1c2VzIGFuIEF1dG8gU2NhbGluZyBncm91cCwgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIG11c3QgYWxyZWFkeSBiZSBjcmVhdGVkLiBOZXcgQXV0byBTY2FsaW5nIGdyb3VwIGNhcGFjaXR5IHByb3ZpZGVycyBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBgYENyZWF0ZUNhcGFjaXR5UHJvdmlkZXJgYCBBUEkgb3BlcmF0aW9uLlxuICogIFRvIHVzZSBhbiBGQVJHQVRFbG9uZyBjYXBhY2l0eSBwcm92aWRlciwgc3BlY2lmeSBlaXRoZXIgdGhlIGBgRkFSR0FURWBgIG9yIGBgRkFSR0FURV9TUE9UYGAgY2FwYWNpdHkgcHJvdmlkZXJzLiBUaGUgRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgdG8gYWxsIGFjY291bnRzIGFuZCBvbmx5IG5lZWQgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciB0byBiZSB1c2VkIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbSB7XG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBjYXBhY2l0eSBwcm92aWRlci5cbiAqL1xuQ2FwYWNpdHlQcm92aWRlcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgKmJhc2UqIHZhbHVlIGRlc2lnbmF0ZXMgaG93IG1hbnkgdGFza3MsIGF0IGEgbWluaW11bSwgdG8gcnVuIG9uIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgcHJvdmlkZXIuIE9ubHkgb25lIGNhcGFjaXR5IHByb3ZpZGVyIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGhhdmUgYSAqYmFzZSogZGVmaW5lZC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLlxuICovXG5CYXNlPzogbnVtYmVyXG4vKipcbiAqIFRoZSAqd2VpZ2h0KiB2YWx1ZSBkZXNpZ25hdGVzIHRoZSByZWxhdGl2ZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgdGFza3MgbGF1bmNoZWQgdGhhdCBzaG91bGQgdXNlIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgcHJvdmlkZXIuIFRoZSBgYHdlaWdodGBgIHZhbHVlIGlzIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBhZnRlciB0aGUgYGBiYXNlYGAgdmFsdWUsIGlmIGRlZmluZWQsIGlzIHNhdGlzZmllZC5cbiAqICBJZiBubyBgYHdlaWdodGBgIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC4gV2hlbiBtdWx0aXBsZSBjYXBhY2l0eSBwcm92aWRlcnMgYXJlIHNwZWNpZmllZCB3aXRoaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBjYXBhY2l0eSBwcm92aWRlcnMgbXVzdCBoYXZlIGEgd2VpZ2h0IHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBhbnkgY2FwYWNpdHkgcHJvdmlkZXJzIHdpdGggYSB3ZWlnaHQgb2YgYGAwYGAgY2FuJ3QgYmUgdXNlZCB0byBwbGFjZSB0YXNrcy4gSWYgeW91IHNwZWNpZnkgbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGluIGEgc3RyYXRlZ3kgdGhhdCBhbGwgaGF2ZSBhIHdlaWdodCBvZiBgYDBgYCwgYW55IGBgUnVuVGFza2BgIG9yIGBgQ3JlYXRlU2VydmljZWBgIGFjdGlvbnMgdXNpbmcgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHdpbGwgZmFpbC5cbiAqICBBbiBleGFtcGxlIHNjZW5hcmlvIGZvciB1c2luZyB3ZWlnaHRzIGlzIGRlZmluaW5nIGEgc3RyYXRlZ3kgdGhhdCBjb250YWlucyB0d28gY2FwYWNpdHkgcHJvdmlkZXJzIGFuZCBib3RoIGhhdmUgYSB3ZWlnaHQgb2YgYGAxYGAsIHRoZW4gd2hlbiB0aGUgYGBiYXNlYGAgaXMgc2F0aXNmaWVkLCB0aGUgdGFza3Mgd2lsbCBiZSBzcGxpdCBldmVubHkgYWNyb3NzIHRoZSB0d28gY2FwYWNpdHkgcHJvdmlkZXJzLiBVc2luZyB0aGF0IHNhbWUgbG9naWMsIGlmIHlvdSBzcGVjaWZ5IGEgd2VpZ2h0IG9mIGBgMWBgIGZvciAqY2FwYWNpdHlQcm92aWRlckEqIGFuZCBhIHdlaWdodCBvZiBgYDRgYCBmb3IgKmNhcGFjaXR5UHJvdmlkZXJCKiwgdGhlbiBmb3IgZXZlcnkgb25lIHRhc2sgdGhhdCdzIHJ1biB1c2luZyAqY2FwYWNpdHlQcm92aWRlckEqLCBmb3VyIHRhc2tzIHdvdWxkIHVzZSAqY2FwYWNpdHlQcm92aWRlckIqLlxuICovXG5XZWlnaHQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciB0YXNrIGRlZmluaXRpb25zIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSB0byByZWNlaXZlIHRoZWlyIG93biBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBhbmQgaXQgaXMgbm90IHN1cHBvcnRlZCBmb3Igb3RoZXIgbmV0d29yayBtb2Rlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBOZXR3b3JraW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLW5ldHdvcmtpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtDb25maWd1cmF0aW9uIHtcbkF3c3ZwY0NvbmZpZ3VyYXRpb24/OiBBd3NWcGNDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSBWUEMgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIHRhc2suXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzVnBjQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHNlY3VyaXR5IGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2sgb3Igc2VydmljZS4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBzZWN1cml0eSBncm91cCwgdGhlIGRlZmF1bHQgc2VjdXJpdHkgZ3JvdXAgZm9yIHRoZSBWUEMgaXMgdXNlZC4gVGhlcmUncyBhIGxpbWl0IG9mIDUgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBwZXIgYGBhd3N2cGNDb25maWd1cmF0aW9uYGAuXG4gKiAgIEFsbCBzcGVjaWZpZWQgc2VjdXJpdHkgZ3JvdXBzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cblNlY3VyaXR5R3JvdXBzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIElEcyBvZiB0aGUgc3VibmV0cyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2sgb3Igc2VydmljZS4gVGhlcmUncyBhIGxpbWl0IG9mIDE2IHN1Ym5ldHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIHBlciBgYGF3c3ZwY0NvbmZpZ3VyYXRpb25gYC5cbiAqICAgQWxsIHNwZWNpZmllZCBzdWJuZXRzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cblN1Ym5ldHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHRoZSB0YXNrJ3MgZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSByZWNlaXZlcyBhIHB1YmxpYyBJUCBhZGRyZXNzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgYEVOQUJMRURgYC5cbiAqL1xuQXNzaWduUHVibGljSXA/OiAoXCJESVNBQkxFRFwiIHwgXCJFTkFCTEVEXCIpXG59XG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb25zdHJhaW50IG9uIHRhc2sgcGxhY2VtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIHBsYWNlbWVudCBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtY29uc3RyYWludHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3UncmUgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGFyZW4ndCBzdXBwb3J0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50Q29uc3RyYWludCB7XG4vKipcbiAqIFRoZSB0eXBlIG9mIGNvbnN0cmFpbnQuIFVzZSBgYGRpc3RpbmN0SW5zdGFuY2VgYCB0byBlbnN1cmUgdGhhdCBlYWNoIHRhc2sgaW4gYSBwYXJ0aWN1bGFyIGdyb3VwIGlzIHJ1bm5pbmcgb24gYSBkaWZmZXJlbnQgY29udGFpbmVyIGluc3RhbmNlLiBVc2UgYGBtZW1iZXJPZmBgIHRvIHJlc3RyaWN0IHRoZSBzZWxlY3Rpb24gdG8gYSBncm91cCBvZiB2YWxpZCBjYW5kaWRhdGVzLlxuICovXG5UeXBlOiAoXCJkaXN0aW5jdEluc3RhbmNlXCIgfCBcIm1lbWJlck9mXCIpXG4vKipcbiAqIEEgY2x1c3RlciBxdWVyeSBsYW5ndWFnZSBleHByZXNzaW9uIHRvIGFwcGx5IHRvIHRoZSBjb25zdHJhaW50LiBUaGUgZXhwcmVzc2lvbiBjYW4gaGF2ZSBhIG1heGltdW0gbGVuZ3RoIG9mIDIwMDAgY2hhcmFjdGVycy4gWW91IGNhbid0IHNwZWNpZnkgYW4gZXhwcmVzc2lvbiBpZiB0aGUgY29uc3RyYWludCB0eXBlIGlzIGBgZGlzdGluY3RJbnN0YW5jZWBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDbHVzdGVyIHF1ZXJ5IGxhbmd1YWdlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jbHVzdGVyLXF1ZXJ5LWxhbmd1YWdlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRXhwcmVzc2lvbj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYGBMb2FkQmFsYW5jZXJgYCBwcm9wZXJ0eSBzcGVjaWZpZXMgZGV0YWlscyBvbiBhIGxvYWQgYmFsYW5jZXIgdGhhdCBpcyB1c2VkIHdpdGggYSBzZXJ2aWNlLlxuICogIElmIHRoZSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB0aGUgc2VydmljZSBpcyByZXF1aXJlZCB0byB1c2UgZWl0aGVyIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBXaGVuIHlvdSBhcmUgY3JlYXRpbmcgYW4gQUNEbG9uZyBkZXBsb3ltZW50IGdyb3VwLCB5b3Ugc3BlY2lmeSB0d28gdGFyZ2V0IGdyb3VwcyAocmVmZXJyZWQgdG8gYXMgYSBgYHRhcmdldEdyb3VwUGFpcmBgKS4gRWFjaCB0YXJnZXQgZ3JvdXAgYmluZHMgdG8gYSBzZXBhcmF0ZSB0YXNrIHNldCBpbiB0aGUgZGVwbG95bWVudC4gVGhlIGxvYWQgYmFsYW5jZXIgY2FuIGFsc28gaGF2ZSB1cCB0byB0d28gbGlzdGVuZXJzLCBhIHJlcXVpcmVkIGxpc3RlbmVyIGZvciBwcm9kdWN0aW9uIHRyYWZmaWMgYW5kIGFuIG9wdGlvbmFsIGxpc3RlbmVyIHRoYXQgYWxsb3dzIHlvdSB0byB0ZXN0IG5ldyByZXZpc2lvbnMgb2YgdGhlIHNlcnZpY2UgYmVmb3JlIHJvdXRpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIGl0LlxuICogIFNlcnZpY2VzIHdpdGggdGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIChmb3IgZXhhbXBsZSwgdGhvc2Ugd2l0aCB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSkgb25seSBzdXBwb3J0IEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzIGFuZCBOZXR3b3JrIExvYWQgQmFsYW5jZXJzLiBDbGFzc2ljIExvYWQgQmFsYW5jZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiBBbHNvLCB3aGVuIHlvdSBjcmVhdGUgYW55IHRhcmdldCBncm91cHMgZm9yIHRoZXNlIHNlcnZpY2VzLCB5b3UgbXVzdCBjaG9vc2UgYGBpcGBgIGFzIHRoZSB0YXJnZXQgdHlwZSwgbm90IGBgaW5zdGFuY2VgYC4gVGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgbm90IGFuIEFtYXpvbiBFQzIgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyIHtcbi8qKlxuICogVGhlIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgdGFyZ2V0IGdyb3VwIG9yIGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggYSBzZXJ2aWNlIG9yIHRhc2sgc2V0LlxuICogIEEgdGFyZ2V0IGdyb3VwIEFSTiBpcyBvbmx5IHNwZWNpZmllZCB3aGVuIHVzaW5nIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBcbiAqICBGb3Igc2VydmljZXMgdXNpbmcgdGhlIGBgRUNTYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UgY2FuIHNwZWNpZnkgb25lIG9yIG11bHRpcGxlIHRhcmdldCBncm91cHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JlZ2lzdGVyaW5nIG11bHRpcGxlIHRhcmdldCBncm91cHMgd2l0aCBhIHNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3JlZ2lzdGVyLW11bHRpcGxlLXRhcmdldGdyb3Vwcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIHNlcnZpY2VzIHVzaW5nIHRoZSBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UncmUgcmVxdWlyZWQgdG8gZGVmaW5lIHR3byB0YXJnZXQgZ3JvdXBzIGZvciB0aGUgbG9hZCBiYWxhbmNlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQmx1ZS9ncmVlbiBkZXBsb3ltZW50IHdpdGggQ29kZURlcGxveV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWJsdWVncmVlbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc2VydmljZSdzIHRhc2sgZGVmaW5pdGlvbiB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSwgeW91IG11c3QgY2hvb3NlIGBgaXBgYCBhcyB0aGUgdGFyZ2V0IHR5cGUsIG5vdCBgYGluc3RhbmNlYGAuIERvIHRoaXMgd2hlbiBjcmVhdGluZyB5b3VyIHRhcmdldCBncm91cHMgYmVjYXVzZSB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS4gVGhpcyBuZXR3b3JrIG1vZGUgaXMgcmVxdWlyZWQgZm9yIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLlxuICovXG5UYXJnZXRHcm91cEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbG9hZCBiYWxhbmNlciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIG9yIHRhc2sgc2V0LlxuICogIElmIHlvdSBhcmUgdXNpbmcgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBhIE5ldHdvcmsgTG9hZCBCYWxhbmNlciB0aGUgbG9hZCBiYWxhbmNlciBuYW1lIHBhcmFtZXRlciBzaG91bGQgYmUgb21pdHRlZC5cbiAqL1xuTG9hZEJhbGFuY2VyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIChhcyBpdCBhcHBlYXJzIGluIGEgY29udGFpbmVyIGRlZmluaXRpb24pIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLlxuICogIFlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGNvbnRhaW5lciBuYW1lIHdoZW4gY29uZmlndXJpbmcgdGhlIHRhcmdldCBncm91cCBmb3IgYW4gQW1hem9uIEVDUyBsb2FkIGJhbGFuY2VyLlxuICovXG5Db250YWluZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwb3J0IG9uIHRoZSBjb250YWluZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuIFRoaXMgcG9ydCBtdXN0IGNvcnJlc3BvbmQgdG8gYSBgYGNvbnRhaW5lclBvcnRgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBhcmUgdXNpbmcuIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgY29udGFpbmVyIGluc3RhbmNlIHRoZXkncmUgbGF1bmNoZWQgb24gbXVzdCBhbGxvdyBpbmdyZXNzIHRyYWZmaWMgb24gdGhlIGBgaG9zdFBvcnRgYCBvZiB0aGUgcG9ydCBtYXBwaW5nLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHNlcnZpY2UgdG8gZGlzY292ZXIgYW5kIGNvbm5lY3QgdG8gc2VydmljZXMsIGFuZCBiZSBkaXNjb3ZlcmVkIGJ5LCBhbmQgY29ubmVjdGVkIGZyb20sIG90aGVyIHNlcnZpY2VzIHdpdGhpbiBhIG5hbWVzcGFjZS5cbiAqICBUYXNrcyB0aGF0IHJ1biBpbiBhIG5hbWVzcGFjZSBjYW4gdXNlIHNob3J0IG5hbWVzIHRvIGNvbm5lY3QgdG8gc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY2FuIGNvbm5lY3QgdG8gc2VydmljZXMgYWNyb3NzIGFsbCBvZiB0aGUgY2x1c3RlcnMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY29ubmVjdCB0aHJvdWdoIGEgbWFuYWdlZCBwcm94eSBjb250YWluZXIgdGhhdCBjb2xsZWN0cyBsb2dzIGFuZCBtZXRyaWNzIGZvciBpbmNyZWFzZWQgdmlzaWJpbGl0eS4gT25seSB0aGUgdGFza3MgdGhhdCBBbWF6b24gRUNTIHNlcnZpY2VzIGNyZWF0ZSBhcmUgc3VwcG9ydGVkIHdpdGggU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGxpc3Qgb2YgU2VydmljZSBDb25uZWN0IHNlcnZpY2Ugb2JqZWN0cy4gVGhlc2UgYXJlIG5hbWVzIGFuZCBhbGlhc2VzIChhbHNvIGtub3duIGFzIGVuZHBvaW50cykgdGhhdCBhcmUgdXNlZCBieSBvdGhlciBBbWF6b24gRUNTIHNlcnZpY2VzIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLiBcbiAqICBUaGlzIGZpZWxkIGlzIG5vdCByZXF1aXJlZCBmb3IgYSBcImNsaWVudFwiIEFtYXpvbiBFQ1Mgc2VydmljZSB0aGF0J3MgYSBtZW1iZXIgb2YgYSBuYW1lc3BhY2Ugb25seSB0byBjb25uZWN0IHRvIG90aGVyIHNlcnZpY2VzIHdpdGhpbiB0aGUgbmFtZXNwYWNlLiBBbiBleGFtcGxlIG9mIHRoaXMgd291bGQgYmUgYSBmcm9udGVuZCBhcHBsaWNhdGlvbiB0aGF0IGFjY2VwdHMgaW5jb21pbmcgcmVxdWVzdHMgZnJvbSBlaXRoZXIgYSBsb2FkIGJhbGFuY2VyIHRoYXQncyBhdHRhY2hlZCB0byB0aGUgc2VydmljZSBvciBieSBvdGhlciBtZWFucy5cbiAqICBBbiBvYmplY3Qgc2VsZWN0cyBhIHBvcnQgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLCBhc3NpZ25zIGEgbmFtZSBmb3IgdGhlIENNQVBsb25nIHNlcnZpY2UsIGFuZCBhIGxpc3Qgb2YgYWxpYXNlcyAoZW5kcG9pbnRzKSBhbmQgcG9ydHMgZm9yIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gcmVmZXIgdG8gdGhpcyBzZXJ2aWNlLlxuICovXG5TZXJ2aWNlcz86IFNlcnZpY2VDb25uZWN0U2VydmljZVtdXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHVzZSBTZXJ2aWNlIENvbm5lY3Qgd2l0aCB0aGlzIHNlcnZpY2UuXG4gKi9cbkVuYWJsZWQ6IGJvb2xlYW5cbkxvZ0NvbmZpZ3VyYXRpb24/OiBMb2dDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBuYW1lc3BhY2UgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBDTUFQbG9uZyBuYW1lc3BhY2UgZm9yIHVzZSB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gVGhlIG5hbWVzcGFjZSBtdXN0IGJlIGluIHRoZSBzYW1lIEFXUyBSZWdpb24gYXMgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBhbmQgY2x1c3Rlci4gVGhlIHR5cGUgb2YgbmFtZXNwYWNlIGRvZXNuJ3QgYWZmZWN0IFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ01BUGxvbmcsIHNlZSBbV29ya2luZyB3aXRoIFNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9kZy93b3JraW5nLXdpdGgtc2VydmljZXMuaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5OYW1lc3BhY2U/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlIG9iamVjdCBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RTZXJ2aWNlIHtcblRpbWVvdXQ/OiBUaW1lb3V0Q29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgcG9ydCBudW1iZXIgZm9yIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkgdG8gbGlzdGVuIG9uLlxuICogIFVzZSB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCB0byBieXBhc3MgdGhlIHByb3h5IGZvciB0cmFmZmljIG9uIHRoZSBwb3J0IG51bWJlciBzcGVjaWZpZWQgaW4gdGhlIG5hbWVkIGBgcG9ydE1hcHBpbmdgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIG9mIHRoaXMgYXBwbGljYXRpb24sIGFuZCB0aGVuIHVzZSBpdCBpbiB5b3VyIFZQQyBzZWN1cml0eSBncm91cHMgdG8gYWxsb3cgdHJhZmZpYyBpbnRvIHRoZSBwcm94eSBmb3IgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKiAgSW4gYGBhd3N2cGNgYCBtb2RlIGFuZCBGYXJnYXRlLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgY29udGFpbmVyIHBvcnQgbnVtYmVyLiBUaGUgY29udGFpbmVyIHBvcnQgbnVtYmVyIGlzIGluIHRoZSBgYHBvcnRNYXBwaW5nYGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSW4gYnJpZGdlIG1vZGUsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBlcGhlbWVyYWwgcG9ydCBvZiB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5LlxuICovXG5JbmdyZXNzUG9ydE92ZXJyaWRlPzogbnVtYmVyXG4vKipcbiAqIFRoZSBsaXN0IG9mIGNsaWVudCBhbGlhc2VzIGZvciB0aGlzIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlLiBZb3UgdXNlIHRoZXNlIHRvIGFzc2lnbiBuYW1lcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbnMuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjbGllbnQgYWxpYXNlcyB0aGF0IHlvdSBjYW4gaGF2ZSBpbiB0aGlzIGxpc3QgaXMgMS5cbiAqICBFYWNoIGFsaWFzIChcImVuZHBvaW50XCIpIGlzIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgYW5kIHBvcnQgbnVtYmVyIHRoYXQgb3RoZXIgQW1hem9uIEVDUyB0YXNrcyAoXCJjbGllbnRzXCIpIGNhbiB1c2UgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuXG4gKiAgRWFjaCBuYW1lIGFuZCBwb3J0IG1hcHBpbmcgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBuYW1lc3BhY2UuXG4gKiAgRm9yIGVhY2ggYGBTZXJ2aWNlQ29ubmVjdFNlcnZpY2VgYCwgeW91IG11c3QgcHJvdmlkZSBhdCBsZWFzdCBvbmUgYGBjbGllbnRBbGlhc2BgIHdpdGggb25lIGBgcG9ydGBgLlxuICovXG5DbGllbnRBbGlhc2VzPzogU2VydmljZUNvbm5lY3RDbGllbnRBbGlhc1tdXG5UbHM/OiBTZXJ2aWNlQ29ubmVjdFRsc0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzIHRoZSBuYW1lIG9mIHRoZSBuZXcgQ01BUCBzZXJ2aWNlIHRoYXQgQW1hem9uIEVDUyBjcmVhdGVzIGZvciB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS4gVGhpcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIENNQVAgbmFtZXNwYWNlLiBUaGUgbmFtZSBjYW4gY29udGFpbiB1cCB0byA2NCBjaGFyYWN0ZXJzLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSBsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMgKF8pLCBhbmQgaHlwaGVucyAoLSkuIFRoZSBuYW1lIGNhbid0IHN0YXJ0IHdpdGggYSBoeXBoZW4uXG4gKiAgSWYgdGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzbid0IHNwZWNpZmllZCwgdGhlIHBvcnQgbWFwcGluZyBuYW1lIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiBpcyB1c2VkIGluIGBgcG9ydE5hbWUubmFtZXNwYWNlYGAuXG4gKi9cbkRpc2NvdmVyeU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgcG9ydE5hbWVgYCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGUgYGBwb3J0TWFwcGluZ3NgYCBmcm9tIGFsbCB0aGUgY29udGFpbmVycyBpbiB0aGUgdGFzayBkZWZpbml0aW9uIG9mIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLlxuICovXG5Qb3J0TmFtZTogc3RyaW5nXG59XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGNvbmZpZ3VyZWQgdGltZW91dHMgZm9yIFNlcnZpY2UgQ29ubmVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lb3V0Q29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSB3YWl0aW5nIGZvciB0aGUgdXBzdHJlYW0gdG8gcmVzcG9uZCB3aXRoIGEgY29tcGxldGUgcmVzcG9uc2UgcGVyIHJlcXVlc3QuIEEgdmFsdWUgb2YgYGAwYGAgY2FuIGJlIHNldCB0byBkaXNhYmxlIGBgcGVyUmVxdWVzdFRpbWVvdXRgYC4gYGBwZXJSZXF1ZXN0VGltZW91dGBgIGNhbiBvbmx5IGJlIHNldCBpZiBTZXJ2aWNlIENvbm5lY3QgYGBhcHBQcm90b2NvbGBgIGlzbid0IGBgVENQYGAuIE9ubHkgYGBpZGxlVGltZW91dGBgIGlzIGFsbG93ZWQgZm9yIGBgVENQYGAgYGBhcHBQcm90b2NvbGBgLlxuICovXG5QZXJSZXF1ZXN0VGltZW91dFNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgYSBjb25uZWN0aW9uIHdpbGwgc3RheSBhY3RpdmUgd2hpbGUgaWRsZS4gQSB2YWx1ZSBvZiBgYDBgYCBjYW4gYmUgc2V0IHRvIGRpc2FibGUgYGBpZGxlVGltZW91dGBgLlxuICogIFRoZSBgYGlkbGVUaW1lb3V0YGAgZGVmYXVsdCBmb3IgYGBIVFRQYGAvYGBIVFRQMmBgL2BgR1JQQ2BgIGlzIDUgbWludXRlcy5cbiAqICBUaGUgYGBpZGxlVGltZW91dGBgIGRlZmF1bHQgZm9yIGBgVENQYGAgaXMgMSBob3VyLlxuICovXG5JZGxlVGltZW91dFNlY29uZHM/OiBudW1iZXJcbn1cbi8qKlxuICogRWFjaCBhbGlhcyAoXCJlbmRwb2ludFwiKSBpcyBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGFuZCBwb3J0IG51bWJlciB0aGF0IG90aGVyIHRhc2tzIChcImNsaWVudHNcIikgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS5cbiAqICBFYWNoIG5hbWUgYW5kIHBvcnQgbWFwcGluZyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZS5cbiAqICBUYXNrcyB0aGF0IHJ1biBpbiBhIG5hbWVzcGFjZSBjYW4gdXNlIHNob3J0IG5hbWVzIHRvIGNvbm5lY3QgdG8gc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY2FuIGNvbm5lY3QgdG8gc2VydmljZXMgYWNyb3NzIGFsbCBvZiB0aGUgY2x1c3RlcnMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY29ubmVjdCB0aHJvdWdoIGEgbWFuYWdlZCBwcm94eSBjb250YWluZXIgdGhhdCBjb2xsZWN0cyBsb2dzIGFuZCBtZXRyaWNzIGZvciBpbmNyZWFzZWQgdmlzaWJpbGl0eS4gT25seSB0aGUgdGFza3MgdGhhdCBBbWF6b24gRUNTIHNlcnZpY2VzIGNyZWF0ZSBhcmUgc3VwcG9ydGVkIHdpdGggU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RDbGllbnRBbGlhcyB7XG4vKipcbiAqIFRoZSBgYGRuc05hbWVgYCBpcyB0aGUgbmFtZSB0aGF0IHlvdSB1c2UgaW4gdGhlIGFwcGxpY2F0aW9ucyBvZiBjbGllbnQgdGFza3MgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuIFRoZSBuYW1lIG11c3QgYmUgYSB2YWxpZCBETlMgbmFtZSBidXQgZG9lc24ndCBuZWVkIHRvIGJlIGZ1bGx5LXF1YWxpZmllZC4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgdXAgdG8gMTI3IGNoYXJhY3RlcnMuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcyAoXyksIGh5cGhlbnMgKC0pLCBhbmQgcGVyaW9kcyAoLikuIFRoZSBuYW1lIGNhbid0IHN0YXJ0IHdpdGggYSBoeXBoZW4uXG4gKiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYGRpc2NvdmVyeU5hbWUubmFtZXNwYWNlYGAgaXMgdXNlZC4gSWYgdGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzbid0IHNwZWNpZmllZCwgdGhlIHBvcnQgbWFwcGluZyBuYW1lIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiBpcyB1c2VkIGluIGBgcG9ydE5hbWUubmFtZXNwYWNlYGAuXG4gKiAgVG8gYXZvaWQgY2hhbmdpbmcgeW91ciBhcHBsaWNhdGlvbnMgaW4gY2xpZW50IEFtYXpvbiBFQ1Mgc2VydmljZXMsIHNldCB0aGlzIHRvIHRoZSBzYW1lIG5hbWUgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHVzZXMgYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIGEgZmV3IGNvbW1vbiBuYW1lcyBhcmUgYGBkYXRhYmFzZWBgLCBgYGRiYGAsIG9yIHRoZSBsb3dlcmNhc2UgbmFtZSBvZiBhIGRhdGFiYXNlLCBzdWNoIGFzIGBgbXlzcWxgYCBvciBgYHJlZGlzYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRG5zTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlzdGVuaW5nIHBvcnQgbnVtYmVyIGZvciB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5LiBUaGlzIHBvcnQgaXMgYXZhaWxhYmxlIGluc2lkZSBvZiBhbGwgb2YgdGhlIHRhc2tzIHdpdGhpbiB0aGUgc2FtZSBuYW1lc3BhY2UuXG4gKiAgVG8gYXZvaWQgY2hhbmdpbmcgeW91ciBhcHBsaWNhdGlvbnMgaW4gY2xpZW50IEFtYXpvbiBFQ1Mgc2VydmljZXMsIHNldCB0aGlzIHRvIHRoZSBzYW1lIHBvcnQgdGhhdCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHVzZXMgYnkgZGVmYXVsdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Qb3J0OiBudW1iZXJcbn1cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0VGxzQ29uZmlndXJhdGlvbiB7XG5Jc3N1ZXJDZXJ0aWZpY2F0ZUF1dGhvcml0eTogU2VydmljZUNvbm5lY3RUbHNDZXJ0aWZpY2F0ZUF1dGhvcml0eVxuLyoqXG4gKiBUaGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5LlxuICovXG5LbXNLZXk/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJQU0gcm9sZSB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBTZXJ2aWNlIENvbm5lY3QgVExTLlxuICovXG5Sb2xlQXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBzaWduZXIgY2VydGlmaWNhdGUgYXV0aG9yaXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0VGxzQ2VydGlmaWNhdGVBdXRob3JpdHkge1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgY2VydGlmaWNhdGUuXG4gKi9cbkF3c1BjYUF1dGhvcml0eUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBMb2dDb25maWdgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS1sb2ctZHJpdmVyYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgQnkgZGVmYXVsdCwgY29udGFpbmVycyB1c2UgdGhlIHNhbWUgbG9nZ2luZyBkcml2ZXIgdGhhdCB0aGUgRG9ja2VyIGRhZW1vbiB1c2VzLiBIb3dldmVyLCB0aGUgY29udGFpbmVyIG1pZ2h0IHVzZSBhIGRpZmZlcmVudCBsb2dnaW5nIGRyaXZlciB0aGFuIHRoZSBEb2NrZXIgZGFlbW9uIGJ5IHNwZWNpZnlpbmcgYSBsb2cgZHJpdmVyIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGNvbnRhaW5lciBkZWZpbml0aW9uLlxuICogIFVuZGVyc3RhbmQgdGhlIGZvbGxvd2luZyB3aGVuIHNwZWNpZnlpbmcgYSBsb2cgY29uZmlndXJhdGlvbiBmb3IgeW91ciBjb250YWluZXJzLlxuICogICArICBBbWF6b24gRUNTIGN1cnJlbnRseSBzdXBwb3J0cyBhIHN1YnNldCBvZiB0aGUgbG9nZ2luZyBkcml2ZXJzIGF2YWlsYWJsZSB0byB0aGUgRG9ja2VyIGRhZW1vbi4gQWRkaXRpb25hbCBsb2cgZHJpdmVycyBtYXkgYmUgYXZhaWxhYmxlIGluIGZ1dHVyZSByZWxlYXNlcyBvZiB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQuXG4gKiAgRm9yIHRhc2tzIG9uIEZBUkdBVEVsb25nLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgdGFza3MgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBmbHVlbnRkYGAsIGBgZ2VsZmBgLCBgYGpzb24tZmlsZWBgLCBgYGpvdXJuYWxkYGAsYGBzeXNsb2dgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICAgKyAgVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjE4IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLlxuICogICArICBGb3IgdGFza3MgdGhhdCBhcmUgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgbXVzdCByZWdpc3RlciB0aGUgYXZhaWxhYmxlIGxvZ2dpbmcgZHJpdmVycyB3aXRoIHRoZSBgYEVDU19BVkFJTEFCTEVfTE9HR0lOR19EUklWRVJTYGAgZW52aXJvbm1lbnQgdmFyaWFibGUgYmVmb3JlIGNvbnRhaW5lcnMgcGxhY2VkIG9uIHRoYXQgaW5zdGFuY2UgY2FuIHVzZSB0aGVzZSBsb2cgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBjb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtYWdlbnQtY29uZmlnLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgKyAgRm9yIHRhc2tzIHRoYXQgYXJlIG9uIEZBUkdBVEVsb25nLCBiZWNhdXNlIHlvdSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSB5b3VyIHRhc2tzIGFyZSBob3N0ZWQgb24sIGFueSBhZGRpdGlvbmFsIHNvZnR3YXJlIG5lZWRlZCBtdXN0IGJlIGluc3RhbGxlZCBvdXRzaWRlIG9mIHRoZSB0YXNrLiBGb3IgZXhhbXBsZSwgdGhlIEZsdWVudGQgb3V0cHV0IGFnZ3JlZ2F0b3JzIG9yIGEgcmVtb3RlIGhvc3QgcnVubmluZyBMb2dzdGFzaCB0byBzZW5kIEdlbGYgbG9ncyB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIHNlY3JldHMgdG8gcGFzcyB0byB0aGUgbG9nIGNvbmZpZ3VyYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgc2Vuc2l0aXZlIGRhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5TZWNyZXRPcHRpb25zPzogU2VjcmV0W11cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBzZW5kIHRvIHRoZSBsb2cgZHJpdmVyLlxuICogIFRoZSBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSBkZXBlbmQgb24gdGhlIGxvZyBkcml2ZXIuIFNvbWUgb2YgdGhlIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IHdoZW4geW91IHVzZSB0aGUgYGBhd3Nsb2dzYGAgbG9nIGRyaXZlciB0byByb3V0ZSBsb2dzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIGluY2x1ZGUgdGhlIGZvbGxvd2luZzpcbiAqICAgKyBhd3Nsb2dzLWNyZWF0ZS1ncm91cCBSZXF1aXJlZDogTm8gU3BlY2lmeSB3aGV0aGVyIHlvdSB3YW50IHRoZSBsb2cgZ3JvdXAgdG8gYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LiBJZiB0aGlzIG9wdGlvbiBpc24ndCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGZhbHNlLiBZb3VyIElBTSBwb2xpY3kgbXVzdCBpbmNsdWRlIHRoZSBsb2dzOkNyZWF0ZUxvZ0dyb3VwIHBlcm1pc3Npb24gYmVmb3JlIHlvdSBhdHRlbXB0IHRvIHVzZSBhd3Nsb2dzLWNyZWF0ZS1ncm91cC4gKyBhd3Nsb2dzLXJlZ2lvbiBSZXF1aXJlZDogWWVzIFNwZWNpZnkgdGhlIFJlZ2lvbiB0aGF0IHRoZSBhd3Nsb2dzIGxvZyBkcml2ZXIgaXMgdG8gc2VuZCB5b3VyIERvY2tlciBsb2dzIHRvLiBZb3UgY2FuIGNob29zZSB0byBzZW5kIGFsbCBvZiB5b3VyIGxvZ3MgZnJvbSBjbHVzdGVycyBpbiBkaWZmZXJlbnQgUmVnaW9ucyB0byBhIHNpbmdsZSByZWdpb24gaW4gQ2xvdWRXYXRjaCBMb2dzLiBUaGlzIGlzIHNvIHRoYXQgdGhleSdyZSBhbGwgdmlzaWJsZSBpbiBvbmUgbG9jYXRpb24uIE90aGVyd2lzZSwgeW91IGNhbiBzZXBhcmF0ZSB0aGVtIGJ5IFJlZ2lvbiBmb3IgbW9yZSBncmFudWxhcml0eS4gTWFrZSBzdXJlIHRoYXQgdGhlIHNwZWNpZmllZCBsb2cgZ3JvdXAgZXhpc3RzIGluIHRoZSBSZWdpb24gdGhhdCB5b3Ugc3BlY2lmeSB3aXRoIHRoaXMgb3B0aW9uLiArIGF3c2xvZ3MtZ3JvdXAgUmVxdWlyZWQ6IFllcyBNYWtlIHN1cmUgdG8gc3BlY2lmeSBhIGxvZyBncm91cCB0aGF0IHRoZSBhd3Nsb2dzIGxvZyBkcml2ZXIgc2VuZHMgaXRzIGxvZyBzdHJlYW1zIHRvLiArIGF3c2xvZ3Mtc3RyZWFtLXByZWZpeCBSZXF1aXJlZDogWWVzLCB3aGVuIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLk9wdGlvbmFsIGZvciB0aGUgRUMyIGxhdW5jaCB0eXBlLCByZXF1aXJlZCBmb3IgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuIFVzZSB0aGUgYXdzbG9ncy1zdHJlYW0tcHJlZml4IG9wdGlvbiB0byBhc3NvY2lhdGUgYSBsb2cgc3RyZWFtIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXgsIHRoZSBjb250YWluZXIgbmFtZSwgYW5kIHRoZSBJRCBvZiB0aGUgQW1hem9uIEVDUyB0YXNrIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLiBJZiB5b3Ugc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLCB0aGVuIHRoZSBsb2cgc3RyZWFtIHRha2VzIHRoZSBmb3JtYXQgcHJlZml4LW5hbWUvY29udGFpbmVyLW5hbWUvZWNzLXRhc2staWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24sIHRoZW4gdGhlIGxvZyBzdHJlYW0gaXMgbmFtZWQgYWZ0ZXIgdGhlIGNvbnRhaW5lciBJRCB0aGF0J3MgYXNzaWduZWQgYnkgdGhlIERvY2tlciBkYWVtb24gb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZS4gQmVjYXVzZSBpdCdzIGRpZmZpY3VsdCB0byB0cmFjZSBsb2dzIGJhY2sgdG8gdGhlIGNvbnRhaW5lciB0aGF0IHNlbnQgdGhlbSB3aXRoIGp1c3QgdGhlIERvY2tlciBjb250YWluZXIgSUQgKHdoaWNoIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UpLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3Ugc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLiBGb3IgQW1hem9uIEVDUyBzZXJ2aWNlcywgeW91IGNhbiB1c2UgdGhlIHNlcnZpY2UgbmFtZSBhcyB0aGUgcHJlZml4LiBEb2luZyBzbywgeW91IGNhbiB0cmFjZSBsb2cgc3RyZWFtcyB0byB0aGUgc2VydmljZSB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0bywgdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0aGF0IHNlbnQgdGhlbSwgYW5kIHRoZSBJRCBvZiB0aGUgdGFzayB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0by4gWW91IG11c3Qgc3BlY2lmeSBhIHN0cmVhbS1wcmVmaXggZm9yIHlvdXIgbG9ncyB0byBoYXZlIHlvdXIgbG9ncyBhcHBlYXIgaW4gdGhlIExvZyBwYW5lIHdoZW4gdXNpbmcgdGhlIEFtYXpvbiBFQ1MgY29uc29sZS4gKyBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBSZXF1aXJlZDogTm8gVGhpcyBvcHRpb24gZGVmaW5lcyBhIG11bHRpbGluZSBzdGFydCBwYXR0ZXJuIGluIFB5dGhvbiBzdHJmdGltZSBmb3JtYXQuIEEgbG9nIG1lc3NhZ2UgY29uc2lzdHMgb2YgYSBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybiBhbmQgYW55IGZvbGxvd2luZyBsaW5lcyB0aGF0IGRvbuKAmXQgbWF0Y2ggdGhlIHBhdHRlcm4uIFRoZSBtYXRjaGVkIGxpbmUgaXMgdGhlIGRlbGltaXRlciBiZXR3ZWVuIGxvZyBtZXNzYWdlcy4gT25lIGV4YW1wbGUgb2YgYSB1c2UgY2FzZSBmb3IgdXNpbmcgdGhpcyBmb3JtYXQgaXMgZm9yIHBhcnNpbmcgb3V0cHV0IHN1Y2ggYXMgYSBzdGFjayBkdW1wLCB3aGljaCBtaWdodCBvdGhlcndpc2UgYmUgbG9nZ2VkIGluIG11bHRpcGxlIGVudHJpZXMuIFRoZSBjb3JyZWN0IHBhdHRlcm4gYWxsb3dzIGl0IHRvIGJlIGNhcHR1cmVkIGluIGEgc2luZ2xlIGVudHJ5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0LiBZb3UgY2Fubm90IGNvbmZpZ3VyZSBib3RoIHRoZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBhbmQgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybiBvcHRpb25zLiBNdWx0aWxpbmUgbG9nZ2luZyBwZXJmb3JtcyByZWd1bGFyIGV4cHJlc3Npb24gcGFyc2luZyBhbmQgbWF0Y2hpbmcgb2YgYWxsIGxvZyBtZXNzYWdlcy4gVGhpcyBtaWdodCBoYXZlIGEgbmVnYXRpdmUgaW1wYWN0IG9uIGxvZ2dpbmcgcGVyZm9ybWFuY2UuICsgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybiBSZXF1aXJlZDogTm8gVGhpcyBvcHRpb24gZGVmaW5lcyBhIG11bHRpbGluZSBzdGFydCBwYXR0ZXJuIHRoYXQgdXNlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gQSBsb2cgbWVzc2FnZSBjb25zaXN0cyBvZiBhIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGFuZCBhbnkgZm9sbG93aW5nIGxpbmVzIHRoYXQgZG9u4oCZdCBtYXRjaCB0aGUgcGF0dGVybi4gVGhlIG1hdGNoZWQgbGluZSBpcyB0aGUgZGVsaW1pdGVyIGJldHdlZW4gbG9nIG1lc3NhZ2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4uIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgaWYgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgaXMgYWxzbyBjb25maWd1cmVkLiBZb3UgY2Fubm90IGNvbmZpZ3VyZSBib3RoIHRoZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBhbmQgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybiBvcHRpb25zLiBNdWx0aWxpbmUgbG9nZ2luZyBwZXJmb3JtcyByZWd1bGFyIGV4cHJlc3Npb24gcGFyc2luZyBhbmQgbWF0Y2hpbmcgb2YgYWxsIGxvZyBtZXNzYWdlcy4gVGhpcyBtaWdodCBoYXZlIGEgbmVnYXRpdmUgaW1wYWN0IG9uIGxvZ2dpbmcgcGVyZm9ybWFuY2UuICsgbW9kZSBSZXF1aXJlZDogTm8gVmFsaWQgdmFsdWVzOiBub24tYmxvY2tpbmcgfCBibG9ja2luZyBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBkZWxpdmVyeSBtb2RlIG9mIGxvZyBtZXNzYWdlcyBmcm9tIHRoZSBjb250YWluZXIgdG8gQ2xvdWRXYXRjaCBMb2dzLiBUaGUgZGVsaXZlcnkgbW9kZSB5b3UgY2hvb3NlIGFmZmVjdHMgYXBwbGljYXRpb24gYXZhaWxhYmlsaXR5IHdoZW4gdGhlIGZsb3cgb2YgbG9ncyBmcm9tIGNvbnRhaW5lciB0byBDbG91ZFdhdGNoIGlzIGludGVycnVwdGVkLiBJZiB5b3UgdXNlIHRoZSBibG9ja2luZyBtb2RlIGFuZCB0aGUgZmxvdyBvZiBsb2dzIHRvIENsb3VkV2F0Y2ggaXMgaW50ZXJydXB0ZWQsIGNhbGxzIGZyb20gY29udGFpbmVyIGNvZGUgdG8gd3JpdGUgdG8gdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHN0cmVhbXMgd2lsbCBibG9jay4gVGhlIGxvZ2dpbmcgdGhyZWFkIG9mIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJsb2NrIGFzIGEgcmVzdWx0LiBUaGlzIG1heSBjYXVzZSB0aGUgYXBwbGljYXRpb24gdG8gYmVjb21lIHVucmVzcG9uc2l2ZSBhbmQgbGVhZCB0byBjb250YWluZXIgaGVhbHRoY2hlY2sgZmFpbHVyZS4gSWYgeW91IHVzZSB0aGUgbm9uLWJsb2NraW5nIG1vZGUsIHRoZSBjb250YWluZXIncyBsb2dzIGFyZSBpbnN0ZWFkIHN0b3JlZCBpbiBhbiBpbi1tZW1vcnkgaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb25maWd1cmVkIHdpdGggdGhlIG1heC1idWZmZXItc2l6ZSBvcHRpb24uIFRoaXMgcHJldmVudHMgdGhlIGFwcGxpY2F0aW9uIGZyb20gYmVjb21pbmcgdW5yZXNwb25zaXZlIHdoZW4gbG9ncyBjYW5ub3QgYmUgc2VudCB0byBDbG91ZFdhdGNoLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhpcyBtb2RlIGlmIHlvdSB3YW50IHRvIGVuc3VyZSBzZXJ2aWNlIGF2YWlsYWJpbGl0eSBhbmQgYXJlIG9rYXkgd2l0aCBzb21lIGxvZyBsb3NzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFByZXZlbnRpbmcgbG9nIGxvc3Mgd2l0aCBub24tYmxvY2tpbmcgbW9kZSBpbiB0aGUgYXdzbG9ncyBjb250YWluZXIgbG9nIGRyaXZlci4gKyBtYXgtYnVmZmVyLXNpemUgUmVxdWlyZWQ6IE5vIERlZmF1bHQgdmFsdWU6IDFtIFdoZW4gbm9uLWJsb2NraW5nIG1vZGUgaXMgdXNlZCwgdGhlIG1heC1idWZmZXItc2l6ZSBsb2cgb3B0aW9uIGNvbnRyb2xzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdGhhdCdzIHVzZWQgZm9yIGludGVybWVkaWF0ZSBtZXNzYWdlIHN0b3JhZ2UuIE1ha2Ugc3VyZSB0byBzcGVjaWZ5IGFuIGFkZXF1YXRlIGJ1ZmZlciBzaXplIGJhc2VkIG9uIHlvdXIgYXBwbGljYXRpb24uIFdoZW4gdGhlIGJ1ZmZlciBmaWxscyB1cCwgZnVydGhlciBsb2dzIGNhbm5vdCBiZSBzdG9yZWQuIExvZ3MgdGhhdCBjYW5ub3QgYmUgc3RvcmVkIGFyZSBsb3N0LiBcbiAqICBUbyByb3V0ZSBsb2dzIHVzaW5nIHRoZSBgYHNwbHVua2BgIGxvZyByb3V0ZXIsIHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBgYHNwbHVuay10b2tlbmBgIGFuZCBhIGBgc3BsdW5rLXVybGBgLlxuICogIFdoZW4geW91IHVzZSB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyByb3V0ZXIgdG8gcm91dGUgbG9ncyB0byBhbiBBV1MgU2VydmljZSBvciBBV1MgUGFydG5lciBOZXR3b3JrIGRlc3RpbmF0aW9uIGZvciBsb2cgc3RvcmFnZSBhbmQgYW5hbHl0aWNzLCB5b3UgY2FuIHNldCB0aGUgYGBsb2ctZHJpdmVyLWJ1ZmZlci1saW1pdGBgIG9wdGlvbiB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGV2ZW50cyB0aGF0IGFyZSBidWZmZXJlZCBpbiBtZW1vcnksIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBsb2cgcm91dGVyIGNvbnRhaW5lci4gSXQgY2FuIGhlbHAgdG8gcmVzb2x2ZSBwb3RlbnRpYWwgbG9nIGxvc3MgaXNzdWUgYmVjYXVzZSBoaWdoIHRocm91Z2hwdXQgbWlnaHQgcmVzdWx0IGluIG1lbW9yeSBydW5uaW5nIG91dCBmb3IgdGhlIGJ1ZmZlciBpbnNpZGUgb2YgRG9ja2VyLlxuICogIE90aGVyIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IHdoZW4gdXNpbmcgYGBhd3NmaXJlbGVuc2BgIHRvIHJvdXRlIGxvZ3MgZGVwZW5kIG9uIHRoZSBkZXN0aW5hdGlvbi4gV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIERhdGEgRmlyZWhvc2UsIHlvdSBjYW4gc3BlY2lmeSB0aGUgQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgbmFtZSBmb3IgdGhlIGxvZyBzdHJlYW0gd2l0aCBgYGRlbGl2ZXJ5X3N0cmVhbWBgLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBLaW5lc2lzIERhdGEgU3RyZWFtcywgeW91IGNhbiBzcGVjaWZ5IGFuIEFXUyBSZWdpb24gd2l0aCBgYHJlZ2lvbmBgIGFuZCBhIGRhdGEgc3RyZWFtIG5hbWUgd2l0aCBgYHN0cmVhbWBgLlxuICogICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlLCB5b3UgY2FuIHNwZWNpZnkgb3B0aW9ucyBsaWtlIGBgTmFtZWBgLCBgYEhvc3RgYCAoT3BlblNlYXJjaCBTZXJ2aWNlIGVuZHBvaW50IHdpdGhvdXQgcHJvdG9jb2wpLCBgYFBvcnRgYCwgYGBJbmRleGBgLCBgYFR5cGVgYCwgYGBBd3NfYXV0aGBgLCBgYEF3c19yZWdpb25gYCwgYGBTdXBwcmVzc19UeXBlX05hbWVgYCwgYW5kIGBgdGxzYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VuZGVyIHRoZSBob29kOiBGaXJlTGVucyBmb3IgQW1hem9uIEVDUyBUYXNrc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvbnRhaW5lcnMvdW5kZXItdGhlLWhvb2QtZmlyZWxlbnMtZm9yLWFtYXpvbi1lY3MtdGFza3MvKS5cbiAqICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gUzMsIHlvdSBjYW4gc3BlY2lmeSB0aGUgYnVja2V0IHVzaW5nIHRoZSBgYGJ1Y2tldGBgIG9wdGlvbi4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYGByZWdpb25gYCwgYGB0b3RhbF9maWxlX3NpemVgYCwgYGB1cGxvYWRfdGltZW91dGBgLCBhbmQgYGB1c2VfcHV0X29iamVjdGBgIGFzIG9wdGlvbnMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjE5IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLiBUbyBjaGVjayB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgdmVyc2lvbiBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSwgbG9nIGluIHRvIHlvdXIgY29udGFpbmVyIGluc3RhbmNlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOiBgYHN1ZG8gZG9ja2VyIHZlcnNpb24gLS1mb3JtYXQgJ3t7LlNlcnZlci5BUElWZXJzaW9ufX0nYGBcbiAqL1xuT3B0aW9ucz86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLnsxLH1cIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIGRyaXZlciB0byB1c2UgZm9yIHRoZSBjb250YWluZXIuXG4gKiAgRm9yIHRhc2tzIG9uIEZBUkdBVEVsb25nLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgdGFza3MgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBmbHVlbnRkYGAsIGBgZ2VsZmBgLCBgYGpzb24tZmlsZWBgLCBgYGpvdXJuYWxkYGAsIGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gQ2xvdWRXYXRjaF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfYXdzbG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzZmlyZWxlbnNgYCBsb2cgZHJpdmVyLCBzZWUgW1NlbmQgQW1hem9uIEVDUyBsb2dzIHRvIGFuIHNlcnZpY2Ugb3IgUGFydG5lcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfZmlyZWxlbnMuaHRtbCkuXG4gKiAgIElmIHlvdSBoYXZlIGEgY3VzdG9tIGRyaXZlciB0aGF0IGlzbid0IGxpc3RlZCwgeW91IGNhbiBmb3JrIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBwcm9qZWN0IHRoYXQncyBbYXZhaWxhYmxlIG9uIEdpdEh1Yl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYW1hem9uLWVjcy1hZ2VudCkgYW5kIGN1c3RvbWl6ZSBpdCB0byB3b3JrIHdpdGggdGhhdCBkcml2ZXIuIFdlIGVuY291cmFnZSB5b3UgdG8gc3VibWl0IHB1bGwgcmVxdWVzdHMgZm9yIGNoYW5nZXMgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBoYXZlIGluY2x1ZGVkLiBIb3dldmVyLCB3ZSBkb24ndCBjdXJyZW50bHkgcHJvdmlkZSBzdXBwb3J0IGZvciBydW5uaW5nIG1vZGlmaWVkIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLlxuICovXG5Mb2dEcml2ZXI/OiBzdHJpbmdcbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2VjcmV0IHRvIGV4cG9zZSB0byB5b3VyIGNvbnRhaW5lci4gU2VjcmV0cyBjYW4gYmUgZXhwb3NlZCB0byBhIGNvbnRhaW5lciBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAgICsgIFRvIGluamVjdCBzZW5zaXRpdmUgZGF0YSBpbnRvIHlvdXIgY29udGFpbmVycyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHVzZSB0aGUgYGBzZWNyZXRzYGAgY29udGFpbmVyIGRlZmluaXRpb24gcGFyYW1ldGVyLlxuICogICArICBUbyByZWZlcmVuY2Ugc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIHRoZSBsb2cgY29uZmlndXJhdGlvbiBvZiBhIGNvbnRhaW5lciwgdXNlIHRoZSBgYHNlY3JldE9wdGlvbnNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgc2Vuc2l0aXZlIGRhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldCB7XG4vKipcbiAqIFRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHRoZSBjb250YWluZXIuIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9mIHRoZSBBU01sb25nIHNlY3JldCBvciB0aGUgZnVsbCBBUk4gb2YgdGhlIHBhcmFtZXRlciBpbiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZS5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVpcmUgSUFNbG9uZyBwZXJtaXNzaW9ucywgc2VlIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1zZWNyZXRzLmh0bWwjc2VjcmV0cy1pYW0pIChmb3IgU2VjcmV0cyBNYW5hZ2VyKSBvciBbUmVxdWlyZWQgSUFNIHBlcm1pc3Npb25zIGZvciBBbWF6b24gRUNTIHNlY3JldHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEtcGFyYW1ldGVycy5odG1sKSAoZm9yIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgc3RvcmUpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgdGhlIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGFyYW1ldGVyIGV4aXN0cyBpbiB0aGUgc2FtZSBSZWdpb24gYXMgdGhlIHRhc2sgeW91J3JlIGxhdW5jaGluZywgdGhlbiB5b3UgY2FuIHVzZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9yIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4gSWYgdGhlIHBhcmFtZXRlciBleGlzdHMgaW4gYSBkaWZmZXJlbnQgUmVnaW9uLCB0aGVuIHRoZSBmdWxsIEFSTiBtdXN0IGJlIHNwZWNpZmllZC5cbiAqL1xuVmFsdWVGcm9tOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHNlY3JldC5cbiAqL1xuTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uIGZvciB5b3VyIHNlcnZpY2UgdGhhdCBob2xkcyB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSB0YXJnZXQgZ3JvdXAocykgQW1hem9uIEVDUyB0YXNrcyB3aWxsIGJlIHJlZ2lzdGVyZWQgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjTGF0dGljZUNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgdGFyZ2V0IGdyb3VwIG9yIGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggdGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gdGhhdCB0aGUgQW1hem9uIEVDUyB0YXNrcyB3aWxsIGJlIHJlZ2lzdGVyZWQgdG8uXG4gKi9cblRhcmdldEdyb3VwQXJuOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHBvcnQgbWFwcGluZyB0byByZWdpc3RlciBpbiB0aGUgVlBDIExhdHRpY2UgdGFyZ2V0IGdyb3VwLiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBgYHBvcnRNYXBwaW5nYGAgeW91IGRlZmluZWQgaW4geW91ciB0YXNrIGRlZmluaXRpb24uXG4gKi9cblBvcnROYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgSUFNIHJvbGUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHRoZSBBbWF6b24gRUNT4oCoIGluZnJhc3RydWN0dXJlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBtYW5hZ2UgeW91ciBWUEMgTGF0dGljZSBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gSWYgbm8gZGVwbG95bWVudCBjb250cm9sbGVyIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBFQ1NgYCBpcyB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDb250cm9sbGVyIHtcbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlIHRvIHVzZS4gVGhlcmUgYXJlIHRocmVlIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcyBhdmFpbGFibGU6XG4gKiAgICsgRUNTIFRoZSByb2xsaW5nIHVwZGF0ZSAoRUNTKSBkZXBsb3ltZW50IHR5cGUgaW52b2x2ZXMgcmVwbGFjaW5nIHRoZSBjdXJyZW50IHJ1bm5pbmcgdmVyc2lvbiBvZiB0aGUgY29udGFpbmVyIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uLiBUaGUgbnVtYmVyIG9mIGNvbnRhaW5lcnMgQW1hem9uIEVDUyBhZGRzIG9yIHJlbW92ZXMgZnJvbSB0aGUgc2VydmljZSBkdXJpbmcgYSByb2xsaW5nIHVwZGF0ZSBpcyBjb250cm9sbGVkIGJ5IGFkanVzdGluZyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgaGVhbHRoeSB0YXNrcyBhbGxvd2VkIGR1cmluZyBhIHNlcnZpY2UgZGVwbG95bWVudCwgYXMgc3BlY2lmaWVkIGluIHRoZSBEZXBsb3ltZW50Q29uZmlndXJhdGlvbi4gKyBDT0RFX0RFUExPWSBUaGUgYmx1ZS9ncmVlbiAoQ09ERV9ERVBMT1kpIGRlcGxveW1lbnQgdHlwZSB1c2VzIHRoZSBibHVlL2dyZWVuIGRlcGxveW1lbnQgbW9kZWwgcG93ZXJlZCBieSAsIHdoaWNoIGFsbG93cyB5b3UgdG8gdmVyaWZ5IGEgbmV3IGRlcGxveW1lbnQgb2YgYSBzZXJ2aWNlIGJlZm9yZSBzZW5kaW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byBpdC4gKyBFWFRFUk5BTCBUaGUgZXh0ZXJuYWwgKEVYVEVSTkFMKSBkZXBsb3ltZW50IHR5cGUgZW5hYmxlcyB5b3UgdG8gdXNlIGFueSB0aGlyZC1wYXJ0eSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgZm9yIGZ1bGwgY29udHJvbCBvdmVyIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MgZm9yIGFuIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqL1xuVHlwZT86IChcIkNPREVfREVQTE9ZXCIgfCBcIkVDU1wiIHwgXCJFWFRFUk5BTFwiKVxufVxuLyoqXG4gKiBPcHRpb25hbCBkZXBsb3ltZW50IHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIGhvdyBtYW55IHRhc2tzIHJ1biBkdXJpbmcgdGhlIGRlcGxveW1lbnQgYW5kIHRoZSBvcmRlcmluZyBvZiBzdG9wcGluZyBhbmQgc3RhcnRpbmcgdGFza3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbmZpZ3VyYXRpb24ge1xuQWxhcm1zPzogRGVwbG95bWVudEFsYXJtc1xuRGVwbG95bWVudENpcmN1aXRCcmVha2VyPzogRGVwbG95bWVudENpcmN1aXRCcmVha2VyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWF4aW11bVBlcmNlbnRgYCBwYXJhbWV0ZXIgcmVwcmVzZW50cyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgYXJlIGFsbG93ZWQgaW4gdGhlIGBgUlVOTklOR2BgIG9yIGBgUEVORElOR2BgIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYGBkZXNpcmVkQ291bnRgYCAocm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZWZpbmUgdGhlIGRlcGxveW1lbnQgYmF0Y2ggc2l6ZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2VydmljZSBpcyB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgYW5kIGhhcyBhIGBgZGVzaXJlZENvdW50YGAgb2YgZm91ciB0YXNrcyBhbmQgYSBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgb2YgMjAwJSwgdGhlIHNjaGVkdWxlciBtYXkgc3RhcnQgZm91ciBuZXcgdGFza3MgYmVmb3JlIHN0b3BwaW5nIHRoZSBmb3VyIG9sZGVyIHRhc2tzIChwcm92aWRlZCB0aGF0IHRoZSBjbHVzdGVyIHJlc291cmNlcyByZXF1aXJlZCB0byBkbyB0aGlzIGFyZSBhdmFpbGFibGUpLiBUaGUgZGVmYXVsdCBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgaXMgMjAwJS5cbiAqICBUaGUgQW1hem9uIEVDUyBzY2hlZHVsZXIgdXNlcyB0aGlzIHBhcmFtZXRlciB0byByZXBsYWNlIHVuaGVhbHRoeSB0YXNrcyBieSBzdGFydGluZyByZXBsYWNlbWVudCB0YXNrcyBmaXJzdCBhbmQgdGhlbiBzdG9wcGluZyB0aGUgdW5oZWFsdGh5IHRhc2tzLCBhcyBsb25nIGFzIGNsdXN0ZXIgcmVzb3VyY2VzIGZvciBzdGFydGluZyByZXBsYWNlbWVudCB0YXNrcyBhcmUgYXZhaWxhYmxlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIHNjaGVkdWxlciByZXBsYWNlcyB1bmhlYWx0aHkgdGFza3MsIHNlZSBbQW1hem9uIEVDUyBzZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzX3NlcnZpY2VzLmh0bWwpLlxuICogIElmIGEgc2VydmljZSBpcyB1c2luZyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMsIGFuZCB0YXNrcyBpbiB0aGUgc2VydmljZSB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlICptYXhpbXVtIHBlcmNlbnQqIHZhbHVlIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlICptYXhpbXVtIHBlcmNlbnQqIHZhbHVlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB0aGF0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgd2hpbGUgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGluIHRoZSBgYERSQUlOSU5HYGAgc3RhdGUuXG4gKiAgIFlvdSBjYW4ndCBzcGVjaWZ5IGEgY3VzdG9tIGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHRoYXQgdXNlcyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGhhcyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLlxuICogICBJZiB0aGUgc2VydmljZSB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcywgYW5kIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB1c2UgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSBtYXhpbXVtIHBlcmNlbnQgdmFsdWUgaXMgbm90IHVzZWQuIFRoZSB2YWx1ZSBpcyBzdGlsbCByZXR1cm5lZCB3aGVuIGRlc2NyaWJpbmcgeW91ciBzZXJ2aWNlLlxuICovXG5NYXhpbXVtUGVyY2VudD86IG51bWJlclxuLyoqXG4gKiBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUsIHRoZSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIHJlcHJlc2VudHMgYSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgbXVzdCByZW1haW4gaW4gdGhlIGBgUlVOTklOR2BgIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYGBkZXNpcmVkQ291bnRgYCAocm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKS4gVGhpcyBwYXJhbWV0ZXIgZW5hYmxlcyB5b3UgdG8gZGVwbG95IHdpdGhvdXQgdXNpbmcgYWRkaXRpb25hbCBjbHVzdGVyIGNhcGFjaXR5LiBGb3IgZXhhbXBsZSwgaWYgeW91ciBzZXJ2aWNlIGhhcyBhIGBgZGVzaXJlZENvdW50YGAgb2YgZm91ciB0YXNrcyBhbmQgYSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIG9mIDUwJSwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIG1heSBzdG9wIHR3byBleGlzdGluZyB0YXNrcyB0byBmcmVlIHVwIGNsdXN0ZXIgY2FwYWNpdHkgYmVmb3JlIHN0YXJ0aW5nIHR3byBuZXcgdGFza3MuIFxuICogICBJZiBhbnkgdGFza3MgYXJlIHVuaGVhbHRoeSBhbmQgaWYgYGBtYXhpbXVtUGVyY2VudGBgIGRvZXNuJ3QgYWxsb3cgdGhlIEFtYXpvbiBFQ1Mgc2NoZWR1bGVyIHRvIHN0YXJ0IHJlcGxhY2VtZW50IHRhc2tzLCB0aGUgc2NoZWR1bGVyIHN0b3BzIHRoZSB1bmhlYWx0aHkgdGFza3Mgb25lLWJ5LW9uZSDigJQgdXNpbmcgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgYXMgYSBjb25zdHJhaW50IOKAlCB0byBjbGVhciB1cCBjYXBhY2l0eSB0byBsYXVuY2ggcmVwbGFjZW1lbnQgdGFza3MuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgc2NoZWR1bGVyIHJlcGxhY2VzIHVuaGVhbHRoeSB0YXNrcywgc2VlIFtBbWF6b24gRUNTIHNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkgLiBcbiAqICBGb3Igc2VydmljZXMgdGhhdCAqZG8gbm90KiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgQSBzZXJ2aWNlIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSBpZiBhbGwgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBwYXNzIHRoZWlyIGhlYWx0aCBjaGVja3MuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciA0MCBzZWNvbmRzIGFmdGVyIGEgdGFzayByZWFjaGVzIGEgYGBSVU5OSU5HYGAgc3RhdGUgYmVmb3JlIHRoZSB0YXNrIGlzIGNvdW50ZWQgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgb25lIG9yIG1vcmUgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyBpdCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC4gQSB0YXNrIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSB3aGVuIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2sgaGF2ZSBwYXNzZWQgdGhlaXIgaGVhbHRoIGNoZWNrcy4gVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBjYW4gd2FpdCBmb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY29udGFpbmVyIGhlYWx0aCBjaGVjayBzZXR0aW5ncy4gXG4gKiAgIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyogdXNlIGEgbG9hZCBiYWxhbmNlciwgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgbm90ZWQ6XG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBhbiBlc3NlbnRpYWwgY29udGFpbmVyIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgYm90aCB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGFuZCB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgXG4gKiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgcmVwbGljYSBzZXJ2aWNlIGZvciBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIGlzIDEwMCUuIFRoZSBkZWZhdWx0IGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBEQUVNT05gYCBzZXJ2aWNlIHNjaGVkdWxlIGlzIDAlIGZvciB0aGUgQ0xJLCB0aGUgQVdTIFNES3MsIGFuZCB0aGUgQVBJcyBhbmQgNTAlIGZvciB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS5cbiAqICBUaGUgbWluaW11bSBudW1iZXIgb2YgaGVhbHRoeSB0YXNrcyBkdXJpbmcgYSBkZXBsb3ltZW50IGlzIHRoZSBgYGRlc2lyZWRDb3VudGBgIG11bHRpcGxpZWQgYnkgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAvMTAwLCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1pbmltdW0gaGVhbHRoeSBwZXJjZW50KiB2YWx1ZSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB0aGF0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgd2hpbGUgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGluIHRoZSBgYERSQUlOSU5HYGAgc3RhdGUuXG4gKiAgIFlvdSBjYW4ndCBzcGVjaWZ5IGEgY3VzdG9tIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB0aGF0IHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBoYXMgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZS5cbiAqICAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHZhbHVlIGlzIG5vdCB1c2VkLCBhbHRob3VnaCBpdCBpcyByZXR1cm5lZCB3aGVuIGRlc2NyaWJpbmcgeW91ciBzZXJ2aWNlLlxuICovXG5NaW5pbXVtSGVhbHRoeVBlcmNlbnQ/OiBudW1iZXJcbn1cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIENsb3VkV2F0Y2ggYWxhcm1zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRBbGFybXMge1xuLyoqXG4gKiBPbmUgb3IgbW9yZSBDbG91ZFdhdGNoIGFsYXJtIG5hbWVzLiBVc2UgYSBcIixcIiB0byBzZXBhcmF0ZSB0aGUgYWxhcm1zLlxuICovXG5BbGFybU5hbWVzOiBzdHJpbmdbXVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBDbG91ZFdhdGNoIGFsYXJtIG9wdGlvbiBpbiB0aGUgc2VydmljZSBkZXBsb3ltZW50IHByb2Nlc3MuXG4gKi9cbkVuYWJsZTogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29uZmlndXJlIEFtYXpvbiBFQ1MgdG8gcm9sbCBiYWNrIHRoZSBzZXJ2aWNlIGlmIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLiBJZiByb2xsYmFjayBpcyB1c2VkLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuUm9sbGJhY2s6IGJvb2xlYW5cbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHNlcnZpY2VzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLlxuICogICBUaGUgKmRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyKiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBzZXJ2aWNlIGRlcGxveW1lbnQgd2lsbCBmYWlsIGlmIHRoZSBzZXJ2aWNlIGNhbid0IHJlYWNoIGEgc3RlYWR5IHN0YXRlLiBJZiB5b3UgdXNlIHRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciwgYSBzZXJ2aWNlIGRlcGxveW1lbnQgd2lsbCB0cmFuc2l0aW9uIHRvIGEgZmFpbGVkIHN0YXRlIGFuZCBzdG9wIGxhdW5jaGluZyBuZXcgdGFza3MuIElmIHlvdSB1c2UgdGhlIHJvbGxiYWNrIG9wdGlvbiwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JvbGxpbmcgdXBkYXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtZWNzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDaXJjdWl0QnJlYWtlciB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyIGxvZ2ljIGZvciB0aGUgc2VydmljZS5cbiAqL1xuRW5hYmxlOiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBjb25maWd1cmUgQW1hem9uIEVDUyB0byByb2xsIGJhY2sgdGhlIHNlcnZpY2UgaWYgYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMuIElmIHJvbGxiYWNrIGlzIG9uLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuUm9sbGJhY2s6IGJvb2xlYW5cbn1cbiJdfQ==
|
|
@@ -84,6 +84,9 @@ export interface _AWS_ECS_TASKDEFINITION {
|
|
|
84
84
|
* This parameter is only supported for tasks that are hosted on FARGATElong if the tasks are using platform version ``1.4.0`` or later (Linux). This isn't supported for Windows containers on Fargate.
|
|
85
85
|
*/
|
|
86
86
|
PidMode?: string;
|
|
87
|
+
/**
|
|
88
|
+
* Enables fault injection and allows for fault injection requests to be accepted from the task's containers. The default value is ``false``.
|
|
89
|
+
*/
|
|
87
90
|
EnableFaultInjection?: boolean;
|
|
88
91
|
/**
|
|
89
92
|
* The Amazon Resource Name (ARN) of the task execution role that grants the Amazon ECS container agent permission to make AWS API calls on your behalf. For informationabout the required IAM roles for Amazon ECS, see [IAM roles for Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/security-ecs-iam-role-overview.html) in the *Amazon Elastic Container Service Developer Guide*.
|
|
@@ -661,7 +664,7 @@ export interface LogConfiguration {
|
|
|
661
664
|
* When you use the ``awsfirelens`` log router to route logs to an AWS Service or AWS Partner Network destination for log storage and analytics, you can set the ``log-driver-buffer-limit`` option to limit the number of events that are buffered in memory, before being sent to the log router container. It can help to resolve potential log loss issue because high throughput might result in memory running out for the buffer inside of Docker.
|
|
662
665
|
* Other options you can specify when using ``awsfirelens`` to route logs depend on the destination. When you export logs to Amazon Data Firehose, you can specify the AWS Region with ``region`` and a name for the log stream with ``delivery_stream``.
|
|
663
666
|
* When you export logs to Amazon Kinesis Data Streams, you can specify an AWS Region with ``region`` and a data stream name with ``stream``.
|
|
664
|
-
* When you export logs to Amazon OpenSearch Service, you can specify options like ``Name``, ``Host`` (OpenSearch Service endpoint without protocol), ``Port``, ``Index``, ``Type``, ``Aws_auth``, ``Aws_region``, ``Suppress_Type_Name``, and ``tls``.
|
|
667
|
+
* When you export logs to Amazon OpenSearch Service, you can specify options like ``Name``, ``Host`` (OpenSearch Service endpoint without protocol), ``Port``, ``Index``, ``Type``, ``Aws_auth``, ``Aws_region``, ``Suppress_Type_Name``, and ``tls``. For more information, see [Under the hood: FireLens for Amazon ECS Tasks](https://docs.aws.amazon.com/containers/under-the-hood-firelens-for-amazon-ecs-tasks/).
|
|
665
668
|
* When you export logs to Amazon S3, you can specify the bucket using the ``bucket`` option. You can also specify ``region``, ``total_file_size``, ``upload_timeout``, and ``use_put_object`` as options.
|
|
666
669
|
* This parameter requires version 1.19 of the Docker Remote API or greater on your container instance. To check the Docker Remote API version on your container instance, log in to your container instance and run the following command: ``sudo docker version --format '{{.Server.APIVersion}}'``
|
|
667
670
|
*/
|
|
@@ -1023,7 +1026,7 @@ export interface PortMapping {
|
|
|
1023
1026
|
*/
|
|
1024
1027
|
export interface EphemeralStorage {
|
|
1025
1028
|
/**
|
|
1026
|
-
* The total amount, in GiB, of ephemeral storage to set for the task. The minimum supported value is ``
|
|
1029
|
+
* The total amount, in GiB, of ephemeral storage to set for the task. The minimum supported value is ``21`` GiB and the maximum supported value is ``200`` GiB.
|
|
1027
1030
|
*/
|
|
1028
1031
|
SizeInGiB?: number;
|
|
1029
1032
|
}
|