@horietakehiro/aws-cdk-utul 0.40.3 → 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/types/cfn-resource-types/aws-bedrock-guardrail.d.ts +20 -0
- package/lib/types/cfn-resource-types/aws-bedrock-guardrail.js +1 -1
- package/lib/types/cfn-resource-types/aws-cassandra-table.d.ts +16 -0
- package/lib/types/cfn-resource-types/aws-cassandra-table.js +1 -1
- package/lib/types/cfn-resource-types/aws-connect-rule.d.ts +4 -4
- package/lib/types/cfn-resource-types/aws-connect-rule.js +1 -1
- package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.d.ts +108 -99
- package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.js +1 -1
- package/lib/types/cfn-resource-types/aws-ec2-trafficmirrortarget.d.ts +16 -1
- package/lib/types/cfn-resource-types/aws-ec2-trafficmirrortarget.js +1 -1
- package/lib/types/cfn-resource-types/aws-ec2-vpcendpoint.d.ts +3 -0
- package/lib/types/cfn-resource-types/aws-ec2-vpcendpoint.js +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-taskdefinition.d.ts +1 -13
- package/lib/types/cfn-resource-types/aws-ecs-taskdefinition.js +1 -1
- package/lib/types/cfn-resource-types/aws-events-eventbus.d.ts +19 -19
- package/lib/types/cfn-resource-types/aws-events-eventbus.js +1 -1
- package/lib/types/cfn-resource-types/aws-imagebuilder-component.d.ts +2 -4
- package/lib/types/cfn-resource-types/aws-imagebuilder-component.js +1 -1
- package/lib/types/cfn-resource-types/aws-imagebuilder-workflow.d.ts +2 -4
- package/lib/types/cfn-resource-types/aws-imagebuilder-workflow.js +1 -1
- package/lib/types/cfn-resource-types/aws-kinesis-streamconsumer.d.ts +34 -1
- package/lib/types/cfn-resource-types/aws-kinesis-streamconsumer.js +1 -1
- package/lib/types/cfn-resource-types/aws-odb-cloudautonomousvmcluster.d.ts +220 -0
- package/lib/types/cfn-resource-types/aws-odb-cloudautonomousvmcluster.js +3 -0
- package/lib/types/cfn-resource-types/aws-odb-cloudexadatainfrastructure.d.ts +151 -0
- package/lib/types/cfn-resource-types/aws-odb-cloudexadatainfrastructure.js +3 -0
- package/lib/types/cfn-resource-types/aws-odb-cloudvmcluster.d.ts +172 -0
- package/lib/types/cfn-resource-types/aws-odb-cloudvmcluster.js +3 -0
- package/lib/types/cfn-resource-types/aws-odb-odbnetwork.d.ts +70 -0
- package/lib/types/cfn-resource-types/aws-odb-odbnetwork.js +3 -0
- package/lib/types/cfn-resource-types/aws-pcs-cluster.d.ts +32 -32
- package/lib/types/cfn-resource-types/aws-pcs-cluster.js +1 -1
- package/lib/types/cfn-resource-types/aws-qbusiness-dataaccessor.d.ts +18 -0
- package/lib/types/cfn-resource-types/aws-qbusiness-dataaccessor.js +1 -1
- package/lib/types/cfn-resource-types/aws-qbusiness-permission.d.ts +14 -0
- package/lib/types/cfn-resource-types/aws-qbusiness-permission.js +1 -1
- package/lib/types/cfn-resource-types/aws-quicksight-custompermissions.d.ts +24 -18
- package/lib/types/cfn-resource-types/aws-quicksight-custompermissions.js +1 -1
- package/lib/types/cfn-resource-types/aws-rds-dbinstance.d.ts +558 -557
- package/lib/types/cfn-resource-types/aws-rds-dbinstance.js +1 -1
- package/lib/types/cfn-resource-types/aws-redshiftserverless-snapshot.d.ts +49 -0
- package/lib/types/cfn-resource-types/aws-redshiftserverless-snapshot.js +3 -0
- package/lib/types/cfn-resource-types/aws-s3tables-table.d.ts +111 -0
- package/lib/types/cfn-resource-types/aws-s3tables-table.js +3 -0
- package/lib/types/cfn-resource-types.d.ts +12 -0
- package/lib/types/cfn-resource-types.js +23 -11
- package/package.json +2 -5
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJkcy1kYmluc3RhbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXJkcy1kYmluc3RhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6UkRTOjpEQkluc3RhbmNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gREIgaW5zdGFuY2UuIFRoZSBuZXcgREIgaW5zdGFuY2UgY2FuIGJlIGFuIFJEUyBEQiBpbnN0YW5jZSwgb3IgaXQgY2FuIGJlIGEgREIgaW5zdGFuY2UgaW4gYW4gQXVyb3JhIERCIGNsdXN0ZXIuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW4gUkRTIERCIGluc3RhbmNlLCBzZWUgW0NyZWF0aW5nIGFuIEFtYXpvbiBSRFMgREIgaW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX0NyZWF0ZURCSW5zdGFuY2UuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIGEgREIgaW5zdGFuY2UgaW4gYW4gQXVyb3JhIERCIGNsdXN0ZXIsIHNlZSBbQ3JlYXRpbmcgYW4gQW1hem9uIEF1cm9yYSBEQiBjbHVzdGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQXVyb3JhLkNyZWF0ZUluc3RhbmNlLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICBJZiB5b3UgaW1wb3J0IGFuIGV4aXN0aW5nIERCIGluc3RhbmNlLCBhbmQgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24gZG9lc24ndCBtYXRjaCB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIERCIGluc3RhbmNlLCBBV1MgQ2xvdWRGb3JtYXRpb24gYXBwbGllcyB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgZHVyaW5nIHRoZSBpbXBvcnQgb3BlcmF0aW9uLlxuICogICBJZiBhIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQgb3IgcmVwbGFjZWQgZHVyaW5nIGFuIHVwZGF0ZSwgQVdTIENsb3VkRm9ybWF0aW9uIGRlbGV0ZXMgYWxsIGF1dG9tYXRlZCBzbmFwc2hvdHMuIEhvd2V2ZXIsIGl0IHJldGFpbnMgbWFudWFsIERCIHNuYXBzaG90cy4gRHVyaW5nIGFuIHVwZGF0ZSB0aGF0IHJlcXVpcmVzIHJlcGxhY2VtZW50LCB5b3UgY2FuIGFwcGx5IGEgc3RhY2sgcG9saWN5IHRvIHByZXZlbnQgREIgaW5zdGFuY2VzIGZyb20gYmVpbmcgcmVwbGFjZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1ByZXZlbnQgVXBkYXRlcyB0byBTdGFjayBSZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3Byb3RlY3Qtc3RhY2stcmVzb3VyY2VzLmh0bWwpLlxuICogICAgKlVwZGF0aW5nIERCIGluc3RhbmNlcyogXG4gKiAgV2hlbiBwcm9wZXJ0aWVzIGxhYmVsZWQgXCIqVXBkYXRlIHJlcXVpcmVzOipbUmVwbGFjZW1lbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3VzaW5nLWNmbi11cGRhdGluZy1zdGFja3MtdXBkYXRlLWJlaGF2aW9ycy5odG1sI3VwZGF0ZS1yZXBsYWNlbWVudClcIiBhcmUgdXBkYXRlZCwgQVdTIENsb3VkRm9ybWF0aW9uIGZpcnN0IGNyZWF0ZXMgYSByZXBsYWNlbWVudCBEQiBpbnN0YW5jZSwgdGhlbiBjaGFuZ2VzIHJlZmVyZW5jZXMgZnJvbSBvdGhlciBkZXBlbmRlbnQgcmVzb3VyY2VzIHRvIHBvaW50IHRvIHRoZSByZXBsYWNlbWVudCBEQiBpbnN0YW5jZSwgYW5kIGZpbmFsbHkgZGVsZXRlcyB0aGUgb2xkIERCIGluc3RhbmNlLlxuICogICBXZSBoaWdobHkgcmVjb21tZW5kIHRoYXQgeW91IHRha2UgYSBzbmFwc2hvdCBvZiB0aGUgZGF0YWJhc2UgYmVmb3JlIHVwZGF0aW5nIHRoZSBzdGFjay4gSWYgeW91IGRvbid0LCB5b3UgbG9zZSB0aGUgZGF0YSB3aGVuIEFXUyBDbG91ZEZvcm1hdGlvbiByZXBsYWNlcyB5b3VyIERCIGluc3RhbmNlLiBUbyBwcmVzZXJ2ZSB5b3VyIGRhdGEsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBwcm9jZWR1cmU6XG4gKiAgIDEuICBEZWFjdGl2YXRlIGFueSBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgdXNpbmcgdGhlIERCIGluc3RhbmNlIHNvIHRoYXQgdGhlcmUncyBubyBhY3Rpdml0eSBvbiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgIDEuICBDcmVhdGUgYSBzbmFwc2hvdCBvZiB0aGUgREIgaW5zdGFuY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGEgREIgU25hcHNob3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX0NyZWF0ZVNuYXBzaG90Lmh0bWwpLlxuICogICAxLiAgSWYgeW91IHdhbnQgdG8gcmVzdG9yZSB5b3VyIGluc3RhbmNlIHVzaW5nIGEgREIgc25hcHNob3QsIG1vZGlmeSB0aGUgdXBkYXRlZCB0ZW1wbGF0ZSB3aXRoIHlvdXIgREIgaW5zdGFuY2UgY2hhbmdlcyBhbmQgYWRkIHRoZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkgd2l0aCB0aGUgSUQgb2YgdGhlIERCIHNuYXBzaG90IHRoYXQgeW91IHdhbnQgdG8gdXNlLlxuICogIEFmdGVyIHlvdSByZXN0b3JlIGEgREIgaW5zdGFuY2Ugd2l0aCBhIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgeW91IGNhbiBkZWxldGUgdGhlIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eS4gV2hlbiB5b3Ugc3BlY2lmeSB0aGlzIHByb3BlcnR5IGZvciBhbiB1cGRhdGUsIHRoZSBEQiBpbnN0YW5jZSBpcyBub3QgcmVzdG9yZWQgZnJvbSB0aGUgREIgc25hcHNob3QgYWdhaW4sIGFuZCB0aGUgZGF0YSBpbiB0aGUgZGF0YWJhc2UgaXMgbm90IGNoYW5nZWQuIEhvd2V2ZXIsIGlmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIGFuIGVtcHR5IERCIGluc3RhbmNlIGlzIGNyZWF0ZWQsIGFuZCB0aGUgb3JpZ2luYWwgREIgaW5zdGFuY2UgaXMgZGVsZXRlZC4gSWYgeW91IHNwZWNpZnkgYSBwcm9wZXJ0eSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cyBzbmFwc2hvdCByZXN0b3JlIHByb3BlcnR5LCBhIG5ldyBEQiBpbnN0YW5jZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBzcGVjaWZpZWQgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBhbmQgdGhlIG9yaWdpbmFsIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQuXG4gKiAgIDEuICBVcGRhdGUgdGhlIHN0YWNrLlxuICogICBcbiAqICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXBkYXRpbmcgb3RoZXIgcHJvcGVydGllcyBvZiB0aGlzIHJlc291cmNlLCBzZWUgYGBNb2RpZnlEQkluc3RhbmNlYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVwZGF0aW5nIHN0YWNrcywgc2VlIFtDbG91ZEZvcm1hdGlvbiBTdGFja3MgVXBkYXRlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvdXNpbmctY2ZuLXVwZGF0aW5nLXN0YWNrcy5odG1sKS5cbiAqICAgKkRlbGV0aW5nIERCIGluc3RhbmNlcyogXG4gKiAgRm9yIERCIGluc3RhbmNlcyB0aGF0IGFyZSBwYXJ0IG9mIGFuIEF1cm9yYSBEQiBjbHVzdGVyLCB5b3UgY2FuIHNldCBhIGRlbGV0aW9uIHBvbGljeSBmb3IgeW91ciBEQiBpbnN0YW5jZSB0byBjb250cm9sIGhvdyBBV1MgQ2xvdWRGb3JtYXRpb24gaGFuZGxlcyB0aGUgREIgaW5zdGFuY2Ugd2hlbiB0aGUgc3RhY2sgaXMgZGVsZXRlZC4gRm9yIEFtYXpvbiBSRFMgREIgaW5zdGFuY2VzLCB5b3UgY2FuIGNob29zZSB0byAqcmV0YWluKiB0aGUgREIgaW5zdGFuY2UsIHRvICpkZWxldGUqIHRoZSBEQiBpbnN0YW5jZSwgb3IgdG8gKmNyZWF0ZSBhIHNuYXBzaG90KiBvZiB0aGUgREIgaW5zdGFuY2UuIFRoZSBkZWZhdWx0IEFXUyBDbG91ZEZvcm1hdGlvbiBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBgYERCQ2x1c3RlcklkZW50aWZpZXJgYCBwcm9wZXJ0eTpcbiAqICAgMS4gIEZvciBgYEFXUzo6UkRTOjpEQkluc3RhbmNlYGAgcmVzb3VyY2VzIHRoYXQgZG9uJ3Qgc3BlY2lmeSB0aGUgYGBEQkNsdXN0ZXJJZGVudGlmaWVyYGAgcHJvcGVydHksIEFXUyBDbG91ZEZvcm1hdGlvbiBzYXZlcyBhIHNuYXBzaG90IG9mIHRoZSBEQiBpbnN0YW5jZS5cbiAqICAgMS4gICBGb3IgYGBBV1M6OlJEUzo6REJJbnN0YW5jZWBgIHJlc291cmNlcyB0aGF0IGRvIHNwZWNpZnkgdGhlIGBgREJDbHVzdGVySWRlbnRpZmllcmBgIHByb3BlcnR5LCBBV1MgQ2xvdWRGb3JtYXRpb24gZGVsZXRlcyB0aGUgREIgaW5zdGFuY2UuXG4gKiAgIFxuICogICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtEZWxldGlvblBvbGljeSBBdHRyaWJ1dGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1hdHRyaWJ1dGUtZGVsZXRpb25wb2xpY3kuaHRtbCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19SRFNfREJJTlNUQU5DRSB7XG4vKipcbiAqIFRoZSBtb2RlIG9mIERhdGFiYXNlIEluc2lnaHRzIHRvIGVuYWJsZSBmb3IgdGhlIERCIGluc3RhbmNlLlxuICogICBBdXJvcmEgREIgaW5zdGFuY2VzIGluaGVyaXQgdGhpcyB2YWx1ZSBmcm9tIHRoZSBEQiBjbHVzdGVyLCBzbyB5b3UgY2FuJ3QgY2hhbmdlIHRoaXMgdmFsdWUuXG4gKi9cbkRhdGFiYXNlSW5zaWdodHNNb2RlPzogc3RyaW5nXG4vKipcbiAqIEEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgREIgaW5zdGFuY2UgaXMgZW5jcnlwdGVkLiBCeSBkZWZhdWx0LCBpdCBpc24ndCBlbmNyeXB0ZWQuXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgS21zS2V5SWRgYCBwcm9wZXJ0eSwgdGhlbiB5b3UgbXVzdCBlbmFibGUgZW5jcnlwdGlvbi5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBTb3VyY2VEQkluc3RhbmNlSWRlbnRpZmllcmBgIG9yIGBgU291cmNlRGJpUmVzb3VyY2VJZGBgIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc291cmNlIERCIGluc3RhbmNlLCBhbmQgaWYgdGhlIERCIGluc3RhbmNlIGlzIGVuY3J5cHRlZCwgdGhlIHNwZWNpZmllZCBgYEttc0tleUlkYGAgcHJvcGVydHkgaXMgdXNlZC5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBTb3VyY2VEQkluc3RhbmNlQXV0b21hdGVkQmFja3Vwc0FybmBgIHByb3BlcnR5LCBkb24ndCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuIFRoZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgc291cmNlIERCIGluc3RhbmNlIGF1dG9tYXRlZCBiYWNrdXAuIFxuICogIElmIHlvdSBzcGVjaWZ5IGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNuYXBzaG90LlxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSBlbmNyeXB0aW9uIGZvciBEQiBpbnN0YW5jZXMgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqL1xuU3RvcmFnZUVuY3J5cHRlZD86IGJvb2xlYW5cbi8qKlxuICogVGhlIHRpbWUgem9uZSBvZiB0aGUgREIgaW5zdGFuY2UuIFRoZSB0aW1lIHpvbmUgcGFyYW1ldGVyIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgb25seSBieSBbUkRTIGZvciBEYjJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9kYjItdGltZS16b25lKSBhbmQgW1JEUyBmb3IgU1FMIFNlcnZlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfU1FMU2VydmVyLmh0bWwjU1FMU2VydmVyLkNvbmNlcHRzLkdlbmVyYWwuVGltZVpvbmUpLlxuICovXG5UaW1lem9uZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgT3JhY2xlIHN5c3RlbSBpZGVudGlmaWVyIChTSUQpLCB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUgT3JhY2xlIGRhdGFiYXNlIGluc3RhbmNlIHRoYXQgbWFuYWdlcyB5b3VyIGRhdGFiYXNlIGZpbGVzLiBJbiB0aGlzIGNvbnRleHQsIHRoZSB0ZXJtIFwiT3JhY2xlIGRhdGFiYXNlIGluc3RhbmNlXCIgcmVmZXJzIGV4Y2x1c2l2ZWx5IHRvIHRoZSBzeXN0ZW0gZ2xvYmFsIGFyZWEgKFNHQSkgYW5kIE9yYWNsZSBiYWNrZ3JvdW5kIHByb2Nlc3Nlcy4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBTSUQsIHRoZSB2YWx1ZSBkZWZhdWx0cyB0byBgYFJEU0NEQmBgLiBUaGUgT3JhY2xlIFNJRCBpcyBhbHNvIHRoZSBuYW1lIG9mIHlvdXIgQ0RCLlxuICovXG5EQlN5c3RlbUlkPzogc3RyaW5nXG5DZXJ0aWZpY2F0ZURldGFpbHM/OiBDZXJ0aWZpY2F0ZURldGFpbHNcbi8qKlxuICogVGhlIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRoZSBkYXRhYmFzZSBhY2NlcHRzIGNvbm5lY3Rpb25zLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIEF1cm9yYSBEQiBpbnN0YW5jZXMuIFRoZSBwb3J0IG51bWJlciBpcyBtYW5hZ2VkIGJ5IHRoZSBjbHVzdGVyLlxuICogIFZhbGlkIFZhbHVlczogYGAxMTUwLTY1NTM1YGBcbiAqICBEZWZhdWx0OlxuICogICArICBSRFMgZm9yIERiMiAtIGBgNTAwMDBgYFxuICogICArICBSRFMgZm9yIE1hcmlhREIgLSBgYDMzMDZgYFxuICogICArICBSRFMgZm9yIE1pY3Jvc29mdCBTUUwgU2VydmVyIC0gYGAxNDMzYGBcbiAqICAgKyAgUkRTIGZvciBNeVNRTCAtIGBgMzMwNmBgXG4gKiAgICsgIFJEUyBmb3IgT3JhY2xlIC0gYGAxNTIxYGBcbiAqICAgKyAgUkRTIGZvciBQb3N0Z3JlU1FMIC0gYGA1NDMyYGBcbiAqICAgXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIEZvciBSRFMgZm9yIE1pY3Jvc29mdCBTUUwgU2VydmVyLCB0aGUgdmFsdWUgY2FuJ3QgYmUgYGAxMjM0YGAsIGBgMTQzNGBgLCBgYDMyNjBgYCwgYGAzMzQzYGAsIGBgMzM4OWBgLCBgYDQ3MDAxYGAsIG9yIGBgNDkxNTItNDkxNTZgYC5cbiAqL1xuUG9ydD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgREIgY2x1c3RlciB0aGF0IHRoaXMgREIgaW5zdGFuY2Ugd2lsbCBiZWxvbmcgdG8uXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZXMuXG4gKi9cbkRCQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBzdG9yYWdlIHRocm91Z2hwdXQgdmFsdWUsIGluIG1lYmlieXRlIHBlciBzZWNvbmQgKE1pQnBzKSwgZm9yIHRoZSBEQiBpbnN0YW5jZS4gVGhpcyBzZXR0aW5nIGFwcGxpZXMgb25seSB0byB0aGUgYGBncDNgYCBzdG9yYWdlIHR5cGUuIFxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIFJEUyBDdXN0b20gb3IgQW1hem9uIEF1cm9yYS5cbiAqL1xuU3RvcmFnZVRocm91Z2hwdXQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHJldGVudGlvbiBwZXJpb2QgZm9yIGF1dG9tYXRlZCBiYWNrdXBzIGluIGEgZGlmZmVyZW50IEFXUyBSZWdpb24uIFVzZSB0aGlzIHBhcmFtZXRlciB0byBzZXQgYSB1bmlxdWUgcmV0ZW50aW9uIHBlcmlvZCB0aGF0IG9ubHkgYXBwbGllcyB0byBjcm9zcy1SZWdpb24gYXV0b21hdGVkIGJhY2t1cHMuIFRvIGVuYWJsZSBhdXRvbWF0ZWQgYmFja3VwcyBpbiBhIGRpZmZlcmVudCBSZWdpb24sIHNwZWNpZnkgYSBwb3NpdGl2ZSB2YWx1ZSBmb3IgdGhlIGBgQXV0b21hdGljQmFja3VwUmVwbGljYXRpb25SZWdpb25gYCBwYXJhbWV0ZXIuIFxuICogIElmIG5vdCBzcGVjaWZpZWQsIHRoaXMgcGFyYW1ldGVyIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiB0aGUgYGBCYWNrdXBSZXRlbnRpb25QZXJpb2RgYCBwYXJhbWV0ZXIuIFRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgaXMgMzUuXG4gKi9cbkF1dG9tYXRpY0JhY2t1cFJlcGxpY2F0aW9uUmV0ZW50aW9uUGVyaW9kPzogbnVtYmVyXG5EYmlSZXNvdXJjZUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpbnRlcnZhbCwgaW4gc2Vjb25kcywgYmV0d2VlbiBwb2ludHMgd2hlbiBFbmhhbmNlZCBNb25pdG9yaW5nIG1ldHJpY3MgYXJlIGNvbGxlY3RlZCBmb3IgdGhlIERCIGluc3RhbmNlLiBUbyBkaXNhYmxlIGNvbGxlY3Rpb24gb2YgRW5oYW5jZWQgTW9uaXRvcmluZyBtZXRyaWNzLCBzcGVjaWZ5IGBgMGBgLlxuICogIElmIGBgTW9uaXRvcmluZ1JvbGVBcm5gYCBpcyBzcGVjaWZpZWQsIHRoZW4geW91IG11c3Qgc2V0IGBgTW9uaXRvcmluZ0ludGVydmFsYGAgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIGBgMGBgLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIFJEUyBDdXN0b20gREIgaW5zdGFuY2VzLlxuICogIFZhbGlkIFZhbHVlczogYGAwIHwgMSB8IDUgfCAxMCB8IDE1IHwgMzAgfCA2MGBgXG4gKiAgRGVmYXVsdDogYGAwYGBcbiAqL1xuTW9uaXRvcmluZ0ludGVydmFsPzogbnVtYmVyXG4vKipcbiAqIFRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIERCIHBhcmFtZXRlciBncm91cCBvciBhIHJlZmVyZW5jZSB0byBhbiBbQVdTOjpSRFM6OkRCUGFyYW1ldGVyR3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLXJkcy1kYnBhcmFtZXRlcmdyb3VwLmh0bWwpIHJlc291cmNlIGNyZWF0ZWQgaW4gdGhlIHRlbXBsYXRlLlxuICogIFRvIGxpc3QgYWxsIG9mIHRoZSBhdmFpbGFibGUgREIgcGFyYW1ldGVyIGdyb3VwIG5hbWVzLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOlxuICogICBgYGF3cyByZHMgZGVzY3JpYmUtZGItcGFyYW1ldGVyLWdyb3VwcyAtLXF1ZXJ5IFwiREJQYXJhbWV0ZXJHcm91cHNbXS5EQlBhcmFtZXRlckdyb3VwTmFtZVwiIC0tb3V0cHV0IHRleHRgYCBcbiAqICAgSWYgYW55IG9mIHRoZSBkYXRhIG1lbWJlcnMgb2YgdGhlIHJlZmVyZW5jZWQgcGFyYW1ldGVyIGdyb3VwIGFyZSBjaGFuZ2VkIGR1cmluZyBhbiB1cGRhdGUsIHRoZSBEQiBpbnN0YW5jZSBtaWdodCBuZWVkIHRvIGJlIHJlc3RhcnRlZCwgd2hpY2ggY2F1c2VzIHNvbWUgaW50ZXJydXB0aW9uLiBJZiB0aGUgcGFyYW1ldGVyIGdyb3VwIGNvbnRhaW5zIHN0YXRpYyBwYXJhbWV0ZXJzLCB3aGV0aGVyIHRoZXkgd2VyZSBjaGFuZ2VkIG9yIG5vdCwgYW4gdXBkYXRlIHRyaWdnZXJzIGEgcmVib290LlxuICogICBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHZhbHVlIGZvciBgYERCUGFyYW1ldGVyR3JvdXBOYW1lYGAgcHJvcGVydHksIHRoZSBkZWZhdWx0IERCIHBhcmFtZXRlciBncm91cCBmb3IgdGhlIHNwZWNpZmllZCBlbmdpbmUgYW5kIGVuZ2luZSB2ZXJzaW9uIGlzIHVzZWQuXG4gKi9cbkRCUGFyYW1ldGVyR3JvdXBOYW1lPzogc3RyaW5nXG5EQkluc3RhbmNlQXJuPzogc3RyaW5nXG5FbmRwb2ludD86IEVuZHBvaW50XG5UZGVDcmVkZW50aWFsQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBV1MgS01TIGtleSBpZGVudGlmaWVyIGZvciBlbmNyeXB0aW9uIG9mIHRoZSByZXBsaWNhdGVkIGF1dG9tYXRlZCBiYWNrdXBzLiBUaGUgS01TIGtleSBJRCBpcyB0aGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgZm9yIHRoZSBLTVMgZW5jcnlwdGlvbiBrZXkgaW4gdGhlIGRlc3RpbmF0aW9uIEFXUy1SZWdpb24sIGZvciBleGFtcGxlLCBgYGFybjphd3M6a21zOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6a2V5L0FLSUFJT1NGT0ROTjdFWEFNUExFYGAuXG4gKi9cbkF1dG9tYXRpY0JhY2t1cFJlcGxpY2F0aW9uS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGlzIGEgTXVsdGktQVogZGVwbG95bWVudC4gWW91IGNhbid0IHNldCB0aGUgYGBBdmFpbGFiaWxpdHlab25lYGAgcGFyYW1ldGVyIGlmIHRoZSBEQiBpbnN0YW5jZSBpcyBhIE11bHRpLUFaIGRlcGxveW1lbnQuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGZvbGxvd2luZyBEQiBpbnN0YW5jZXM6XG4gKiAgICsgIEFtYXpvbiBBdXJvcmEgKERCIGluc3RhbmNlIEF2YWlsYWJpbGl0eSBab25lcyAoQVpzKSBhcmUgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4pXG4gKiAgICsgIFJEUyBDdXN0b21cbiAqL1xuTXVsdGlBWj86IGJvb2xlYW5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIGVuZ2luZSB0byB1c2UgZm9yIHRoaXMgREIgaW5zdGFuY2UuIE5vdCBldmVyeSBkYXRhYmFzZSBlbmdpbmUgaXMgYXZhaWxhYmxlIGluIGV2ZXJ5IEFXUyBSZWdpb24uXG4gKiAgVGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCB3aGVuIGNyZWF0aW5nIGEgREIgaW5zdGFuY2UuXG4gKiAgIFlvdSBjYW4gY29udmVydCBhbiBPcmFjbGUgZGF0YWJhc2UgZnJvbSB0aGUgbm9uLUNEQiBhcmNoaXRlY3R1cmUgdG8gdGhlIGNvbnRhaW5lciBkYXRhYmFzZSAoQ0RCKSBhcmNoaXRlY3R1cmUgYnkgdXBkYXRpbmcgdGhlIGBgRW5naW5lYGAgdmFsdWUgaW4geW91ciB0ZW1wbGF0ZXMgZnJvbSBgYG9yYWNsZS1lZWBgIHRvIGBgb3JhY2xlLWVlLWNkYmBgIG9yIGZyb20gYGBvcmFjbGUtc2UyYGAgdG8gYGBvcmFjbGUtc2UyLWNkYmBgLiBDb252ZXJ0aW5nIHRvIHRoZSBDREIgYXJjaGl0ZWN0dXJlIHJlcXVpcmVzIGFuIGludGVycnVwdGlvbi5cbiAqICAgVmFsaWQgVmFsdWVzOlxuICogICArICBgYGF1cm9yYS1teXNxbGBgIChmb3IgQXVyb3JhIE15U1FMIERCIGluc3RhbmNlcylcbiAqICAgKyAgYGBhdXJvcmEtcG9zdGdyZXNxbGBgIChmb3IgQXVyb3JhIFBvc3RncmVTUUwgREIgaW5zdGFuY2VzKVxuICogICArICBgYGN1c3RvbS1vcmFjbGUtZWVgYCAoZm9yIFJEUyBDdXN0b20gZm9yIE9yYWNsZSBEQiBpbnN0YW5jZXMpXG4gKiAgICsgIGBgY3VzdG9tLW9yYWNsZS1lZS1jZGJgYCAoZm9yIFJEUyBDdXN0b20gZm9yIE9yYWNsZSBEQiBpbnN0YW5jZXMpXG4gKiAgICsgIGBgY3VzdG9tLXNxbHNlcnZlci1lZWBgIChmb3IgUkRTIEN1c3RvbSBmb3IgU1FMIFNlcnZlciBEQiBpbnN0YW5jZXMpXG4gKiAgICsgIGBgY3VzdG9tLXNxbHNlcnZlci1zZWBgIChmb3IgUkRTIEN1c3RvbSBmb3IgU1FMIFNlcnZlciBEQiBpbnN0YW5jZXMpXG4gKiAgICsgIGBgY3VzdG9tLXNxbHNlcnZlci13ZWJgYCAoZm9yIFJEUyBDdXN0b20gZm9yIFNRTCBTZXJ2ZXIgREIgaW5zdGFuY2VzKVxuICogICArICAgYGBkYjItYWVgYCBcbiAqICAgKyAgIGBgZGIyLXNlYGAgXG4gKiAgICsgICBgYG1hcmlhZGJgYCBcbiAqICAgKyAgIGBgbXlzcWxgYCBcbiAqICAgKyAgIGBgb3JhY2xlLWVlYGAgXG4gKiAgICsgICBgYG9yYWNsZS1lZS1jZGJgYCBcbiAqICAgKyAgIGBgb3JhY2xlLXNlMmBgIFxuICogICArICAgYGBvcmFjbGUtc2UyLWNkYmBgIFxuICogICArICAgYGBwb3N0Z3Jlc2BgIFxuICogICArICAgYGBzcWxzZXJ2ZXItZWVgYCBcbiAqICAgKyAgIGBgc3Fsc2VydmVyLXNlYGAgXG4gKiAgICsgICBgYHNxbHNlcnZlci1leGBgIFxuICogICArICAgYGBzcWxzZXJ2ZXItd2ViYGBcbiAqL1xuRW5naW5lPzogc3RyaW5nXG4vKipcbiAqIFRhZ3MgdG8gYXNzaWduIHRvIHRoZSBEQiBpbnN0YW5jZS5cbiAqL1xuVGFncz86IFRhZ1tdXG4vKipcbiAqIFRoZSBBV1MgS01TIGtleSBpZGVudGlmaWVyIGZvciBlbmNyeXB0aW9uIG9mIFBlcmZvcm1hbmNlIEluc2lnaHRzIGRhdGEuXG4gKiAgVGhlIEtNUyBrZXkgaWRlbnRpZmllciBpcyB0aGUga2V5IEFSTiwga2V5IElELCBhbGlhcyBBUk4sIG9yIGFsaWFzIG5hbWUgZm9yIHRoZSBLTVMga2V5LlxuICogIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHZhbHVlIGZvciBgYFBlcmZvcm1hbmNlSW5zaWdodHNLTVNLZXlJZGBgLCB0aGVuIEFtYXpvbiBSRFMgdXNlcyB5b3VyIGRlZmF1bHQgS01TIGtleS4gVGhlcmUgaXMgYSBkZWZhdWx0IEtNUyBrZXkgZm9yIHlvdXIgQVdTIGFjY291bnQuIFlvdXIgQVdTIGFjY291bnQgaGFzIGEgZGlmZmVyZW50IGRlZmF1bHQgS01TIGtleSBmb3IgZWFjaCBBV1MgUmVnaW9uLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCBlbmFibGluZyBQZXJmb3JtYW5jZSBJbnNpZ2h0cywgc2VlIFtFbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZHMtZGF0YWJhc2UtaW5zdGFuY2UuaHRtbCNjZm4tcmRzLWRiaW5zdGFuY2UtZW5hYmxlcGVyZm9ybWFuY2VpbnNpZ2h0cykuXG4gKi9cblBlcmZvcm1hbmNlSW5zaWdodHNLTVNLZXlJZD86IHN0cmluZ1xuVGRlQ3JlZGVudGlhbFBhc3N3b3JkPzogc3RyaW5nXG4vKipcbiAqIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIHJlYWQgcmVwbGljYSBEQiBpbnN0YW5jZSwgc3BlY2lmeSB0aGUgSUQgb2YgdGhlIHNvdXJjZSBEQiBpbnN0YW5jZS4gRWFjaCBEQiBpbnN0YW5jZSBjYW4gaGF2ZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIHJlYWQgcmVwbGljYXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1dvcmtpbmcgd2l0aCBSZWFkIFJlcGxpY2FzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9VU0VSX1JlYWRSZXBsLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY29uc3RyYWludHMgdGhhdCBhcHBseSB0byBEQiBpbnN0YW5jZSBpZGVudGlmaWVycywgc2VlIFtOYW1pbmcgY29uc3RyYWludHMgaW4gQW1hem9uIFJEU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfTGltaXRzLmh0bWwjUkRTX0xpbWl0cy5Db25zdHJhaW50cykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIFRoZSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgcHJvcGVydHkgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgREIgaW5zdGFuY2UgaXMgYSByZWFkIHJlcGxpY2EuIElmIHlvdSByZW1vdmUgdGhlIGBgU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXJgYCBwcm9wZXJ0eSBmcm9tIHlvdXIgdGVtcGxhdGUgYW5kIHRoZW4gdXBkYXRlIHlvdXIgc3RhY2ssIEFXUyBDbG91ZEZvcm1hdGlvbiBwcm9tb3RlcyB0aGUgcmVhZCByZXBsaWNhIHRvIGEgc3RhbmRhbG9uZSBEQiBpbnN0YW5jZS5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBVc2VMYXRlc3RSZXN0b3JhYmxlVGltZWBgIG9yIGBgUmVzdG9yZVRpbWVgYCBwcm9wZXJ0aWVzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGBgU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXJgYCBwcm9wZXJ0eSwgUkRTIHJlc3RvcmVzIHRoZSBEQiBpbnN0YW5jZSB0byB0aGUgcmVxdWVzdGVkIHBvaW50IGluIHRpbWUsIHRoZXJlYnkgY3JlYXRpbmcgYSBuZXcgREIgaW5zdGFuY2UuXG4gKiAgICArICBJZiB5b3Ugc3BlY2lmeSBhIHNvdXJjZSBEQiBpbnN0YW5jZSB0aGF0IHVzZXMgVlBDIHNlY3VyaXR5IGdyb3Vwcywgd2UgcmVjb21tZW5kIHRoYXQgeW91IHNwZWNpZnkgdGhlIGBgVlBDU2VjdXJpdHlHcm91cHNgYCBwcm9wZXJ0eS4gSWYgeW91IGRvbid0IHNwZWNpZnkgdGhlIHByb3BlcnR5LCB0aGUgcmVhZCByZXBsaWNhIGluaGVyaXRzIHRoZSB2YWx1ZSBvZiB0aGUgYGBWUENTZWN1cml0eUdyb3Vwc2BgIHByb3BlcnR5IGZyb20gdGhlIHNvdXJjZSBEQiB3aGVuIHlvdSBjcmVhdGUgdGhlIHJlcGxpY2EuIEhvd2V2ZXIsIGlmIHlvdSB1cGRhdGUgdGhlIHN0YWNrLCBBV1MgQ2xvdWRGb3JtYXRpb24gcmV2ZXJ0cyB0aGUgcmVwbGljYSdzIGBgVlBDU2VjdXJpdHlHcm91cHNgYCBwcm9wZXJ0eSB0byB0aGUgZGVmYXVsdCB2YWx1ZSBiZWNhdXNlIGl0J3Mgbm90IGRlZmluZWQgaW4gdGhlIHN0YWNrJ3MgdGVtcGxhdGUuIFRoaXMgY2hhbmdlIG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzLlxuICogICArICBSZWFkIHJlcGxpY2FzIGRvbid0IHN1cHBvcnQgZGVsZXRpb24gcG9saWNpZXMuIEFXUyBDbG91ZEZvcm1hdGlvbiBpZ25vcmVzIGFueSBkZWxldGlvbiBwb2xpY3kgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCBhIHJlYWQgcmVwbGljYS5cbiAqICAgKyAgSWYgeW91IHNwZWNpZnkgYGBTb3VyY2VEQkluc3RhbmNlSWRlbnRpZmllcmBgLCBkb24ndCBzcGVjaWZ5IHRoZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkuIFlvdSBjYW4ndCBjcmVhdGUgYSByZWFkIHJlcGxpY2EgZnJvbSBhIHNuYXBzaG90LlxuICogICArICBEb24ndCBzZXQgdGhlIGBgQmFja3VwUmV0ZW50aW9uUGVyaW9kYGAsIGBgREJOYW1lYGAsIGBgTWFzdGVyVXNlcm5hbWVgYCwgYGBNYXN0ZXJVc2VyUGFzc3dvcmRgYCwgYW5kIGBgUHJlZmVycmVkQmFja3VwV2luZG93YGAgcHJvcGVydGllcy4gVGhlIGRhdGFiYXNlIGF0dHJpYnV0ZXMgYXJlIGluaGVyaXRlZCBmcm9tIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UsIGFuZCBiYWNrdXBzIGFyZSBkaXNhYmxlZCBmb3IgcmVhZCByZXBsaWNhcy5cbiAqICAgKyAgSWYgdGhlIHNvdXJjZSBEQiBpbnN0YW5jZSBpcyBpbiBhIGRpZmZlcmVudCByZWdpb24gdGhhbiB0aGUgcmVhZCByZXBsaWNhLCBzcGVjaWZ5IHRoZSBzb3VyY2UgcmVnaW9uIGluIGBgU291cmNlUmVnaW9uYGAsIGFuZCBzcGVjaWZ5IGFuIEFSTiBmb3IgYSB2YWxpZCBEQiBpbnN0YW5jZSBpbiBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbnN0cnVjdGluZyBhIEFtYXpvbiBSRFMgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1RhZ2dpbmcuaHRtbCNVU0VSX1RhZ2dpbmcuQVJOKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgICsgIEZvciBEQiBpbnN0YW5jZXMgaW4gQW1hem9uIEF1cm9yYSBjbHVzdGVycywgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBBbWF6b24gUkRTIGF1dG9tYXRpY2FsbHkgYXNzaWducyB3cml0ZXIgYW5kIHJlYWRlciBEQiBpbnN0YW5jZXMuXG4gKi9cblNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZGF0YWJhc2UgZW5naW5lIHRvIHVzZS5cbiAqICBGb3IgYSBsaXN0IG9mIHZhbGlkIGVuZ2luZSB2ZXJzaW9ucywgdXNlIHRoZSBgYERlc2NyaWJlREJFbmdpbmVWZXJzaW9uc2BgIGFjdGlvbi5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgZGF0YWJhc2UgZW5naW5lcyBhbmQgbGlua3MgdG8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgd2l0aCBBbWF6b24gUkRTLiBOb3QgZXZlcnkgZGF0YWJhc2UgZW5naW5lIGlzIGF2YWlsYWJsZSBmb3IgZXZlcnkgQVdTIFJlZ2lvbi5cbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGRhdGFiYXNlIGVuZ2luZSB0byBiZSB1c2VkIGJ5IHRoZSBEQiBpbnN0YW5jZSBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICogICAqRGIyKiBcbiAqICBTZWUgW0FtYXpvbiBSRFMgZm9yIERiMl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfRGIyLmh0bWwjRGIyLkNvbmNlcHRzLlZlcnNpb25NZ210KSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKiAgICpNYXJpYURCKiBcbiAqICBTZWUgW01hcmlhREIgb24gQW1hem9uIFJEUyBWZXJzaW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfTWFyaWFEQi5odG1sI01hcmlhREIuQ29uY2VwdHMuVmVyc2lvbk1nbXQpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLipcbiAqICAgKk1pY3Jvc29mdCBTUUwgU2VydmVyKiBcbiAqICBTZWUgW01pY3Jvc29mdCBTUUwgU2VydmVyIFZlcnNpb25zIG9uIEFtYXpvbiBSRFNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX1NRTFNlcnZlci5odG1sI1NRTFNlcnZlci5Db25jZXB0cy5HZW5lcmFsLlZlcnNpb25TdXBwb3J0KSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKiAgICpNeVNRTCogXG4gKiAgU2VlIFtNeVNRTCBvbiBBbWF6b24gUkRTIFZlcnNpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9NeVNRTC5odG1sI015U1FMLkNvbmNlcHRzLlZlcnNpb25NZ210KSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKiAgICpPcmFjbGUqIFxuICogIFNlZSBbT3JhY2xlIERhdGFiYXNlIEVuZ2luZSBSZWxlYXNlIE5vdGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQXBwZW5kaXguT3JhY2xlLlBhdGNoQ29tcG9zaXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKlxuICogICAqUG9zdGdyZVNRTCogXG4gKiAgU2VlIFtTdXBwb3J0ZWQgUG9zdGdyZVNRTCBEYXRhYmFzZSBWZXJzaW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfUG9zdGdyZVNRTC5odG1sI1Bvc3RncmVTUUwuQ29uY2VwdHMuR2VuZXJhbC5EQlZlcnNpb25zKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKi9cbkVuZ2luZVZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogVGhlIHN0b3JhZ2UgdHlwZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgREIgaW5zdGFuY2UuXG4gKiAgSWYgeW91IHNwZWNpZnkgYGBpbzFgYCwgYGBpbzJgYCwgb3IgYGBncDNgYCwgeW91IG11c3QgYWxzbyBpbmNsdWRlIGEgdmFsdWUgZm9yIHRoZSBgYElvcHNgYCBwYXJhbWV0ZXIuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gQW1hem9uIEF1cm9yYSBEQiBpbnN0YW5jZXMuIFN0b3JhZ2UgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqICBWYWxpZCBWYWx1ZXM6IGBgZ3AyIHwgZ3AzIHwgaW8xIHwgaW8yIHwgc3RhbmRhcmRgYFxuICogIERlZmF1bHQ6IGBgaW8xYGAsIGlmIHRoZSBgYElvcHNgYCBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLiBPdGhlcndpc2UsIGBgZ3AzYGAuXG4gKi9cblN0b3JhZ2VUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIEFXUyBLTVMga2V5IHRoYXQncyB1c2VkIHRvIGVuY3J5cHQgdGhlIERCIGluc3RhbmNlLCBzdWNoIGFzIGBgYXJuOmF3czprbXM6dXMtZWFzdC0xOjAxMjM0NTY3ODkxMDprZXkvYWJjZDEyMzQtYTEyMy00NTZhLWExMmItYTEyM2I0Y2Q1NmVmYGAuIElmIHlvdSBlbmFibGUgdGhlIFN0b3JhZ2VFbmNyeXB0ZWQgcHJvcGVydHkgYnV0IGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSwgQVdTIENsb3VkRm9ybWF0aW9uIHVzZXMgdGhlIGRlZmF1bHQgS01TIGtleS4gSWYgeW91IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSwgeW91IG11c3Qgc2V0IHRoZSBTdG9yYWdlRW5jcnlwdGVkIHByb3BlcnR5IHRvIHRydWUuIFxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgb3IgYGBTb3VyY2VEYmlSZXNvdXJjZUlkYGAgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gVGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UsIGFuZCBpZiB0aGUgREIgaW5zdGFuY2UgaXMgZW5jcnlwdGVkLCB0aGUgc3BlY2lmaWVkIGBgS21zS2V5SWRgYCBwcm9wZXJ0eSBpcyB1c2VkLiBIb3dldmVyLCBpZiB0aGUgc291cmNlIERCIGluc3RhbmNlIGlzIGluIGEgZGlmZmVyZW50IEFXUyBSZWdpb24sIHlvdSBtdXN0IHNwZWNpZnkgYSBLTVMga2V5IElELlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCSW5zdGFuY2VBdXRvbWF0ZWRCYWNrdXBzQXJuYGAgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gVGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UgYXV0b21hdGVkIGJhY2t1cCwgYW5kIGlmIHRoZSBhdXRvbWF0ZWQgYmFja3VwIGlzIGVuY3J5cHRlZCwgdGhlIHNwZWNpZmllZCBgYEttc0tleUlkYGAgcHJvcGVydHkgaXMgdXNlZC5cbiAqICBJZiB5b3UgY3JlYXRlIGFuIGVuY3J5cHRlZCByZWFkIHJlcGxpY2EgaW4gYSBkaWZmZXJlbnQgQVdTIFJlZ2lvbiwgdGhlbiB5b3UgbXVzdCBzcGVjaWZ5IGEgS01TIGtleSBmb3IgdGhlIGRlc3RpbmF0aW9uIEFXUyBSZWdpb24uIEtNUyBlbmNyeXB0aW9uIGtleXMgYXJlIHNwZWNpZmljIHRvIHRoZSByZWdpb24gdGhhdCB0aGV5J3JlIGNyZWF0ZWQgaW4sIGFuZCB5b3UgY2FuJ3QgdXNlIGVuY3J5cHRpb24ga2V5cyBmcm9tIG9uZSByZWdpb24gaW4gYW5vdGhlciByZWdpb24uXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgYGBTdG9yYWdlRW5jcnlwdGVkYGAgcHJvcGVydHkgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNuYXBzaG90LiBJZiB0aGUgREIgaW5zdGFuY2UgaXMgZW5jcnlwdGVkLCB0aGUgc3BlY2lmaWVkIGBgS21zS2V5SWRgYCBwcm9wZXJ0eSBpcyBhbHNvIGluaGVyaXRlZCBmcm9tIHRoZSBzbmFwc2hvdC5cbiAqICBJZiB5b3Ugc3BlY2lmeSBgYERCU2VjdXJpdHlHcm91cHNgYCwgQVdTIENsb3VkRm9ybWF0aW9uIGlnbm9yZXMgdGhpcyBwcm9wZXJ0eS4gVG8gc3BlY2lmeSBib3RoIGEgc2VjdXJpdHkgZ3JvdXAgYW5kIHRoaXMgcHJvcGVydHksIHlvdSBtdXN0IHVzZSBhIFZQQyBzZWN1cml0eSBncm91cC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQW1hem9uIFJEUyBhbmQgVlBDLCBzZWUgW1VzaW5nIEFtYXpvbiBSRFMgd2l0aCBBbWF6b24gVlBDXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9WUEMuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSBLTVMga2V5IGlkZW50aWZpZXIgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqL1xuS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIGNvbXB1dGUgYW5kIG1lbW9yeSBjYXBhY2l0eSBvZiB0aGUgREIgaW5zdGFuY2UsIGZvciBleGFtcGxlIGBgZGIubTUubGFyZ2VgYC4gTm90IGFsbCBEQiBpbnN0YW5jZSBjbGFzc2VzIGFyZSBhdmFpbGFibGUgaW4gYWxsIEFXUy1SZWdpb25zLCBvciBmb3IgYWxsIGRhdGFiYXNlIGVuZ2luZXMuIEZvciB0aGUgZnVsbCBsaXN0IG9mIERCIGluc3RhbmNlIGNsYXNzZXMsIGFuZCBhdmFpbGFiaWxpdHkgZm9yIHlvdXIgZW5naW5lLCBzZWUgW0RCIGluc3RhbmNlIGNsYXNzZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9Db25jZXB0cy5EQkluc3RhbmNlQ2xhc3MuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqIG9yIFtBdXJvcmEgREIgaW5zdGFuY2UgY2xhc3Nlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL0NvbmNlcHRzLkRCSW5zdGFuY2VDbGFzcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZSouXG4gKi9cbkRCSW5zdGFuY2VDbGFzcz86IHN0cmluZ1xuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdG8gcmVtb3ZlIGF1dG9tYXRlZCBiYWNrdXBzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBEQiBpbnN0YW5jZSBpcyBkZWxldGVkLiBUaGlzIHBhcmFtZXRlciBpc24ndCBjYXNlLXNlbnNpdGl2ZS4gVGhlIGRlZmF1bHQgaXMgdG8gcmVtb3ZlIGF1dG9tYXRlZCBiYWNrdXBzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBEQiBpbnN0YW5jZSBpcyBkZWxldGVkLlxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFdoZW4geW91IGRlbGV0ZSBhIERCIGNsdXN0ZXIsIGFsbCBhdXRvbWF0ZWQgYmFja3VwcyBmb3IgdGhhdCBEQiBjbHVzdGVyIGFyZSBkZWxldGVkIGFuZCBjYW4ndCBiZSByZWNvdmVyZWQuIE1hbnVhbCBEQiBjbHVzdGVyIHNuYXBzaG90cyBvZiB0aGUgREIgY2x1c3RlciBhcmUgbm90IGRlbGV0ZWQuXG4gKi9cbkRlbGV0ZUF1dG9tYXRlZEJhY2t1cHM/OiBib29sZWFuXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgZGF5cyB0byByZXRhaW4gUGVyZm9ybWFuY2UgSW5zaWdodHMgZGF0YS4gV2hlbiBjcmVhdGluZyBhIERCIGluc3RhbmNlIHdpdGhvdXQgZW5hYmxpbmcgUGVyZm9ybWFuY2UgSW5zaWdodHMsIHlvdSBjYW4ndCBzcGVjaWZ5IHRoZSBwYXJhbWV0ZXIgYGBQZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uUGVyaW9kYGAuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZXMuXG4gKiAgVmFsaWQgVmFsdWVzOlxuICogICArICAgYGA3YGAgXG4gKiAgICsgICptb250aCogKiAzMSwgd2hlcmUgKm1vbnRoKiBpcyBhIG51bWJlciBvZiBtb250aHMgZnJvbSAxLTIzLiBFeGFtcGxlczogYGA5M2BgICgzIG1vbnRocyAqIDMxKSwgYGAzNDFgYCAoMTEgbW9udGhzICogMzEpLCBgYDU4OWBgICgxOSBtb250aHMgKiAzMSlcbiAqICAgKyAgIGBgNzMxYGAgXG4gKiAgIFxuICogIERlZmF1bHQ6IGBgN2BgIGRheXNcbiAqICBJZiB5b3Ugc3BlY2lmeSBhIHJldGVudGlvbiBwZXJpb2QgdGhhdCBpc24ndCB2YWxpZCwgc3VjaCBhcyBgYDk0YGAsIEFtYXpvbiBSRFMgcmV0dXJucyBhbiBlcnJvci5cbiAqL1xuUGVyZm9ybWFuY2VJbnNpZ2h0c1JldGVudGlvblBlcmlvZD86IG51bWJlclxuLyoqXG4gKiBUaGUgQXZhaWxhYmlsaXR5IFpvbmUgKEFaKSB3aGVyZSB0aGUgZGF0YWJhc2Ugd2lsbCBiZSBjcmVhdGVkLiBGb3IgaW5mb3JtYXRpb24gb24gQVdTLVJlZ2lvbnMgYW5kIEF2YWlsYWJpbGl0eSBab25lcywgc2VlIFtSZWdpb25zIGFuZCBBdmFpbGFiaWxpdHkgWm9uZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9Db25jZXB0cy5SZWdpb25zQW5kQXZhaWxhYmlsaXR5Wm9uZXMuaHRtbCkuXG4gKiAgRm9yIEFtYXpvbiBBdXJvcmEsIGVhY2ggQXVyb3JhIERCIGNsdXN0ZXIgaG9zdHMgY29waWVzIG9mIGl0cyBzdG9yYWdlIGluIHRocmVlIHNlcGFyYXRlIEF2YWlsYWJpbGl0eSBab25lcy4gU3BlY2lmeSBvbmUgb2YgdGhlc2UgQXZhaWxhYmlsaXR5IFpvbmVzLiBBdXJvcmEgYXV0b21hdGljYWxseSBjaG9vc2VzIGFuIGFwcHJvcHJpYXRlIEF2YWlsYWJpbGl0eSBab25lIGlmIHlvdSBkb24ndCBzcGVjaWZ5IG9uZS5cbiAqICBEZWZhdWx0OiBBIHJhbmRvbSwgc3lzdGVtLWNob3NlbiBBdmFpbGFiaWxpdHkgWm9uZSBpbiB0aGUgZW5kcG9pbnQncyBBV1MtUmVnaW9uLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBUaGUgYGBBdmFpbGFiaWxpdHlab25lYGAgcGFyYW1ldGVyIGNhbid0IGJlIHNwZWNpZmllZCBpZiB0aGUgREIgaW5zdGFuY2UgaXMgYSBNdWx0aS1BWiBkZXBsb3ltZW50LlxuICogICArICBUaGUgc3BlY2lmaWVkIEF2YWlsYWJpbGl0eSBab25lIG11c3QgYmUgaW4gdGhlIHNhbWUgQVdTLVJlZ2lvbiBhcyB0aGUgY3VycmVudCBlbmRwb2ludC5cbiAqICAgXG4gKiAgRXhhbXBsZTogYGB1cy1lYXN0LTFkYGBcbiAqL1xuQXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgREIgaW5zdGFuY2Ugc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbiBncm91cC5cbiAqICBQZXJtYW5lbnQgb3B0aW9ucywgc3VjaCBhcyB0aGUgVERFIG9wdGlvbiBmb3IgT3JhY2xlIEFkdmFuY2VkIFNlY3VyaXR5IFRERSwgY2FuJ3QgYmUgcmVtb3ZlZCBmcm9tIGFuIG9wdGlvbiBncm91cC4gQWxzbywgdGhhdCBvcHRpb24gZ3JvdXAgY2FuJ3QgYmUgcmVtb3ZlZCBmcm9tIGEgREIgaW5zdGFuY2Ugb25jZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBEQiBpbnN0YW5jZS5cbiAqL1xuT3B0aW9uR3JvdXBOYW1lPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSBQZXJmb3JtYW5jZSBJbnNpZ2h0cyBmb3IgdGhlIERCIGluc3RhbmNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2luZyBBbWF6b24gUGVyZm9ybWFuY2UgSW5zaWdodHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1BlcmZJbnNpZ2h0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZXMuXG4gKi9cbkVuYWJsZVBlcmZvcm1hbmNlSW5zaWdodHM/OiBib29sZWFuXG4vKipcbiAqIEEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBtaW5vciBlbmdpbmUgdXBncmFkZXMgYXJlIGFwcGxpZWQgYXV0b21hdGljYWxseSB0byB0aGUgREIgaW5zdGFuY2UgZHVyaW5nIHRoZSBtYWludGVuYW5jZSB3aW5kb3cuIEJ5IGRlZmF1bHQsIG1pbm9yIGVuZ2luZSB1cGdyYWRlcyBhcmUgYXBwbGllZCBhdXRvbWF0aWNhbGx5LlxuICovXG5BdXRvTWlub3JWZXJzaW9uVXBncmFkZT86IGJvb2xlYW5cbi8qKlxuICogQSBEQiBzdWJuZXQgZ3JvdXAgdG8gYXNzb2NpYXRlIHdpdGggdGhlIERCIGluc3RhbmNlLiBJZiB5b3UgdXBkYXRlIHRoaXMgdmFsdWUsIHRoZSBuZXcgc3VibmV0IGdyb3VwIG11c3QgYmUgYSBzdWJuZXQgZ3JvdXAgaW4gYSBuZXcgVlBDLiBcbiAqICBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIERCIHN1Ym5ldCBncm91cCwgUkRTIHVzZXMgdGhlIGRlZmF1bHQgREIgc3VibmV0IGdyb3VwIGlmIG9uZSBleGlzdHMuIElmIGEgZGVmYXVsdCBEQiBzdWJuZXQgZ3JvdXAgZG9lcyBub3QgZXhpc3QsIGFuZCB5b3UgZG9uJ3Qgc3BlY2lmeSBhIGBgREJTdWJuZXRHcm91cE5hbWVgYCwgdGhlIERCIGluc3RhbmNlIGZhaWxzIHRvIGxhdW5jaC4gXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgQW1hem9uIFJEUyBpbiBhIFZQQywgc2VlIFtBbWF6b24gVlBDIGFuZCBBbWF6b24gUkRTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9WUEMuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLiBcbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBBbWF6b24gQXVyb3JhIERCIGluc3RhbmNlcy4gVGhlIERCIHN1Ym5ldCBncm91cCBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLiBJZiBzcGVjaWZpZWQsIHRoZSBzZXR0aW5nIG11c3QgbWF0Y2ggdGhlIERCIGNsdXN0ZXIgc2V0dGluZy5cbiAqL1xuREJTdWJuZXRHcm91cE5hbWU/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGhhcyBkZWxldGlvbiBwcm90ZWN0aW9uIGVuYWJsZWQuIFRoZSBkYXRhYmFzZSBjYW4ndCBiZSBkZWxldGVkIHdoZW4gZGVsZXRpb24gcHJvdGVjdGlvbiBpcyBlbmFibGVkLiBCeSBkZWZhdWx0LCBkZWxldGlvbiBwcm90ZWN0aW9uIGlzbid0IGVuYWJsZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0RlbGV0aW5nIGEgREIgSW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX0RlbGV0ZUluc3RhbmNlLmh0bWwpLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIEFtYXpvbiBBdXJvcmEgREIgaW5zdGFuY2VzLiBZb3UgY2FuIGVuYWJsZSBvciBkaXNhYmxlIGRlbGV0aW9uIHByb3RlY3Rpb24gZm9yIHRoZSBEQiBjbHVzdGVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGBgQ3JlYXRlREJDbHVzdGVyYGAuIERCIGluc3RhbmNlcyBpbiBhIERCIGNsdXN0ZXIgY2FuIGJlIGRlbGV0ZWQgZXZlbiB3aGVuIGRlbGV0aW9uIHByb3RlY3Rpb24gaXMgZW5hYmxlZCBmb3IgdGhlIERCIGNsdXN0ZXIuXG4gKi9cbkRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW5cbi8qKlxuICogQSBuYW1lIGZvciB0aGUgREIgaW5zdGFuY2UuIElmIHlvdSBzcGVjaWZ5IGEgbmFtZSwgQVdTIENsb3VkRm9ybWF0aW9uIGNvbnZlcnRzIGl0IHRvIGxvd2VyY2FzZS4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBuYW1lLCBBV1MgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGVzIGEgdW5pcXVlIHBoeXNpY2FsIElEIGFuZCB1c2VzIHRoYXQgSUQgZm9yIHRoZSBEQiBpbnN0YW5jZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTmFtZSBUeXBlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1uYW1lLmh0bWwpLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCBjb25zdHJhaW50cyB0aGF0IGFwcGx5IHRvIERCIGluc3RhbmNlIGlkZW50aWZpZXJzLCBzZWUgW05hbWluZyBjb25zdHJhaW50cyBpbiBBbWF6b24gUkRTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9MaW1pdHMuaHRtbCNSRFNfTGltaXRzLkNvbnN0cmFpbnRzKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgIElmIHlvdSBzcGVjaWZ5IGEgbmFtZSwgeW91IGNhbid0IHBlcmZvcm0gdXBkYXRlcyB0aGF0IHJlcXVpcmUgcmVwbGFjZW1lbnQgb2YgdGhpcyByZXNvdXJjZS4gWW91IGNhbiBwZXJmb3JtIHVwZGF0ZXMgdGhhdCByZXF1aXJlIG5vIG9yIHNvbWUgaW50ZXJydXB0aW9uLiBJZiB5b3UgbXVzdCByZXBsYWNlIHRoZSByZXNvdXJjZSwgc3BlY2lmeSBhIG5ldyBuYW1lLlxuICovXG5EQkluc3RhbmNlSWRlbnRpZmllcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHN0b3JhZ2UgaW4gZ2liaWJ5dGVzIChHaUIpIHRvIGJlIGluaXRpYWxseSBhbGxvY2F0ZWQgZm9yIHRoZSBkYXRhYmFzZSBpbnN0YW5jZS5cbiAqICAgSWYgYW55IHZhbHVlIGlzIHNldCBpbiB0aGUgYGBJb3BzYGAgcGFyYW1ldGVyLCBgYEFsbG9jYXRlZFN0b3JhZ2VgYCBtdXN0IGJlIGF0IGxlYXN0IDEwMCBHaUIsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBtaW5pbXVtIElvcHMgdmFsdWUgb2YgMSwwMDAuIElmIHlvdSBpbmNyZWFzZSB0aGUgYGBJb3BzYGAgdmFsdWUgKGluIDEsMDAwIElPUFMgaW5jcmVtZW50cyksIHRoZW4geW91IG11c3QgYWxzbyBpbmNyZWFzZSB0aGUgYGBBbGxvY2F0ZWRTdG9yYWdlYGAgdmFsdWUgKGluIDEwMC1HaUIgaW5jcmVtZW50cykuIFxuICogICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBBdXJvcmEgY2x1c3RlciB2b2x1bWVzIGF1dG9tYXRpY2FsbHkgZ3JvdyBhcyB0aGUgYW1vdW50IG9mIGRhdGEgaW4geW91ciBkYXRhYmFzZSBpbmNyZWFzZXMsIHRob3VnaCB5b3UgYXJlIG9ubHkgY2hhcmdlZCBmb3IgdGhlIHNwYWNlIHRoYXQgeW91IHVzZSBpbiBhbiBBdXJvcmEgY2x1c3RlciB2b2x1bWUuXG4gKiAgICpEYjIqIFxuICogIENvbnN0cmFpbnRzIHRvIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSBmb3IgZWFjaCBzdG9yYWdlIHR5cGUgYXJlIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSAoU1NEKSBzdG9yYWdlIChncDMpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byA2NDAwMC5cbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBzdG9yYWdlIChpbzEpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxMDAgdG8gNjQwMDAuXG4gKiAgIFxuICogICAqTXlTUUwqIFxuICogIENvbnN0cmFpbnRzIHRvIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSBmb3IgZWFjaCBzdG9yYWdlIHR5cGUgYXJlIHRoZSBmb2xsb3dpbmc6IFxuICogICArICBHZW5lcmFsIFB1cnBvc2UgKFNTRCkgc3RvcmFnZSAoZ3AyKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMjAgdG8gNjU1MzYuXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgc3RvcmFnZSAoaW8xKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMTAwIHRvIDY1NTM2LlxuICogICArICBNYWduZXRpYyBzdG9yYWdlIChzdGFuZGFyZCk6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDUgdG8gMzA3Mi5cbiAqICAgXG4gKiAgICpNYXJpYURCKiBcbiAqICBDb25zdHJhaW50cyB0byB0aGUgYW1vdW50IG9mIHN0b3JhZ2UgZm9yIGVhY2ggc3RvcmFnZSB0eXBlIGFyZSB0aGUgZm9sbG93aW5nOiBcbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIChTU0QpIHN0b3JhZ2UgKGdwMik6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDY1NTM2LlxuICogICArICBQcm92aXNpb25lZCBJT1BTIHN0b3JhZ2UgKGlvMSk6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDEwMCB0byA2NTUzNi5cbiAqICAgKyAgTWFnbmV0aWMgc3RvcmFnZSAoc3RhbmRhcmQpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSA1IHRvIDMwNzIuXG4gKiAgIFxuICogICAqUG9zdGdyZVNRTCogXG4gKiAgQ29uc3RyYWludHMgdG8gdGhlIGFtb3VudCBvZiBzdG9yYWdlIGZvciBlYWNoIHN0b3JhZ2UgdHlwZSBhcmUgdGhlIGZvbGxvd2luZzogXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSAoU1NEKSBzdG9yYWdlIChncDIpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byA2NTUzNi5cbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBzdG9yYWdlIChpbzEpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxMDAgdG8gNjU1MzYuXG4gKiAgICsgIE1hZ25ldGljIHN0b3JhZ2UgKHN0YW5kYXJkKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gNSB0byAzMDcyLlxuICogICBcbiAqICAgKk9yYWNsZSogXG4gKiAgQ29uc3RyYWludHMgdG8gdGhlIGFtb3VudCBvZiBzdG9yYWdlIGZvciBlYWNoIHN0b3JhZ2UgdHlwZSBhcmUgdGhlIGZvbGxvd2luZzogXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSAoU1NEKSBzdG9yYWdlIChncDIpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byA2NTUzNi5cbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBzdG9yYWdlIChpbzEpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxMDAgdG8gNjU1MzYuXG4gKiAgICsgIE1hZ25ldGljIHN0b3JhZ2UgKHN0YW5kYXJkKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMTAgdG8gMzA3Mi5cbiAqICAgXG4gKiAgICpTUUwgU2VydmVyKiBcbiAqICBDb25zdHJhaW50cyB0byB0aGUgYW1vdW50IG9mIHN0b3JhZ2UgZm9yIGVhY2ggc3RvcmFnZSB0eXBlIGFyZSB0aGUgZm9sbG93aW5nOiBcbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIChTU0QpIHN0b3JhZ2UgKGdwMik6XG4gKiAgICsgIEVudGVycHJpc2UgYW5kIFN0YW5kYXJkIGVkaXRpb25zOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byAxNjM4NC5cbiAqICAgKyAgV2ViIGFuZCBFeHByZXNzIGVkaXRpb25zOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byAxNjM4NC5cbiAqICAgXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgc3RvcmFnZSAoaW8xKTpcbiAqICAgKyAgRW50ZXJwcmlzZSBhbmQgU3RhbmRhcmQgZWRpdGlvbnM6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDE2Mzg0LlxuICogICArICBXZWIgYW5kIEV4cHJlc3MgZWRpdGlvbnM6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDE2Mzg0LlxuICogICBcbiAqICAgKyAgTWFnbmV0aWMgc3RvcmFnZSAoc3RhbmRhcmQpOlxuICogICArICBFbnRlcnByaXNlIGFuZCBTdGFuZGFyZCBlZGl0aW9uczogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMjAgdG8gMTAyNC5cbiAqICAgKyAgV2ViIGFuZCBFeHByZXNzIGVkaXRpb25zOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byAxMDI0LlxuICovXG5BbGxvY2F0ZWRTdG9yYWdlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwYXNzd29yZCBmb3IgdGhlIG1hc3RlciB1c2VyLiBUaGUgcGFzc3dvcmQgY2FuIGluY2x1ZGUgYW55IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0IFwiL1wiLCBcIlwiXCIsIG9yIFwiQFwiLlxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSBwYXNzd29yZCBmb3IgdGhlIG1hc3RlciB1c2VyIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKiAgICpSRFMgZm9yIERiMiogXG4gKiAgTXVzdCBjb250YWluIGZyb20gOCB0byAyNTUgY2hhcmFjdGVycy5cbiAqICAgKlJEUyBmb3IgTWFyaWFEQiogXG4gKiAgQ29uc3RyYWludHM6IE11c3QgY29udGFpbiBmcm9tIDggdG8gNDEgY2hhcmFjdGVycy5cbiAqICAgKlJEUyBmb3IgTWljcm9zb2Z0IFNRTCBTZXJ2ZXIqIFxuICogIENvbnN0cmFpbnRzOiBNdXN0IGNvbnRhaW4gZnJvbSA4IHRvIDEyOCBjaGFyYWN0ZXJzLlxuICogICAqUkRTIGZvciBNeVNRTCogXG4gKiAgQ29uc3RyYWludHM6IE11c3QgY29udGFpbiBmcm9tIDggdG8gNDEgY2hhcmFjdGVycy5cbiAqICAgKlJEUyBmb3IgT3JhY2xlKiBcbiAqICBDb25zdHJhaW50czogTXVzdCBjb250YWluIGZyb20gOCB0byAzMCBjaGFyYWN0ZXJzLlxuICogICAqUkRTIGZvciBQb3N0Z3JlU1FMKiBcbiAqICBDb25zdHJhaW50czogTXVzdCBjb250YWluIGZyb20gOCB0byAxMjggY2hhcmFjdGVycy5cbiAqL1xuTWFzdGVyVXNlclBhc3N3b3JkPzogc3RyaW5nXG5NYXN0ZXJVc2VyU2VjcmV0PzogTWFzdGVyVXNlclNlY3JldFxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgTkNIQVIgY2hhcmFjdGVyIHNldCBmb3IgdGhlIE9yYWNsZSBEQiBpbnN0YW5jZS5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqL1xuTmNoYXJDaGFyYWN0ZXJTZXROYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBNdWx0aS1BWiBEQiBjbHVzdGVyIHRoYXQgd2lsbCBhY3QgYXMgdGhlIHNvdXJjZSBmb3IgdGhlIHJlYWQgcmVwbGljYS4gRWFjaCBEQiBjbHVzdGVyIGNhbiBoYXZlIHVwIHRvIDE1IHJlYWQgcmVwbGljYXMuXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgdGhlIGlkZW50aWZpZXIgb2YgYW4gZXhpc3RpbmcgTXVsdGktQVogREIgY2x1c3Rlci5cbiAqICAgKyAgQ2FuJ3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgcGFyYW1ldGVyIGlzIGFsc28gc3BlY2lmaWVkLlxuICogICArICBUaGUgc3BlY2lmaWVkIERCIGNsdXN0ZXIgbXVzdCBoYXZlIGF1dG9tYXRpYyBiYWNrdXBzIGVuYWJsZWQsIHRoYXQgaXMsIGl0cyBiYWNrdXAgcmV0ZW50aW9uIHBlcmlvZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLlxuICogICArICBUaGUgc291cmNlIERCIGNsdXN0ZXIgbXVzdCBiZSBpbiB0aGUgc2FtZSBBV1MtUmVnaW9uIGFzIHRoZSByZWFkIHJlcGxpY2EuIENyb3NzLVJlZ2lvbiByZXBsaWNhdGlvbiBpc24ndCBzdXBwb3J0ZWQuXG4gKi9cblNvdXJjZURCQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogQSBsaXN0IG9mIHRoZSBEQiBzZWN1cml0eSBncm91cHMgdG8gYXNzaWduIHRvIHRoZSBEQiBpbnN0YW5jZS4gVGhlIGxpc3QgY2FuIGluY2x1ZGUgYm90aCB0aGUgbmFtZSBvZiBleGlzdGluZyBEQiBzZWN1cml0eSBncm91cHMgb3IgcmVmZXJlbmNlcyB0byBBV1M6OlJEUzo6REJTZWN1cml0eUdyb3VwIHJlc291cmNlcyBjcmVhdGVkIGluIHRoZSB0ZW1wbGF0ZS5cbiAqICAgSWYgeW91IHNldCBEQlNlY3VyaXR5R3JvdXBzLCB5b3UgbXVzdCBub3Qgc2V0IFZQQ1NlY3VyaXR5R3JvdXBzLCBhbmQgdmljZSB2ZXJzYS4gQWxzbywgbm90ZSB0aGF0IHRoZSBEQlNlY3VyaXR5R3JvdXBzIHByb3BlcnR5IGV4aXN0cyBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHJlZ2lvbnMgYW5kIGlzIG5vIGxvbmdlciByZWNvbW1lbmRlZCBmb3IgcHJvdmlkaW5nIHNlY3VyaXR5IGluZm9ybWF0aW9uIHRvIGFuIFJEUyBEQiBpbnN0YW5jZS4gSW5zdGVhZCwgdXNlIFZQQ1NlY3VyaXR5R3JvdXBzLlxuICogICBJZiB5b3Ugc3BlY2lmeSB0aGlzIHByb3BlcnR5LCBBV1MgQ2xvdWRGb3JtYXRpb24gc2VuZHMgb25seSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgKGlmIHNwZWNpZmllZCkgdG8gQW1hem9uIFJEUyBkdXJpbmcgY3JlYXRlIG9wZXJhdGlvbnM6XG4gKiAgICsgICBgYEFsbG9jYXRlZFN0b3JhZ2VgYCBcbiAqICAgKyAgIGBgQXV0b01pbm9yVmVyc2lvblVwZ3JhZGVgYCBcbiAqICAgKyAgIGBgQXZhaWxhYmlsaXR5Wm9uZWBgIFxuICogICArICAgYGBCYWNrdXBSZXRlbnRpb25QZXJpb2RgYCBcbiAqICAgKyAgIGBgQ2hhcmFjdGVyU2V0TmFtZWBgIFxuICogICArICAgYGBEQkluc3RhbmNlQ2xhc3NgYCBcbiAqICAgKyAgIGBgREJOYW1lYGAgXG4gKiAgICsgICBgYERCUGFyYW1ldGVyR3JvdXBOYW1lYGAgXG4gKiAgICsgICBgYERCU2VjdXJpdHlHcm91cHNgYCBcbiAqICAgKyAgIGBgREJTdWJuZXRHcm91cE5hbWVgYCBcbiAqICAgKyAgIGBgRW5naW5lYGAgXG4gKiAgICsgICBgYEVuZ2luZVZlcnNpb25gYCBcbiAqICAgKyAgIGBgSW9wc2BgIFxuICogICArICAgYGBMaWNlbnNlTW9kZWxgYCBcbiAqICAgKyAgIGBgTWFzdGVyVXNlcm5hbWVgYCBcbiAqICAgKyAgIGBgTWFzdGVyVXNlclBhc3N3b3JkYGAgXG4gKiAgICsgICBgYE11bHRpQVpgYCBcbiAqICAgKyAgIGBgT3B0aW9uR3JvdXBOYW1lYGAgXG4gKiAgICsgICBgYFByZWZlcnJlZEJhY2t1cFdpbmRvd2BgIFxuICogICArICAgYGBQcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvd2BgIFxuICogICBcbiAqICBBbGwgb3RoZXIgcHJvcGVydGllcyBhcmUgaWdub3JlZC4gU3BlY2lmeSBhIHZpcnR1YWwgcHJpdmF0ZSBjbG91ZCAoVlBDKSBzZWN1cml0eSBncm91cCBpZiB5b3Ugd2FudCB0byBzdWJtaXQgb3RoZXIgcHJvcGVydGllcywgc3VjaCBhcyBgYFN0b3JhZ2VUeXBlYGAsIGBgU3RvcmFnZUVuY3J5cHRlZGBgLCBvciBgYEttc0tleUlkYGAuIElmIHlvdSdyZSBhbHJlYWR5IHVzaW5nIHRoZSBgYERCU2VjdXJpdHlHcm91cHNgYCBwcm9wZXJ0eSwgeW91IGNhbid0IHVzZSB0aGVzZSBvdGhlciBwcm9wZXJ0aWVzIGJ5IHVwZGF0aW5nIHlvdXIgREIgaW5zdGFuY2UgdG8gdXNlIGEgVlBDIHNlY3VyaXR5IGdyb3VwLiBZb3UgbXVzdCByZWNyZWF0ZSB0aGUgREIgaW5zdGFuY2UuXG4gKi9cbkRCU2VjdXJpdHlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgbWFzdGVyIHVzZXIgbmFtZSBmb3IgdGhlIERCIGluc3RhbmNlLlxuICogICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBTb3VyY2VEQkluc3RhbmNlSWRlbnRpZmllcmBgIG9yIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNvdXJjZSBEQiBpbnN0YW5jZSBvciBzbmFwc2hvdC5cbiAqICBXaGVuIG1pZ3JhdGluZyBhIHNlbGYtbWFuYWdlZCBEYjIgZGF0YWJhc2UsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIHNhbWUgbWFzdGVyIHVzZXJuYW1lIGFzIHlvdXIgc2VsZi1tYW5hZ2VkIERiMiBpbnN0YW5jZSBuYW1lLlxuICogICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBUaGUgbmFtZSBmb3IgdGhlIG1hc3RlciB1c2VyIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuIFxuICogICAqUkRTIGZvciBEYjIqIFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIDEgdG8gMTYgbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBGaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxldHRlci5cbiAqICAgKyAgQ2FuJ3QgYmUgYSByZXNlcnZlZCB3b3JkIGZvciB0aGUgY2hvc2VuIGRhdGFiYXNlIGVuZ2luZS5cbiAqICAgXG4gKiAgICpSRFMgZm9yIE1hcmlhREIqIFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIDEgdG8gMTYgbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBDYW4ndCBiZSBhIHJlc2VydmVkIHdvcmQgZm9yIHRoZSBjaG9zZW4gZGF0YWJhc2UgZW5naW5lLlxuICogICBcbiAqICAgKlJEUyBmb3IgTWljcm9zb2Z0IFNRTCBTZXJ2ZXIqIFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIDEgdG8gMTI4IGxldHRlcnMgb3IgbnVtYmVycy5cbiAqICAgKyAgRmlyc3QgY2hhcmFjdGVyIG11c3QgYmUgYSBsZXR0ZXIuXG4gKiAgICsgIENhbid0IGJlIGEgcmVzZXJ2ZWQgd29yZCBmb3IgdGhlIGNob3NlbiBkYXRhYmFzZSBlbmdpbmUuXG4gKiAgIFxuICogICAqUkRTIGZvciBNeVNRTCogXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgMSB0byAxNiBsZXR0ZXJzIG9yIG51bWJlcnMuXG4gKiAgICsgIEZpcnN0IGNoYXJhY3RlciBtdXN0IGJlIGEgbGV0dGVyLlxuICogICArICBDYW4ndCBiZSBhIHJlc2VydmVkIHdvcmQgZm9yIHRoZSBjaG9zZW4gZGF0YWJhc2UgZW5naW5lLlxuICogICBcbiAqICAgKlJEUyBmb3IgT3JhY2xlKiBcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSAxIHRvIDMwIGxldHRlcnMgb3IgbnVtYmVycy5cbiAqICAgKyAgRmlyc3QgY2hhcmFjdGVyIG11c3QgYmUgYSBsZXR0ZXIuXG4gKiAgICsgIENhbid0IGJlIGEgcmVzZXJ2ZWQgd29yZCBmb3IgdGhlIGNob3NlbiBkYXRhYmFzZSBlbmdpbmUuXG4gKiAgIFxuICogICAqUkRTIGZvciBQb3N0Z3JlU1FMKiBcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSAxIHRvIDYzIGxldHRlcnMgb3IgbnVtYmVycy5cbiAqICAgKyAgRmlyc3QgY2hhcmFjdGVyIG11c3QgYmUgYSBsZXR0ZXIuXG4gKiAgICsgIENhbid0IGJlIGEgcmVzZXJ2ZWQgd29yZCBmb3IgdGhlIGNob3NlbiBkYXRhYmFzZSBlbmdpbmUuXG4gKi9cbk1hc3RlclVzZXJuYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSB1cHBlciBsaW1pdCBpbiBnaWJpYnl0ZXMgKEdpQikgdG8gd2hpY2ggQW1hem9uIFJEUyBjYW4gYXV0b21hdGljYWxseSBzY2FsZSB0aGUgc3RvcmFnZSBvZiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBzZXR0aW5nLCBpbmNsdWRpbmcgbGltaXRhdGlvbnMgdGhhdCBhcHBseSB0byBpdCwgc2VlIFtNYW5hZ2luZyBjYXBhY2l0eSBhdXRvbWF0aWNhbGx5IHdpdGggQW1hem9uIFJEUyBzdG9yYWdlIGF1dG9zY2FsaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9QSU9QUy5TdG9yYWdlVHlwZXMuaHRtbCNVU0VSX1BJT1BTLkF1dG9zY2FsaW5nKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGZvbGxvd2luZyBEQiBpbnN0YW5jZXM6XG4gKiAgICsgIEFtYXpvbiBBdXJvcmEgKFN0b3JhZ2UgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4pXG4gKiAgICsgIFJEUyBDdXN0b21cbiAqL1xuTWF4QWxsb2NhdGVkU3RvcmFnZT86IG51bWJlclxuLyoqXG4gKiBUaGUgb3JkZXIgb2YgcHJpb3JpdHkgaW4gd2hpY2ggYW4gQXVyb3JhIFJlcGxpY2EgaXMgcHJvbW90ZWQgdG8gdGhlIHByaW1hcnkgaW5zdGFuY2UgYWZ0ZXIgYSBmYWlsdXJlIG9mIHRoZSBleGlzdGluZyBwcmltYXJ5IGluc3RhbmNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtGYXVsdCBUb2xlcmFuY2UgZm9yIGFuIEF1cm9yYSBEQiBDbHVzdGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQ29uY2VwdHMuQXVyb3JhSGlnaEF2YWlsYWJpbGl0eS5odG1sI0F1cm9yYS5NYW5hZ2luZy5GYXVsdFRvbGVyYW5jZSkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIFJEUyBDdXN0b20gREIgaW5zdGFuY2VzLlxuICogIERlZmF1bHQ6IGBgMWBgXG4gKiAgVmFsaWQgVmFsdWVzOiBgYDAgLSAxNWBgXG4gKi9cblByb21vdGlvblRpZXI/OiBudW1iZXJcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGlzIGFuIGludGVybmV0LWZhY2luZyBpbnN0YW5jZS4gSWYgeW91IHNwZWNpZnkgdHJ1ZSwgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugd2l0aCBhIHB1YmxpY2x5IHJlc29sdmFibGUgRE5TIG5hbWUsIHdoaWNoIHJlc29sdmVzIHRvIGEgcHVibGljIElQIGFkZHJlc3MuIElmIHlvdSBzcGVjaWZ5IGZhbHNlLCBBV1MgQ2xvdWRGb3JtYXRpb24gY3JlYXRlcyBhbiBpbnRlcm5hbCBpbnN0YW5jZSB3aXRoIGEgRE5TIG5hbWUgdGhhdCByZXNvbHZlcyB0byBhIHByaXZhdGUgSVAgYWRkcmVzcy4gXG4gKiAgVGhlIGRlZmF1bHQgYmVoYXZpb3IgdmFsdWUgZGVwZW5kcyBvbiB5b3VyIFZQQyBzZXR1cCBhbmQgdGhlIGRhdGFiYXNlIHN1Ym5ldCBncm91cC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgYGBQdWJsaWNseUFjY2Vzc2libGVgYCBwYXJhbWV0ZXIgaW4gdGhlIFtDcmVhdGVEQkluc3RhbmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIEFQSSBSZWZlcmVuY2UqLlxuICovXG5QdWJsaWNseUFjY2Vzc2libGU/OiBib29sZWFuXG4vKipcbiAqIFRoZSBBY3RpdmUgRGlyZWN0b3J5IGRpcmVjdG9yeSBJRCB0byBjcmVhdGUgdGhlIERCIGluc3RhbmNlIGluLiBDdXJyZW50bHksIG9ubHkgRGIyLCBNeVNRTCwgTWljcm9zb2Z0IFNRTCBTZXJ2ZXIsIE9yYWNsZSwgYW5kIFBvc3RncmVTUUwgREIgaW5zdGFuY2VzIGNhbiBiZSBjcmVhdGVkIGluIGFuIEFjdGl2ZSBEaXJlY3RvcnkgRG9tYWluLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0tlcmJlcm9zIEF1dGhlbnRpY2F0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUva2VyYmVyb3MtYXV0aGVudGljYXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICovXG5Eb21haW4/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgY2hhbmdlcyB0byB0aGUgREIgaW5zdGFuY2UgYW5kIGFueSBwZW5kaW5nIG1vZGlmaWNhdGlvbnMgYXJlIGFwcGxpZWQgaW1tZWRpYXRlbHksIHJlZ2FyZGxlc3Mgb2YgdGhlIGBgUHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3dgYCBzZXR0aW5nLiBJZiBzZXQgdG8gYGBmYWxzZWBgLCBjaGFuZ2VzIGFyZSBhcHBsaWVkIGR1cmluZyB0aGUgbmV4dCBtYWludGVuYW5jZSB3aW5kb3cuIFVudGlsIFJEUyBhcHBsaWVzIHRoZSBjaGFuZ2VzLCB0aGUgREIgaW5zdGFuY2UgcmVtYWlucyBpbiBhIGRyaWZ0IHN0YXRlLiBBcyBhIHJlc3VsdCwgdGhlIGNvbmZpZ3VyYXRpb24gZG9lc24ndCBmdWxseSByZWZsZWN0IHRoZSByZXF1ZXN0ZWQgbW9kaWZpY2F0aW9ucyBhbmQgdGVtcG9yYXJpbHkgZGl2ZXJnZXMgZnJvbSB0aGUgaW50ZW5kZWQgc3RhdGUuXG4gKiAgSW4gYWRkaXRpb24gdG8gdGhlIHNldHRpbmdzIGRlc2NyaWJlZCBpbiBbTW9kaWZ5aW5nIGEgREIgaW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9PdmVydmlldy5EQkluc3RhbmNlLk1vZGlmeWluZy5odG1sKSwgdGhpcyBwcm9wZXJ0eSBhbHNvIGRldGVybWluZXMgd2hldGhlciB0aGUgREIgaW5zdGFuY2UgcmVib290cyB3aGVuIGEgc3RhdGljIHBhcmFtZXRlciBpcyBtb2RpZmllZCBpbiB0aGUgYXNzb2NpYXRlZCBEQiBwYXJhbWV0ZXIgZ3JvdXAuXG4gKiAgRGVmYXVsdDogYGB0cnVlYGBcbiAqL1xuQXBwbHlJbW1lZGlhdGVseT86IGJvb2xlYW5cbi8qKlxuICogVGhlIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSAoRlFETikgb2YgYW4gQWN0aXZlIERpcmVjdG9yeSBkb21haW4uXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIENhbid0IGJlIGxvbmdlciB0aGFuIDY0IGNoYXJhY3RlcnMuXG4gKiAgIFxuICogIEV4YW1wbGU6IGBgbXltYW5hZ2VkQUR0ZXN0Lm15bWFuYWdlZEFELm15ZG9tYWluYGBcbiAqL1xuRG9tYWluRnFkbj86IHN0cmluZ1xuLyoqXG4gKiBGb3Igc3VwcG9ydGVkIGVuZ2luZXMsIGluZGljYXRlcyB0aGF0IHRoZSBEQiBpbnN0YW5jZSBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIHNldC5cbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBUaGUgY2hhcmFjdGVyIHNldCBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBV1M6OlJEUzo6REJDbHVzdGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtcmRzLWRiY2x1c3Rlci5odG1sKS5cbiAqL1xuQ2hhcmFjdGVyU2V0TmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIGZvciB0aGUgSUFNIHJvbGUgdGhhdCBwZXJtaXRzIFJEUyB0byBzZW5kIGVuaGFuY2VkIG1vbml0b3JpbmcgbWV0cmljcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzLiBGb3IgZXhhbXBsZSwgYGBhcm46YXdzOmlhbToxMjM0NTY3ODkwMTI6cm9sZS9lbWFjY2Vzc2BgLiBGb3IgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgYSBtb25pdG9yaW5nIHJvbGUsIHNlZSBbU2V0dGluZyBVcCBhbmQgRW5hYmxpbmcgRW5oYW5jZWQgTW9uaXRvcmluZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfTW9uaXRvcmluZy5PUy5odG1sI1VTRVJfTW9uaXRvcmluZy5PUy5FbmFibGluZykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIElmIGBgTW9uaXRvcmluZ0ludGVydmFsYGAgaXMgc2V0IHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgYDBgYCwgdGhlbiB5b3UgbXVzdCBzdXBwbHkgYSBgYE1vbml0b3JpbmdSb2xlQXJuYGAgdmFsdWUuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZXMuXG4gKi9cbk1vbml0b3JpbmdSb2xlQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBJQU1sb25nIChJQU0pIHJvbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgREIgaW5zdGFuY2UuIFxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSBhc3NvY2lhdGVkIHJvbGVzIGFyZSBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICovXG5Bc3NvY2lhdGVkUm9sZXM/OiBEQkluc3RhbmNlUm9sZVtdXG4vKipcbiAqIFRoZSBBY3RpdmUgRGlyZWN0b3J5IG9yZ2FuaXphdGlvbmFsIHVuaXQgZm9yIHlvdXIgREIgaW5zdGFuY2UgdG8gam9pbi5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSBpbiB0aGUgZGlzdGluZ3Vpc2hlZCBuYW1lIGZvcm1hdC5cbiAqICAgKyAgQ2FuJ3QgYmUgbG9uZ2VyIHRoYW4gNjQgY2hhcmFjdGVycy5cbiAqICAgXG4gKiAgRXhhbXBsZTogYGBPVT1teW1hbmFnZWRBRHRlc3RPVSxEQz1teW1hbmFnZWRBRHRlc3QsREM9bXltYW5hZ2VkQUQsREM9bXlkb21haW5gYFxuICovXG5Eb21haW5PdT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIE11bHRpLUFaIERCIGNsdXN0ZXIgc25hcHNob3QgdG8gcmVzdG9yZSBmcm9tLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE11bHRpLUFaIERCIGNsdXN0ZXJzLCBzZWUgW011bHRpLUFaIERCIGNsdXN0ZXIgZGVwbG95bWVudHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9tdWx0aS1hei1kYi1jbHVzdGVycy1jb25jZXB0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgbWF0Y2ggdGhlIGlkZW50aWZpZXIgb2YgYW4gZXhpc3RpbmcgTXVsdGktQVogREIgY2x1c3RlciBzbmFwc2hvdC5cbiAqICAgKyAgQ2FuJ3QgYmUgc3BlY2lmaWVkIHdoZW4gYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIGlzIHNwZWNpZmllZC5cbiAqICAgKyAgTXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgaXNuJ3Qgc3BlY2lmaWVkLlxuICogICArICBJZiB5b3UgYXJlIHJlc3RvcmluZyBmcm9tIGEgc2hhcmVkIG1hbnVhbCBNdWx0aS1BWiBEQiBjbHVzdGVyIHNuYXBzaG90LCB0aGUgYGBEQkNsdXN0ZXJTbmFwc2hvdElkZW50aWZpZXJgYCBtdXN0IGJlIHRoZSBBUk4gb2YgdGhlIHNoYXJlZCBzbmFwc2hvdC5cbiAqICAgKyAgQ2FuJ3QgYmUgdGhlIGlkZW50aWZpZXIgb2YgYW4gQXVyb3JhIERCIGNsdXN0ZXIgc25hcHNob3QuXG4gKi9cbkRCQ2x1c3RlclNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJlcGxpY2F0ZWQgYXV0b21hdGVkIGJhY2t1cHMgZnJvbSB3aGljaCB0byByZXN0b3JlLCBmb3IgZXhhbXBsZSwgYGBhcm46YXdzOnJkczp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmF1dG8tYmFja3VwOmFiLUwySUpDRVhKUDdYUTdIT0o0U0lFWEFNUExFYGAuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbS5cbiAqL1xuU291cmNlREJJbnN0YW5jZUF1dG9tYXRlZEJhY2t1cHNBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIG51bWJlciBvZiBDUFUgY29yZXMgYW5kIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBwZXIgY29yZSBmb3IgdGhlIERCIGluc3RhbmNlIGNsYXNzIG9mIHRoZSBEQiBpbnN0YW5jZS5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBBbWF6b24gQXVyb3JhIG9yIFJEUyBDdXN0b20gREIgaW5zdGFuY2VzLlxuICovXG5Qcm9jZXNzb3JGZWF0dXJlcz86IFByb2Nlc3NvckZlYXR1cmVbXVxuLyoqXG4gKiBUaGUgZGFpbHkgdGltZSByYW5nZSBkdXJpbmcgd2hpY2ggYXV0b21hdGVkIGJhY2t1cHMgYXJlIGNyZWF0ZWQgaWYgYXV0b21hdGVkIGJhY2t1cHMgYXJlIGVuYWJsZWQsIHVzaW5nIHRoZSBgYEJhY2t1cFJldGVudGlvblBlcmlvZGBgIHBhcmFtZXRlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQmFja3VwIFdpbmRvd10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfV29ya2luZ1dpdGhBdXRvbWF0ZWRCYWNrdXBzLmh0bWwjVVNFUl9Xb3JraW5nV2l0aEF1dG9tYXRlZEJhY2t1cHMuQmFja3VwV2luZG93KSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgaW4gdGhlIGZvcm1hdCBgYGhoMjQ6bWktaGgyNDptaWBgLlxuICogICArICBNdXN0IGJlIGluIFVuaXZlcnNhbCBDb29yZGluYXRlZCBUaW1lIChVVEMpLlxuICogICArICBNdXN0IG5vdCBjb25mbGljdCB3aXRoIHRoZSBwcmVmZXJyZWQgbWFpbnRlbmFuY2Ugd2luZG93LlxuICogICArICBNdXN0IGJlIGF0IGxlYXN0IDMwIG1pbnV0ZXMuXG4gKiAgIFxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSBkYWlseSB0aW1lIHJhbmdlIGZvciBjcmVhdGluZyBhdXRvbWF0ZWQgYmFja3VwcyBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICovXG5QcmVmZXJyZWRCYWNrdXBXaW5kb3c/OiBzdHJpbmdcbi8qKlxuICogVGhlIGRhdGUgYW5kIHRpbWUgdG8gcmVzdG9yZSBmcm9tLiBUaGlzIHBhcmFtZXRlciBhcHBsaWVzIHRvIHBvaW50LWluLXRpbWUgcmVjb3ZlcnkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Jlc3RvcmluZyBhIERCIGluc3RhbmNlIHRvIGEgc3BlY2lmaWVkIHRpbWVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1BJVC5odG1sKSBpbiB0aGUgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIGEgdGltZSBpbiBVbml2ZXJzYWwgQ29vcmRpbmF0ZWQgVGltZSAoVVRDKSBmb3JtYXQuXG4gKiAgICsgIE11c3QgYmUgYmVmb3JlIHRoZSBsYXRlc3QgcmVzdG9yYWJsZSB0aW1lIGZvciB0aGUgREIgaW5zdGFuY2UuXG4gKiAgICsgIENhbid0IGJlIHNwZWNpZmllZCBpZiB0aGUgYGBVc2VMYXRlc3RSZXN0b3JhYmxlVGltZWBgIHBhcmFtZXRlciBpcyBlbmFibGVkLlxuICogICBcbiAqICBFeGFtcGxlOiBgYDIwMDktMDktMDdUMjM6NDU6MDBaYGBcbiAqL1xuUmVzdG9yZVRpbWU/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGlzIHJlc3RhcnRlZCB3aGVuIHlvdSByb3RhdGUgeW91ciBTU0wvVExTIGNlcnRpZmljYXRlLlxuICogIEJ5IGRlZmF1bHQsIHRoZSBEQiBpbnN0YW5jZSBpcyByZXN0YXJ0ZWQgd2hlbiB5b3Ugcm90YXRlIHlvdXIgU1NML1RMUyBjZXJ0aWZpY2F0ZS4gVGhlIGNlcnRpZmljYXRlIGlzIG5vdCB1cGRhdGVkIHVudGlsIHRoZSBEQiBpbnN0YW5jZSBpcyByZXN0YXJ0ZWQuXG4gKiAgIFNldCB0aGlzIHBhcmFtZXRlciBvbmx5IGlmIHlvdSBhcmUgKm5vdCogdXNpbmcgU1NML1RMUyB0byBjb25uZWN0IHRvIHRoZSBEQiBpbnN0YW5jZS5cbiAqICAgSWYgeW91IGFyZSB1c2luZyBTU0wvVExTIHRvIGNvbm5lY3QgdG8gdGhlIERCIGluc3RhbmNlLCBmb2xsb3cgdGhlIGFwcHJvcHJpYXRlIGluc3RydWN0aW9ucyBmb3IgeW91ciBEQiBlbmdpbmUgdG8gcm90YXRlIHlvdXIgU1NML1RMUyBjZXJ0aWZpY2F0ZTpcbiAqICAgKyAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcm90YXRpbmcgeW91ciBTU0wvVExTIGNlcnRpZmljYXRlIGZvciBSRFMgREIgZW5naW5lcywgc2VlIFtSb3RhdGluZyBZb3VyIFNTTC9UTFMgQ2VydGlmaWNhdGUuXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVXNpbmdXaXRoUkRTLlNTTC1jZXJ0aWZpY2F0ZS1yb3RhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKiAgICsgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHJvdGF0aW5nIHlvdXIgU1NML1RMUyBjZXJ0aWZpY2F0ZSBmb3IgQXVyb3JhIERCIGVuZ2luZXMsIHNlZSBbUm90YXRpbmcgWW91ciBTU0wvVExTIENlcnRpZmljYXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvVXNpbmdXaXRoUkRTLlNTTC1jZXJ0aWZpY2F0ZS1yb3RhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZSouXG4gKiAgIFxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIFJEUyBDdXN0b20gREIgaW5zdGFuY2VzLlxuICovXG5DZXJ0aWZpY2F0ZVJvdGF0aW9uUmVzdGFydD86IGJvb2xlYW5cbi8qKlxuICogVGhlIG5ldHdvcmsgdHlwZSBvZiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgVmFsaWQgdmFsdWVzOlxuICogICArICAgYGBJUFY0YGAgXG4gKiAgICsgICBgYERVQUxgYCBcbiAqICAgXG4gKiAgVGhlIG5ldHdvcmsgdHlwZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBgYERCU3VibmV0R3JvdXBgYCBzcGVjaWZpZWQgZm9yIHRoZSBEQiBpbnN0YW5jZS4gQSBgYERCU3VibmV0R3JvdXBgYCBjYW4gc3VwcG9ydCBvbmx5IHRoZSBJUHY0IHByb3RvY29sIG9yIHRoZSBJUHY0IGFuZCBJUHY2IHByb3RvY29scyAoYGBEVUFMYGApLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1dvcmtpbmcgd2l0aCBhIERCIGluc3RhbmNlIGluIGEgVlBDXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9WUEMuV29ya2luZ1dpdGhSRFNJbnN0YW5jZWluYVZQQy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKi9cbk5ldHdvcmtUeXBlPzogc3RyaW5nXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBEQiBpbnN0YW5jZSBoYXMgYSBkZWRpY2F0ZWQgbG9nIHZvbHVtZSAoRExWKSBlbmFibGVkLlxuICovXG5EZWRpY2F0ZWRMb2dWb2x1bWU/OiBib29sZWFuXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGNvcHkgdGFncyBmcm9tIHRoZSBEQiBpbnN0YW5jZSB0byBzbmFwc2hvdHMgb2YgdGhlIERCIGluc3RhbmNlLiBCeSBkZWZhdWx0LCB0YWdzIGFyZSBub3QgY29waWVkLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIEFtYXpvbiBBdXJvcmEgREIgaW5zdGFuY2VzLiBDb3B5aW5nIHRhZ3MgdG8gc25hcHNob3RzIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuIFNldHRpbmcgdGhpcyB2YWx1ZSBmb3IgYW4gQXVyb3JhIERCIGluc3RhbmNlIGhhcyBubyBlZmZlY3Qgb24gdGhlIERCIGNsdXN0ZXIgc2V0dGluZy5cbiAqL1xuQ29weVRhZ3NUb1NuYXBzaG90PzogYm9vbGVhblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgSUFNIHJvbGUgdG8gdXNlIHdoZW4gbWFraW5nIEFQSSBjYWxscyB0byB0aGUgRGlyZWN0b3J5IFNlcnZpY2UuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGZvbGxvd2luZyBEQiBpbnN0YW5jZXM6XG4gKiAgICsgIEFtYXpvbiBBdXJvcmEgKFRoZSBkb21haW4gaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4pXG4gKiAgICsgIFJEUyBDdXN0b21cbiAqL1xuRG9tYWluSUFNUm9sZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG9wZW4gbW9kZSBvZiBhbiBPcmFjbGUgcmVhZCByZXBsaWNhLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXb3JraW5nIHdpdGggT3JhY2xlIFJlYWQgUmVwbGljYXMgZm9yIEFtYXpvbiBSRFNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9vcmFjbGUtcmVhZC1yZXBsaWNhcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVGhpcyBzZXR0aW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIFJEUyBmb3IgT3JhY2xlLlxuICogIERlZmF1bHQ6IGBgb3Blbi1yZWFkLW9ubHlgYFxuICogIFZhbGlkIFZhbHVlczogYGBvcGVuLXJlYWQtb25seWBgIG9yIGBgbW91bnRlZGBgXG4gKi9cblJlcGxpY2FNb2RlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBsaWZlIGN5Y2xlIHR5cGUgZm9yIHRoaXMgREIgaW5zdGFuY2UuXG4gKiAgIEJ5IGRlZmF1bHQsIHRoaXMgdmFsdWUgaXMgc2V0IHRvIGBgb3Blbi1zb3VyY2UtcmRzLWV4dGVuZGVkLXN1cHBvcnRgYCwgd2hpY2ggZW5yb2xscyB5b3VyIERCIGluc3RhbmNlIGludG8gQW1hem9uIFJEUyBFeHRlbmRlZCBTdXBwb3J0LiBBdCB0aGUgZW5kIG9mIHN0YW5kYXJkIHN1cHBvcnQsIHlvdSBjYW4gYXZvaWQgY2hhcmdlcyBmb3IgRXh0ZW5kZWQgU3VwcG9ydCBieSBzZXR0aW5nIHRoZSB2YWx1ZSB0byBgYG9wZW4tc291cmNlLXJkcy1leHRlbmRlZC1zdXBwb3J0LWRpc2FibGVkYGAuIEluIHRoaXMgY2FzZSwgY3JlYXRpbmcgdGhlIERCIGluc3RhbmNlIHdpbGwgZmFpbCBpZiB0aGUgREIgbWFqb3IgdmVyc2lvbiBpcyBwYXN0IGl0cyBlbmQgb2Ygc3RhbmRhcmQgc3VwcG9ydCBkYXRlLlxuICogICBUaGlzIHNldHRpbmcgYXBwbGllcyBvbmx5IHRvIFJEUyBmb3IgTXlTUUwgYW5kIFJEUyBmb3IgUG9zdGdyZVNRTC4gRm9yIEFtYXpvbiBBdXJvcmEgREIgaW5zdGFuY2VzLCB0aGUgbGlmZSBjeWNsZSB0eXBlIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKiAgWW91IGNhbiB1c2UgdGhpcyBzZXR0aW5nIHRvIGVucm9sbCB5b3VyIERCIGluc3RhbmNlIGludG8gQW1hem9uIFJEUyBFeHRlbmRlZCBTdXBwb3J0LiBXaXRoIFJEUyBFeHRlbmRlZCBTdXBwb3J0LCB5b3UgY2FuIHJ1biB0aGUgc2VsZWN0ZWQgbWFqb3IgZW5naW5lIHZlcnNpb24gb24geW91ciBEQiBpbnN0YW5jZSBwYXN0IHRoZSBlbmQgb2Ygc3RhbmRhcmQgc3VwcG9ydCBmb3IgdGhhdCBlbmdpbmUgdmVyc2lvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIFJEUyBFeHRlbmRlZCBTdXBwb3J0IHdpdGggQW1hem9uIFJEU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL2V4dGVuZGVkLXN1cHBvcnQuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIFZhbGlkIFZhbHVlczogYGBvcGVuLXNvdXJjZS1yZHMtZXh0ZW5kZWQtc3VwcG9ydCB8IG9wZW4tc291cmNlLXJkcy1leHRlbmRlZC1zdXBwb3J0LWRpc2FibGVkYGBcbiAqICBEZWZhdWx0OiBgYG9wZW4tc291cmNlLXJkcy1leHRlbmRlZC1zdXBwb3J0YGBcbiAqL1xuRW5naW5lTGlmZWN5Y2xlU3VwcG9ydD86IHN0cmluZ1xuLyoqXG4gKiBMaWNlbnNlIG1vZGVsIGluZm9ybWF0aW9uIGZvciB0aGlzIERCIGluc3RhbmNlLlxuICogICBWYWxpZCBWYWx1ZXM6XG4gKiAgICsgIEF1cm9yYSBNeVNRTCAtIGBgZ2VuZXJhbC1wdWJsaWMtbGljZW5zZWBgXG4gKiAgICsgIEF1cm9yYSBQb3N0Z3JlU1FMIC0gYGBwb3N0Z3Jlc3FsLWxpY2Vuc2VgYFxuICogICArICBSRFMgZm9yIERiMiAtIGBgYnJpbmcteW91ci1vd24tbGljZW5zZWBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBSRFMgZm9yIERiMiBsaWNlbnNpbmcsIHNlZSBbXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvZGIyLWxpY2Vuc2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKiAgICsgIFJEUyBmb3IgTWFyaWFEQiAtIGBgZ2VuZXJhbC1wdWJsaWMtbGljZW5zZWBgXG4gKiAgICsgIFJEUyBmb3IgTWljcm9zb2Z0IFNRTCBTZXJ2ZXIgLSBgYGxpY2Vuc2UtaW5jbHVkZWRgYFxuICogICArICBSRFMgZm9yIE15U1FMIC0gYGBnZW5lcmFsLXB1YmxpYy1saWNlbnNlYGBcbiAqICAgKyAgUkRTIGZvciBPcmFjbGUgLSBgYGJyaW5nLXlvdXItb3duLWxpY2Vuc2VgYCBvciBgYGxpY2Vuc2UtaW5jbHVkZWRgYFxuICogICArICBSRFMgZm9yIFBvc3RncmVTUUwgLSBgYHBvc3RncmVzcWwtbGljZW5zZWBgXG4gKiAgIFxuICogICBJZiB5b3UndmUgc3BlY2lmaWVkIGBgREJTZWN1cml0eUdyb3Vwc2BgIGFuZCB0aGVuIHlvdSB1cGRhdGUgdGhlIGxpY2Vuc2UgbW9kZWwsIEFXUyBDbG91ZEZvcm1hdGlvbiByZXBsYWNlcyB0aGUgdW5kZXJseWluZyBEQiBpbnN0YW5jZS4gVGhpcyB3aWxsIGluY3VyIHNvbWUgaW50ZXJydXB0aW9ucyB0byBkYXRhYmFzZSBhdmFpbGFiaWxpdHkuXG4gKi9cbkxpY2Vuc2VNb2RlbD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSVB2NCBETlMgSVAgYWRkcmVzc2VzIG9mIHlvdXIgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IEFjdGl2ZSBEaXJlY3RvcnkgZG9tYWluIGNvbnRyb2xsZXJzLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBUd28gSVAgYWRkcmVzc2VzIG11c3QgYmUgcHJvdmlkZWQuIElmIHRoZXJlIGlzbid0IGEgc2Vjb25kYXJ5IGRvbWFpbiBjb250cm9sbGVyLCB1c2UgdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHByaW1hcnkgZG9tYWluIGNvbnRyb2xsZXIgZm9yIGJvdGggZW50cmllcyBpbiB0aGUgbGlzdC5cbiAqICAgXG4gKiAgRXhhbXBsZTogYGAxMjMuMTI0LjEyNS4xMjYsMjM0LjIzNS4yMzYuMjM3YGBcbiAqL1xuRG9tYWluRG5zSXBzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIHdlZWtseSB0aW1lIHJhbmdlIGR1cmluZyB3aGljaCBzeXN0ZW0gbWFpbnRlbmFuY2UgY2FuIG9jY3VyLCBpbiBVbml2ZXJzYWwgQ29vcmRpbmF0ZWQgVGltZSAoVVRDKS5cbiAqICBGb3JtYXQ6IGBgZGRkOmhoMjQ6bWktZGRkOmhoMjQ6bWlgYFxuICogIFRoZSBkZWZhdWx0IGlzIGEgMzAtbWludXRlIHdpbmRvdyBzZWxlY3RlZCBhdCByYW5kb20gZnJvbSBhbiA4LWhvdXIgYmxvY2sgb2YgdGltZSBmb3IgZWFjaCBBV1MgUmVnaW9uLCBvY2N1cnJpbmcgb24gYSByYW5kb20gZGF5IG9mIHRoZSB3ZWVrLiBUbyBzZWUgdGhlIHRpbWUgYmxvY2tzIGF2YWlsYWJsZSwgc2VlIFtNYWludGFpbmluZyBhIERCIGluc3RhbmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9VcGdyYWRlREJJbnN0YW5jZS5NYWludGVuYW5jZS5odG1sI0FkanVzdGluZ1RoZU1haW50ZW5hbmNlV2luZG93KSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKiAgIFRoaXMgcHJvcGVydHkgYXBwbGllcyB3aGVuIEFXUyBDbG91ZEZvcm1hdGlvbiBpbml0aWFsbHkgY3JlYXRlcyB0aGUgREIgaW5zdGFuY2UuIElmIHlvdSB1c2UgQVdTIENsb3VkRm9ybWF0aW9uIHRvIHVwZGF0ZSB0aGUgREIgaW5zdGFuY2UsIHRob3NlIHVwZGF0ZXMgYXJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuXG4gKiAgIENvbnN0cmFpbnRzOiBNaW5pbXVtIDMwLW1pbnV0ZSB3aW5kb3cuXG4gKi9cblByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgSS9PIG9wZXJhdGlvbnMgcGVyIHNlY29uZCAoSU9QUykgdGhhdCB0aGUgZGF0YWJhc2UgcHJvdmlzaW9ucy4gVGhlIHZhbHVlIG11c3QgYmUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDEwMDAuIFxuICogIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIHlvdSBtdXN0IGZvbGxvdyB0aGUgcmFuZ2Ugb2YgYWxsb3dlZCByYXRpb3Mgb2YgeW91ciByZXF1ZXN0ZWQgSU9QUyByYXRlIHRvIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSB0aGF0IHlvdSBhbGxvY2F0ZSAoSU9QUyB0byBhbGxvY2F0ZWQgc3RvcmFnZSkuIEZvciBleGFtcGxlLCB5b3UgY2FuIHByb3Zpc2lvbiBhbiBPcmFjbGUgZGF0YWJhc2UgaW5zdGFuY2Ugd2l0aCAxMDAwIElPUFMgYW5kIDIwMCBHaUIgb2Ygc3RvcmFnZSAoYSByYXRpbyBvZiA1OjEpLCBvciBzcGVjaWZ5IDIwMDAgSU9QUyB3aXRoIDIwMCBHaUIgb2Ygc3RvcmFnZSAoYSByYXRpbyBvZiAxMDoxKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIFJEUyBQcm92aXNpb25lZCBJT1BTIFN0b3JhZ2UgdG8gSW1wcm92ZSBQZXJmb3JtYW5jZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWwjVVNFUl9QSU9QUykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogICBJZiB5b3Ugc3BlY2lmeSBgYGlvMWBgIGZvciB0aGUgYGBTdG9yYWdlVHlwZWBgIHByb3BlcnR5LCB0aGVuIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgYGBJb3BzYGAgcHJvcGVydHkuXG4gKiAgIENvbnN0cmFpbnRzOlxuICogICArICBGb3IgUkRTIGZvciBEYjIsIE1hcmlhREIsIE15U1FMLCBPcmFjbGUsIGFuZCBQb3N0Z3JlU1FMIC0gTXVzdCBiZSBhIG11bHRpcGxlIGJldHdlZW4gLjUgYW5kIDUwIG9mIHRoZSBzdG9yYWdlIGFtb3VudCBmb3IgdGhlIERCIGluc3RhbmNlLlxuICogICArICBGb3IgUkRTIGZvciBTUUwgU2VydmVyIC0gTXVzdCBiZSBhIG11bHRpcGxlIGJldHdlZW4gMSBhbmQgNTAgb2YgdGhlIHN0b3JhZ2UgYW1vdW50IGZvciB0aGUgREIgaW5zdGFuY2UuXG4gKi9cbklvcHM/OiBudW1iZXJcbi8qKlxuICogVGhlIElEIG9mIHRoZSByZWdpb24gdGhhdCBjb250YWlucyB0aGUgc291cmNlIERCIGluc3RhbmNlIGZvciB0aGUgcmVhZCByZXBsaWNhLlxuICovXG5Tb3VyY2VSZWdpb24/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGlzIHJlc3RvcmVkIGZyb20gdGhlIGxhdGVzdCBiYWNrdXAgdGltZS4gQnkgZGVmYXVsdCwgdGhlIERCIGluc3RhbmNlIGlzbid0IHJlc3RvcmVkIGZyb20gdGhlIGxhdGVzdCBiYWNrdXAgdGltZS4gVGhpcyBwYXJhbWV0ZXIgYXBwbGllcyB0byBwb2ludC1pbi10aW1lIHJlY292ZXJ5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXN0b3JpbmcgYSBEQiBpbnN0YW5jZSB0byBhIHNwZWNpZmllZCB0aW1lXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9QSVQuaHRtbCkgaW4gdGhlIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgQ2FuJ3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYFJlc3RvcmVUaW1lYGAgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLlxuICovXG5Vc2VMYXRlc3RSZXN0b3JhYmxlVGltZT86IGJvb2xlYW5cbi8qKlxuICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIENBIGNlcnRpZmljYXRlIGZvciB0aGlzIERCIGluc3RhbmNlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIFNTTC9UTFMgdG8gZW5jcnlwdCBhIGNvbm5lY3Rpb24gdG8gYSBEQiBpbnN0YW5jZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VzaW5nV2l0aFJEUy5TU0wuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqIGFuZCBbVXNpbmcgU1NML1RMUyB0byBlbmNyeXB0IGEgY29ubmVjdGlvbiB0byBhIERCIGNsdXN0ZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9Vc2luZ1dpdGhSRFMuU1NMLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqL1xuQ0FDZXJ0aWZpY2F0ZUlkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gbWFuYWdlIHRoZSBtYXN0ZXIgdXNlciBwYXNzd29yZCB3aXRoIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUGFzc3dvcmQgbWFuYWdlbWVudCB3aXRoIFNlY3JldHMgTWFuYWdlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL3Jkcy1zZWNyZXRzLW1hbmFnZXIuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBDYW4ndCBtYW5hZ2UgdGhlIG1hc3RlciB1c2VyIHBhc3N3b3JkIHdpdGggQVdTIFNlY3JldHMgTWFuYWdlciBpZiBgYE1hc3RlclVzZXJQYXNzd29yZGBgIGlzIHNwZWNpZmllZC5cbiAqL1xuTWFuYWdlTWFzdGVyVXNlclBhc3N3b3JkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgSUQgb2YgdGhlIHNvdXJjZSBEQiBpbnN0YW5jZSBmcm9tIHdoaWNoIHRvIHJlc3RvcmUuXG4gKi9cblNvdXJjZURiaVJlc291cmNlSWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFSTiBmb3IgdGhlIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgd2l0aCB0aGUgY3JlZGVudGlhbHMgZm9yIHRoZSB1c2VyIGpvaW5pbmcgdGhlIGRvbWFpbi5cbiAqICBFeGFtcGxlOiBgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6cmVnaW9uOmFjY291bnQtbnVtYmVyOnNlY3JldDpteXNlbGZtYW5hZ2VkQUR0ZXN0c2VjcmV0LTEyMzQ1NmBgXG4gKi9cbkRvbWFpbkF1dGhTZWNyZXRBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFXUy1SZWdpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBhdXRvbWF0ZWQgYmFja3VwLlxuICovXG5BdXRvbWF0aWNCYWNrdXBSZXBsaWNhdGlvblJlZ2lvbj86IHN0cmluZ1xuLyoqXG4gKiBBIGxpc3Qgb2YgdGhlIFZQQyBzZWN1cml0eSBncm91cCBJRHMgdG8gYXNzaWduIHRvIHRoZSBEQiBpbnN0YW5jZS4gVGhlIGxpc3QgY2FuIGluY2x1ZGUgYm90aCB0aGUgcGh5c2ljYWwgSURzIG9mIGV4aXN0aW5nIFZQQyBzZWN1cml0eSBncm91cHMgYW5kIHJlZmVyZW5jZXMgdG8gW0FXUzo6RUMyOjpTZWN1cml0eUdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItc2VjdXJpdHktZ3JvdXAuaHRtbCkgcmVzb3VyY2VzIGNyZWF0ZWQgaW4gdGhlIHRlbXBsYXRlLlxuICogIElmIHlvdSBwbGFuIHRvIHVwZGF0ZSB0aGUgcmVzb3VyY2UsIGRvbid0IHNwZWNpZnkgVlBDIHNlY3VyaXR5IGdyb3VwcyBpbiBhIHNoYXJlZCBWUEMuXG4gKiAgIElmIHlvdSBzZXQgYGBWUENTZWN1cml0eUdyb3Vwc2BgLCB5b3UgbXVzdCBub3Qgc2V0IFtEQlNlY3VyaXR5R3JvdXBzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmRzLWRhdGFiYXNlLWluc3RhbmNlLmh0bWwjY2ZuLXJkcy1kYmluc3RhbmNlLWRic2VjdXJpdHlncm91cHMpLCBhbmQgdmljZSB2ZXJzYS5cbiAqICAgWW91IGNhbiBtaWdyYXRlIGEgREIgaW5zdGFuY2UgaW4geW91ciBzdGFjayBmcm9tIGFuIFJEUyBEQiBzZWN1cml0eSBncm91cCB0byBhIFZQQyBzZWN1cml0eSBncm91cCwgYnV0IGtlZXAgdGhlIGZvbGxvd2luZyBpbiBtaW5kOlxuICogICArICBZb3UgY2FuJ3QgcmV2ZXJ0IHRvIHVzaW5nIGFuIFJEUyBzZWN1cml0eSBncm91cCBhZnRlciB5b3UgZXN0YWJsaXNoIGEgVlBDIHNlY3VyaXR5IGdyb3VwIG1lbWJlcnNoaXAuXG4gKiAgICsgIFdoZW4geW91IG1pZ3JhdGUgeW91ciBEQiBpbnN0YW5jZSB0byBWUEMgc2VjdXJpdHkgZ3JvdXBzLCBpZiB5b3VyIHN0YWNrIHVwZGF0ZSByb2xscyBiYWNrIGJlY2F1c2UgdGhlIERCIGluc3RhbmNlIHVwZGF0ZSBmYWlscyBvciBiZWNhdXNlIGFuIHVwZGF0ZSBmYWlscyBpbiBhbm90aGVyIEFXUyBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSwgdGhlIHJvbGxiYWNrIGZhaWxzIGJlY2F1c2UgaXQgY2FuJ3QgcmV2ZXJ0IHRvIGFuIFJEUyBzZWN1cml0eSBncm91cC5cbiAqICAgKyAgVG8gdXNlIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGF2YWlsYWJsZSB3aGVuIHlvdSB1c2UgYSBWUEMgc2VjdXJpdHkgZ3JvdXAsIHlvdSBtdXN0IHJlY3JlYXRlIHRoZSBEQiBpbnN0YW5jZS4gSWYgeW91IGRvbid0LCBBV1MgQ2xvdWRGb3JtYXRpb24gc3VibWl0cyBvbmx5IHRoZSBwcm9wZXJ0eSB2YWx1ZXMgdGhhdCBhcmUgbGlzdGVkIGluIHRoZSBbREJTZWN1cml0eUdyb3Vwc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmRzLWRhdGFiYXNlLWluc3RhbmNlLmh0bWwjY2ZuLXJkcy1kYmluc3RhbmNlLWRic2VjdXJpdHlncm91cHMpIHByb3BlcnR5LlxuICogICBcbiAqICAgVG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIG1pZ3JhdGUgeW91ciBEQiBpbnN0YW5jZSB0byB1c2luZyBWUEMgc2VjdXJpdHkgZ3JvdXBzIG9ubHkgd2hlbiB0aGF0IGlzIHRoZSBvbmx5IGNoYW5nZSBpbiB5b3VyIHN0YWNrIHRlbXBsYXRlLiBcbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBUaGUgYXNzb2NpYXRlZCBsaXN0IG9mIEVDMiBWUEMgc2VjdXJpdHkgZ3JvdXBzIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuIElmIHNwZWNpZmllZCwgdGhlIHNldHRpbmcgbXVzdCBtYXRjaCB0aGUgREIgY2x1c3RlciBzZXR0aW5nLlxuICovXG5WUENTZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIEEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBtYWpvciB2ZXJzaW9uIHVwZ3JhZGVzIGFyZSBhbGxvd2VkLiBDaGFuZ2luZyB0aGlzIHBhcmFtZXRlciBkb2Vzbid0IHJlc3VsdCBpbiBhbiBvdXRhZ2UgYW5kIHRoZSBjaGFuZ2UgaXMgYXN5bmNocm9ub3VzbHkgYXBwbGllZCBhcyBzb29uIGFzIHBvc3NpYmxlLlxuICogIENvbnN0cmFpbnRzOiBNYWpvciB2ZXJzaW9uIHVwZ3JhZGVzIG11c3QgYmUgYWxsb3dlZCB3aGVuIHNwZWNpZnlpbmcgYSB2YWx1ZSBmb3IgdGhlIGBgRW5naW5lVmVyc2lvbmBgIHBhcmFtZXRlciB0aGF0IGlzIGEgZGlmZmVyZW50IG1ham9yIHZlcnNpb24gdGhhbiB0aGUgREIgaW5zdGFuY2UncyBjdXJyZW50IHZlcnNpb24uXG4gKi9cbkFsbG93TWFqb3JWZXJzaW9uVXBncmFkZT86IGJvb2xlYW5cbi8qKlxuICogVGhlIG1lYW5pbmcgb2YgdGhpcyBwYXJhbWV0ZXIgZGlmZmVycyBhY2NvcmRpbmcgdG8gdGhlIGRhdGFiYXNlIGVuZ2luZSB5b3UgdXNlLlxuICogICBJZiB5b3Ugc3BlY2lmeSB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCB0aGlzIHByb3BlcnR5IG9ubHkgYXBwbGllcyB0byBSRFMgZm9yIE9yYWNsZS5cbiAqICAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIGRhdGFiYXNlIG5hbWUgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqICAgKkRiMiogXG4gKiAgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIHRvIGNyZWF0ZSB3aGVuIHRoZSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLiBJZiB0aGlzIHBhcmFtZXRlciBpc24ndCBzcGVjaWZpZWQsIG5vIGRhdGFiYXNlIGlzIGNyZWF0ZWQgaW4gdGhlIERCIGluc3RhbmNlLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGNvbnRhaW4gMSB0byA2NCBsZXR0ZXJzIG9yIG51bWJlcnMuXG4gKiAgICsgIE11c3QgYmVnaW4gd2l0aCBhIGxldHRlci4gU3Vic2VxdWVudCBjaGFyYWN0ZXJzIGNhbiBiZSBsZXR0ZXJzLCB1bmRlcnNjb3Jlcywgb3IgZGlnaXRzICgwLTkpLlxuICogICArICBDYW4ndCBiZSBhIHdvcmQgcmVzZXJ2ZWQgYnkgdGhlIHNwZWNpZmllZCBkYXRhYmFzZSBlbmdpbmUuXG4gKiAgIFxuICogICAqTXlTUUwqIFxuICogIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0byBjcmVhdGUgd2hlbiB0aGUgREIgaW5zdGFuY2UgaXMgY3JlYXRlZC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgbm8gZGF0YWJhc2UgaXMgY3JlYXRlZCBpbiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgY29udGFpbiAxIHRvIDY0IGxldHRlcnMgb3IgbnVtYmVycy5cbiAqICAgKyAgQ2FuJ3QgYmUgYSB3b3JkIHJlc2VydmVkIGJ5IHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UgZW5naW5lXG4gKiAgIFxuICogICAqTWFyaWFEQiogXG4gKiAgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIHRvIGNyZWF0ZSB3aGVuIHRoZSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCBubyBkYXRhYmFzZSBpcyBjcmVhdGVkIGluIHRoZSBEQiBpbnN0YW5jZS5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBjb250YWluIDEgdG8gNjQgbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBDYW4ndCBiZSBhIHdvcmQgcmVzZXJ2ZWQgYnkgdGhlIHNwZWNpZmllZCBkYXRhYmFzZSBlbmdpbmVcbiAqICAgXG4gKiAgICpQb3N0Z3JlU1FMKiBcbiAqICBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgdG8gY3JlYXRlIHdoZW4gdGhlIERCIGluc3RhbmNlIGlzIGNyZWF0ZWQuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGBgcG9zdGdyZXNgYCBkYXRhYmFzZSBpcyBjcmVhdGVkIGluIHRoZSBEQiBpbnN0YW5jZS5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyLiBTdWJzZXF1ZW50IGNoYXJhY3RlcnMgY2FuIGJlIGxldHRlcnMsIHVuZGVyc2NvcmVzLCBvciBkaWdpdHMgKDAtOSkuXG4gKiAgICsgIE11c3QgY29udGFpbiAxIHRvIDYzIGNoYXJhY3RlcnMuXG4gKiAgICsgIENhbid0IGJlIGEgd29yZCByZXNlcnZlZCBieSB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlIGVuZ2luZVxuICogICBcbiAqICAgKk9yYWNsZSogXG4gKiAgVGhlIE9yYWNsZSBTeXN0ZW0gSUQgKFNJRCkgb2YgdGhlIGNyZWF0ZWQgREIgaW5zdGFuY2UuIElmIHlvdSBzcGVjaWZ5IGBgbnVsbGBgLCB0aGUgZGVmYXVsdCB2YWx1ZSBgYE9SQ0xgYCBpcyB1c2VkLiBZb3UgY2FuJ3Qgc3BlY2lmeSB0aGUgc3RyaW5nIE5VTEwsIG9yIGFueSBvdGhlciByZXNlcnZlZCB3b3JkLCBmb3IgYGBEQk5hbWVgYC4gXG4gKiAgRGVmYXVsdDogYGBPUkNMYGBcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgQ2FuJ3QgYmUgbG9uZ2VyIHRoYW4gOCBjaGFyYWN0ZXJzXG4gKiAgIFxuICogICAqU1FMIFNlcnZlciogXG4gKiAgTm90IGFwcGxpY2FibGUuIE11c3QgYmUgbnVsbC5cbiAqL1xuREJOYW1lPzogc3RyaW5nXG4vKipcbiAqIEEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0byBlbmFibGUgbWFwcGluZyBvZiBBV1MgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIGFjY291bnRzIHRvIGRhdGFiYXNlIGFjY291bnRzLiBCeSBkZWZhdWx0LCBtYXBwaW5nIGlzIGRpc2FibGVkLlxuICogIFRoaXMgcHJvcGVydHkgaXMgc3VwcG9ydGVkIGZvciBSRFMgZm9yIE1hcmlhREIsIFJEUyBmb3IgTXlTUUwsIGFuZCBSRFMgZm9yIFBvc3RncmVTUUwuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0lBTSBEYXRhYmFzZSBBdXRoZW50aWNhdGlvbiBmb3IgTWFyaWFEQiwgTXlTUUwsIGFuZCBQb3N0Z3JlU1FMXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVXNpbmdXaXRoUkRTLklBTURCQXV0aC5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gTWFwcGluZyBBV1MgSUFNIGFjY291bnRzIHRvIGRhdGFiYXNlIGFjY291bnRzIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKi9cbkVuYWJsZUlBTURhdGFiYXNlQXV0aGVudGljYXRpb24/OiBib29sZWFuXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgZGF5cyBmb3Igd2hpY2ggYXV0b21hdGVkIGJhY2t1cHMgYXJlIHJldGFpbmVkLiBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIGEgcG9zaXRpdmUgbnVtYmVyIGVuYWJsZXMgYmFja3Vwcy4gU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAwIGRpc2FibGVzIGF1dG9tYXRlZCBiYWNrdXBzLlxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSByZXRlbnRpb24gcGVyaW9kIGZvciBhdXRvbWF0ZWQgYmFja3VwcyBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICogIERlZmF1bHQ6IDFcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSBhIHZhbHVlIGZyb20gMCB0byAzNVxuICogICArICBDYW4ndCBiZSBzZXQgdG8gMCBpZiB0aGUgREIgaW5zdGFuY2UgaXMgYSBzb3VyY2UgdG8gcmVhZCByZXBsaWNhc1xuICovXG5CYWNrdXBSZXRlbnRpb25QZXJpb2Q/OiBudW1iZXJcbi8qKlxuICogVGhlIGluc3RhbmNlIHByb2ZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1bmRlcmx5aW5nIEFtYXpvbiBFQzIgaW5zdGFuY2Ugb2YgYW4gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZS5cbiAqICBUaGlzIHNldHRpbmcgaXMgcmVxdWlyZWQgZm9yIFJEUyBDdXN0b20uXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIFRoZSBwcm9maWxlIG11c3QgZXhpc3QgaW4geW91ciBhY2NvdW50LlxuICogICArICBUaGUgcHJvZmlsZSBtdXN0IGhhdmUgYW4gSUFNIHJvbGUgdGhhdCBBbWF6b24gRUMyIGhhcyBwZXJtaXNzaW9ucyB0byBhc3N1bWUuXG4gKiAgICsgIFRoZSBpbnN0YW5jZSBwcm9maWxlIG5hbWUgYW5kIHRoZSBhc3NvY2lhdGVkIElBTSByb2xlIG5hbWUgbXVzdCBzdGFydCB3aXRoIHRoZSBwcmVmaXggYGBBV1NSRFNDdXN0b21gYC5cbiAqICAgXG4gKiAgRm9yIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciB0aGUgSUFNIHJvbGUsIHNlZSBbQ29uZmlndXJlIElBTSBhbmQgeW91ciBWUENdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9jdXN0b20tc2V0dXAtb3JjbC5odG1sI2N1c3RvbS1zZXR1cC1vcmNsLmlhbS12cGMpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqL1xuQ3VzdG9tSUFNSW5zdGFuY2VQcm9maWxlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9yIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBEQiBzbmFwc2hvdCB0aGF0J3MgdXNlZCB0byByZXN0b3JlIHRoZSBEQiBpbnN0YW5jZS4gSWYgeW91J3JlIHJlc3RvcmluZyBmcm9tIGEgc2hhcmVkIG1hbnVhbCBEQiBzbmFwc2hvdCwgeW91IG11c3Qgc3BlY2lmeSB0aGUgQVJOIG9mIHRoZSBzbmFwc2hvdC5cbiAqICBCeSBzcGVjaWZ5aW5nIHRoaXMgcHJvcGVydHksIHlvdSBjYW4gY3JlYXRlIGEgREIgaW5zdGFuY2UgZnJvbSB0aGUgc3BlY2lmaWVkIERCIHNuYXBzaG90LiBJZiB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5IGlzIGFuIGVtcHR5IHN0cmluZyBvciB0aGUgYGBBV1M6OlJEUzo6REJJbnN0YW5jZWBgIGRlY2xhcmF0aW9uIGhhcyBubyBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIGEgbmV3IGRhdGFiYXNlLiBJZiB0aGUgcHJvcGVydHkgY29udGFpbnMgYSB2YWx1ZSAob3RoZXIgdGhhbiBhbiBlbXB0eSBzdHJpbmcpLCBBV1MgQ2xvdWRGb3JtYXRpb24gY3JlYXRlcyBhIGRhdGFiYXNlIGZyb20gdGhlIHNwZWNpZmllZCBzbmFwc2hvdC4gSWYgYSBzbmFwc2hvdCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBkb2Vzbid0IGV4aXN0LCBBV1MgQ2xvdWRGb3JtYXRpb24gY2FuJ3QgY3JlYXRlIHRoZSBkYXRhYmFzZSBhbmQgaXQgcm9sbHMgYmFjayB0aGUgc3RhY2suXG4gKiAgU29tZSBEQiBpbnN0YW5jZSBwcm9wZXJ0aWVzIGFyZW4ndCB2YWxpZCB3aGVuIHlvdSByZXN0b3JlIGZyb20gYSBzbmFwc2hvdCwgc3VjaCBhcyB0aGUgYGBNYXN0ZXJVc2VybmFtZWBgIGFuZCBgYE1hc3RlclVzZXJQYXNzd29yZGBgIHByb3BlcnRpZXMsIGFuZCB0aGUgcG9pbnQtaW4tdGltZSByZWNvdmVyeSBwcm9wZXJ0aWVzIGBgUmVzdG9yZVRpbWVgYCBhbmQgYGBVc2VMYXRlc3RSZXN0b3JhYmxlVGltZWBgLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3BlcnRpZXMgdGhhdCB5b3UgY2FuIHNwZWNpZnksIHNlZSB0aGUgW1Jlc3RvcmVEQkluc3RhbmNlRnJvbURCU25hcHNob3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVzdG9yZURCSW5zdGFuY2VGcm9tREJTbmFwc2hvdC5odG1sKSBhY3Rpb24gaW4gdGhlICpBbWF6b24gUkRTIEFQSSBSZWZlcmVuY2UqLlxuICogIEFmdGVyIHlvdSByZXN0b3JlIGEgREIgaW5zdGFuY2Ugd2l0aCBhIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgeW91IG11c3Qgc3BlY2lmeSB0aGUgc2FtZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkgZm9yIGFueSBmdXR1cmUgdXBkYXRlcyB0byB0aGUgREIgaW5zdGFuY2UuIFdoZW4geW91IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSBmb3IgYW4gdXBkYXRlLCB0aGUgREIgaW5zdGFuY2UgaXMgbm90IHJlc3RvcmVkIGZyb20gdGhlIERCIHNuYXBzaG90IGFnYWluLCBhbmQgdGhlIGRhdGEgaW4gdGhlIGRhdGFiYXNlIGlzIG5vdCBjaGFuZ2VkLiBIb3dldmVyLCBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBhbiBlbXB0eSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLCBhbmQgdGhlIG9yaWdpbmFsIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQuIElmIHlvdSBzcGVjaWZ5IGEgcHJvcGVydHkgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgc25hcHNob3QgcmVzdG9yZSBwcm9wZXJ0eSwgYSBuZXcgREIgaW5zdGFuY2UgaXMgcmVzdG9yZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgYW5kIHRoZSBvcmlnaW5hbCBEQiBpbnN0YW5jZSBpcyBkZWxldGVkLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkgdG8gcmVzdG9yZSBhIERCIGluc3RhbmNlIChhcyBvcHBvc2VkIHRvIHNwZWNpZnlpbmcgaXQgZm9yIERCIGluc3RhbmNlIHVwZGF0ZXMpLCB0aGVuIGRvbid0IHNwZWNpZnkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICArICAgYGBDaGFyYWN0ZXJTZXROYW1lYGAgXG4gKiAgICsgICBgYERCQ2x1c3RlcklkZW50aWZpZXJgYCBcbiAqICAgKyAgIGBgREJOYW1lYGAgXG4gKiAgICsgICBgYEttc0tleUlkYGAgXG4gKiAgICsgICBgYE1hc3RlclVzZXJuYW1lYGAgXG4gKiAgICsgICBgYE1hc3RlclVzZXJQYXNzd29yZGBgIFxuICogICArICAgYGBQcm9tb3Rpb25UaWVyYGAgXG4gKiAgICsgICBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgXG4gKiAgICsgICBgYFNvdXJjZVJlZ2lvbmBgIFxuICogICArICBgYFN0b3JhZ2VFbmNyeXB0ZWRgYCAoZm9yIGFuIHVuZW5jcnlwdGVkIHNuYXBzaG90KVxuICogICArICAgYGBUaW1lem9uZWBgIFxuICogICBcbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBTbmFwc2hvdCByZXN0b3JlIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKi9cbkRCU25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSBsaXN0IG9mIGxvZyB0eXBlcyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgZXhwb3J0aW5nIHRvIENsb3VkV2F0Y2ggTG9ncy4gVGhlIHZhbHVlcyBpbiB0aGUgbGlzdCBkZXBlbmQgb24gdGhlIERCIGVuZ2luZSBiZWluZyB1c2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtQdWJsaXNoaW5nIERhdGFiYXNlIExvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggTG9nc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfTG9nQWNjZXNzLmh0bWwjVVNFUl9Mb2dBY2Nlc3MuUHJvY2VkdXJhbC5VcGxvYWR0b0Nsb3VkV2F0Y2gpIGluIHRoZSAqQW1hem9uIFJlbGF0aW9uYWwgRGF0YWJhc2UgU2VydmljZSBVc2VyIEd1aWRlKi5cbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBDbG91ZFdhdGNoIExvZ3MgZXhwb3J0cyBhcmUgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4gXG4gKiAgICpEYjIqIFxuICogIFZhbGlkIHZhbHVlczogYGBkaWFnLmxvZ2BgLCBgYG5vdGlmeS5sb2dgYFxuICogICAqTWFyaWFEQiogXG4gKiAgVmFsaWQgdmFsdWVzOiBgYGF1ZGl0YGAsIGBgZXJyb3JgYCwgYGBnZW5lcmFsYGAsIGBgc2xvd3F1ZXJ5YGBcbiAqICAgKk1pY3Jvc29mdCBTUUwgU2VydmVyKiBcbiAqICBWYWxpZCB2YWx1ZXM6IGBgYWdlbnRgYCwgYGBlcnJvcmBgXG4gKiAgICpNeVNRTCogXG4gKiAgVmFsaWQgdmFsdWVzOiBgYGF1ZGl0YGAsIGBgZXJyb3JgYCwgYGBnZW5lcmFsYGAsIGBgc2xvd3F1ZXJ5YGBcbiAqICAgKk9yYWNsZSogXG4gKiAgVmFsaWQgdmFsdWVzOiBgYGFsZXJ0YGAsIGBgYXVkaXRgYCwgYGBsaXN0ZW5lcmBgLCBgYHRyYWNlYGAsIGBgb2VtYWdlbnRgYFxuICogICAqUG9zdGdyZVNRTCogXG4gKiAgVmFsaWQgdmFsdWVzOiBgYHBvc3RncmVzcWxgYCwgYGB1cGdyYWRlYGBcbiAqL1xuRW5hYmxlQ2xvdWR3YXRjaExvZ3NFeHBvcnRzPzogc3RyaW5nW11cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGNsYXNzIG9mIHRoZSBEQiBpbnN0YW5jZSB1c2VzIGl0cyBkZWZhdWx0IHByb2Nlc3NvciBmZWF0dXJlcy5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqL1xuVXNlRGVmYXVsdFByb2Nlc3NvckZlYXR1cmVzPzogYm9vbGVhblxufVxuZXhwb3J0IGludGVyZmFjZSBDZXJ0aWZpY2F0ZURldGFpbHMge1xuLyoqXG4gKiBUaGUgZXhwaXJhdGlvbiBkYXRlIG9mIHRoZSBEQiBpbnN0YW5jZeKAmXMgc2VydmVyIGNlcnRpZmljYXRlLlxuICovXG5WYWxpZFRpbGw/OiBzdHJpbmdcbi8qKlxuICogVGhlIENBIGlkZW50aWZpZXIgb2YgdGhlIENBIGNlcnRpZmljYXRlIHVzZWQgZm9yIHRoZSBEQiBpbnN0YW5jZSdzIHNlcnZlciBjZXJ0aWZpY2F0ZS5cbiAqL1xuQ0FJZGVudGlmaWVyPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIEVuZHBvaW50IHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBETlMgYWRkcmVzcyBvZiB0aGUgREIgaW5zdGFuY2UuXG4gKi9cbkFkZHJlc3M/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwb3J0IHRoYXQgdGhlIGRhdGFiYXNlIGVuZ2luZSBpcyBsaXN0ZW5pbmcgb24uXG4gKi9cblBvcnQ/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBJRCB0aGF0IEFtYXpvbiBSb3V0ZSA1MyBhc3NpZ25zIHdoZW4geW91IGNyZWF0ZSBhIGhvc3RlZCB6b25lLlxuICovXG5Ib3N0ZWRab25lSWQ/OiBzdHJpbmdcbn1cbi8qKlxuICogTWV0YWRhdGEgYXNzaWduZWQgdG8gYW4gQW1hem9uIFJEUyByZXNvdXJjZSBjb25zaXN0aW5nIG9mIGEga2V5LXZhbHVlIHBhaXIuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFnZ2luZyBBbWF6b24gUkRTIHJlc291cmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfVGFnZ2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSogb3IgW1RhZ2dpbmcgQW1hem9uIEF1cm9yYSBhbmQgQW1hem9uIFJEUyByZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9VU0VSX1RhZ2dpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gQXVyb3JhIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIEEgdmFsdWUgaXMgdGhlIG9wdGlvbmFsIHZhbHVlIG9mIHRoZSB0YWcuIFRoZSBzdHJpbmcgdmFsdWUgY2FuIGJlIGZyb20gMSB0byAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIGxlbmd0aCBhbmQgY2FuJ3QgYmUgcHJlZml4ZWQgd2l0aCBgYGF3czpgYCBvciBgYHJkczpgYC4gVGhlIHN0cmluZyBjYW4gb25seSBjb250YWluIG9ubHkgdGhlIHNldCBvZiBVbmljb2RlIGxldHRlcnMsIGRpZ2l0cywgd2hpdGUtc3BhY2UsICdfJywgJy4nLCAnOicsICcvJywgJz0nLCAnKycsICctJywgJ0AnIChKYXZhIHJlZ2V4OiBcIl4oW1xcXFxwe0x9XFxcXHB7Wn1cXFxccHtOfV8uOi89K1xcXFwtQF0qKSRcIikuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIEEga2V5IGlzIHRoZSByZXF1aXJlZCBuYW1lIG9mIHRoZSB0YWcuIFRoZSBzdHJpbmcgdmFsdWUgY2FuIGJlIGZyb20gMSB0byAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIGxlbmd0aCBhbmQgY2FuJ3QgYmUgcHJlZml4ZWQgd2l0aCBgYGF3czpgYCBvciBgYHJkczpgYC4gVGhlIHN0cmluZyBjYW4gb25seSBjb250YWluIG9ubHkgdGhlIHNldCBvZiBVbmljb2RlIGxldHRlcnMsIGRpZ2l0cywgd2hpdGUtc3BhY2UsICdfJywgJy4nLCAnOicsICcvJywgJz0nLCAnKycsICctJywgJ0AnIChKYXZhIHJlZ2V4OiBcIl4oW1xcXFxwe0x9XFxcXHB7Wn1cXFxccHtOfV8uOi89K1xcXFwtQF0qKSRcIikuXG4gKi9cbktleTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBzZWNyZXQgbWFuYWdlZCBieSBSRFMgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBmb3IgdGhlIG1hc3RlciB1c2VyIHBhc3N3b3JkLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Bhc3N3b3JkIG1hbmFnZW1lbnQgd2l0aCBTZWNyZXRzIE1hbmFnZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9yZHMtc2VjcmV0cy1tYW5hZ2VyLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLipcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0ZXJVc2VyU2VjcmV0IHtcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZWNyZXQuIFRoaXMgcGFyYW1ldGVyIGlzIGEgcmV0dXJuIHZhbHVlIHRoYXQgeW91IGNhbiByZXRyaWV2ZSB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgaW50cmluc2ljIGZ1bmN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXR1cm4gdmFsdWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtcmRzLWRiaW5zdGFuY2UuaHRtbCNhd3MtcmVzb3VyY2UtcmRzLWRiaW5zdGFuY2UtcmV0dXJuLXZhbHVlcykuXG4gKi9cblNlY3JldEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVdTIEtNUyBrZXkgaWRlbnRpZmllciB0aGF0IGlzIHVzZWQgdG8gZW5jcnlwdCB0aGUgc2VjcmV0LlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xufVxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCBhbiBBV1MgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIHJvbGUgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBEQiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEQkluc3RhbmNlUm9sZSB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIERCIGluc3RhbmNlLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBBV1MgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIHJvbGUuIElBTSByb2xlcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBEQiBpbnN0YW5jZSBncmFudCBwZXJtaXNzaW9uIGZvciB0aGUgREIgaW5zdGFuY2UgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gRm9yIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBmZWF0dXJlIG5hbWVzLCBzZWUgdGhlIGBgU3VwcG9ydGVkRmVhdHVyZU5hbWVzYGAgZGVzY3JpcHRpb24gaW4gW0RCRW5naW5lVmVyc2lvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EQkVuZ2luZVZlcnNpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIEFQSSBSZWZlcmVuY2UqLlxuICovXG5GZWF0dXJlTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYFByb2Nlc3NvckZlYXR1cmVgYCBwcm9wZXJ0eSB0eXBlIHNwZWNpZmllcyB0aGUgcHJvY2Vzc29yIGZlYXR1cmVzIG9mIGEgREIgaW5zdGFuY2UgY2xhc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc29yRmVhdHVyZSB7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiBhIHByb2Nlc3NvciBmZWF0dXJlLlxuICovXG5WYWx1ZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcHJvY2Vzc29yIGZlYXR1cmUuIFZhbGlkIG5hbWVzIGFyZSBgYGNvcmVDb3VudGBgIGFuZCBgYHRocmVhZHNQZXJDb3JlYGAuXG4gKi9cbk5hbWU/OiAoXCJjb3JlQ291bnRcIiB8IFwidGhyZWFkc1BlckNvcmVcIilcbn1cbiJdfQ==
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJkcy1kYmluc3RhbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXJkcy1kYmluc3RhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6UkRTOjpEQkluc3RhbmNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gREIgaW5zdGFuY2UuIFRoZSBuZXcgREIgaW5zdGFuY2UgY2FuIGJlIGFuIFJEUyBEQiBpbnN0YW5jZSwgb3IgaXQgY2FuIGJlIGEgREIgaW5zdGFuY2UgaW4gYW4gQXVyb3JhIERCIGNsdXN0ZXIuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgYW4gUkRTIERCIGluc3RhbmNlLCBzZWUgW0NyZWF0aW5nIGFuIEFtYXpvbiBSRFMgREIgaW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX0NyZWF0ZURCSW5zdGFuY2UuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIGEgREIgaW5zdGFuY2UgaW4gYW4gQXVyb3JhIERCIGNsdXN0ZXIsIHNlZSBbQ3JlYXRpbmcgYW4gQW1hem9uIEF1cm9yYSBEQiBjbHVzdGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQXVyb3JhLkNyZWF0ZUluc3RhbmNlLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqICBJZiB5b3UgaW1wb3J0IGFuIGV4aXN0aW5nIERCIGluc3RhbmNlLCBhbmQgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24gZG9lc24ndCBtYXRjaCB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIERCIGluc3RhbmNlLCBBV1MgQ2xvdWRGb3JtYXRpb24gYXBwbGllcyB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgZHVyaW5nIHRoZSBpbXBvcnQgb3BlcmF0aW9uLlxuICogICBJZiBhIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQgb3IgcmVwbGFjZWQgZHVyaW5nIGFuIHVwZGF0ZSwgQVdTIENsb3VkRm9ybWF0aW9uIGRlbGV0ZXMgYWxsIGF1dG9tYXRlZCBzbmFwc2hvdHMuIEhvd2V2ZXIsIGl0IHJldGFpbnMgbWFudWFsIERCIHNuYXBzaG90cy4gRHVyaW5nIGFuIHVwZGF0ZSB0aGF0IHJlcXVpcmVzIHJlcGxhY2VtZW50LCB5b3UgY2FuIGFwcGx5IGEgc3RhY2sgcG9saWN5IHRvIHByZXZlbnQgREIgaW5zdGFuY2VzIGZyb20gYmVpbmcgcmVwbGFjZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1ByZXZlbnQgVXBkYXRlcyB0byBTdGFjayBSZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3Byb3RlY3Qtc3RhY2stcmVzb3VyY2VzLmh0bWwpLlxuICogICAgKlVwZGF0aW5nIERCIGluc3RhbmNlcyogXG4gKiAgV2hlbiBwcm9wZXJ0aWVzIGxhYmVsZWQgXCIqVXBkYXRlIHJlcXVpcmVzOipbUmVwbGFjZW1lbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3VzaW5nLWNmbi11cGRhdGluZy1zdGFja3MtdXBkYXRlLWJlaGF2aW9ycy5odG1sI3VwZGF0ZS1yZXBsYWNlbWVudClcIiBhcmUgdXBkYXRlZCwgQVdTIENsb3VkRm9ybWF0aW9uIGZpcnN0IGNyZWF0ZXMgYSByZXBsYWNlbWVudCBEQiBpbnN0YW5jZSwgdGhlbiBjaGFuZ2VzIHJlZmVyZW5jZXMgZnJvbSBvdGhlciBkZXBlbmRlbnQgcmVzb3VyY2VzIHRvIHBvaW50IHRvIHRoZSByZXBsYWNlbWVudCBEQiBpbnN0YW5jZSwgYW5kIGZpbmFsbHkgZGVsZXRlcyB0aGUgb2xkIERCIGluc3RhbmNlLlxuICogICBXZSBoaWdobHkgcmVjb21tZW5kIHRoYXQgeW91IHRha2UgYSBzbmFwc2hvdCBvZiB0aGUgZGF0YWJhc2UgYmVmb3JlIHVwZGF0aW5nIHRoZSBzdGFjay4gSWYgeW91IGRvbid0LCB5b3UgbG9zZSB0aGUgZGF0YSB3aGVuIEFXUyBDbG91ZEZvcm1hdGlvbiByZXBsYWNlcyB5b3VyIERCIGluc3RhbmNlLiBUbyBwcmVzZXJ2ZSB5b3VyIGRhdGEsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBwcm9jZWR1cmU6XG4gKiAgIDEuICBEZWFjdGl2YXRlIGFueSBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgdXNpbmcgdGhlIERCIGluc3RhbmNlIHNvIHRoYXQgdGhlcmUncyBubyBhY3Rpdml0eSBvbiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgIDEuICBDcmVhdGUgYSBzbmFwc2hvdCBvZiB0aGUgREIgaW5zdGFuY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGEgREIgU25hcHNob3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX0NyZWF0ZVNuYXBzaG90Lmh0bWwpLlxuICogICAxLiAgSWYgeW91IHdhbnQgdG8gcmVzdG9yZSB5b3VyIGluc3RhbmNlIHVzaW5nIGEgREIgc25hcHNob3QsIG1vZGlmeSB0aGUgdXBkYXRlZCB0ZW1wbGF0ZSB3aXRoIHlvdXIgREIgaW5zdGFuY2UgY2hhbmdlcyBhbmQgYWRkIHRoZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkgd2l0aCB0aGUgSUQgb2YgdGhlIERCIHNuYXBzaG90IHRoYXQgeW91IHdhbnQgdG8gdXNlLlxuICogIEFmdGVyIHlvdSByZXN0b3JlIGEgREIgaW5zdGFuY2Ugd2l0aCBhIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgeW91IGNhbiBkZWxldGUgdGhlIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eS4gV2hlbiB5b3Ugc3BlY2lmeSB0aGlzIHByb3BlcnR5IGZvciBhbiB1cGRhdGUsIHRoZSBEQiBpbnN0YW5jZSBpcyBub3QgcmVzdG9yZWQgZnJvbSB0aGUgREIgc25hcHNob3QgYWdhaW4sIGFuZCB0aGUgZGF0YSBpbiB0aGUgZGF0YWJhc2UgaXMgbm90IGNoYW5nZWQuIEhvd2V2ZXIsIGlmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIGFuIGVtcHR5IERCIGluc3RhbmNlIGlzIGNyZWF0ZWQsIGFuZCB0aGUgb3JpZ2luYWwgREIgaW5zdGFuY2UgaXMgZGVsZXRlZC4gSWYgeW91IHNwZWNpZnkgYSBwcm9wZXJ0eSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cyBzbmFwc2hvdCByZXN0b3JlIHByb3BlcnR5LCBhIG5ldyBEQiBpbnN0YW5jZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBzcGVjaWZpZWQgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBhbmQgdGhlIG9yaWdpbmFsIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQuXG4gKiAgIDEuICBVcGRhdGUgdGhlIHN0YWNrLlxuICogICBcbiAqICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXBkYXRpbmcgb3RoZXIgcHJvcGVydGllcyBvZiB0aGlzIHJlc291cmNlLCBzZWUgYGBNb2RpZnlEQkluc3RhbmNlYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVwZGF0aW5nIHN0YWNrcywgc2VlIFtDbG91ZEZvcm1hdGlvbiBTdGFja3MgVXBkYXRlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvdXNpbmctY2ZuLXVwZGF0aW5nLXN0YWNrcy5odG1sKS5cbiAqICAgKkRlbGV0aW5nIERCIGluc3RhbmNlcyogXG4gKiAgRm9yIERCIGluc3RhbmNlcyB0aGF0IGFyZSBwYXJ0IG9mIGFuIEF1cm9yYSBEQiBjbHVzdGVyLCB5b3UgY2FuIHNldCBhIGRlbGV0aW9uIHBvbGljeSBmb3IgeW91ciBEQiBpbnN0YW5jZSB0byBjb250cm9sIGhvdyBBV1MgQ2xvdWRGb3JtYXRpb24gaGFuZGxlcyB0aGUgREIgaW5zdGFuY2Ugd2hlbiB0aGUgc3RhY2sgaXMgZGVsZXRlZC4gRm9yIEFtYXpvbiBSRFMgREIgaW5zdGFuY2VzLCB5b3UgY2FuIGNob29zZSB0byAqcmV0YWluKiB0aGUgREIgaW5zdGFuY2UsIHRvICpkZWxldGUqIHRoZSBEQiBpbnN0YW5jZSwgb3IgdG8gKmNyZWF0ZSBhIHNuYXBzaG90KiBvZiB0aGUgREIgaW5zdGFuY2UuIFRoZSBkZWZhdWx0IEFXUyBDbG91ZEZvcm1hdGlvbiBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBgYERCQ2x1c3RlcklkZW50aWZpZXJgYCBwcm9wZXJ0eTpcbiAqICAgMS4gIEZvciBgYEFXUzo6UkRTOjpEQkluc3RhbmNlYGAgcmVzb3VyY2VzIHRoYXQgZG9uJ3Qgc3BlY2lmeSB0aGUgYGBEQkNsdXN0ZXJJZGVudGlmaWVyYGAgcHJvcGVydHksIEFXUyBDbG91ZEZvcm1hdGlvbiBzYXZlcyBhIHNuYXBzaG90IG9mIHRoZSBEQiBpbnN0YW5jZS5cbiAqICAgMS4gICBGb3IgYGBBV1M6OlJEUzo6REJJbnN0YW5jZWBgIHJlc291cmNlcyB0aGF0IGRvIHNwZWNpZnkgdGhlIGBgREJDbHVzdGVySWRlbnRpZmllcmBgIHByb3BlcnR5LCBBV1MgQ2xvdWRGb3JtYXRpb24gZGVsZXRlcyB0aGUgREIgaW5zdGFuY2UuXG4gKiAgIFxuICogICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtEZWxldGlvblBvbGljeSBBdHRyaWJ1dGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1hdHRyaWJ1dGUtZGVsZXRpb25wb2xpY3kuaHRtbCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19SRFNfREJJTlNUQU5DRSB7XG4vKipcbiAqIFRoZSBhbW91bnQgb2Ygc3RvcmFnZSBpbiBnaWJpYnl0ZXMgKEdpQikgdG8gYmUgaW5pdGlhbGx5IGFsbG9jYXRlZCBmb3IgdGhlIGRhdGFiYXNlIGluc3RhbmNlLlxuICogICBJZiBhbnkgdmFsdWUgaXMgc2V0IGluIHRoZSBgYElvcHNgYCBwYXJhbWV0ZXIsIGBgQWxsb2NhdGVkU3RvcmFnZWBgIG11c3QgYmUgYXQgbGVhc3QgMTAwIEdpQiwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIG1pbmltdW0gSW9wcyB2YWx1ZSBvZiAxLDAwMC4gSWYgeW91IGluY3JlYXNlIHRoZSBgYElvcHNgYCB2YWx1ZSAoaW4gMSwwMDAgSU9QUyBpbmNyZW1lbnRzKSwgdGhlbiB5b3UgbXVzdCBhbHNvIGluY3JlYXNlIHRoZSBgYEFsbG9jYXRlZFN0b3JhZ2VgYCB2YWx1ZSAoaW4gMTAwLUdpQiBpbmNyZW1lbnRzKS4gXG4gKiAgICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIEF1cm9yYSBjbHVzdGVyIHZvbHVtZXMgYXV0b21hdGljYWxseSBncm93IGFzIHRoZSBhbW91bnQgb2YgZGF0YSBpbiB5b3VyIGRhdGFiYXNlIGluY3JlYXNlcywgdGhvdWdoIHlvdSBhcmUgb25seSBjaGFyZ2VkIGZvciB0aGUgc3BhY2UgdGhhdCB5b3UgdXNlIGluIGFuIEF1cm9yYSBjbHVzdGVyIHZvbHVtZS5cbiAqICAgKkRiMiogXG4gKiAgQ29uc3RyYWludHMgdG8gdGhlIGFtb3VudCBvZiBzdG9yYWdlIGZvciBlYWNoIHN0b3JhZ2UgdHlwZSBhcmUgdGhlIGZvbGxvd2luZzpcbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIChTU0QpIHN0b3JhZ2UgKGdwMyk6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDY0MDAwLlxuICogICArICBQcm92aXNpb25lZCBJT1BTIHN0b3JhZ2UgKGlvMSk6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDEwMCB0byA2NDAwMC5cbiAqICAgXG4gKiAgICpNeVNRTCogXG4gKiAgQ29uc3RyYWludHMgdG8gdGhlIGFtb3VudCBvZiBzdG9yYWdlIGZvciBlYWNoIHN0b3JhZ2UgdHlwZSBhcmUgdGhlIGZvbGxvd2luZzogXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSAoU1NEKSBzdG9yYWdlIChncDIpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byA2NTUzNi5cbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBzdG9yYWdlIChpbzEpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxMDAgdG8gNjU1MzYuXG4gKiAgICsgIE1hZ25ldGljIHN0b3JhZ2UgKHN0YW5kYXJkKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gNSB0byAzMDcyLlxuICogICBcbiAqICAgKk1hcmlhREIqIFxuICogIENvbnN0cmFpbnRzIHRvIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSBmb3IgZWFjaCBzdG9yYWdlIHR5cGUgYXJlIHRoZSBmb2xsb3dpbmc6IFxuICogICArICBHZW5lcmFsIFB1cnBvc2UgKFNTRCkgc3RvcmFnZSAoZ3AyKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMjAgdG8gNjU1MzYuXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgc3RvcmFnZSAoaW8xKTogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMTAwIHRvIDY1NTM2LlxuICogICArICBNYWduZXRpYyBzdG9yYWdlIChzdGFuZGFyZCk6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDUgdG8gMzA3Mi5cbiAqICAgXG4gKiAgICpQb3N0Z3JlU1FMKiBcbiAqICBDb25zdHJhaW50cyB0byB0aGUgYW1vdW50IG9mIHN0b3JhZ2UgZm9yIGVhY2ggc3RvcmFnZSB0eXBlIGFyZSB0aGUgZm9sbG93aW5nOiBcbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIChTU0QpIHN0b3JhZ2UgKGdwMik6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDY1NTM2LlxuICogICArICBQcm92aXNpb25lZCBJT1BTIHN0b3JhZ2UgKGlvMSk6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDEwMCB0byA2NTUzNi5cbiAqICAgKyAgTWFnbmV0aWMgc3RvcmFnZSAoc3RhbmRhcmQpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSA1IHRvIDMwNzIuXG4gKiAgIFxuICogICAqT3JhY2xlKiBcbiAqICBDb25zdHJhaW50cyB0byB0aGUgYW1vdW50IG9mIHN0b3JhZ2UgZm9yIGVhY2ggc3RvcmFnZSB0eXBlIGFyZSB0aGUgZm9sbG93aW5nOiBcbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIChTU0QpIHN0b3JhZ2UgKGdwMik6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDY1NTM2LlxuICogICArICBQcm92aXNpb25lZCBJT1BTIHN0b3JhZ2UgKGlvMSk6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDEwMCB0byA2NTUzNi5cbiAqICAgKyAgTWFnbmV0aWMgc3RvcmFnZSAoc3RhbmRhcmQpOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxMCB0byAzMDcyLlxuICogICBcbiAqICAgKlNRTCBTZXJ2ZXIqIFxuICogIENvbnN0cmFpbnRzIHRvIHRoZSBhbW91bnQgb2Ygc3RvcmFnZSBmb3IgZWFjaCBzdG9yYWdlIHR5cGUgYXJlIHRoZSBmb2xsb3dpbmc6IFxuICogICArICBHZW5lcmFsIFB1cnBvc2UgKFNTRCkgc3RvcmFnZSAoZ3AyKTpcbiAqICAgKyAgRW50ZXJwcmlzZSBhbmQgU3RhbmRhcmQgZWRpdGlvbnM6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDE2Mzg0LlxuICogICArICBXZWIgYW5kIEV4cHJlc3MgZWRpdGlvbnM6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDE2Mzg0LlxuICogICBcbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBzdG9yYWdlIChpbzEpOlxuICogICArICBFbnRlcnByaXNlIGFuZCBTdGFuZGFyZCBlZGl0aW9uczogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMjAgdG8gMTYzODQuXG4gKiAgICsgIFdlYiBhbmQgRXhwcmVzcyBlZGl0aW9uczogTXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMjAgdG8gMTYzODQuXG4gKiAgIFxuICogICArICBNYWduZXRpYyBzdG9yYWdlIChzdGFuZGFyZCk6XG4gKiAgICsgIEVudGVycHJpc2UgYW5kIFN0YW5kYXJkIGVkaXRpb25zOiBNdXN0IGJlIGFuIGludGVnZXIgZnJvbSAyMCB0byAxMDI0LlxuICogICArICBXZWIgYW5kIEV4cHJlc3MgZWRpdGlvbnM6IE11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDIwIHRvIDEwMjQuXG4gKi9cbkFsbG9jYXRlZFN0b3JhZ2U/OiBzdHJpbmdcbi8qKlxuICogQSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIG1ham9yIHZlcnNpb24gdXBncmFkZXMgYXJlIGFsbG93ZWQuIENoYW5naW5nIHRoaXMgcGFyYW1ldGVyIGRvZXNuJ3QgcmVzdWx0IGluIGFuIG91dGFnZSBhbmQgdGhlIGNoYW5nZSBpcyBhc3luY2hyb25vdXNseSBhcHBsaWVkIGFzIHNvb24gYXMgcG9zc2libGUuXG4gKiAgQ29uc3RyYWludHM6IE1ham9yIHZlcnNpb24gdXBncmFkZXMgbXVzdCBiZSBhbGxvd2VkIHdoZW4gc3BlY2lmeWluZyBhIHZhbHVlIGZvciB0aGUgYGBFbmdpbmVWZXJzaW9uYGAgcGFyYW1ldGVyIHRoYXQgaXMgYSBkaWZmZXJlbnQgbWFqb3IgdmVyc2lvbiB0aGFuIHRoZSBEQiBpbnN0YW5jZSdzIGN1cnJlbnQgdmVyc2lvbi5cbiAqL1xuQWxsb3dNYWpvclZlcnNpb25VcGdyYWRlPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgSUFNbG9uZyAoSUFNKSByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIERCIGluc3RhbmNlLiBcbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBUaGUgYXNzb2NpYXRlZCByb2xlcyBhcmUgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqL1xuQXNzb2NpYXRlZFJvbGVzPzogREJJbnN0YW5jZVJvbGVbXVxuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgbWlub3IgZW5naW5lIHVwZ3JhZGVzIGFyZSBhcHBsaWVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIERCIGluc3RhbmNlIGR1cmluZyB0aGUgbWFpbnRlbmFuY2Ugd2luZG93LiBCeSBkZWZhdWx0LCBtaW5vciBlbmdpbmUgdXBncmFkZXMgYXJlIGFwcGxpZWQgYXV0b21hdGljYWxseS5cbiAqL1xuQXV0b01pbm9yVmVyc2lvblVwZ3JhZGU/OiBib29sZWFuXG4vKipcbiAqIFRoZSBBV1MtUmVnaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXV0b21hdGVkIGJhY2t1cC5cbiAqL1xuQXV0b21hdGljQmFja3VwUmVwbGljYXRpb25SZWdpb24/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFXUyBLTVMga2V5IGlkZW50aWZpZXIgZm9yIGVuY3J5cHRpb24gb2YgdGhlIHJlcGxpY2F0ZWQgYXV0b21hdGVkIGJhY2t1cHMuIFRoZSBLTVMga2V5IElEIGlzIHRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBmb3IgdGhlIEtNUyBlbmNyeXB0aW9uIGtleSBpbiB0aGUgZGVzdGluYXRpb24gQVdTLVJlZ2lvbiwgZm9yIGV4YW1wbGUsIGBgYXJuOmF3czprbXM6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjprZXkvQUtJQUlPU0ZPRE5ON0VYQU1QTEVgYC5cbiAqL1xuQXV0b21hdGljQmFja3VwUmVwbGljYXRpb25LbXNLZXlJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcmV0ZW50aW9uIHBlcmlvZCBmb3IgYXV0b21hdGVkIGJhY2t1cHMgaW4gYSBkaWZmZXJlbnQgQVdTIFJlZ2lvbi4gVXNlIHRoaXMgcGFyYW1ldGVyIHRvIHNldCBhIHVuaXF1ZSByZXRlbnRpb24gcGVyaW9kIHRoYXQgb25seSBhcHBsaWVzIHRvIGNyb3NzLVJlZ2lvbiBhdXRvbWF0ZWQgYmFja3Vwcy4gVG8gZW5hYmxlIGF1dG9tYXRlZCBiYWNrdXBzIGluIGEgZGlmZmVyZW50IFJlZ2lvbiwgc3BlY2lmeSBhIHBvc2l0aXZlIHZhbHVlIGZvciB0aGUgYGBBdXRvbWF0aWNCYWNrdXBSZXBsaWNhdGlvblJlZ2lvbmBgIHBhcmFtZXRlci4gXG4gKiAgSWYgbm90IHNwZWNpZmllZCwgdGhpcyBwYXJhbWV0ZXIgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIHRoZSBgYEJhY2t1cFJldGVudGlvblBlcmlvZGBgIHBhcmFtZXRlci4gVGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSBpcyAzNS5cbiAqL1xuQXV0b21hdGljQmFja3VwUmVwbGljYXRpb25SZXRlbnRpb25QZXJpb2Q/OiBudW1iZXJcbi8qKlxuICogVGhlIEF2YWlsYWJpbGl0eSBab25lIChBWikgd2hlcmUgdGhlIGRhdGFiYXNlIHdpbGwgYmUgY3JlYXRlZC4gRm9yIGluZm9ybWF0aW9uIG9uIEFXUy1SZWdpb25zIGFuZCBBdmFpbGFiaWxpdHkgWm9uZXMsIHNlZSBbUmVnaW9ucyBhbmQgQXZhaWxhYmlsaXR5IFpvbmVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ29uY2VwdHMuUmVnaW9uc0FuZEF2YWlsYWJpbGl0eVpvbmVzLmh0bWwpLlxuICogIEZvciBBbWF6b24gQXVyb3JhLCBlYWNoIEF1cm9yYSBEQiBjbHVzdGVyIGhvc3RzIGNvcGllcyBvZiBpdHMgc3RvcmFnZSBpbiB0aHJlZSBzZXBhcmF0ZSBBdmFpbGFiaWxpdHkgWm9uZXMuIFNwZWNpZnkgb25lIG9mIHRoZXNlIEF2YWlsYWJpbGl0eSBab25lcy4gQXVyb3JhIGF1dG9tYXRpY2FsbHkgY2hvb3NlcyBhbiBhcHByb3ByaWF0ZSBBdmFpbGFiaWxpdHkgWm9uZSBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBvbmUuXG4gKiAgRGVmYXVsdDogQSByYW5kb20sIHN5c3RlbS1jaG9zZW4gQXZhaWxhYmlsaXR5IFpvbmUgaW4gdGhlIGVuZHBvaW50J3MgQVdTLVJlZ2lvbi5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgVGhlIGBgQXZhaWxhYmlsaXR5Wm9uZWBgIHBhcmFtZXRlciBjYW4ndCBiZSBzcGVjaWZpZWQgaWYgdGhlIERCIGluc3RhbmNlIGlzIGEgTXVsdGktQVogZGVwbG95bWVudC5cbiAqICAgKyAgVGhlIHNwZWNpZmllZCBBdmFpbGFiaWxpdHkgWm9uZSBtdXN0IGJlIGluIHRoZSBzYW1lIEFXUy1SZWdpb24gYXMgdGhlIGN1cnJlbnQgZW5kcG9pbnQuXG4gKiAgIFxuICogIEV4YW1wbGU6IGBgdXMtZWFzdC0xZGBgXG4gKi9cbkF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG51bWJlciBvZiBkYXlzIGZvciB3aGljaCBhdXRvbWF0ZWQgYmFja3VwcyBhcmUgcmV0YWluZWQuIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gYSBwb3NpdGl2ZSBudW1iZXIgZW5hYmxlcyBiYWNrdXBzLiBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDAgZGlzYWJsZXMgYXV0b21hdGVkIGJhY2t1cHMuXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIHJldGVudGlvbiBwZXJpb2QgZm9yIGF1dG9tYXRlZCBiYWNrdXBzIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKiAgRGVmYXVsdDogMVxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIGEgdmFsdWUgZnJvbSAwIHRvIDM1XG4gKiAgICsgIENhbid0IGJlIHNldCB0byAwIGlmIHRoZSBEQiBpbnN0YW5jZSBpcyBhIHNvdXJjZSB0byByZWFkIHJlcGxpY2FzXG4gKi9cbkJhY2t1cFJldGVudGlvblBlcmlvZD86IG51bWJlclxuQmFja3VwVGFyZ2V0Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBDQSBjZXJ0aWZpY2F0ZSBmb3IgdGhpcyBEQiBpbnN0YW5jZS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2luZyBTU0wvVExTIHRvIGVuY3J5cHQgYSBjb25uZWN0aW9uIHRvIGEgREIgaW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9Vc2luZ1dpdGhSRFMuU1NMLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKiBhbmQgW1VzaW5nIFNTTC9UTFMgdG8gZW5jcnlwdCBhIGNvbm5lY3Rpb24gdG8gYSBEQiBjbHVzdGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvVXNpbmdXaXRoUkRTLlNTTC5odG1sKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZSouXG4gKi9cbkNBQ2VydGlmaWNhdGVJZGVudGlmaWVyPzogc3RyaW5nXG5DZXJ0aWZpY2F0ZURldGFpbHM/OiBDZXJ0aWZpY2F0ZURldGFpbHNcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGlzIHJlc3RhcnRlZCB3aGVuIHlvdSByb3RhdGUgeW91ciBTU0wvVExTIGNlcnRpZmljYXRlLlxuICogIEJ5IGRlZmF1bHQsIHRoZSBEQiBpbnN0YW5jZSBpcyByZXN0YXJ0ZWQgd2hlbiB5b3Ugcm90YXRlIHlvdXIgU1NML1RMUyBjZXJ0aWZpY2F0ZS4gVGhlIGNlcnRpZmljYXRlIGlzIG5vdCB1cGRhdGVkIHVudGlsIHRoZSBEQiBpbnN0YW5jZSBpcyByZXN0YXJ0ZWQuXG4gKiAgIFNldCB0aGlzIHBhcmFtZXRlciBvbmx5IGlmIHlvdSBhcmUgKm5vdCogdXNpbmcgU1NML1RMUyB0byBjb25uZWN0IHRvIHRoZSBEQiBpbnN0YW5jZS5cbiAqICAgSWYgeW91IGFyZSB1c2luZyBTU0wvVExTIHRvIGNvbm5lY3QgdG8gdGhlIERCIGluc3RhbmNlLCBmb2xsb3cgdGhlIGFwcHJvcHJpYXRlIGluc3RydWN0aW9ucyBmb3IgeW91ciBEQiBlbmdpbmUgdG8gcm90YXRlIHlvdXIgU1NML1RMUyBjZXJ0aWZpY2F0ZTpcbiAqICAgKyAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcm90YXRpbmcgeW91ciBTU0wvVExTIGNlcnRpZmljYXRlIGZvciBSRFMgREIgZW5naW5lcywgc2VlIFtSb3RhdGluZyBZb3VyIFNTTC9UTFMgQ2VydGlmaWNhdGUuXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVXNpbmdXaXRoUkRTLlNTTC1jZXJ0aWZpY2F0ZS1yb3RhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKiAgICsgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHJvdGF0aW5nIHlvdXIgU1NML1RMUyBjZXJ0aWZpY2F0ZSBmb3IgQXVyb3JhIERCIGVuZ2luZXMsIHNlZSBbUm90YXRpbmcgWW91ciBTU0wvVExTIENlcnRpZmljYXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvVXNpbmdXaXRoUkRTLlNTTC1jZXJ0aWZpY2F0ZS1yb3RhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZSouXG4gKiAgIFxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIFJEUyBDdXN0b20gREIgaW5zdGFuY2VzLlxuICovXG5DZXJ0aWZpY2F0ZVJvdGF0aW9uUmVzdGFydD86IGJvb2xlYW5cbi8qKlxuICogRm9yIHN1cHBvcnRlZCBlbmdpbmVzLCBpbmRpY2F0ZXMgdGhhdCB0aGUgREIgaW5zdGFuY2Ugc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBzZXQuXG4gKiAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIGNoYXJhY3RlciBzZXQgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQVdTOjpSRFM6OkRCQ2x1c3Rlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLXJkcy1kYmNsdXN0ZXIuaHRtbCkuXG4gKi9cbkNoYXJhY3RlclNldE5hbWU/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gY29weSB0YWdzIGZyb20gdGhlIERCIGluc3RhbmNlIHRvIHNuYXBzaG90cyBvZiB0aGUgREIgaW5zdGFuY2UuIEJ5IGRlZmF1bHQsIHRhZ3MgYXJlIG5vdCBjb3BpZWQuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gQW1hem9uIEF1cm9yYSBEQiBpbnN0YW5jZXMuIENvcHlpbmcgdGFncyB0byBzbmFwc2hvdHMgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4gU2V0dGluZyB0aGlzIHZhbHVlIGZvciBhbiBBdXJvcmEgREIgaW5zdGFuY2UgaGFzIG5vIGVmZmVjdCBvbiB0aGUgREIgY2x1c3RlciBzZXR0aW5nLlxuICovXG5Db3B5VGFnc1RvU25hcHNob3Q/OiBib29sZWFuXG4vKipcbiAqIFRoZSBpbnN0YW5jZSBwcm9maWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyBBbWF6b24gRUMyIGluc3RhbmNlIG9mIGFuIFJEUyBDdXN0b20gREIgaW5zdGFuY2UuXG4gKiAgVGhpcyBzZXR0aW5nIGlzIHJlcXVpcmVkIGZvciBSRFMgQ3VzdG9tLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBUaGUgcHJvZmlsZSBtdXN0IGV4aXN0IGluIHlvdXIgYWNjb3VudC5cbiAqICAgKyAgVGhlIHByb2ZpbGUgbXVzdCBoYXZlIGFuIElBTSByb2xlIHRoYXQgQW1hem9uIEVDMiBoYXMgcGVybWlzc2lvbnMgdG8gYXNzdW1lLlxuICogICArICBUaGUgaW5zdGFuY2UgcHJvZmlsZSBuYW1lIGFuZCB0aGUgYXNzb2NpYXRlZCBJQU0gcm9sZSBuYW1lIG11c3Qgc3RhcnQgd2l0aCB0aGUgcHJlZml4IGBgQVdTUkRTQ3VzdG9tYGAuXG4gKiAgIFxuICogIEZvciB0aGUgbGlzdCBvZiBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgdGhlIElBTSByb2xlLCBzZWUgW0NvbmZpZ3VyZSBJQU0gYW5kIHlvdXIgVlBDXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvY3VzdG9tLXNldHVwLW9yY2wuaHRtbCNjdXN0b20tc2V0dXAtb3JjbC5pYW0tdnBjKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKi9cbkN1c3RvbUlBTUluc3RhbmNlUHJvZmlsZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbW9kZSBvZiBEYXRhYmFzZSBJbnNpZ2h0cyB0byBlbmFibGUgZm9yIHRoZSBEQiBpbnN0YW5jZS5cbiAqICAgQXVyb3JhIERCIGluc3RhbmNlcyBpbmhlcml0IHRoaXMgdmFsdWUgZnJvbSB0aGUgREIgY2x1c3Rlciwgc28geW91IGNhbid0IGNoYW5nZSB0aGlzIHZhbHVlLlxuICovXG5EYXRhYmFzZUluc2lnaHRzTW9kZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgREIgY2x1c3RlciB0aGF0IHRoaXMgREIgaW5zdGFuY2Ugd2lsbCBiZWxvbmcgdG8uXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZXMuXG4gKi9cbkRCQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlIGlkZW50aWZpZXIgZm9yIHRoZSBNdWx0aS1BWiBEQiBjbHVzdGVyIHNuYXBzaG90IHRvIHJlc3RvcmUgZnJvbS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBNdWx0aS1BWiBEQiBjbHVzdGVycywgc2VlIFtNdWx0aS1BWiBEQiBjbHVzdGVyIGRlcGxveW1lbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvbXVsdGktYXotZGItY2x1c3RlcnMtY29uY2VwdHMuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IG1hdGNoIHRoZSBpZGVudGlmaWVyIG9mIGFuIGV4aXN0aW5nIE11bHRpLUFaIERCIGNsdXN0ZXIgc25hcHNob3QuXG4gKiAgICsgIENhbid0IGJlIHNwZWNpZmllZCB3aGVuIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBpcyBzcGVjaWZpZWQuXG4gKiAgICsgIE11c3QgYmUgc3BlY2lmaWVkIHdoZW4gYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIGlzbid0IHNwZWNpZmllZC5cbiAqICAgKyAgSWYgeW91IGFyZSByZXN0b3JpbmcgZnJvbSBhIHNoYXJlZCBtYW51YWwgTXVsdGktQVogREIgY2x1c3RlciBzbmFwc2hvdCwgdGhlIGBgREJDbHVzdGVyU25hcHNob3RJZGVudGlmaWVyYGAgbXVzdCBiZSB0aGUgQVJOIG9mIHRoZSBzaGFyZWQgc25hcHNob3QuXG4gKiAgICsgIENhbid0IGJlIHRoZSBpZGVudGlmaWVyIG9mIGFuIEF1cm9yYSBEQiBjbHVzdGVyIHNuYXBzaG90LlxuICovXG5EQkNsdXN0ZXJTbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmdcbkRCSW5zdGFuY2VBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIGNvbXB1dGUgYW5kIG1lbW9yeSBjYXBhY2l0eSBvZiB0aGUgREIgaW5zdGFuY2UsIGZvciBleGFtcGxlIGBgZGIubTUubGFyZ2VgYC4gTm90IGFsbCBEQiBpbnN0YW5jZSBjbGFzc2VzIGFyZSBhdmFpbGFibGUgaW4gYWxsIEFXUy1SZWdpb25zLCBvciBmb3IgYWxsIGRhdGFiYXNlIGVuZ2luZXMuIEZvciB0aGUgZnVsbCBsaXN0IG9mIERCIGluc3RhbmNlIGNsYXNzZXMsIGFuZCBhdmFpbGFiaWxpdHkgZm9yIHlvdXIgZW5naW5lLCBzZWUgW0RCIGluc3RhbmNlIGNsYXNzZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9Db25jZXB0cy5EQkluc3RhbmNlQ2xhc3MuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqIG9yIFtBdXJvcmEgREIgaW5zdGFuY2UgY2xhc3Nlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQXVyb3JhVXNlckd1aWRlL0NvbmNlcHRzLkRCSW5zdGFuY2VDbGFzcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZSouXG4gKi9cbkRCSW5zdGFuY2VDbGFzcz86IHN0cmluZ1xuLyoqXG4gKiBBIG5hbWUgZm9yIHRoZSBEQiBpbnN0YW5jZS4gSWYgeW91IHNwZWNpZnkgYSBuYW1lLCBBV1MgQ2xvdWRGb3JtYXRpb24gY29udmVydHMgaXQgdG8gbG93ZXJjYXNlLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIG5hbWUsIEFXUyBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZXMgYSB1bmlxdWUgcGh5c2ljYWwgSUQgYW5kIHVzZXMgdGhhdCBJRCBmb3IgdGhlIERCIGluc3RhbmNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtOYW1lIFR5cGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLW5hbWUuaHRtbCkuXG4gKiAgRm9yIGluZm9ybWF0aW9uIGFib3V0IGNvbnN0cmFpbnRzIHRoYXQgYXBwbHkgdG8gREIgaW5zdGFuY2UgaWRlbnRpZmllcnMsIHNlZSBbTmFtaW5nIGNvbnN0cmFpbnRzIGluIEFtYXpvbiBSRFNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX0xpbWl0cy5odG1sI1JEU19MaW1pdHMuQ29uc3RyYWludHMpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICAgSWYgeW91IHNwZWNpZnkgYSBuYW1lLCB5b3UgY2FuJ3QgcGVyZm9ybSB1cGRhdGVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBvZiB0aGlzIHJlc291cmNlLiBZb3UgY2FuIHBlcmZvcm0gdXBkYXRlcyB0aGF0IHJlcXVpcmUgbm8gb3Igc29tZSBpbnRlcnJ1cHRpb24uIElmIHlvdSBtdXN0IHJlcGxhY2UgdGhlIHJlc291cmNlLCBzcGVjaWZ5IGEgbmV3IG5hbWUuXG4gKi9cbkRCSW5zdGFuY2VJZGVudGlmaWVyPzogc3RyaW5nXG5EYmlSZXNvdXJjZUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSBtZWFuaW5nIG9mIHRoaXMgcGFyYW1ldGVyIGRpZmZlcnMgYWNjb3JkaW5nIHRvIHRoZSBkYXRhYmFzZSBlbmdpbmUgeW91IHVzZS5cbiAqICAgSWYgeW91IHNwZWNpZnkgdGhlIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgdGhpcyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgdG8gUkRTIGZvciBPcmFjbGUuXG4gKiAgICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSBkYXRhYmFzZSBuYW1lIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKiAgICpEYjIqIFxuICogIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0byBjcmVhdGUgd2hlbiB0aGUgREIgaW5zdGFuY2UgaXMgY3JlYXRlZC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3BlY2lmaWVkLCBubyBkYXRhYmFzZSBpcyBjcmVhdGVkIGluIHRoZSBEQiBpbnN0YW5jZS5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBjb250YWluIDEgdG8gNjQgbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBNdXN0IGJlZ2luIHdpdGggYSBsZXR0ZXIuIFN1YnNlcXVlbnQgY2hhcmFjdGVycyBjYW4gYmUgbGV0dGVycywgdW5kZXJzY29yZXMsIG9yIGRpZ2l0cyAoMC05KS5cbiAqICAgKyAgQ2FuJ3QgYmUgYSB3b3JkIHJlc2VydmVkIGJ5IHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UgZW5naW5lLlxuICogICBcbiAqICAgKk15U1FMKiBcbiAqICBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgdG8gY3JlYXRlIHdoZW4gdGhlIERCIGluc3RhbmNlIGlzIGNyZWF0ZWQuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIG5vIGRhdGFiYXNlIGlzIGNyZWF0ZWQgaW4gdGhlIERCIGluc3RhbmNlLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGNvbnRhaW4gMSB0byA2NCBsZXR0ZXJzIG9yIG51bWJlcnMuXG4gKiAgICsgIENhbid0IGJlIGEgd29yZCByZXNlcnZlZCBieSB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlIGVuZ2luZVxuICogICBcbiAqICAgKk1hcmlhREIqIFxuICogIFRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0byBjcmVhdGUgd2hlbiB0aGUgREIgaW5zdGFuY2UgaXMgY3JlYXRlZC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgbm8gZGF0YWJhc2UgaXMgY3JlYXRlZCBpbiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgY29udGFpbiAxIHRvIDY0IGxldHRlcnMgb3IgbnVtYmVycy5cbiAqICAgKyAgQ2FuJ3QgYmUgYSB3b3JkIHJlc2VydmVkIGJ5IHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UgZW5naW5lXG4gKiAgIFxuICogICAqUG9zdGdyZVNRTCogXG4gKiAgVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIHRvIGNyZWF0ZSB3aGVuIHRoZSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBgYHBvc3RncmVzYGAgZGF0YWJhc2UgaXMgY3JlYXRlZCBpbiB0aGUgREIgaW5zdGFuY2UuXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmVnaW4gd2l0aCBhIGxldHRlci4gU3Vic2VxdWVudCBjaGFyYWN0ZXJzIGNhbiBiZSBsZXR0ZXJzLCB1bmRlcnNjb3Jlcywgb3IgZGlnaXRzICgwLTkpLlxuICogICArICBNdXN0IGNvbnRhaW4gMSB0byA2MyBjaGFyYWN0ZXJzLlxuICogICArICBDYW4ndCBiZSBhIHdvcmQgcmVzZXJ2ZWQgYnkgdGhlIHNwZWNpZmllZCBkYXRhYmFzZSBlbmdpbmVcbiAqICAgXG4gKiAgICpPcmFjbGUqIFxuICogIFRoZSBPcmFjbGUgU3lzdGVtIElEIChTSUQpIG9mIHRoZSBjcmVhdGVkIERCIGluc3RhbmNlLiBJZiB5b3Ugc3BlY2lmeSBgYG51bGxgYCwgdGhlIGRlZmF1bHQgdmFsdWUgYGBPUkNMYGAgaXMgdXNlZC4gWW91IGNhbid0IHNwZWNpZnkgdGhlIHN0cmluZyBOVUxMLCBvciBhbnkgb3RoZXIgcmVzZXJ2ZWQgd29yZCwgZm9yIGBgREJOYW1lYGAuIFxuICogIERlZmF1bHQ6IGBgT1JDTGBgXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIENhbid0IGJlIGxvbmdlciB0aGFuIDggY2hhcmFjdGVyc1xuICogICBcbiAqICAgKlNRTCBTZXJ2ZXIqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBNdXN0IGJlIG51bGwuXG4gKi9cbkRCTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiBhbiBleGlzdGluZyBEQiBwYXJhbWV0ZXIgZ3JvdXAgb3IgYSByZWZlcmVuY2UgdG8gYW4gW0FXUzo6UkRTOjpEQlBhcmFtZXRlckdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1yZHMtZGJwYXJhbWV0ZXJncm91cC5odG1sKSByZXNvdXJjZSBjcmVhdGVkIGluIHRoZSB0ZW1wbGF0ZS5cbiAqICBUbyBsaXN0IGFsbCBvZiB0aGUgYXZhaWxhYmxlIERCIHBhcmFtZXRlciBncm91cCBuYW1lcywgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAqICAgYGBhd3MgcmRzIGRlc2NyaWJlLWRiLXBhcmFtZXRlci1ncm91cHMgLS1xdWVyeSBcIkRCUGFyYW1ldGVyR3JvdXBzW10uREJQYXJhbWV0ZXJHcm91cE5hbWVcIiAtLW91dHB1dCB0ZXh0YGAgXG4gKiAgIElmIGFueSBvZiB0aGUgZGF0YSBtZW1iZXJzIG9mIHRoZSByZWZlcmVuY2VkIHBhcmFtZXRlciBncm91cCBhcmUgY2hhbmdlZCBkdXJpbmcgYW4gdXBkYXRlLCB0aGUgREIgaW5zdGFuY2UgbWlnaHQgbmVlZCB0byBiZSByZXN0YXJ0ZWQsIHdoaWNoIGNhdXNlcyBzb21lIGludGVycnVwdGlvbi4gSWYgdGhlIHBhcmFtZXRlciBncm91cCBjb250YWlucyBzdGF0aWMgcGFyYW1ldGVycywgd2hldGhlciB0aGV5IHdlcmUgY2hhbmdlZCBvciBub3QsIGFuIHVwZGF0ZSB0cmlnZ2VycyBhIHJlYm9vdC5cbiAqICAgSWYgeW91IGRvbid0IHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBEQlBhcmFtZXRlckdyb3VwTmFtZWBgIHByb3BlcnR5LCB0aGUgZGVmYXVsdCBEQiBwYXJhbWV0ZXIgZ3JvdXAgZm9yIHRoZSBzcGVjaWZpZWQgZW5naW5lIGFuZCBlbmdpbmUgdmVyc2lvbiBpcyB1c2VkLlxuICovXG5EQlBhcmFtZXRlckdyb3VwTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBBIGxpc3Qgb2YgdGhlIERCIHNlY3VyaXR5IGdyb3VwcyB0byBhc3NpZ24gdG8gdGhlIERCIGluc3RhbmNlLiBUaGUgbGlzdCBjYW4gaW5jbHVkZSBib3RoIHRoZSBuYW1lIG9mIGV4aXN0aW5nIERCIHNlY3VyaXR5IGdyb3VwcyBvciByZWZlcmVuY2VzIHRvIEFXUzo6UkRTOjpEQlNlY3VyaXR5R3JvdXAgcmVzb3VyY2VzIGNyZWF0ZWQgaW4gdGhlIHRlbXBsYXRlLlxuICogICBJZiB5b3Ugc2V0IERCU2VjdXJpdHlHcm91cHMsIHlvdSBtdXN0IG5vdCBzZXQgVlBDU2VjdXJpdHlHcm91cHMsIGFuZCB2aWNlIHZlcnNhLiBBbHNvLCBub3RlIHRoYXQgdGhlIERCU2VjdXJpdHlHcm91cHMgcHJvcGVydHkgZXhpc3RzIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgcmVnaW9ucyBhbmQgaXMgbm8gbG9uZ2VyIHJlY29tbWVuZGVkIGZvciBwcm92aWRpbmcgc2VjdXJpdHkgaW5mb3JtYXRpb24gdG8gYW4gUkRTIERCIGluc3RhbmNlLiBJbnN0ZWFkLCB1c2UgVlBDU2VjdXJpdHlHcm91cHMuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IHRoaXMgcHJvcGVydHksIEFXUyBDbG91ZEZvcm1hdGlvbiBzZW5kcyBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyAoaWYgc3BlY2lmaWVkKSB0byBBbWF6b24gUkRTIGR1cmluZyBjcmVhdGUgb3BlcmF0aW9uczpcbiAqICAgKyAgIGBgQWxsb2NhdGVkU3RvcmFnZWBgIFxuICogICArICAgYGBBdXRvTWlub3JWZXJzaW9uVXBncmFkZWBgIFxuICogICArICAgYGBBdmFpbGFiaWxpdHlab25lYGAgXG4gKiAgICsgICBgYEJhY2t1cFJldGVudGlvblBlcmlvZGBgIFxuICogICArICAgYGBDaGFyYWN0ZXJTZXROYW1lYGAgXG4gKiAgICsgICBgYERCSW5zdGFuY2VDbGFzc2BgIFxuICogICArICAgYGBEQk5hbWVgYCBcbiAqICAgKyAgIGBgREJQYXJhbWV0ZXJHcm91cE5hbWVgYCBcbiAqICAgKyAgIGBgREJTZWN1cml0eUdyb3Vwc2BgIFxuICogICArICAgYGBEQlN1Ym5ldEdyb3VwTmFtZWBgIFxuICogICArICAgYGBFbmdpbmVgYCBcbiAqICAgKyAgIGBgRW5naW5lVmVyc2lvbmBgIFxuICogICArICAgYGBJb3BzYGAgXG4gKiAgICsgICBgYExpY2Vuc2VNb2RlbGBgIFxuICogICArICAgYGBNYXN0ZXJVc2VybmFtZWBgIFxuICogICArICAgYGBNYXN0ZXJVc2VyUGFzc3dvcmRgYCBcbiAqICAgKyAgIGBgTXVsdGlBWmBgIFxuICogICArICAgYGBPcHRpb25Hcm91cE5hbWVgYCBcbiAqICAgKyAgIGBgUHJlZmVycmVkQmFja3VwV2luZG93YGAgXG4gKiAgICsgICBgYFByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93YGAgXG4gKiAgIFxuICogIEFsbCBvdGhlciBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVkLiBTcGVjaWZ5IGEgdmlydHVhbCBwcml2YXRlIGNsb3VkIChWUEMpIHNlY3VyaXR5IGdyb3VwIGlmIHlvdSB3YW50IHRvIHN1Ym1pdCBvdGhlciBwcm9wZXJ0aWVzLCBzdWNoIGFzIGBgU3RvcmFnZVR5cGVgYCwgYGBTdG9yYWdlRW5jcnlwdGVkYGAsIG9yIGBgS21zS2V5SWRgYC4gSWYgeW91J3JlIGFscmVhZHkgdXNpbmcgdGhlIGBgREJTZWN1cml0eUdyb3Vwc2BgIHByb3BlcnR5LCB5b3UgY2FuJ3QgdXNlIHRoZXNlIG90aGVyIHByb3BlcnRpZXMgYnkgdXBkYXRpbmcgeW91ciBEQiBpbnN0YW5jZSB0byB1c2UgYSBWUEMgc2VjdXJpdHkgZ3JvdXAuIFlvdSBtdXN0IHJlY3JlYXRlIHRoZSBEQiBpbnN0YW5jZS5cbiAqL1xuREJTZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBuYW1lIG9yIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBEQiBzbmFwc2hvdCB0aGF0J3MgdXNlZCB0byByZXN0b3JlIHRoZSBEQiBpbnN0YW5jZS4gSWYgeW91J3JlIHJlc3RvcmluZyBmcm9tIGEgc2hhcmVkIG1hbnVhbCBEQiBzbmFwc2hvdCwgeW91IG11c3Qgc3BlY2lmeSB0aGUgQVJOIG9mIHRoZSBzbmFwc2hvdC5cbiAqICBCeSBzcGVjaWZ5aW5nIHRoaXMgcHJvcGVydHksIHlvdSBjYW4gY3JlYXRlIGEgREIgaW5zdGFuY2UgZnJvbSB0aGUgc3BlY2lmaWVkIERCIHNuYXBzaG90LiBJZiB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5IGlzIGFuIGVtcHR5IHN0cmluZyBvciB0aGUgYGBBV1M6OlJEUzo6REJJbnN0YW5jZWBgIGRlY2xhcmF0aW9uIGhhcyBubyBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIGEgbmV3IGRhdGFiYXNlLiBJZiB0aGUgcHJvcGVydHkgY29udGFpbnMgYSB2YWx1ZSAob3RoZXIgdGhhbiBhbiBlbXB0eSBzdHJpbmcpLCBBV1MgQ2xvdWRGb3JtYXRpb24gY3JlYXRlcyBhIGRhdGFiYXNlIGZyb20gdGhlIHNwZWNpZmllZCBzbmFwc2hvdC4gSWYgYSBzbmFwc2hvdCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBkb2Vzbid0IGV4aXN0LCBBV1MgQ2xvdWRGb3JtYXRpb24gY2FuJ3QgY3JlYXRlIHRoZSBkYXRhYmFzZSBhbmQgaXQgcm9sbHMgYmFjayB0aGUgc3RhY2suXG4gKiAgU29tZSBEQiBpbnN0YW5jZSBwcm9wZXJ0aWVzIGFyZW4ndCB2YWxpZCB3aGVuIHlvdSByZXN0b3JlIGZyb20gYSBzbmFwc2hvdCwgc3VjaCBhcyB0aGUgYGBNYXN0ZXJVc2VybmFtZWBgIGFuZCBgYE1hc3RlclVzZXJQYXNzd29yZGBgIHByb3BlcnRpZXMsIGFuZCB0aGUgcG9pbnQtaW4tdGltZSByZWNvdmVyeSBwcm9wZXJ0aWVzIGBgUmVzdG9yZVRpbWVgYCBhbmQgYGBVc2VMYXRlc3RSZXN0b3JhYmxlVGltZWBgLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3BlcnRpZXMgdGhhdCB5b3UgY2FuIHNwZWNpZnksIHNlZSB0aGUgW1Jlc3RvcmVEQkluc3RhbmNlRnJvbURCU25hcHNob3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVzdG9yZURCSW5zdGFuY2VGcm9tREJTbmFwc2hvdC5odG1sKSBhY3Rpb24gaW4gdGhlICpBbWF6b24gUkRTIEFQSSBSZWZlcmVuY2UqLlxuICogIEFmdGVyIHlvdSByZXN0b3JlIGEgREIgaW5zdGFuY2Ugd2l0aCBhIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgeW91IG11c3Qgc3BlY2lmeSB0aGUgc2FtZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkgZm9yIGFueSBmdXR1cmUgdXBkYXRlcyB0byB0aGUgREIgaW5zdGFuY2UuIFdoZW4geW91IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSBmb3IgYW4gdXBkYXRlLCB0aGUgREIgaW5zdGFuY2UgaXMgbm90IHJlc3RvcmVkIGZyb20gdGhlIERCIHNuYXBzaG90IGFnYWluLCBhbmQgdGhlIGRhdGEgaW4gdGhlIGRhdGFiYXNlIGlzIG5vdCBjaGFuZ2VkLiBIb3dldmVyLCBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LCBhbiBlbXB0eSBEQiBpbnN0YW5jZSBpcyBjcmVhdGVkLCBhbmQgdGhlIG9yaWdpbmFsIERCIGluc3RhbmNlIGlzIGRlbGV0ZWQuIElmIHlvdSBzcGVjaWZ5IGEgcHJvcGVydHkgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgc25hcHNob3QgcmVzdG9yZSBwcm9wZXJ0eSwgYSBuZXcgREIgaW5zdGFuY2UgaXMgcmVzdG9yZWQgZnJvbSB0aGUgc3BlY2lmaWVkIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgYW5kIHRoZSBvcmlnaW5hbCBEQiBpbnN0YW5jZSBpcyBkZWxldGVkLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHkgdG8gcmVzdG9yZSBhIERCIGluc3RhbmNlIChhcyBvcHBvc2VkIHRvIHNwZWNpZnlpbmcgaXQgZm9yIERCIGluc3RhbmNlIHVwZGF0ZXMpLCB0aGVuIGRvbid0IHNwZWNpZnkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICArICAgYGBDaGFyYWN0ZXJTZXROYW1lYGAgXG4gKiAgICsgICBgYERCQ2x1c3RlcklkZW50aWZpZXJgYCBcbiAqICAgKyAgIGBgREJOYW1lYGAgXG4gKiAgICsgICBgYEttc0tleUlkYGAgXG4gKiAgICsgICBgYE1hc3RlclVzZXJuYW1lYGAgXG4gKiAgICsgICBgYE1hc3RlclVzZXJQYXNzd29yZGBgIFxuICogICArICAgYGBQcm9tb3Rpb25UaWVyYGAgXG4gKiAgICsgICBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgXG4gKiAgICsgICBgYFNvdXJjZVJlZ2lvbmBgIFxuICogICArICBgYFN0b3JhZ2VFbmNyeXB0ZWRgYCAoZm9yIGFuIHVuZW5jcnlwdGVkIHNuYXBzaG90KVxuICogICArICAgYGBUaW1lem9uZWBgIFxuICogICBcbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBTbmFwc2hvdCByZXN0b3JlIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKi9cbkRCU25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nXG4vKipcbiAqIEEgREIgc3VibmV0IGdyb3VwIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBEQiBpbnN0YW5jZS4gSWYgeW91IHVwZGF0ZSB0aGlzIHZhbHVlLCB0aGUgbmV3IHN1Ym5ldCBncm91cCBtdXN0IGJlIGEgc3VibmV0IGdyb3VwIGluIGEgbmV3IFZQQy4gXG4gKiAgSWYgeW91IGRvbid0IHNwZWNpZnkgYSBEQiBzdWJuZXQgZ3JvdXAsIFJEUyB1c2VzIHRoZSBkZWZhdWx0IERCIHN1Ym5ldCBncm91cCBpZiBvbmUgZXhpc3RzLiBJZiBhIGRlZmF1bHQgREIgc3VibmV0IGdyb3VwIGRvZXMgbm90IGV4aXN0LCBhbmQgeW91IGRvbid0IHNwZWNpZnkgYSBgYERCU3VibmV0R3JvdXBOYW1lYGAsIHRoZSBEQiBpbnN0YW5jZSBmYWlscyB0byBsYXVuY2guIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIEFtYXpvbiBSRFMgaW4gYSBWUEMsIHNlZSBbQW1hem9uIFZQQyBhbmQgQW1hem9uIFJEU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfVlBDLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi4gXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gQW1hem9uIEF1cm9yYSBEQiBpbnN0YW5jZXMuIFRoZSBEQiBzdWJuZXQgZ3JvdXAgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4gSWYgc3BlY2lmaWVkLCB0aGUgc2V0dGluZyBtdXN0IG1hdGNoIHRoZSBEQiBjbHVzdGVyIHNldHRpbmcuXG4gKi9cbkRCU3VibmV0R3JvdXBOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBPcmFjbGUgc3lzdGVtIGlkZW50aWZpZXIgKFNJRCksIHdoaWNoIGlzIHRoZSBuYW1lIG9mIHRoZSBPcmFjbGUgZGF0YWJhc2UgaW5zdGFuY2UgdGhhdCBtYW5hZ2VzIHlvdXIgZGF0YWJhc2UgZmlsZXMuIEluIHRoaXMgY29udGV4dCwgdGhlIHRlcm0gXCJPcmFjbGUgZGF0YWJhc2UgaW5zdGFuY2VcIiByZWZlcnMgZXhjbHVzaXZlbHkgdG8gdGhlIHN5c3RlbSBnbG9iYWwgYXJlYSAoU0dBKSBhbmQgT3JhY2xlIGJhY2tncm91bmQgcHJvY2Vzc2VzLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIFNJRCwgdGhlIHZhbHVlIGRlZmF1bHRzIHRvIGBgUkRTQ0RCYGAuIFRoZSBPcmFjbGUgU0lEIGlzIGFsc28gdGhlIG5hbWUgb2YgeW91ciBDREIuXG4gKi9cbkRCU3lzdGVtSWQ/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGhhcyBhIGRlZGljYXRlZCBsb2cgdm9sdW1lIChETFYpIGVuYWJsZWQuXG4gKi9cbkRlZGljYXRlZExvZ1ZvbHVtZT86IGJvb2xlYW5cbi8qKlxuICogQSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRvIHJlbW92ZSBhdXRvbWF0ZWQgYmFja3VwcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgREIgaW5zdGFuY2UgaXMgZGVsZXRlZC4gVGhpcyBwYXJhbWV0ZXIgaXNuJ3QgY2FzZS1zZW5zaXRpdmUuIFRoZSBkZWZhdWx0IGlzIHRvIHJlbW92ZSBhdXRvbWF0ZWQgYmFja3VwcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgREIgaW5zdGFuY2UgaXMgZGVsZXRlZC5cbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBXaGVuIHlvdSBkZWxldGUgYSBEQiBjbHVzdGVyLCBhbGwgYXV0b21hdGVkIGJhY2t1cHMgZm9yIHRoYXQgREIgY2x1c3RlciBhcmUgZGVsZXRlZCBhbmQgY2FuJ3QgYmUgcmVjb3ZlcmVkLiBNYW51YWwgREIgY2x1c3RlciBzbmFwc2hvdHMgb2YgdGhlIERCIGNsdXN0ZXIgYXJlIG5vdCBkZWxldGVkLlxuICovXG5EZWxldGVBdXRvbWF0ZWRCYWNrdXBzPzogYm9vbGVhblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgREIgaW5zdGFuY2UgaGFzIGRlbGV0aW9uIHByb3RlY3Rpb24gZW5hYmxlZC4gVGhlIGRhdGFiYXNlIGNhbid0IGJlIGRlbGV0ZWQgd2hlbiBkZWxldGlvbiBwcm90ZWN0aW9uIGlzIGVuYWJsZWQuIEJ5IGRlZmF1bHQsIGRlbGV0aW9uIHByb3RlY3Rpb24gaXNuJ3QgZW5hYmxlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRGVsZXRpbmcgYSBEQiBJbnN0YW5jZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfRGVsZXRlSW5zdGFuY2UuaHRtbCkuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gQW1hem9uIEF1cm9yYSBEQiBpbnN0YW5jZXMuIFlvdSBjYW4gZW5hYmxlIG9yIGRpc2FibGUgZGVsZXRpb24gcHJvdGVjdGlvbiBmb3IgdGhlIERCIGNsdXN0ZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYGBDcmVhdGVEQkNsdXN0ZXJgYC4gREIgaW5zdGFuY2VzIGluIGEgREIgY2x1c3RlciBjYW4gYmUgZGVsZXRlZCBldmVuIHdoZW4gZGVsZXRpb24gcHJvdGVjdGlvbiBpcyBlbmFibGVkIGZvciB0aGUgREIgY2x1c3Rlci5cbiAqL1xuRGVsZXRpb25Qcm90ZWN0aW9uPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgQWN0aXZlIERpcmVjdG9yeSBkaXJlY3RvcnkgSUQgdG8gY3JlYXRlIHRoZSBEQiBpbnN0YW5jZSBpbi4gQ3VycmVudGx5LCBvbmx5IERiMiwgTXlTUUwsIE1pY3Jvc29mdCBTUUwgU2VydmVyLCBPcmFjbGUsIGFuZCBQb3N0Z3JlU1FMIERCIGluc3RhbmNlcyBjYW4gYmUgY3JlYXRlZCBpbiBhbiBBY3RpdmUgRGlyZWN0b3J5IERvbWFpbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtLZXJiZXJvcyBBdXRoZW50aWNhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL2tlcmJlcm9zLWF1dGhlbnRpY2F0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqL1xuRG9tYWluPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBUk4gZm9yIHRoZSBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IHdpdGggdGhlIGNyZWRlbnRpYWxzIGZvciB0aGUgdXNlciBqb2luaW5nIHRoZSBkb21haW4uXG4gKiAgRXhhbXBsZTogYGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOnJlZ2lvbjphY2NvdW50LW51bWJlcjpzZWNyZXQ6bXlzZWxmbWFuYWdlZEFEdGVzdHNlY3JldC0xMjM0NTZgYFxuICovXG5Eb21haW5BdXRoU2VjcmV0QXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBJUHY0IEROUyBJUCBhZGRyZXNzZXMgb2YgeW91ciBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgQWN0aXZlIERpcmVjdG9yeSBkb21haW4gY29udHJvbGxlcnMuXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIFR3byBJUCBhZGRyZXNzZXMgbXVzdCBiZSBwcm92aWRlZC4gSWYgdGhlcmUgaXNuJ3QgYSBzZWNvbmRhcnkgZG9tYWluIGNvbnRyb2xsZXIsIHVzZSB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgcHJpbWFyeSBkb21haW4gY29udHJvbGxlciBmb3IgYm90aCBlbnRyaWVzIGluIHRoZSBsaXN0LlxuICogICBcbiAqICBFeGFtcGxlOiBgYDEyMy4xMjQuMTI1LjEyNiwyMzQuMjM1LjIzNi4yMzdgYFxuICovXG5Eb21haW5EbnNJcHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lIChGUUROKSBvZiBhbiBBY3RpdmUgRGlyZWN0b3J5IGRvbWFpbi5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgQ2FuJ3QgYmUgbG9uZ2VyIHRoYW4gNjQgY2hhcmFjdGVycy5cbiAqICAgXG4gKiAgRXhhbXBsZTogYGBteW1hbmFnZWRBRHRlc3QubXltYW5hZ2VkQUQubXlkb21haW5gYFxuICovXG5Eb21haW5GcWRuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBJQU0gcm9sZSB0byB1c2Ugd2hlbiBtYWtpbmcgQVBJIGNhbGxzIHRvIHRoZSBEaXJlY3RvcnkgU2VydmljZS5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byB0aGUgZm9sbG93aW5nIERCIGluc3RhbmNlczpcbiAqICAgKyAgQW1hem9uIEF1cm9yYSAoVGhlIGRvbWFpbiBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLilcbiAqICAgKyAgUkRTIEN1c3RvbVxuICovXG5Eb21haW5JQU1Sb2xlTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQWN0aXZlIERpcmVjdG9yeSBvcmdhbml6YXRpb25hbCB1bml0IGZvciB5b3VyIERCIGluc3RhbmNlIHRvIGpvaW4uXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgaW4gdGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBmb3JtYXQuXG4gKiAgICsgIENhbid0IGJlIGxvbmdlciB0aGFuIDY0IGNoYXJhY3RlcnMuXG4gKiAgIFxuICogIEV4YW1wbGU6IGBgT1U9bXltYW5hZ2VkQUR0ZXN0T1UsREM9bXltYW5hZ2VkQUR0ZXN0LERDPW15bWFuYWdlZEFELERDPW15ZG9tYWluYGBcbiAqL1xuRG9tYWluT3U/OiBzdHJpbmdcbi8qKlxuICogVGhlIGxpc3Qgb2YgbG9nIHR5cGVzIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIGZvciBleHBvcnRpbmcgdG8gQ2xvdWRXYXRjaCBMb2dzLiBUaGUgdmFsdWVzIGluIHRoZSBsaXN0IGRlcGVuZCBvbiB0aGUgREIgZW5naW5lIGJlaW5nIHVzZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1B1Ymxpc2hpbmcgRGF0YWJhc2UgTG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9Mb2dBY2Nlc3MuaHRtbCNVU0VSX0xvZ0FjY2Vzcy5Qcm9jZWR1cmFsLlVwbG9hZHRvQ2xvdWRXYXRjaCkgaW4gdGhlICpBbWF6b24gUmVsYXRpb25hbCBEYXRhYmFzZSBTZXJ2aWNlIFVzZXIgR3VpZGUqLlxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIENsb3VkV2F0Y2ggTG9ncyBleHBvcnRzIGFyZSBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLiBcbiAqICAgKkRiMiogXG4gKiAgVmFsaWQgdmFsdWVzOiBgYGRpYWcubG9nYGAsIGBgbm90aWZ5LmxvZ2BgXG4gKiAgICpNYXJpYURCKiBcbiAqICBWYWxpZCB2YWx1ZXM6IGBgYXVkaXRgYCwgYGBlcnJvcmBgLCBgYGdlbmVyYWxgYCwgYGBzbG93cXVlcnlgYFxuICogICAqTWljcm9zb2Z0IFNRTCBTZXJ2ZXIqIFxuICogIFZhbGlkIHZhbHVlczogYGBhZ2VudGBgLCBgYGVycm9yYGBcbiAqICAgKk15U1FMKiBcbiAqICBWYWxpZCB2YWx1ZXM6IGBgYXVkaXRgYCwgYGBlcnJvcmBgLCBgYGdlbmVyYWxgYCwgYGBzbG93cXVlcnlgYFxuICogICAqT3JhY2xlKiBcbiAqICBWYWxpZCB2YWx1ZXM6IGBgYWxlcnRgYCwgYGBhdWRpdGBgLCBgYGxpc3RlbmVyYGAsIGBgdHJhY2VgYCwgYGBvZW1hZ2VudGBgXG4gKiAgICpQb3N0Z3JlU1FMKiBcbiAqICBWYWxpZCB2YWx1ZXM6IGBgcG9zdGdyZXNxbGBgLCBgYHVwZ3JhZGVgYFxuICovXG5FbmFibGVDbG91ZHdhdGNoTG9nc0V4cG9ydHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdG8gZW5hYmxlIG1hcHBpbmcgb2YgQVdTIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSBhY2NvdW50cyB0byBkYXRhYmFzZSBhY2NvdW50cy4gQnkgZGVmYXVsdCwgbWFwcGluZyBpcyBkaXNhYmxlZC5cbiAqICBUaGlzIHByb3BlcnR5IGlzIHN1cHBvcnRlZCBmb3IgUkRTIGZvciBNYXJpYURCLCBSRFMgZm9yIE15U1FMLCBhbmQgUkRTIGZvciBQb3N0Z3JlU1FMLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJQU0gRGF0YWJhc2UgQXV0aGVudGljYXRpb24gZm9yIE1hcmlhREIsIE15U1FMLCBhbmQgUG9zdGdyZVNRTF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VzaW5nV2l0aFJEUy5JQU1EQkF1dGguaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKlxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIE1hcHBpbmcgQVdTIElBTSBhY2NvdW50cyB0byBkYXRhYmFzZSBhY2NvdW50cyBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICovXG5FbmFibGVJQU1EYXRhYmFzZUF1dGhlbnRpY2F0aW9uPzogYm9vbGVhblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgUGVyZm9ybWFuY2UgSW5zaWdodHMgZm9yIHRoZSBEQiBpbnN0YW5jZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgQW1hem9uIFBlcmZvcm1hbmNlIEluc2lnaHRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9QZXJmSW5zaWdodHMuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIFJEUyBDdXN0b20gREIgaW5zdGFuY2VzLlxuICovXG5FbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzPzogYm9vbGVhblxuRW5kcG9pbnQ/OiBFbmRwb2ludFxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgZW5naW5lIHRvIHVzZSBmb3IgdGhpcyBEQiBpbnN0YW5jZS4gTm90IGV2ZXJ5IGRhdGFiYXNlIGVuZ2luZSBpcyBhdmFpbGFibGUgaW4gZXZlcnkgQVdTIFJlZ2lvbi5cbiAqICBUaGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkIHdoZW4gY3JlYXRpbmcgYSBEQiBpbnN0YW5jZS5cbiAqICAgWW91IGNhbiBjb252ZXJ0IGFuIE9yYWNsZSBkYXRhYmFzZSBmcm9tIHRoZSBub24tQ0RCIGFyY2hpdGVjdHVyZSB0byB0aGUgY29udGFpbmVyIGRhdGFiYXNlIChDREIpIGFyY2hpdGVjdHVyZSBieSB1cGRhdGluZyB0aGUgYGBFbmdpbmVgYCB2YWx1ZSBpbiB5b3VyIHRlbXBsYXRlcyBmcm9tIGBgb3JhY2xlLWVlYGAgdG8gYGBvcmFjbGUtZWUtY2RiYGAgb3IgZnJvbSBgYG9yYWNsZS1zZTJgYCB0byBgYG9yYWNsZS1zZTItY2RiYGAuIENvbnZlcnRpbmcgdG8gdGhlIENEQiBhcmNoaXRlY3R1cmUgcmVxdWlyZXMgYW4gaW50ZXJydXB0aW9uLlxuICogICBWYWxpZCBWYWx1ZXM6XG4gKiAgICsgIGBgYXVyb3JhLW15c3FsYGAgKGZvciBBdXJvcmEgTXlTUUwgREIgaW5zdGFuY2VzKVxuICogICArICBgYGF1cm9yYS1wb3N0Z3Jlc3FsYGAgKGZvciBBdXJvcmEgUG9zdGdyZVNRTCBEQiBpbnN0YW5jZXMpXG4gKiAgICsgIGBgY3VzdG9tLW9yYWNsZS1lZWBgIChmb3IgUkRTIEN1c3RvbSBmb3IgT3JhY2xlIERCIGluc3RhbmNlcylcbiAqICAgKyAgYGBjdXN0b20tb3JhY2xlLWVlLWNkYmBgIChmb3IgUkRTIEN1c3RvbSBmb3IgT3JhY2xlIERCIGluc3RhbmNlcylcbiAqICAgKyAgYGBjdXN0b20tc3Fsc2VydmVyLWVlYGAgKGZvciBSRFMgQ3VzdG9tIGZvciBTUUwgU2VydmVyIERCIGluc3RhbmNlcylcbiAqICAgKyAgYGBjdXN0b20tc3Fsc2VydmVyLXNlYGAgKGZvciBSRFMgQ3VzdG9tIGZvciBTUUwgU2VydmVyIERCIGluc3RhbmNlcylcbiAqICAgKyAgYGBjdXN0b20tc3Fsc2VydmVyLXdlYmBgIChmb3IgUkRTIEN1c3RvbSBmb3IgU1FMIFNlcnZlciBEQiBpbnN0YW5jZXMpXG4gKiAgICsgICBgYGRiMi1hZWBgIFxuICogICArICAgYGBkYjItc2VgYCBcbiAqICAgKyAgIGBgbWFyaWFkYmBgIFxuICogICArICAgYGBteXNxbGBgIFxuICogICArICAgYGBvcmFjbGUtZWVgYCBcbiAqICAgKyAgIGBgb3JhY2xlLWVlLWNkYmBgIFxuICogICArICAgYGBvcmFjbGUtc2UyYGAgXG4gKiAgICsgICBgYG9yYWNsZS1zZTItY2RiYGAgXG4gKiAgICsgICBgYHBvc3RncmVzYGAgXG4gKiAgICsgICBgYHNxbHNlcnZlci1lZWBgIFxuICogICArICAgYGBzcWxzZXJ2ZXItc2VgYCBcbiAqICAgKyAgIGBgc3Fsc2VydmVyLWV4YGAgXG4gKiAgICsgICBgYHNxbHNlcnZlci13ZWJgYFxuICovXG5FbmdpbmU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGxpZmUgY3ljbGUgdHlwZSBmb3IgdGhpcyBEQiBpbnN0YW5jZS5cbiAqICAgQnkgZGVmYXVsdCwgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gYGBvcGVuLXNvdXJjZS1yZHMtZXh0ZW5kZWQtc3VwcG9ydGBgLCB3aGljaCBlbnJvbGxzIHlvdXIgREIgaW5zdGFuY2UgaW50byBBbWF6b24gUkRTIEV4dGVuZGVkIFN1cHBvcnQuIEF0IHRoZSBlbmQgb2Ygc3RhbmRhcmQgc3VwcG9ydCwgeW91IGNhbiBhdm9pZCBjaGFyZ2VzIGZvciBFeHRlbmRlZCBTdXBwb3J0IGJ5IHNldHRpbmcgdGhlIHZhbHVlIHRvIGBgb3Blbi1zb3VyY2UtcmRzLWV4dGVuZGVkLXN1cHBvcnQtZGlzYWJsZWRgYC4gSW4gdGhpcyBjYXNlLCBjcmVhdGluZyB0aGUgREIgaW5zdGFuY2Ugd2lsbCBmYWlsIGlmIHRoZSBEQiBtYWpvciB2ZXJzaW9uIGlzIHBhc3QgaXRzIGVuZCBvZiBzdGFuZGFyZCBzdXBwb3J0IGRhdGUuXG4gKiAgIFRoaXMgc2V0dGluZyBhcHBsaWVzIG9ubHkgdG8gUkRTIGZvciBNeVNRTCBhbmQgUkRTIGZvciBQb3N0Z3JlU1FMLiBGb3IgQW1hem9uIEF1cm9yYSBEQiBpbnN0YW5jZXMsIHRoZSBsaWZlIGN5Y2xlIHR5cGUgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqICBZb3UgY2FuIHVzZSB0aGlzIHNldHRpbmcgdG8gZW5yb2xsIHlvdXIgREIgaW5zdGFuY2UgaW50byBBbWF6b24gUkRTIEV4dGVuZGVkIFN1cHBvcnQuIFdpdGggUkRTIEV4dGVuZGVkIFN1cHBvcnQsIHlvdSBjYW4gcnVuIHRoZSBzZWxlY3RlZCBtYWpvciBlbmdpbmUgdmVyc2lvbiBvbiB5b3VyIERCIGluc3RhbmNlIHBhc3QgdGhlIGVuZCBvZiBzdGFuZGFyZCBzdXBwb3J0IGZvciB0aGF0IGVuZ2luZSB2ZXJzaW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gUkRTIEV4dGVuZGVkIFN1cHBvcnQgd2l0aCBBbWF6b24gUkRTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvZXh0ZW5kZWQtc3VwcG9ydC5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVmFsaWQgVmFsdWVzOiBgYG9wZW4tc291cmNlLXJkcy1leHRlbmRlZC1zdXBwb3J0IHwgb3Blbi1zb3VyY2UtcmRzLWV4dGVuZGVkLXN1cHBvcnQtZGlzYWJsZWRgYFxuICogIERlZmF1bHQ6IGBgb3Blbi1zb3VyY2UtcmRzLWV4dGVuZGVkLXN1cHBvcnRgYFxuICovXG5FbmdpbmVMaWZlY3ljbGVTdXBwb3J0Pzogc3RyaW5nXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZGF0YWJhc2UgZW5naW5lIHRvIHVzZS5cbiAqICBGb3IgYSBsaXN0IG9mIHZhbGlkIGVuZ2luZSB2ZXJzaW9ucywgdXNlIHRoZSBgYERlc2NyaWJlREJFbmdpbmVWZXJzaW9uc2BgIGFjdGlvbi5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgZGF0YWJhc2UgZW5naW5lcyBhbmQgbGlua3MgdG8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgd2l0aCBBbWF6b24gUkRTLiBOb3QgZXZlcnkgZGF0YWJhc2UgZW5naW5lIGlzIGF2YWlsYWJsZSBmb3IgZXZlcnkgQVdTIFJlZ2lvbi5cbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGRhdGFiYXNlIGVuZ2luZSB0byBiZSB1c2VkIGJ5IHRoZSBEQiBpbnN0YW5jZSBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICogICAqRGIyKiBcbiAqICBTZWUgW0FtYXpvbiBSRFMgZm9yIERiMl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfRGIyLmh0bWwjRGIyLkNvbmNlcHRzLlZlcnNpb25NZ210KSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKiAgICpNYXJpYURCKiBcbiAqICBTZWUgW01hcmlhREIgb24gQW1hem9uIFJEUyBWZXJzaW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfTWFyaWFEQi5odG1sI01hcmlhREIuQ29uY2VwdHMuVmVyc2lvbk1nbXQpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLipcbiAqICAgKk1pY3Jvc29mdCBTUUwgU2VydmVyKiBcbiAqICBTZWUgW01pY3Jvc29mdCBTUUwgU2VydmVyIFZlcnNpb25zIG9uIEFtYXpvbiBSRFNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX1NRTFNlcnZlci5odG1sI1NRTFNlcnZlci5Db25jZXB0cy5HZW5lcmFsLlZlcnNpb25TdXBwb3J0KSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKiAgICpNeVNRTCogXG4gKiAgU2VlIFtNeVNRTCBvbiBBbWF6b24gUkRTIFZlcnNpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9NeVNRTC5odG1sI015U1FMLkNvbmNlcHRzLlZlcnNpb25NZ210KSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKiAgICpPcmFjbGUqIFxuICogIFNlZSBbT3JhY2xlIERhdGFiYXNlIEVuZ2luZSBSZWxlYXNlIE5vdGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQXBwZW5kaXguT3JhY2xlLlBhdGNoQ29tcG9zaXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKlxuICogICAqUG9zdGdyZVNRTCogXG4gKiAgU2VlIFtTdXBwb3J0ZWQgUG9zdGdyZVNRTCBEYXRhYmFzZSBWZXJzaW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL0NIQVBfUG9zdGdyZVNRTC5odG1sI1Bvc3RncmVTUUwuQ29uY2VwdHMuR2VuZXJhbC5EQlZlcnNpb25zKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZS4qXG4gKi9cbkVuZ2luZVZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gbWFuYWdlIHRoZSBtYXN0ZXIgdXNlciBwYXNzd29yZCB3aXRoIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUGFzc3dvcmQgbWFuYWdlbWVudCB3aXRoIFNlY3JldHMgTWFuYWdlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL3Jkcy1zZWNyZXRzLW1hbmFnZXIuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBDYW4ndCBtYW5hZ2UgdGhlIG1hc3RlciB1c2VyIHBhc3N3b3JkIHdpdGggQVdTIFNlY3JldHMgTWFuYWdlciBpZiBgYE1hc3RlclVzZXJQYXNzd29yZGBgIGlzIHNwZWNpZmllZC5cbiAqL1xuTWFuYWdlTWFzdGVyVXNlclBhc3N3b3JkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpIHRoYXQgdGhlIGRhdGFiYXNlIHByb3Zpc2lvbnMuIFRoZSB2YWx1ZSBtdXN0IGJlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAxMDAwLiBcbiAqICBJZiB5b3Ugc3BlY2lmeSB0aGlzIHByb3BlcnR5LCB5b3UgbXVzdCBmb2xsb3cgdGhlIHJhbmdlIG9mIGFsbG93ZWQgcmF0aW9zIG9mIHlvdXIgcmVxdWVzdGVkIElPUFMgcmF0ZSB0byB0aGUgYW1vdW50IG9mIHN0b3JhZ2UgdGhhdCB5b3UgYWxsb2NhdGUgKElPUFMgdG8gYWxsb2NhdGVkIHN0b3JhZ2UpLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBwcm92aXNpb24gYW4gT3JhY2xlIGRhdGFiYXNlIGluc3RhbmNlIHdpdGggMTAwMCBJT1BTIGFuZCAyMDAgR2lCIG9mIHN0b3JhZ2UgKGEgcmF0aW8gb2YgNToxKSwgb3Igc3BlY2lmeSAyMDAwIElPUFMgd2l0aCAyMDAgR2lCIG9mIHN0b3JhZ2UgKGEgcmF0aW8gb2YgMTA6MSkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBSRFMgUHJvdmlzaW9uZWQgSU9QUyBTdG9yYWdlIHRvIEltcHJvdmUgUGVyZm9ybWFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0NIQVBfU3RvcmFnZS5odG1sI1VTRVJfUElPUFMpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICAgSWYgeW91IHNwZWNpZnkgYGBpbzFgYCBmb3IgdGhlIGBgU3RvcmFnZVR5cGVgYCBwcm9wZXJ0eSwgdGhlbiB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIGBgSW9wc2BgIHByb3BlcnR5LlxuICogICBDb25zdHJhaW50czpcbiAqICAgKyAgRm9yIFJEUyBmb3IgRGIyLCBNYXJpYURCLCBNeVNRTCwgT3JhY2xlLCBhbmQgUG9zdGdyZVNRTCAtIE11c3QgYmUgYSBtdWx0aXBsZSBiZXR3ZWVuIC41IGFuZCA1MCBvZiB0aGUgc3RvcmFnZSBhbW91bnQgZm9yIHRoZSBEQiBpbnN0YW5jZS5cbiAqICAgKyAgRm9yIFJEUyBmb3IgU1FMIFNlcnZlciAtIE11c3QgYmUgYSBtdWx0aXBsZSBiZXR3ZWVuIDEgYW5kIDUwIG9mIHRoZSBzdG9yYWdlIGFtb3VudCBmb3IgdGhlIERCIGluc3RhbmNlLlxuICovXG5Jb3BzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIEFXUyBLTVMga2V5IHRoYXQncyB1c2VkIHRvIGVuY3J5cHQgdGhlIERCIGluc3RhbmNlLCBzdWNoIGFzIGBgYXJuOmF3czprbXM6dXMtZWFzdC0xOjAxMjM0NTY3ODkxMDprZXkvYWJjZDEyMzQtYTEyMy00NTZhLWExMmItYTEyM2I0Y2Q1NmVmYGAuIElmIHlvdSBlbmFibGUgdGhlIFN0b3JhZ2VFbmNyeXB0ZWQgcHJvcGVydHkgYnV0IGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSwgQVdTIENsb3VkRm9ybWF0aW9uIHVzZXMgdGhlIGRlZmF1bHQgS01TIGtleS4gSWYgeW91IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSwgeW91IG11c3Qgc2V0IHRoZSBTdG9yYWdlRW5jcnlwdGVkIHByb3BlcnR5IHRvIHRydWUuIFxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgb3IgYGBTb3VyY2VEYmlSZXNvdXJjZUlkYGAgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gVGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UsIGFuZCBpZiB0aGUgREIgaW5zdGFuY2UgaXMgZW5jcnlwdGVkLCB0aGUgc3BlY2lmaWVkIGBgS21zS2V5SWRgYCBwcm9wZXJ0eSBpcyB1c2VkLiBIb3dldmVyLCBpZiB0aGUgc291cmNlIERCIGluc3RhbmNlIGlzIGluIGEgZGlmZmVyZW50IEFXUyBSZWdpb24sIHlvdSBtdXN0IHNwZWNpZnkgYSBLTVMga2V5IElELlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYFNvdXJjZURCSW5zdGFuY2VBdXRvbWF0ZWRCYWNrdXBzQXJuYGAgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gVGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UgYXV0b21hdGVkIGJhY2t1cCwgYW5kIGlmIHRoZSBhdXRvbWF0ZWQgYmFja3VwIGlzIGVuY3J5cHRlZCwgdGhlIHNwZWNpZmllZCBgYEttc0tleUlkYGAgcHJvcGVydHkgaXMgdXNlZC5cbiAqICBJZiB5b3UgY3JlYXRlIGFuIGVuY3J5cHRlZCByZWFkIHJlcGxpY2EgaW4gYSBkaWZmZXJlbnQgQVdTIFJlZ2lvbiwgdGhlbiB5b3UgbXVzdCBzcGVjaWZ5IGEgS01TIGtleSBmb3IgdGhlIGRlc3RpbmF0aW9uIEFXUyBSZWdpb24uIEtNUyBlbmNyeXB0aW9uIGtleXMgYXJlIHNwZWNpZmljIHRvIHRoZSByZWdpb24gdGhhdCB0aGV5J3JlIGNyZWF0ZWQgaW4sIGFuZCB5b3UgY2FuJ3QgdXNlIGVuY3J5cHRpb24ga2V5cyBmcm9tIG9uZSByZWdpb24gaW4gYW5vdGhlciByZWdpb24uXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgREJTbmFwc2hvdElkZW50aWZpZXJgYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgYGBTdG9yYWdlRW5jcnlwdGVkYGAgcHJvcGVydHkgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNuYXBzaG90LiBJZiB0aGUgREIgaW5zdGFuY2UgaXMgZW5jcnlwdGVkLCB0aGUgc3BlY2lmaWVkIGBgS21zS2V5SWRgYCBwcm9wZXJ0eSBpcyBhbHNvIGluaGVyaXRlZCBmcm9tIHRoZSBzbmFwc2hvdC5cbiAqICBJZiB5b3Ugc3BlY2lmeSBgYERCU2VjdXJpdHlHcm91cHNgYCwgQVdTIENsb3VkRm9ybWF0aW9uIGlnbm9yZXMgdGhpcyBwcm9wZXJ0eS4gVG8gc3BlY2lmeSBib3RoIGEgc2VjdXJpdHkgZ3JvdXAgYW5kIHRoaXMgcHJvcGVydHksIHlvdSBtdXN0IHVzZSBhIFZQQyBzZWN1cml0eSBncm91cC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQW1hem9uIFJEUyBhbmQgVlBDLCBzZWUgW1VzaW5nIEFtYXpvbiBSRFMgd2l0aCBBbWF6b24gVlBDXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9WUEMuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogICAqQW1hem9uIEF1cm9yYSogXG4gKiAgTm90IGFwcGxpY2FibGUuIFRoZSBLTVMga2V5IGlkZW50aWZpZXIgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqL1xuS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogTGljZW5zZSBtb2RlbCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBEQiBpbnN0YW5jZS5cbiAqICAgVmFsaWQgVmFsdWVzOlxuICogICArICBBdXJvcmEgTXlTUUwgLSBgYGdlbmVyYWwtcHVibGljLWxpY2Vuc2VgYFxuICogICArICBBdXJvcmEgUG9zdGdyZVNRTCAtIGBgcG9zdGdyZXNxbC1saWNlbnNlYGBcbiAqICAgKyAgUkRTIGZvciBEYjIgLSBgYGJyaW5nLXlvdXItb3duLWxpY2Vuc2VgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgUkRTIGZvciBEYjIgbGljZW5zaW5nLCBzZWUgW10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL2RiMi1saWNlbnNpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKlxuICogICArICBSRFMgZm9yIE1hcmlhREIgLSBgYGdlbmVyYWwtcHVibGljLWxpY2Vuc2VgYFxuICogICArICBSRFMgZm9yIE1pY3Jvc29mdCBTUUwgU2VydmVyIC0gYGBsaWNlbnNlLWluY2x1ZGVkYGBcbiAqICAgKyAgUkRTIGZvciBNeVNRTCAtIGBgZ2VuZXJhbC1wdWJsaWMtbGljZW5zZWBgXG4gKiAgICsgIFJEUyBmb3IgT3JhY2xlIC0gYGBicmluZy15b3VyLW93bi1saWNlbnNlYGAgb3IgYGBsaWNlbnNlLWluY2x1ZGVkYGBcbiAqICAgKyAgUkRTIGZvciBQb3N0Z3JlU1FMIC0gYGBwb3N0Z3Jlc3FsLWxpY2Vuc2VgYFxuICogICBcbiAqICAgSWYgeW91J3ZlIHNwZWNpZmllZCBgYERCU2VjdXJpdHlHcm91cHNgYCBhbmQgdGhlbiB5b3UgdXBkYXRlIHRoZSBsaWNlbnNlIG1vZGVsLCBBV1MgQ2xvdWRGb3JtYXRpb24gcmVwbGFjZXMgdGhlIHVuZGVybHlpbmcgREIgaW5zdGFuY2UuIFRoaXMgd2lsbCBpbmN1ciBzb21lIGludGVycnVwdGlvbnMgdG8gZGF0YWJhc2UgYXZhaWxhYmlsaXR5LlxuICovXG5MaWNlbnNlTW9kZWw/OiBzdHJpbmdcbi8qKlxuICogVGhlIG1hc3RlciB1c2VyIG5hbWUgZm9yIHRoZSBEQiBpbnN0YW5jZS5cbiAqICAgSWYgeW91IHNwZWNpZnkgdGhlIGBgU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXJgYCBvciBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gVGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBzb3VyY2UgREIgaW5zdGFuY2Ugb3Igc25hcHNob3QuXG4gKiAgV2hlbiBtaWdyYXRpbmcgYSBzZWxmLW1hbmFnZWQgRGIyIGRhdGFiYXNlLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIHRoZSBzYW1lIG1hc3RlciB1c2VybmFtZSBhcyB5b3VyIHNlbGYtbWFuYWdlZCBEYjIgaW5zdGFuY2UgbmFtZS5cbiAqICAgICpBbWF6b24gQXVyb3JhKiBcbiAqICBOb3QgYXBwbGljYWJsZS4gVGhlIG5hbWUgZm9yIHRoZSBtYXN0ZXIgdXNlciBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLiBcbiAqICAgKlJEUyBmb3IgRGIyKiBcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSAxIHRvIDE2IGxldHRlcnMgb3IgbnVtYmVycy5cbiAqICAgKyAgRmlyc3QgY2hhcmFjdGVyIG11c3QgYmUgYSBsZXR0ZXIuXG4gKiAgICsgIENhbid0IGJlIGEgcmVzZXJ2ZWQgd29yZCBmb3IgdGhlIGNob3NlbiBkYXRhYmFzZSBlbmdpbmUuXG4gKiAgIFxuICogICAqUkRTIGZvciBNYXJpYURCKiBcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSAxIHRvIDE2IGxldHRlcnMgb3IgbnVtYmVycy5cbiAqICAgKyAgQ2FuJ3QgYmUgYSByZXNlcnZlZCB3b3JkIGZvciB0aGUgY2hvc2VuIGRhdGFiYXNlIGVuZ2luZS5cbiAqICAgXG4gKiAgICpSRFMgZm9yIE1pY3Jvc29mdCBTUUwgU2VydmVyKiBcbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSAxIHRvIDEyOCBsZXR0ZXJzIG9yIG51bWJlcnMuXG4gKiAgICsgIEZpcnN0IGNoYXJhY3RlciBtdXN0IGJlIGEgbGV0dGVyLlxuICogICArICBDYW4ndCBiZSBhIHJlc2VydmVkIHdvcmQgZm9yIHRoZSBjaG9zZW4gZGF0YWJhc2UgZW5naW5lLlxuICogICBcbiAqICAgKlJEUyBmb3IgTXlTUUwqIFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIDEgdG8gMTYgbGV0dGVycyBvciBudW1iZXJzLlxuICogICArICBGaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxldHRlci5cbiAqICAgKyAgQ2FuJ3QgYmUgYSByZXNlcnZlZCB3b3JkIGZvciB0aGUgY2hvc2VuIGRhdGFiYXNlIGVuZ2luZS5cbiAqICAgXG4gKiAgICpSRFMgZm9yIE9yYWNsZSogXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgMSB0byAzMCBsZXR0ZXJzIG9yIG51bWJlcnMuXG4gKiAgICsgIEZpcnN0IGNoYXJhY3RlciBtdXN0IGJlIGEgbGV0dGVyLlxuICogICArICBDYW4ndCBiZSBhIHJlc2VydmVkIHdvcmQgZm9yIHRoZSBjaG9zZW4gZGF0YWJhc2UgZW5naW5lLlxuICogICBcbiAqICAgKlJEUyBmb3IgUG9zdGdyZVNRTCogXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgMSB0byA2MyBsZXR0ZXJzIG9yIG51bWJlcnMuXG4gKiAgICsgIEZpcnN0IGNoYXJhY3RlciBtdXN0IGJlIGEgbGV0dGVyLlxuICogICArICBDYW4ndCBiZSBhIHJlc2VydmVkIHdvcmQgZm9yIHRoZSBjaG9zZW4gZGF0YWJhc2UgZW5naW5lLlxuICovXG5NYXN0ZXJVc2VybmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcGFzc3dvcmQgZm9yIHRoZSBtYXN0ZXIgdXNlci4gVGhlIHBhc3N3b3JkIGNhbiBpbmNsdWRlIGFueSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVyIGV4Y2VwdCBcIi9cIiwgXCJcIlwiLCBvciBcIkBcIi5cbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBUaGUgcGFzc3dvcmQgZm9yIHRoZSBtYXN0ZXIgdXNlciBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLlxuICogICAqUkRTIGZvciBEYjIqIFxuICogIE11c3QgY29udGFpbiBmcm9tIDggdG8gMjU1IGNoYXJhY3RlcnMuXG4gKiAgICpSRFMgZm9yIE1hcmlhREIqIFxuICogIENvbnN0cmFpbnRzOiBNdXN0IGNvbnRhaW4gZnJvbSA4IHRvIDQxIGNoYXJhY3RlcnMuXG4gKiAgICpSRFMgZm9yIE1pY3Jvc29mdCBTUUwgU2VydmVyKiBcbiAqICBDb25zdHJhaW50czogTXVzdCBjb250YWluIGZyb20gOCB0byAxMjggY2hhcmFjdGVycy5cbiAqICAgKlJEUyBmb3IgTXlTUUwqIFxuICogIENvbnN0cmFpbnRzOiBNdXN0IGNvbnRhaW4gZnJvbSA4IHRvIDQxIGNoYXJhY3RlcnMuXG4gKiAgICpSRFMgZm9yIE9yYWNsZSogXG4gKiAgQ29uc3RyYWludHM6IE11c3QgY29udGFpbiBmcm9tIDggdG8gMzAgY2hhcmFjdGVycy5cbiAqICAgKlJEUyBmb3IgUG9zdGdyZVNRTCogXG4gKiAgQ29uc3RyYWludHM6IE11c3QgY29udGFpbiBmcm9tIDggdG8gMTI4IGNoYXJhY3RlcnMuXG4gKi9cbk1hc3RlclVzZXJQYXNzd29yZD86IHN0cmluZ1xuTWFzdGVyVXNlclNlY3JldD86IE1hc3RlclVzZXJTZWNyZXRcbi8qKlxuICogVGhlIHVwcGVyIGxpbWl0IGluIGdpYmlieXRlcyAoR2lCKSB0byB3aGljaCBBbWF6b24gUkRTIGNhbiBhdXRvbWF0aWNhbGx5IHNjYWxlIHRoZSBzdG9yYWdlIG9mIHRoZSBEQiBpbnN0YW5jZS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHNldHRpbmcsIGluY2x1ZGluZyBsaW1pdGF0aW9ucyB0aGF0IGFwcGx5IHRvIGl0LCBzZWUgW01hbmFnaW5nIGNhcGFjaXR5IGF1dG9tYXRpY2FsbHkgd2l0aCBBbWF6b24gUkRTIHN0b3JhZ2UgYXV0b3NjYWxpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1BJT1BTLlN0b3JhZ2VUeXBlcy5odG1sI1VTRVJfUElPUFMuQXV0b3NjYWxpbmcpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byB0aGUgZm9sbG93aW5nIERCIGluc3RhbmNlczpcbiAqICAgKyAgQW1hem9uIEF1cm9yYSAoU3RvcmFnZSBpcyBtYW5hZ2VkIGJ5IHRoZSBEQiBjbHVzdGVyLilcbiAqICAgKyAgUkRTIEN1c3RvbVxuICovXG5NYXhBbGxvY2F0ZWRTdG9yYWdlPzogbnVtYmVyXG4vKipcbiAqIFRoZSBpbnRlcnZhbCwgaW4gc2Vjb25kcywgYmV0d2VlbiBwb2ludHMgd2hlbiBFbmhhbmNlZCBNb25pdG9yaW5nIG1ldHJpY3MgYXJlIGNvbGxlY3RlZCBmb3IgdGhlIERCIGluc3RhbmNlLiBUbyBkaXNhYmxlIGNvbGxlY3Rpb24gb2YgRW5oYW5jZWQgTW9uaXRvcmluZyBtZXRyaWNzLCBzcGVjaWZ5IGBgMGBgLlxuICogIElmIGBgTW9uaXRvcmluZ1JvbGVBcm5gYCBpcyBzcGVjaWZpZWQsIHRoZW4geW91IG11c3Qgc2V0IGBgTW9uaXRvcmluZ0ludGVydmFsYGAgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIGBgMGBgLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIFJEUyBDdXN0b20gREIgaW5zdGFuY2VzLlxuICogIFZhbGlkIFZhbHVlczogYGAwIHwgMSB8IDUgfCAxMCB8IDE1IHwgMzAgfCA2MGBgXG4gKiAgRGVmYXVsdDogYGAwYGBcbiAqL1xuTW9uaXRvcmluZ0ludGVydmFsPzogbnVtYmVyXG4vKipcbiAqIFRoZSBBUk4gZm9yIHRoZSBJQU0gcm9sZSB0aGF0IHBlcm1pdHMgUkRTIHRvIHNlbmQgZW5oYW5jZWQgbW9uaXRvcmluZyBtZXRyaWNzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3MuIEZvciBleGFtcGxlLCBgYGFybjphd3M6aWFtOjEyMzQ1Njc4OTAxMjpyb2xlL2VtYWNjZXNzYGAuIEZvciBpbmZvcm1hdGlvbiBvbiBjcmVhdGluZyBhIG1vbml0b3Jpbmcgcm9sZSwgc2VlIFtTZXR0aW5nIFVwIGFuZCBFbmFibGluZyBFbmhhbmNlZCBNb25pdG9yaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9Nb25pdG9yaW5nLk9TLmh0bWwjVVNFUl9Nb25pdG9yaW5nLk9TLkVuYWJsaW5nKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgSWYgYGBNb25pdG9yaW5nSW50ZXJ2YWxgYCBpcyBzZXQgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIGBgMGBgLCB0aGVuIHlvdSBtdXN0IHN1cHBseSBhIGBgTW9uaXRvcmluZ1JvbGVBcm5gYCB2YWx1ZS5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqL1xuTW9uaXRvcmluZ1JvbGVBcm4/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGlzIGEgTXVsdGktQVogZGVwbG95bWVudC4gWW91IGNhbid0IHNldCB0aGUgYGBBdmFpbGFiaWxpdHlab25lYGAgcGFyYW1ldGVyIGlmIHRoZSBEQiBpbnN0YW5jZSBpcyBhIE11bHRpLUFaIGRlcGxveW1lbnQuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGZvbGxvd2luZyBEQiBpbnN0YW5jZXM6XG4gKiAgICsgIEFtYXpvbiBBdXJvcmEgKERCIGluc3RhbmNlIEF2YWlsYWJpbGl0eSBab25lcyAoQVpzKSBhcmUgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci4pXG4gKiAgICsgIFJEUyBDdXN0b21cbiAqL1xuTXVsdGlBWj86IGJvb2xlYW5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIE5DSEFSIGNoYXJhY3RlciBzZXQgZm9yIHRoZSBPcmFjbGUgREIgaW5zdGFuY2UuXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZXMuXG4gKi9cbk5jaGFyQ2hhcmFjdGVyU2V0TmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmV0d29yayB0eXBlIG9mIHRoZSBEQiBpbnN0YW5jZS5cbiAqICBWYWxpZCB2YWx1ZXM6XG4gKiAgICsgICBgYElQVjRgYCBcbiAqICAgKyAgIGBgRFVBTGBgIFxuICogICBcbiAqICBUaGUgbmV0d29yayB0eXBlIGlzIGRldGVybWluZWQgYnkgdGhlIGBgREJTdWJuZXRHcm91cGBgIHNwZWNpZmllZCBmb3IgdGhlIERCIGluc3RhbmNlLiBBIGBgREJTdWJuZXRHcm91cGBgIGNhbiBzdXBwb3J0IG9ubHkgdGhlIElQdjQgcHJvdG9jb2wgb3IgdGhlIElQdjQgYW5kIElQdjYgcHJvdG9jb2xzIChgYERVQUxgYCkuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbV29ya2luZyB3aXRoIGEgREIgaW5zdGFuY2UgaW4gYSBWUENdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1ZQQy5Xb3JraW5nV2l0aFJEU0luc3RhbmNlaW5hVlBDLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLipcbiAqL1xuTmV0d29ya1R5cGU/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIERCIGluc3RhbmNlIHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBvcHRpb24gZ3JvdXAuXG4gKiAgUGVybWFuZW50IG9wdGlvbnMsIHN1Y2ggYXMgdGhlIFRERSBvcHRpb24gZm9yIE9yYWNsZSBBZHZhbmNlZCBTZWN1cml0eSBUREUsIGNhbid0IGJlIHJlbW92ZWQgZnJvbSBhbiBvcHRpb24gZ3JvdXAuIEFsc28sIHRoYXQgb3B0aW9uIGdyb3VwIGNhbid0IGJlIHJlbW92ZWQgZnJvbSBhIERCIGluc3RhbmNlIG9uY2UgaXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgREIgaW5zdGFuY2UuXG4gKi9cbk9wdGlvbkdyb3VwTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVdTIEtNUyBrZXkgaWRlbnRpZmllciBmb3IgZW5jcnlwdGlvbiBvZiBQZXJmb3JtYW5jZSBJbnNpZ2h0cyBkYXRhLlxuICogIFRoZSBLTVMga2V5IGlkZW50aWZpZXIgaXMgdGhlIGtleSBBUk4sIGtleSBJRCwgYWxpYXMgQVJOLCBvciBhbGlhcyBuYW1lIGZvciB0aGUgS01TIGtleS5cbiAqICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBQZXJmb3JtYW5jZUluc2lnaHRzS01TS2V5SWRgYCwgdGhlbiBBbWF6b24gUkRTIHVzZXMgeW91ciBkZWZhdWx0IEtNUyBrZXkuIFRoZXJlIGlzIGEgZGVmYXVsdCBLTVMga2V5IGZvciB5b3VyIEFXUyBhY2NvdW50LiBZb3VyIEFXUyBhY2NvdW50IGhhcyBhIGRpZmZlcmVudCBkZWZhdWx0IEtNUyBrZXkgZm9yIGVhY2ggQVdTIFJlZ2lvbi5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgZW5hYmxpbmcgUGVyZm9ybWFuY2UgSW5zaWdodHMsIHNlZSBbRW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmRzLWRhdGFiYXNlLWluc3RhbmNlLmh0bWwjY2ZuLXJkcy1kYmluc3RhbmNlLWVuYWJsZXBlcmZvcm1hbmNlaW5zaWdodHMpLlxuICovXG5QZXJmb3JtYW5jZUluc2lnaHRzS01TS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIG51bWJlciBvZiBkYXlzIHRvIHJldGFpbiBQZXJmb3JtYW5jZSBJbnNpZ2h0cyBkYXRhLiBXaGVuIGNyZWF0aW5nIGEgREIgaW5zdGFuY2Ugd2l0aG91dCBlbmFibGluZyBQZXJmb3JtYW5jZSBJbnNpZ2h0cywgeW91IGNhbid0IHNwZWNpZnkgdGhlIHBhcmFtZXRlciBgYFBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb25QZXJpb2RgYC5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqICBWYWxpZCBWYWx1ZXM6XG4gKiAgICsgICBgYDdgYCBcbiAqICAgKyAgKm1vbnRoKiAqIDMxLCB3aGVyZSAqbW9udGgqIGlzIGEgbnVtYmVyIG9mIG1vbnRocyBmcm9tIDEtMjMuIEV4YW1wbGVzOiBgYDkzYGAgKDMgbW9udGhzICogMzEpLCBgYDM0MWBgICgxMSBtb250aHMgKiAzMSksIGBgNTg5YGAgKDE5IG1vbnRocyAqIDMxKVxuICogICArICAgYGA3MzFgYCBcbiAqICAgXG4gKiAgRGVmYXVsdDogYGA3YGAgZGF5c1xuICogIElmIHlvdSBzcGVjaWZ5IGEgcmV0ZW50aW9uIHBlcmlvZCB0aGF0IGlzbid0IHZhbGlkLCBzdWNoIGFzIGBgOTRgYCwgQW1hem9uIFJEUyByZXR1cm5zIGFuIGVycm9yLlxuICovXG5QZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uUGVyaW9kPzogbnVtYmVyXG4vKipcbiAqIFRoZSBwb3J0IG51bWJlciBvbiB3aGljaCB0aGUgZGF0YWJhc2UgYWNjZXB0cyBjb25uZWN0aW9ucy5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBBdXJvcmEgREIgaW5zdGFuY2VzLiBUaGUgcG9ydCBudW1iZXIgaXMgbWFuYWdlZCBieSB0aGUgY2x1c3Rlci5cbiAqICBWYWxpZCBWYWx1ZXM6IGBgMTE1MC02NTUzNWBgXG4gKiAgRGVmYXVsdDpcbiAqICAgKyAgUkRTIGZvciBEYjIgLSBgYDUwMDAwYGBcbiAqICAgKyAgUkRTIGZvciBNYXJpYURCIC0gYGAzMzA2YGBcbiAqICAgKyAgUkRTIGZvciBNaWNyb3NvZnQgU1FMIFNlcnZlciAtIGBgMTQzM2BgXG4gKiAgICsgIFJEUyBmb3IgTXlTUUwgLSBgYDMzMDZgYFxuICogICArICBSRFMgZm9yIE9yYWNsZSAtIGBgMTUyMWBgXG4gKiAgICsgIFJEUyBmb3IgUG9zdGdyZVNRTCAtIGBgNTQzMmBgXG4gKiAgIFxuICogIENvbnN0cmFpbnRzOlxuICogICArICBGb3IgUkRTIGZvciBNaWNyb3NvZnQgU1FMIFNlcnZlciwgdGhlIHZhbHVlIGNhbid0IGJlIGBgMTIzNGBgLCBgYDE0MzRgYCwgYGAzMjYwYGAsIGBgMzM0M2BgLCBgYDMzODlgYCwgYGA0NzAwMWBgLCBvciBgYDQ5MTUyLTQ5MTU2YGAuXG4gKi9cblBvcnQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIGRhaWx5IHRpbWUgcmFuZ2UgZHVyaW5nIHdoaWNoIGF1dG9tYXRlZCBiYWNrdXBzIGFyZSBjcmVhdGVkIGlmIGF1dG9tYXRlZCBiYWNrdXBzIGFyZSBlbmFibGVkLCB1c2luZyB0aGUgYGBCYWNrdXBSZXRlbnRpb25QZXJpb2RgYCBwYXJhbWV0ZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0JhY2t1cCBXaW5kb3ddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1dvcmtpbmdXaXRoQXV0b21hdGVkQmFja3Vwcy5odG1sI1VTRVJfV29ya2luZ1dpdGhBdXRvbWF0ZWRCYWNrdXBzLkJhY2t1cFdpbmRvdykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBNdXN0IGJlIGluIHRoZSBmb3JtYXQgYGBoaDI0Om1pLWhoMjQ6bWlgYC5cbiAqICAgKyAgTXVzdCBiZSBpbiBVbml2ZXJzYWwgQ29vcmRpbmF0ZWQgVGltZSAoVVRDKS5cbiAqICAgKyAgTXVzdCBub3QgY29uZmxpY3Qgd2l0aCB0aGUgcHJlZmVycmVkIG1haW50ZW5hbmNlIHdpbmRvdy5cbiAqICAgKyAgTXVzdCBiZSBhdCBsZWFzdCAzMCBtaW51dGVzLlxuICogICBcbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBUaGUgZGFpbHkgdGltZSByYW5nZSBmb3IgY3JlYXRpbmcgYXV0b21hdGVkIGJhY2t1cHMgaXMgbWFuYWdlZCBieSB0aGUgREIgY2x1c3Rlci5cbiAqL1xuUHJlZmVycmVkQmFja3VwV2luZG93Pzogc3RyaW5nXG4vKipcbiAqIFRoZSB3ZWVrbHkgdGltZSByYW5nZSBkdXJpbmcgd2hpY2ggc3lzdGVtIG1haW50ZW5hbmNlIGNhbiBvY2N1ciwgaW4gVW5pdmVyc2FsIENvb3JkaW5hdGVkIFRpbWUgKFVUQykuXG4gKiAgRm9ybWF0OiBgYGRkZDpoaDI0Om1pLWRkZDpoaDI0Om1pYGBcbiAqICBUaGUgZGVmYXVsdCBpcyBhIDMwLW1pbnV0ZSB3aW5kb3cgc2VsZWN0ZWQgYXQgcmFuZG9tIGZyb20gYW4gOC1ob3VyIGJsb2NrIG9mIHRpbWUgZm9yIGVhY2ggQVdTIFJlZ2lvbiwgb2NjdXJyaW5nIG9uIGEgcmFuZG9tIGRheSBvZiB0aGUgd2Vlay4gVG8gc2VlIHRoZSB0aW1lIGJsb2NrcyBhdmFpbGFibGUsIHNlZSBbTWFpbnRhaW5pbmcgYSBEQiBpbnN0YW5jZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvVXNlckd1aWRlL1VTRVJfVXBncmFkZURCSW5zdGFuY2UuTWFpbnRlbmFuY2UuaHRtbCNBZGp1c3RpbmdUaGVNYWludGVuYW5jZVdpbmRvdykgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUuKlxuICogICBUaGlzIHByb3BlcnR5IGFwcGxpZXMgd2hlbiBBV1MgQ2xvdWRGb3JtYXRpb24gaW5pdGlhbGx5IGNyZWF0ZXMgdGhlIERCIGluc3RhbmNlLiBJZiB5b3UgdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiB0byB1cGRhdGUgdGhlIERCIGluc3RhbmNlLCB0aG9zZSB1cGRhdGVzIGFyZSBhcHBsaWVkIGltbWVkaWF0ZWx5LlxuICogICBDb25zdHJhaW50czogTWluaW11bSAzMC1taW51dGUgd2luZG93LlxuICovXG5QcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIENQVSBjb3JlcyBhbmQgdGhlIG51bWJlciBvZiB0aHJlYWRzIHBlciBjb3JlIGZvciB0aGUgREIgaW5zdGFuY2UgY2xhc3Mgb2YgdGhlIERCIGluc3RhbmNlLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIEFtYXpvbiBBdXJvcmEgb3IgUkRTIEN1c3RvbSBEQiBpbnN0YW5jZXMuXG4gKi9cblByb2Nlc3NvckZlYXR1cmVzPzogUHJvY2Vzc29yRmVhdHVyZVtdXG4vKipcbiAqIFRoZSBvcmRlciBvZiBwcmlvcml0eSBpbiB3aGljaCBhbiBBdXJvcmEgUmVwbGljYSBpcyBwcm9tb3RlZCB0byB0aGUgcHJpbWFyeSBpbnN0YW5jZSBhZnRlciBhIGZhaWx1cmUgb2YgdGhlIGV4aXN0aW5nIHByaW1hcnkgaW5zdGFuY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0ZhdWx0IFRvbGVyYW5jZSBmb3IgYW4gQXVyb3JhIERCIENsdXN0ZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9Db25jZXB0cy5BdXJvcmFIaWdoQXZhaWxhYmlsaXR5Lmh0bWwjQXVyb3JhLk1hbmFnaW5nLkZhdWx0VG9sZXJhbmNlKSBpbiB0aGUgKkFtYXpvbiBBdXJvcmEgVXNlciBHdWlkZSouXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbSBEQiBpbnN0YW5jZXMuXG4gKiAgRGVmYXVsdDogYGAxYGBcbiAqICBWYWxpZCBWYWx1ZXM6IGBgMCAtIDE1YGBcbiAqL1xuUHJvbW90aW9uVGllcj86IG51bWJlclxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgREIgaW5zdGFuY2UgaXMgYW4gaW50ZXJuZXQtZmFjaW5nIGluc3RhbmNlLiBJZiB5b3Ugc3BlY2lmeSB0cnVlLCBBV1MgQ2xvdWRGb3JtYXRpb24gY3JlYXRlcyBhbiBpbnN0YW5jZSB3aXRoIGEgcHVibGljbHkgcmVzb2x2YWJsZSBETlMgbmFtZSwgd2hpY2ggcmVzb2x2ZXMgdG8gYSBwdWJsaWMgSVAgYWRkcmVzcy4gSWYgeW91IHNwZWNpZnkgZmFsc2UsIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIGFuIGludGVybmFsIGluc3RhbmNlIHdpdGggYSBETlMgbmFtZSB0aGF0IHJlc29sdmVzIHRvIGEgcHJpdmF0ZSBJUCBhZGRyZXNzLiBcbiAqICBUaGUgZGVmYXVsdCBiZWhhdmlvciB2YWx1ZSBkZXBlbmRzIG9uIHlvdXIgVlBDIHNldHVwIGFuZCB0aGUgZGF0YWJhc2Ugc3VibmV0IGdyb3VwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBgYFB1YmxpY2x5QWNjZXNzaWJsZWBgIHBhcmFtZXRlciBpbiB0aGUgW0NyZWF0ZURCSW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlREJJbnN0YW5jZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgQVBJIFJlZmVyZW5jZSouXG4gKi9cblB1YmxpY2x5QWNjZXNzaWJsZT86IGJvb2xlYW5cbi8qKlxuICogVGhlIG9wZW4gbW9kZSBvZiBhbiBPcmFjbGUgcmVhZCByZXBsaWNhLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXb3JraW5nIHdpdGggT3JhY2xlIFJlYWQgUmVwbGljYXMgZm9yIEFtYXpvbiBSRFNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9vcmFjbGUtcmVhZC1yZXBsaWNhcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgVGhpcyBzZXR0aW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIFJEUyBmb3IgT3JhY2xlLlxuICogIERlZmF1bHQ6IGBgb3Blbi1yZWFkLW9ubHlgYFxuICogIFZhbGlkIFZhbHVlczogYGBvcGVuLXJlYWQtb25seWBgIG9yIGBgbW91bnRlZGBgXG4gKi9cblJlcGxpY2FNb2RlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBkYXRlIGFuZCB0aW1lIHRvIHJlc3RvcmUgZnJvbS4gVGhpcyBwYXJhbWV0ZXIgYXBwbGllcyB0byBwb2ludC1pbi10aW1lIHJlY292ZXJ5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXN0b3JpbmcgYSBEQiBpbnN0YW5jZSB0byBhIHNwZWNpZmllZCB0aW1lXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9QSVQuaHRtbCkgaW4gdGhlIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBDb25zdHJhaW50czpcbiAqICAgKyAgTXVzdCBiZSBhIHRpbWUgaW4gVW5pdmVyc2FsIENvb3JkaW5hdGVkIFRpbWUgKFVUQykgZm9ybWF0LlxuICogICArICBNdXN0IGJlIGJlZm9yZSB0aGUgbGF0ZXN0IHJlc3RvcmFibGUgdGltZSBmb3IgdGhlIERCIGluc3RhbmNlLlxuICogICArICBDYW4ndCBiZSBzcGVjaWZpZWQgaWYgdGhlIGBgVXNlTGF0ZXN0UmVzdG9yYWJsZVRpbWVgYCBwYXJhbWV0ZXIgaXMgZW5hYmxlZC5cbiAqICAgXG4gKiAgRXhhbXBsZTogYGAyMDA5LTA5LTA3VDIzOjQ1OjAwWmBgXG4gKi9cblJlc3RvcmVUaW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBNdWx0aS1BWiBEQiBjbHVzdGVyIHRoYXQgd2lsbCBhY3QgYXMgdGhlIHNvdXJjZSBmb3IgdGhlIHJlYWQgcmVwbGljYS4gRWFjaCBEQiBjbHVzdGVyIGNhbiBoYXZlIHVwIHRvIDE1IHJlYWQgcmVwbGljYXMuXG4gKiAgQ29uc3RyYWludHM6XG4gKiAgICsgIE11c3QgYmUgdGhlIGlkZW50aWZpZXIgb2YgYW4gZXhpc3RpbmcgTXVsdGktQVogREIgY2x1c3Rlci5cbiAqICAgKyAgQ2FuJ3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgcGFyYW1ldGVyIGlzIGFsc28gc3BlY2lmaWVkLlxuICogICArICBUaGUgc3BlY2lmaWVkIERCIGNsdXN0ZXIgbXVzdCBoYXZlIGF1dG9tYXRpYyBiYWNrdXBzIGVuYWJsZWQsIHRoYXQgaXMsIGl0cyBiYWNrdXAgcmV0ZW50aW9uIHBlcmlvZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLlxuICogICArICBUaGUgc291cmNlIERCIGNsdXN0ZXIgbXVzdCBiZSBpbiB0aGUgc2FtZSBBV1MtUmVnaW9uIGFzIHRoZSByZWFkIHJlcGxpY2EuIENyb3NzLVJlZ2lvbiByZXBsaWNhdGlvbiBpc24ndCBzdXBwb3J0ZWQuXG4gKi9cblNvdXJjZURCQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlIHJlc291cmNlIElEIG9mIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UgZnJvbSB3aGljaCB0byByZXN0b3JlLlxuICovXG5Tb3VyY2VEYmlSZXNvdXJjZUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcmVwbGljYXRlZCBhdXRvbWF0ZWQgYmFja3VwcyBmcm9tIHdoaWNoIHRvIHJlc3RvcmUsIGZvciBleGFtcGxlLCBgYGFybjphd3M6cmRzOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6YXV0by1iYWNrdXA6YWItTDJJSkNFWEpQN1hRN0hPSjRTSUVYQU1QTEVgYC5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tLlxuICovXG5Tb3VyY2VEQkluc3RhbmNlQXV0b21hdGVkQmFja3Vwc0Fybj86IHN0cmluZ1xuLyoqXG4gKiBJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSByZWFkIHJlcGxpY2EgREIgaW5zdGFuY2UsIHNwZWNpZnkgdGhlIElEIG9mIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UuIEVhY2ggREIgaW5zdGFuY2UgY2FuIGhhdmUgYSBsaW1pdGVkIG51bWJlciBvZiByZWFkIHJlcGxpY2FzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXb3JraW5nIHdpdGggUmVhZCBSZXBsaWNhc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvVVNFUl9SZWFkUmVwbC5odG1sKSBpbiB0aGUgKkFtYXpvbiBSRFMgVXNlciBHdWlkZSouXG4gKiAgRm9yIGluZm9ybWF0aW9uIGFib3V0IGNvbnN0cmFpbnRzIHRoYXQgYXBwbHkgdG8gREIgaW5zdGFuY2UgaWRlbnRpZmllcnMsIHNlZSBbTmFtaW5nIGNvbnN0cmFpbnRzIGluIEFtYXpvbiBSRFNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX0xpbWl0cy5odG1sI1JEU19MaW1pdHMuQ29uc3RyYWludHMpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlKi5cbiAqICBUaGUgYGBTb3VyY2VEQkluc3RhbmNlSWRlbnRpZmllcmBgIHByb3BlcnR5IGRldGVybWluZXMgd2hldGhlciBhIERCIGluc3RhbmNlIGlzIGEgcmVhZCByZXBsaWNhLiBJZiB5b3UgcmVtb3ZlIHRoZSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgcHJvcGVydHkgZnJvbSB5b3VyIHRlbXBsYXRlIGFuZCB0aGVuIHVwZGF0ZSB5b3VyIHN0YWNrLCBBV1MgQ2xvdWRGb3JtYXRpb24gcHJvbW90ZXMgdGhlIHJlYWQgcmVwbGljYSB0byBhIHN0YW5kYWxvbmUgREIgaW5zdGFuY2UuXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgVXNlTGF0ZXN0UmVzdG9yYWJsZVRpbWVgYCBvciBgYFJlc3RvcmVUaW1lYGAgcHJvcGVydGllcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBgYFNvdXJjZURCSW5zdGFuY2VJZGVudGlmaWVyYGAgcHJvcGVydHksIFJEUyByZXN0b3JlcyB0aGUgREIgaW5zdGFuY2UgdG8gdGhlIHJlcXVlc3RlZCBwb2ludCBpbiB0aW1lLCB0aGVyZWJ5IGNyZWF0aW5nIGEgbmV3IERCIGluc3RhbmNlLlxuICogICAgKyAgSWYgeW91IHNwZWNpZnkgYSBzb3VyY2UgREIgaW5zdGFuY2UgdGhhdCB1c2VzIFZQQyBzZWN1cml0eSBncm91cHMsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBzcGVjaWZ5IHRoZSBgYFZQQ1NlY3VyaXR5R3JvdXBzYGAgcHJvcGVydHkuIElmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBwcm9wZXJ0eSwgdGhlIHJlYWQgcmVwbGljYSBpbmhlcml0cyB0aGUgdmFsdWUgb2YgdGhlIGBgVlBDU2VjdXJpdHlHcm91cHNgYCBwcm9wZXJ0eSBmcm9tIHRoZSBzb3VyY2UgREIgd2hlbiB5b3UgY3JlYXRlIHRoZSByZXBsaWNhLiBIb3dldmVyLCBpZiB5b3UgdXBkYXRlIHRoZSBzdGFjaywgQVdTIENsb3VkRm9ybWF0aW9uIHJldmVydHMgdGhlIHJlcGxpY2EncyBgYFZQQ1NlY3VyaXR5R3JvdXBzYGAgcHJvcGVydHkgdG8gdGhlIGRlZmF1bHQgdmFsdWUgYmVjYXVzZSBpdCdzIG5vdCBkZWZpbmVkIGluIHRoZSBzdGFjaydzIHRlbXBsYXRlLiBUaGlzIGNoYW5nZSBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGlzc3Vlcy5cbiAqICAgKyAgUmVhZCByZXBsaWNhcyBkb24ndCBzdXBwb3J0IGRlbGV0aW9uIHBvbGljaWVzLiBBV1MgQ2xvdWRGb3JtYXRpb24gaWdub3JlcyBhbnkgZGVsZXRpb24gcG9saWN5IHRoYXQncyBhc3NvY2lhdGVkIHdpdGggYSByZWFkIHJlcGxpY2EuXG4gKiAgICsgIElmIHlvdSBzcGVjaWZ5IGBgU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXJgYCwgZG9uJ3Qgc3BlY2lmeSB0aGUgYGBEQlNuYXBzaG90SWRlbnRpZmllcmBgIHByb3BlcnR5LiBZb3UgY2FuJ3QgY3JlYXRlIGEgcmVhZCByZXBsaWNhIGZyb20gYSBzbmFwc2hvdC5cbiAqICAgKyAgRG9uJ3Qgc2V0IHRoZSBgYEJhY2t1cFJldGVudGlvblBlcmlvZGBgLCBgYERCTmFtZWBgLCBgYE1hc3RlclVzZXJuYW1lYGAsIGBgTWFzdGVyVXNlclBhc3N3b3JkYGAsIGFuZCBgYFByZWZlcnJlZEJhY2t1cFdpbmRvd2BgIHByb3BlcnRpZXMuIFRoZSBkYXRhYmFzZSBhdHRyaWJ1dGVzIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUgc291cmNlIERCIGluc3RhbmNlLCBhbmQgYmFja3VwcyBhcmUgZGlzYWJsZWQgZm9yIHJlYWQgcmVwbGljYXMuXG4gKiAgICsgIElmIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UgaXMgaW4gYSBkaWZmZXJlbnQgcmVnaW9uIHRoYW4gdGhlIHJlYWQgcmVwbGljYSwgc3BlY2lmeSB0aGUgc291cmNlIHJlZ2lvbiBpbiBgYFNvdXJjZVJlZ2lvbmBgLCBhbmQgc3BlY2lmeSBhbiBBUk4gZm9yIGEgdmFsaWQgREIgaW5zdGFuY2UgaW4gYGBTb3VyY2VEQkluc3RhbmNlSWRlbnRpZmllcmBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDb25zdHJ1Y3RpbmcgYSBBbWF6b24gUkRTIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvVVNFUl9UYWdnaW5nLmh0bWwjVVNFUl9UYWdnaW5nLkFSTikgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogICArICBGb3IgREIgaW5zdGFuY2VzIGluIEFtYXpvbiBBdXJvcmEgY2x1c3RlcnMsIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gQW1hem9uIFJEUyBhdXRvbWF0aWNhbGx5IGFzc2lnbnMgd3JpdGVyIGFuZCByZWFkZXIgREIgaW5zdGFuY2VzLlxuICovXG5Tb3VyY2VEQkluc3RhbmNlSWRlbnRpZmllcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIHJlZ2lvbiB0aGF0IGNvbnRhaW5zIHRoZSBzb3VyY2UgREIgaW5zdGFuY2UgZm9yIHRoZSByZWFkIHJlcGxpY2EuXG4gKi9cblNvdXJjZVJlZ2lvbj86IHN0cmluZ1xuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGlzIGVuY3J5cHRlZC4gQnkgZGVmYXVsdCwgaXQgaXNuJ3QgZW5jcnlwdGVkLlxuICogIElmIHlvdSBzcGVjaWZ5IHRoZSBgYEttc0tleUlkYGAgcHJvcGVydHksIHRoZW4geW91IG11c3QgZW5hYmxlIGVuY3J5cHRpb24uXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgU291cmNlREJJbnN0YW5jZUlkZW50aWZpZXJgYCBvciBgYFNvdXJjZURiaVJlc291cmNlSWRgYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNvdXJjZSBEQiBpbnN0YW5jZSwgYW5kIGlmIHRoZSBEQiBpbnN0YW5jZSBpcyBlbmNyeXB0ZWQsIHRoZSBzcGVjaWZpZWQgYGBLbXNLZXlJZGBgIHByb3BlcnR5IGlzIHVzZWQuXG4gKiAgSWYgeW91IHNwZWNpZnkgdGhlIGBgU291cmNlREJJbnN0YW5jZUF1dG9tYXRlZEJhY2t1cHNBcm5gYCBwcm9wZXJ0eSwgZG9uJ3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBUaGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHNvdXJjZSBEQiBpbnN0YW5jZSBhdXRvbWF0ZWQgYmFja3VwLiBcbiAqICBJZiB5b3Ugc3BlY2lmeSBgYERCU25hcHNob3RJZGVudGlmaWVyYGAgcHJvcGVydHksIGRvbid0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gVGhlIHZhbHVlIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBzbmFwc2hvdC5cbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBUaGUgZW5jcnlwdGlvbiBmb3IgREIgaW5zdGFuY2VzIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKi9cblN0b3JhZ2VFbmNyeXB0ZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSBzdG9yYWdlIHR5cGUgdG8gYXNzb2NpYXRlIHdpdGggdGhlIERCIGluc3RhbmNlLlxuICogIElmIHlvdSBzcGVjaWZ5IGBgaW8xYGAsIGBgaW8yYGAsIG9yIGBgZ3AzYGAsIHlvdSBtdXN0IGFsc28gaW5jbHVkZSBhIHZhbHVlIGZvciB0aGUgYGBJb3BzYGAgcGFyYW1ldGVyLlxuICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IGFwcGx5IHRvIEFtYXpvbiBBdXJvcmEgREIgaW5zdGFuY2VzLiBTdG9yYWdlIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuXG4gKiAgVmFsaWQgVmFsdWVzOiBgYGdwMiB8IGdwMyB8IGlvMSB8IGlvMiB8IHN0YW5kYXJkYGBcbiAqICBEZWZhdWx0OiBgYGlvMWBgLCBpZiB0aGUgYGBJb3BzYGAgcGFyYW1ldGVyIGlzIHNwZWNpZmllZC4gT3RoZXJ3aXNlLCBgYGdwM2BgLlxuICovXG5TdG9yYWdlVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHN0b3JhZ2UgdGhyb3VnaHB1dCB2YWx1ZSwgaW4gbWViaWJ5dGUgcGVyIHNlY29uZCAoTWlCcHMpLCBmb3IgdGhlIERCIGluc3RhbmNlLiBUaGlzIHNldHRpbmcgYXBwbGllcyBvbmx5IHRvIHRoZSBgYGdwM2BgIHN0b3JhZ2UgdHlwZS4gXG4gKiAgVGhpcyBzZXR0aW5nIGRvZXNuJ3QgYXBwbHkgdG8gUkRTIEN1c3RvbSBvciBBbWF6b24gQXVyb3JhLlxuICovXG5TdG9yYWdlVGhyb3VnaHB1dD86IG51bWJlclxuLyoqXG4gKiBUYWdzIHRvIGFzc2lnbiB0byB0aGUgREIgaW5zdGFuY2UuXG4gKi9cblRhZ3M/OiBUYWdbXVxuVGRlQ3JlZGVudGlhbEFybj86IHN0cmluZ1xuVGRlQ3JlZGVudGlhbFBhc3N3b3JkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0aW1lIHpvbmUgb2YgdGhlIERCIGluc3RhbmNlLiBUaGUgdGltZSB6b25lIHBhcmFtZXRlciBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIG9ubHkgYnkgW1JEUyBmb3IgRGIyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvZGIyLXRpbWUtem9uZSkgYW5kIFtSRFMgZm9yIFNRTCBTZXJ2ZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX1NRTFNlcnZlci5odG1sI1NRTFNlcnZlci5Db25jZXB0cy5HZW5lcmFsLlRpbWVab25lKS5cbiAqL1xuVGltZXpvbmU/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIGNsYXNzIG9mIHRoZSBEQiBpbnN0YW5jZSB1c2VzIGl0cyBkZWZhdWx0IHByb2Nlc3NvciBmZWF0dXJlcy5cbiAqICBUaGlzIHNldHRpbmcgZG9lc24ndCBhcHBseSB0byBSRFMgQ3VzdG9tIERCIGluc3RhbmNlcy5cbiAqL1xuVXNlRGVmYXVsdFByb2Nlc3NvckZlYXR1cmVzPzogYm9vbGVhblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgREIgaW5zdGFuY2UgaXMgcmVzdG9yZWQgZnJvbSB0aGUgbGF0ZXN0IGJhY2t1cCB0aW1lLiBCeSBkZWZhdWx0LCB0aGUgREIgaW5zdGFuY2UgaXNuJ3QgcmVzdG9yZWQgZnJvbSB0aGUgbGF0ZXN0IGJhY2t1cCB0aW1lLiBUaGlzIHBhcmFtZXRlciBhcHBsaWVzIHRvIHBvaW50LWluLXRpbWUgcmVjb3ZlcnkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Jlc3RvcmluZyBhIERCIGluc3RhbmNlIHRvIGEgc3BlY2lmaWVkIHRpbWVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1BJVC5odG1sKSBpbiB0aGUgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqLlxuICogIENvbnN0cmFpbnRzOlxuICogICArICBDYW4ndCBiZSBzcGVjaWZpZWQgaWYgdGhlIGBgUmVzdG9yZVRpbWVgYCBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQuXG4gKi9cblVzZUxhdGVzdFJlc3RvcmFibGVUaW1lPzogYm9vbGVhblxuLyoqXG4gKiBBIGxpc3Qgb2YgdGhlIFZQQyBzZWN1cml0eSBncm91cCBJRHMgdG8gYXNzaWduIHRvIHRoZSBEQiBpbnN0YW5jZS4gVGhlIGxpc3QgY2FuIGluY2x1ZGUgYm90aCB0aGUgcGh5c2ljYWwgSURzIG9mIGV4aXN0aW5nIFZQQyBzZWN1cml0eSBncm91cHMgYW5kIHJlZmVyZW5jZXMgdG8gW0FXUzo6RUMyOjpTZWN1cml0eUdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItc2VjdXJpdHktZ3JvdXAuaHRtbCkgcmVzb3VyY2VzIGNyZWF0ZWQgaW4gdGhlIHRlbXBsYXRlLlxuICogIElmIHlvdSBwbGFuIHRvIHVwZGF0ZSB0aGUgcmVzb3VyY2UsIGRvbid0IHNwZWNpZnkgVlBDIHNlY3VyaXR5IGdyb3VwcyBpbiBhIHNoYXJlZCBWUEMuXG4gKiAgIElmIHlvdSBzZXQgYGBWUENTZWN1cml0eUdyb3Vwc2BgLCB5b3UgbXVzdCBub3Qgc2V0IFtEQlNlY3VyaXR5R3JvdXBzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmRzLWRhdGFiYXNlLWluc3RhbmNlLmh0bWwjY2ZuLXJkcy1kYmluc3RhbmNlLWRic2VjdXJpdHlncm91cHMpLCBhbmQgdmljZSB2ZXJzYS5cbiAqICAgWW91IGNhbiBtaWdyYXRlIGEgREIgaW5zdGFuY2UgaW4geW91ciBzdGFjayBmcm9tIGFuIFJEUyBEQiBzZWN1cml0eSBncm91cCB0byBhIFZQQyBzZWN1cml0eSBncm91cCwgYnV0IGtlZXAgdGhlIGZvbGxvd2luZyBpbiBtaW5kOlxuICogICArICBZb3UgY2FuJ3QgcmV2ZXJ0IHRvIHVzaW5nIGFuIFJEUyBzZWN1cml0eSBncm91cCBhZnRlciB5b3UgZXN0YWJsaXNoIGEgVlBDIHNlY3VyaXR5IGdyb3VwIG1lbWJlcnNoaXAuXG4gKiAgICsgIFdoZW4geW91IG1pZ3JhdGUgeW91ciBEQiBpbnN0YW5jZSB0byBWUEMgc2VjdXJpdHkgZ3JvdXBzLCBpZiB5b3VyIHN0YWNrIHVwZGF0ZSByb2xscyBiYWNrIGJlY2F1c2UgdGhlIERCIGluc3RhbmNlIHVwZGF0ZSBmYWlscyBvciBiZWNhdXNlIGFuIHVwZGF0ZSBmYWlscyBpbiBhbm90aGVyIEFXUyBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSwgdGhlIHJvbGxiYWNrIGZhaWxzIGJlY2F1c2UgaXQgY2FuJ3QgcmV2ZXJ0IHRvIGFuIFJEUyBzZWN1cml0eSBncm91cC5cbiAqICAgKyAgVG8gdXNlIHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGF2YWlsYWJsZSB3aGVuIHlvdSB1c2UgYSBWUEMgc2VjdXJpdHkgZ3JvdXAsIHlvdSBtdXN0IHJlY3JlYXRlIHRoZSBEQiBpbnN0YW5jZS4gSWYgeW91IGRvbid0LCBBV1MgQ2xvdWRGb3JtYXRpb24gc3VibWl0cyBvbmx5IHRoZSBwcm9wZXJ0eSB2YWx1ZXMgdGhhdCBhcmUgbGlzdGVkIGluIHRoZSBbREJTZWN1cml0eUdyb3Vwc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtcmRzLWRhdGFiYXNlLWluc3RhbmNlLmh0bWwjY2ZuLXJkcy1kYmluc3RhbmNlLWRic2VjdXJpdHlncm91cHMpIHByb3BlcnR5LlxuICogICBcbiAqICAgVG8gYXZvaWQgdGhpcyBzaXR1YXRpb24sIG1pZ3JhdGUgeW91ciBEQiBpbnN0YW5jZSB0byB1c2luZyBWUEMgc2VjdXJpdHkgZ3JvdXBzIG9ubHkgd2hlbiB0aGF0IGlzIHRoZSBvbmx5IGNoYW5nZSBpbiB5b3VyIHN0YWNrIHRlbXBsYXRlLiBcbiAqICAgKkFtYXpvbiBBdXJvcmEqIFxuICogIE5vdCBhcHBsaWNhYmxlLiBUaGUgYXNzb2NpYXRlZCBsaXN0IG9mIEVDMiBWUEMgc2VjdXJpdHkgZ3JvdXBzIGlzIG1hbmFnZWQgYnkgdGhlIERCIGNsdXN0ZXIuIElmIHNwZWNpZmllZCwgdGhlIHNldHRpbmcgbXVzdCBtYXRjaCB0aGUgREIgY2x1c3RlciBzZXR0aW5nLlxuICovXG5WUENTZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIGNoYW5nZXMgdG8gdGhlIERCIGluc3RhbmNlIGFuZCBhbnkgcGVuZGluZyBtb2RpZmljYXRpb25zIGFyZSBhcHBsaWVkIGltbWVkaWF0ZWx5LCByZWdhcmRsZXNzIG9mIHRoZSBgYFByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93YGAgc2V0dGluZy4gSWYgc2V0IHRvIGBgZmFsc2VgYCwgY2hhbmdlcyBhcmUgYXBwbGllZCBkdXJpbmcgdGhlIG5leHQgbWFpbnRlbmFuY2Ugd2luZG93LiBVbnRpbCBSRFMgYXBwbGllcyB0aGUgY2hhbmdlcywgdGhlIERCIGluc3RhbmNlIHJlbWFpbnMgaW4gYSBkcmlmdCBzdGF0ZS4gQXMgYSByZXN1bHQsIHRoZSBjb25maWd1cmF0aW9uIGRvZXNuJ3QgZnVsbHkgcmVmbGVjdCB0aGUgcmVxdWVzdGVkIG1vZGlmaWNhdGlvbnMgYW5kIHRlbXBvcmFyaWx5IGRpdmVyZ2VzIGZyb20gdGhlIGludGVuZGVkIHN0YXRlLlxuICogIEluIGFkZGl0aW9uIHRvIHRoZSBzZXR0aW5ncyBkZXNjcmliZWQgaW4gW01vZGlmeWluZyBhIERCIGluc3RhbmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvT3ZlcnZpZXcuREJJbnN0YW5jZS5Nb2RpZnlpbmcuaHRtbCksIHRoaXMgcHJvcGVydHkgYWxzbyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIERCIGluc3RhbmNlIHJlYm9vdHMgd2hlbiBhIHN0YXRpYyBwYXJhbWV0ZXIgaXMgbW9kaWZpZWQgaW4gdGhlIGFzc29jaWF0ZWQgREIgcGFyYW1ldGVyIGdyb3VwLlxuICogIERlZmF1bHQ6IGBgdHJ1ZWBgXG4gKi9cbkFwcGx5SW1tZWRpYXRlbHk/OiBib29sZWFuXG59XG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IGFuIEFXUyBJZGVudGl0eSBhbmQgQWNjZXNzIE1hbmFnZW1lbnQgKElBTSkgcm9sZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIERCIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERCSW5zdGFuY2VSb2xlIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBBV1MgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIHJvbGUuIElBTSByb2xlcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBEQiBpbnN0YW5jZSBncmFudCBwZXJtaXNzaW9uIGZvciB0aGUgREIgaW5zdGFuY2UgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gRm9yIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBmZWF0dXJlIG5hbWVzLCBzZWUgdGhlIGBgU3VwcG9ydGVkRmVhdHVyZU5hbWVzYGAgZGVzY3JpcHRpb24gaW4gW0RCRW5naW5lVmVyc2lvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EQkVuZ2luZVZlcnNpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIEFQSSBSZWZlcmVuY2UqLlxuICovXG5GZWF0dXJlTmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIERCIGluc3RhbmNlLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ2VydGlmaWNhdGVEZXRhaWxzIHtcbi8qKlxuICogVGhlIENBIGlkZW50aWZpZXIgb2YgdGhlIENBIGNlcnRpZmljYXRlIHVzZWQgZm9yIHRoZSBEQiBpbnN0YW5jZSdzIHNlcnZlciBjZXJ0aWZpY2F0ZS5cbiAqL1xuQ0FJZGVudGlmaWVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSBleHBpcmF0aW9uIGRhdGUgb2YgdGhlIERCIGluc3RhbmNl4oCZcyBzZXJ2ZXIgY2VydGlmaWNhdGUuXG4gKi9cblZhbGlkVGlsbD86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBFbmRwb2ludCB7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgRE5TIGFkZHJlc3Mgb2YgdGhlIERCIGluc3RhbmNlLlxuICovXG5BZGRyZXNzPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgcG9ydCB0aGF0IHRoZSBkYXRhYmFzZSBlbmdpbmUgaXMgbGlzdGVuaW5nIG9uLlxuICovXG5Qb3J0Pzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgSUQgdGhhdCBBbWF6b24gUm91dGUgNTMgYXNzaWducyB3aGVuIHlvdSBjcmVhdGUgYSBob3N0ZWQgem9uZS5cbiAqL1xuSG9zdGVkWm9uZUlkPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBzZWNyZXQgbWFuYWdlZCBieSBSRFMgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBmb3IgdGhlIG1hc3RlciB1c2VyIHBhc3N3b3JkLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Bhc3N3b3JkIG1hbmFnZW1lbnQgd2l0aCBTZWNyZXRzIE1hbmFnZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9yZHMtc2VjcmV0cy1tYW5hZ2VyLmh0bWwpIGluIHRoZSAqQW1hem9uIFJEUyBVc2VyIEd1aWRlLipcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXN0ZXJVc2VyU2VjcmV0IHtcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZWNyZXQuIFRoaXMgcGFyYW1ldGVyIGlzIGEgcmV0dXJuIHZhbHVlIHRoYXQgeW91IGNhbiByZXRyaWV2ZSB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgaW50cmluc2ljIGZ1bmN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXR1cm4gdmFsdWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtcmRzLWRiaW5zdGFuY2UuaHRtbCNhd3MtcmVzb3VyY2UtcmRzLWRiaW5zdGFuY2UtcmV0dXJuLXZhbHVlcykuXG4gKi9cblNlY3JldEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVdTIEtNUyBrZXkgaWRlbnRpZmllciB0aGF0IGlzIHVzZWQgdG8gZW5jcnlwdCB0aGUgc2VjcmV0LlxuICovXG5LbXNLZXlJZD86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYGBQcm9jZXNzb3JGZWF0dXJlYGAgcHJvcGVydHkgdHlwZSBzcGVjaWZpZXMgdGhlIHByb2Nlc3NvciBmZWF0dXJlcyBvZiBhIERCIGluc3RhbmNlIGNsYXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NvckZlYXR1cmUge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcHJvY2Vzc29yIGZlYXR1cmUuIFZhbGlkIG5hbWVzIGFyZSBgYGNvcmVDb3VudGBgIGFuZCBgYHRocmVhZHNQZXJDb3JlYGAuXG4gKi9cbk5hbWU/OiAoXCJjb3JlQ291bnRcIiB8IFwidGhyZWFkc1BlckNvcmVcIilcbi8qKlxuICogVGhlIHZhbHVlIG9mIGEgcHJvY2Vzc29yIGZlYXR1cmUuXG4gKi9cblZhbHVlPzogc3RyaW5nXG59XG4vKipcbiAqIE1ldGFkYXRhIGFzc2lnbmVkIHRvIGFuIEFtYXpvbiBSRFMgcmVzb3VyY2UgY29uc2lzdGluZyBvZiBhIGtleS12YWx1ZSBwYWlyLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1RhZ2dpbmcgQW1hem9uIFJEUyByZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9VU0VSX1RhZ2dpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gUkRTIFVzZXIgR3VpZGUqIG9yIFtUYWdnaW5nIEFtYXpvbiBBdXJvcmEgYW5kIEFtYXpvbiBSRFMgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvVVNFUl9UYWdnaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEF1cm9yYSBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBBIGtleSBpcyB0aGUgcmVxdWlyZWQgbmFtZSBvZiB0aGUgdGFnLiBUaGUgc3RyaW5nIHZhbHVlIGNhbiBiZSBmcm9tIDEgdG8gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbid0IGJlIHByZWZpeGVkIHdpdGggYGBhd3M6YGAgb3IgYGByZHM6YGAuIFRoZSBzdHJpbmcgY2FuIG9ubHkgY29udGFpbiBvbmx5IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlLXNwYWNlLCAnXycsICcuJywgJzonLCAnLycsICc9JywgJysnLCAnLScsICdAJyAoSmF2YSByZWdleDogXCJeKFtcXFxccHtMfVxcXFxwe1p9XFxcXHB7Tn1fLjovPStcXFxcLUBdKikkXCIpLlxuICovXG5LZXk6IHN0cmluZ1xuLyoqXG4gKiBBIHZhbHVlIGlzIHRoZSBvcHRpb25hbCB2YWx1ZSBvZiB0aGUgdGFnLiBUaGUgc3RyaW5nIHZhbHVlIGNhbiBiZSBmcm9tIDEgdG8gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBsZW5ndGggYW5kIGNhbid0IGJlIHByZWZpeGVkIHdpdGggYGBhd3M6YGAgb3IgYGByZHM6YGAuIFRoZSBzdHJpbmcgY2FuIG9ubHkgY29udGFpbiBvbmx5IHRoZSBzZXQgb2YgVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlLXNwYWNlLCAnXycsICcuJywgJzonLCAnLycsICc9JywgJysnLCAnLScsICdAJyAoSmF2YSByZWdleDogXCJeKFtcXFxccHtMfVxcXFxwe1p9XFxcXHB7Tn1fLjovPStcXFxcLUBdKikkXCIpLlxuICovXG5WYWx1ZT86IHN0cmluZ1xufVxuIl19
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export type SnapshotStatus = ("AVAILABLE" | "CREATING" | "DELETED" | "CANCELLED" | "FAILED" | "COPYING");
|
|
2
|
+
/**
|
|
3
|
+
* Resource Type definition for AWS::RedshiftServerless::Snapshot Resource Type.
|
|
4
|
+
*/
|
|
5
|
+
export interface _AWS_REDSHIFTSERVERLESS_SNAPSHOT {
|
|
6
|
+
/**
|
|
7
|
+
* The name of the snapshot.
|
|
8
|
+
*/
|
|
9
|
+
SnapshotName: string;
|
|
10
|
+
/**
|
|
11
|
+
* The namespace the snapshot is associated with.
|
|
12
|
+
*/
|
|
13
|
+
NamespaceName?: string;
|
|
14
|
+
/**
|
|
15
|
+
* The owner account of the snapshot.
|
|
16
|
+
*/
|
|
17
|
+
OwnerAccount?: string;
|
|
18
|
+
/**
|
|
19
|
+
* The retention period of the snapshot.
|
|
20
|
+
*/
|
|
21
|
+
RetentionPeriod?: number;
|
|
22
|
+
/**
|
|
23
|
+
* An array of key-value pairs to apply to this resource.
|
|
24
|
+
*
|
|
25
|
+
* @minItems 0
|
|
26
|
+
* @maxItems 200
|
|
27
|
+
*/
|
|
28
|
+
Tags?: Tag[];
|
|
29
|
+
Snapshot?: Snapshot;
|
|
30
|
+
}
|
|
31
|
+
export interface Tag {
|
|
32
|
+
Key: string;
|
|
33
|
+
Value: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Definition for snapshot resource
|
|
37
|
+
*/
|
|
38
|
+
export interface Snapshot {
|
|
39
|
+
NamespaceArn?: string;
|
|
40
|
+
NamespaceName?: string;
|
|
41
|
+
SnapshotName?: string;
|
|
42
|
+
SnapshotCreateTime?: string;
|
|
43
|
+
Status?: SnapshotStatus;
|
|
44
|
+
AdminUsername?: string;
|
|
45
|
+
KmsKeyId?: string;
|
|
46
|
+
OwnerAccount?: string;
|
|
47
|
+
RetentionPeriod?: number;
|
|
48
|
+
SnapshotArn?: string;
|
|
49
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXJlZHNoaWZ0c2VydmVybGVzcy1zbmFwc2hvdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1yZWRzaGlmdHNlcnZlcmxlc3Mtc25hcHNob3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFNuYXBzaG90U3RhdHVzID0gKFwiQVZBSUxBQkxFXCIgfCBcIkNSRUFUSU5HXCIgfCBcIkRFTEVURURcIiB8IFwiQ0FOQ0VMTEVEXCIgfCBcIkZBSUxFRFwiIHwgXCJDT1BZSU5HXCIpXG5cbi8qKlxuICogUmVzb3VyY2UgVHlwZSBkZWZpbml0aW9uIGZvciBBV1M6OlJlZHNoaWZ0U2VydmVybGVzczo6U25hcHNob3QgUmVzb3VyY2UgVHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX1JFRFNISUZUU0VSVkVSTEVTU19TTkFQU0hPVCB7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBzbmFwc2hvdC5cbiAqL1xuU25hcHNob3ROYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWVzcGFjZSB0aGUgc25hcHNob3QgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICovXG5OYW1lc3BhY2VOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBvd25lciBhY2NvdW50IG9mIHRoZSBzbmFwc2hvdC5cbiAqL1xuT3duZXJBY2NvdW50Pzogc3RyaW5nXG4vKipcbiAqIFRoZSByZXRlbnRpb24gcGVyaW9kIG9mIHRoZSBzbmFwc2hvdC5cbiAqL1xuUmV0ZW50aW9uUGVyaW9kPzogbnVtYmVyXG4vKipcbiAqIEFuIGFycmF5IG9mIGtleS12YWx1ZSBwYWlycyB0byBhcHBseSB0byB0aGlzIHJlc291cmNlLlxuICogXG4gKiBAbWluSXRlbXMgMFxuICogQG1heEl0ZW1zIDIwMFxuICovXG5UYWdzPzogVGFnW11cblNuYXBzaG90PzogU25hcHNob3Rcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbktleTogc3RyaW5nXG5WYWx1ZTogc3RyaW5nXG59XG4vKipcbiAqIERlZmluaXRpb24gZm9yIHNuYXBzaG90IHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU25hcHNob3Qge1xuTmFtZXNwYWNlQXJuPzogc3RyaW5nXG5OYW1lc3BhY2VOYW1lPzogc3RyaW5nXG5TbmFwc2hvdE5hbWU/OiBzdHJpbmdcblNuYXBzaG90Q3JlYXRlVGltZT86IHN0cmluZ1xuU3RhdHVzPzogU25hcHNob3RTdGF0dXNcbkFkbWluVXNlcm5hbWU/OiBzdHJpbmdcbkttc0tleUlkPzogc3RyaW5nXG5Pd25lckFjY291bnQ/OiBzdHJpbmdcblJldGVudGlvblBlcmlvZD86IG51bWJlclxuU25hcHNob3RBcm4/OiBzdHJpbmdcbn1cbiJdfQ==
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indicates that you don't want to specify a schema for the table. This property is mutually exclusive to 'IcebergMetadata', and its only possible value is 'Yes'.
|
|
3
|
+
*/
|
|
4
|
+
export type WithoutMetadata = "Yes";
|
|
5
|
+
/**
|
|
6
|
+
* The namespace that the table belongs to.
|
|
7
|
+
*/
|
|
8
|
+
export type Namespace = string;
|
|
9
|
+
/**
|
|
10
|
+
* The name for the table.
|
|
11
|
+
*/
|
|
12
|
+
export type TableName = string;
|
|
13
|
+
/**
|
|
14
|
+
* The Amazon Resource Name (ARN) of the specified table bucket.
|
|
15
|
+
*/
|
|
16
|
+
export type TableBucketARN = string;
|
|
17
|
+
/**
|
|
18
|
+
* The version token of the table
|
|
19
|
+
*/
|
|
20
|
+
export type VersionToken = string;
|
|
21
|
+
/**
|
|
22
|
+
* The Amazon Resource Name (ARN) of the specified table.
|
|
23
|
+
*/
|
|
24
|
+
export type TableARN = string;
|
|
25
|
+
/**
|
|
26
|
+
* Format of the table.
|
|
27
|
+
*/
|
|
28
|
+
export type OpenTableFormat = "ICEBERG";
|
|
29
|
+
/**
|
|
30
|
+
* Contains details about the schema for an Iceberg table
|
|
31
|
+
*/
|
|
32
|
+
export type SchemaFieldList = SchemaField[];
|
|
33
|
+
/**
|
|
34
|
+
* The warehouse location of the table.
|
|
35
|
+
*/
|
|
36
|
+
export type WarehouseLocation = string;
|
|
37
|
+
/**
|
|
38
|
+
* Resource Type definition for AWS::S3Tables::Table
|
|
39
|
+
*/
|
|
40
|
+
export interface _AWS_S3TABLES_TABLE {
|
|
41
|
+
WithoutMetadata?: WithoutMetadata;
|
|
42
|
+
Compaction?: Compaction;
|
|
43
|
+
Namespace: Namespace;
|
|
44
|
+
TableName: TableName;
|
|
45
|
+
TableBucketARN: TableBucketARN;
|
|
46
|
+
VersionToken?: VersionToken;
|
|
47
|
+
TableARN?: TableARN;
|
|
48
|
+
OpenTableFormat: OpenTableFormat;
|
|
49
|
+
IcebergMetadata?: IcebergMetadata;
|
|
50
|
+
WarehouseLocation?: WarehouseLocation;
|
|
51
|
+
SnapshotManagement?: SnapshotManagement;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Settings governing the Compaction maintenance action. Contains details about the compaction settings for an Iceberg table.
|
|
55
|
+
*/
|
|
56
|
+
export interface Compaction {
|
|
57
|
+
/**
|
|
58
|
+
* Indicates whether the Compaction maintenance action is enabled.
|
|
59
|
+
*/
|
|
60
|
+
Status?: ("enabled" | "disabled");
|
|
61
|
+
/**
|
|
62
|
+
* The target file size for the table in MB.
|
|
63
|
+
*/
|
|
64
|
+
TargetFileSizeMB?: number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Contains details about the metadata for an Iceberg table.
|
|
68
|
+
*/
|
|
69
|
+
export interface IcebergMetadata {
|
|
70
|
+
IcebergSchema: IcebergSchema;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Contains details about the schema for an Iceberg table
|
|
74
|
+
*/
|
|
75
|
+
export interface IcebergSchema {
|
|
76
|
+
SchemaFieldList: SchemaFieldList;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Contains details about the schema for an Iceberg table
|
|
80
|
+
*/
|
|
81
|
+
export interface SchemaField {
|
|
82
|
+
/**
|
|
83
|
+
* The field type
|
|
84
|
+
*/
|
|
85
|
+
Type: string;
|
|
86
|
+
/**
|
|
87
|
+
* A Boolean value that specifies whether values are required for each row in this field
|
|
88
|
+
*/
|
|
89
|
+
Required?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* The name of the field
|
|
92
|
+
*/
|
|
93
|
+
Name: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Contains details about the snapshot management settings for an Iceberg table. A snapshot is expired when it exceeds MinSnapshotsToKeep and MaxSnapshotAgeHours.
|
|
97
|
+
*/
|
|
98
|
+
export interface SnapshotManagement {
|
|
99
|
+
/**
|
|
100
|
+
* Indicates whether the SnapshotManagement maintenance action is enabled.
|
|
101
|
+
*/
|
|
102
|
+
Status?: ("enabled" | "disabled");
|
|
103
|
+
/**
|
|
104
|
+
* The minimum number of snapshots to keep.
|
|
105
|
+
*/
|
|
106
|
+
MinSnapshotsToKeep?: number;
|
|
107
|
+
/**
|
|
108
|
+
* The maximum age of a snapshot before it can be expired.
|
|
109
|
+
*/
|
|
110
|
+
MaxSnapshotAgeHours?: number;
|
|
111
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXMzdGFibGVzLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXMzdGFibGVzLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluZGljYXRlcyB0aGF0IHlvdSBkb24ndCB3YW50IHRvIHNwZWNpZnkgYSBzY2hlbWEgZm9yIHRoZSB0YWJsZS4gVGhpcyBwcm9wZXJ0eSBpcyBtdXR1YWxseSBleGNsdXNpdmUgdG8gJ0ljZWJlcmdNZXRhZGF0YScsIGFuZCBpdHMgb25seSBwb3NzaWJsZSB2YWx1ZSBpcyAnWWVzJy5cbiAqL1xuZXhwb3J0IHR5cGUgV2l0aG91dE1ldGFkYXRhID0gXCJZZXNcIlxuLyoqXG4gKiBUaGUgbmFtZXNwYWNlIHRoYXQgdGhlIHRhYmxlIGJlbG9uZ3MgdG8uXG4gKi9cbmV4cG9ydCB0eXBlIE5hbWVzcGFjZSA9IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBmb3IgdGhlIHRhYmxlLlxuICovXG5leHBvcnQgdHlwZSBUYWJsZU5hbWUgPSBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzcGVjaWZpZWQgdGFibGUgYnVja2V0LlxuICovXG5leHBvcnQgdHlwZSBUYWJsZUJ1Y2tldEFSTiA9IHN0cmluZ1xuLyoqXG4gKiBUaGUgdmVyc2lvbiB0b2tlbiBvZiB0aGUgdGFibGVcbiAqL1xuZXhwb3J0IHR5cGUgVmVyc2lvblRva2VuID0gc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc3BlY2lmaWVkIHRhYmxlLlxuICovXG5leHBvcnQgdHlwZSBUYWJsZUFSTiA9IHN0cmluZ1xuLyoqXG4gKiBGb3JtYXQgb2YgdGhlIHRhYmxlLlxuICovXG5leHBvcnQgdHlwZSBPcGVuVGFibGVGb3JtYXQgPSBcIklDRUJFUkdcIlxuLyoqXG4gKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBzY2hlbWEgZm9yIGFuIEljZWJlcmcgdGFibGVcbiAqL1xuZXhwb3J0IHR5cGUgU2NoZW1hRmllbGRMaXN0ID0gU2NoZW1hRmllbGRbXVxuLyoqXG4gKiBUaGUgd2FyZWhvdXNlIGxvY2F0aW9uIG9mIHRoZSB0YWJsZS5cbiAqL1xuZXhwb3J0IHR5cGUgV2FyZWhvdXNlTG9jYXRpb24gPSBzdHJpbmdcblxuLyoqXG4gKiBSZXNvdXJjZSBUeXBlIGRlZmluaXRpb24gZm9yIEFXUzo6UzNUYWJsZXM6OlRhYmxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19TM1RBQkxFU19UQUJMRSB7XG5XaXRob3V0TWV0YWRhdGE/OiBXaXRob3V0TWV0YWRhdGFcbkNvbXBhY3Rpb24/OiBDb21wYWN0aW9uXG5OYW1lc3BhY2U6IE5hbWVzcGFjZVxuVGFibGVOYW1lOiBUYWJsZU5hbWVcblRhYmxlQnVja2V0QVJOOiBUYWJsZUJ1Y2tldEFSTlxuVmVyc2lvblRva2VuPzogVmVyc2lvblRva2VuXG5UYWJsZUFSTj86IFRhYmxlQVJOXG5PcGVuVGFibGVGb3JtYXQ6IE9wZW5UYWJsZUZvcm1hdFxuSWNlYmVyZ01ldGFkYXRhPzogSWNlYmVyZ01ldGFkYXRhXG5XYXJlaG91c2VMb2NhdGlvbj86IFdhcmVob3VzZUxvY2F0aW9uXG5TbmFwc2hvdE1hbmFnZW1lbnQ/OiBTbmFwc2hvdE1hbmFnZW1lbnRcbn1cbi8qKlxuICogU2V0dGluZ3MgZ292ZXJuaW5nIHRoZSBDb21wYWN0aW9uIG1haW50ZW5hbmNlIGFjdGlvbi4gQ29udGFpbnMgZGV0YWlscyBhYm91dCB0aGUgY29tcGFjdGlvbiBzZXR0aW5ncyBmb3IgYW4gSWNlYmVyZyB0YWJsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wYWN0aW9uIHtcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIENvbXBhY3Rpb24gbWFpbnRlbmFuY2UgYWN0aW9uIGlzIGVuYWJsZWQuXG4gKi9cblN0YXR1cz86IChcImVuYWJsZWRcIiB8IFwiZGlzYWJsZWRcIilcbi8qKlxuICogVGhlIHRhcmdldCBmaWxlIHNpemUgZm9yIHRoZSB0YWJsZSBpbiBNQi5cbiAqL1xuVGFyZ2V0RmlsZVNpemVNQj86IG51bWJlclxufVxuLyoqXG4gKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBtZXRhZGF0YSBmb3IgYW4gSWNlYmVyZyB0YWJsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJY2ViZXJnTWV0YWRhdGEge1xuSWNlYmVyZ1NjaGVtYTogSWNlYmVyZ1NjaGVtYVxufVxuLyoqXG4gKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBzY2hlbWEgZm9yIGFuIEljZWJlcmcgdGFibGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJY2ViZXJnU2NoZW1hIHtcblNjaGVtYUZpZWxkTGlzdDogU2NoZW1hRmllbGRMaXN0XG59XG4vKipcbiAqIENvbnRhaW5zIGRldGFpbHMgYWJvdXQgdGhlIHNjaGVtYSBmb3IgYW4gSWNlYmVyZyB0YWJsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYUZpZWxkIHtcbi8qKlxuICogVGhlIGZpZWxkIHR5cGVcbiAqL1xuVHlwZTogc3RyaW5nXG4vKipcbiAqIEEgQm9vbGVhbiB2YWx1ZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHZhbHVlcyBhcmUgcmVxdWlyZWQgZm9yIGVhY2ggcm93IGluIHRoaXMgZmllbGRcbiAqL1xuUmVxdWlyZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBmaWVsZFxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogQ29udGFpbnMgZGV0YWlscyBhYm91dCB0aGUgc25hcHNob3QgbWFuYWdlbWVudCBzZXR0aW5ncyBmb3IgYW4gSWNlYmVyZyB0YWJsZS4gQSBzbmFwc2hvdCBpcyBleHBpcmVkIHdoZW4gaXQgZXhjZWVkcyBNaW5TbmFwc2hvdHNUb0tlZXAgYW5kIE1heFNuYXBzaG90QWdlSG91cnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU25hcHNob3RNYW5hZ2VtZW50IHtcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFNuYXBzaG90TWFuYWdlbWVudCBtYWludGVuYW5jZSBhY3Rpb24gaXMgZW5hYmxlZC5cbiAqL1xuU3RhdHVzPzogKFwiZW5hYmxlZFwiIHwgXCJkaXNhYmxlZFwiKVxuLyoqXG4gKiBUaGUgbWluaW11bSBudW1iZXIgb2Ygc25hcHNob3RzIHRvIGtlZXAuXG4gKi9cbk1pblNuYXBzaG90c1RvS2VlcD86IG51bWJlclxuLyoqXG4gKiBUaGUgbWF4aW11bSBhZ2Ugb2YgYSBzbmFwc2hvdCBiZWZvcmUgaXQgY2FuIGJlIGV4cGlyZWQuXG4gKi9cbk1heFNuYXBzaG90QWdlSG91cnM/OiBudW1iZXJcbn1cbiJdfQ==
|