@horietakehiro/aws-cdk-utul 0.33.45 → 0.33.46

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.
@@ -27,7 +27,7 @@ export interface _AWS_BEDROCK_BLUEPRINT {
27
27
  /**
28
28
  * Modality Type
29
29
  */
30
- Type: ("DOCUMENT" | "IMAGE" | "AUDIO");
30
+ Type: ("DOCUMENT" | "IMAGE" | "AUDIO" | "VIDEO");
31
31
  /**
32
32
  * Stage of the Blueprint
33
33
  */
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWJlZHJvY2stYmx1ZXByaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWJlZHJvY2stYmx1ZXByaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlZmluaXRpb24gb2YgQVdTOjpCZWRyb2NrOjpCbHVlcHJpbnQgUmVzb3VyY2UgVHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfQkVEUk9DS19CTFVFUFJJTlQge1xuLyoqXG4gKiBBUk4gb2YgYSBCbHVlcHJpbnRcbiAqL1xuQmx1ZXByaW50QXJuPzogc3RyaW5nXG4vKipcbiAqIE5hbWUgb2YgdGhlIEJsdWVwcmludFxuICovXG5CbHVlcHJpbnROYW1lOiBzdHJpbmdcbi8qKlxuICogQ3JlYXRpb24gdGltZXN0YW1wXG4gKi9cbkNyZWF0aW9uVGltZT86IHN0cmluZ1xuLyoqXG4gKiBMYXN0IG1vZGlmaWVkIHRpbWVzdGFtcFxuICovXG5MYXN0TW9kaWZpZWRUaW1lPzogc3RyaW5nXG4vKipcbiAqIFNjaGVtYSBvZiB0aGUgYmx1ZXByaW50XG4gKi9cblNjaGVtYToge1xuW2s6IHN0cmluZ106IHVua25vd25cbn1cbi8qKlxuICogTW9kYWxpdHkgVHlwZVxuICovXG5UeXBlOiAoXCJET0NVTUVOVFwiIHwgXCJJTUFHRVwiIHwgXCJBVURJT1wiKVxuLyoqXG4gKiBTdGFnZSBvZiB0aGUgQmx1ZXByaW50XG4gKi9cbkJsdWVwcmludFN0YWdlPzogKFwiREVWRUxPUE1FTlRcIiB8IFwiTElWRVwiKVxuLyoqXG4gKiBLTVMga2V5IGlkZW50aWZpZXJcbiAqL1xuS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogS01TIGVuY3J5cHRpb24gY29udGV4dFxuICovXG5LbXNFbmNyeXB0aW9uQ29udGV4dD86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiXi4qJFwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG4vKipcbiAqIExpc3Qgb2YgVGFnc1xuICogXG4gKiBAbWluSXRlbXMgMFxuICogQG1heEl0ZW1zIDIwMFxuICovXG5UYWdzPzogVGFnW11cbn1cbi8qKlxuICogRGVmaW5pdGlvbiBvZiB0aGUga2V5L3ZhbHVlIHBhaXIgZm9yIGEgdGFnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogS2V5IGZvciB0aGUgdGFnXG4gKi9cbktleTogc3RyaW5nXG4vKipcbiAqIFZhbHVlIGZvciB0aGUgdGFnXG4gKi9cblZhbHVlOiBzdHJpbmdcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWJlZHJvY2stYmx1ZXByaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWJlZHJvY2stYmx1ZXByaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlZmluaXRpb24gb2YgQVdTOjpCZWRyb2NrOjpCbHVlcHJpbnQgUmVzb3VyY2UgVHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfQkVEUk9DS19CTFVFUFJJTlQge1xuLyoqXG4gKiBBUk4gb2YgYSBCbHVlcHJpbnRcbiAqL1xuQmx1ZXByaW50QXJuPzogc3RyaW5nXG4vKipcbiAqIE5hbWUgb2YgdGhlIEJsdWVwcmludFxuICovXG5CbHVlcHJpbnROYW1lOiBzdHJpbmdcbi8qKlxuICogQ3JlYXRpb24gdGltZXN0YW1wXG4gKi9cbkNyZWF0aW9uVGltZT86IHN0cmluZ1xuLyoqXG4gKiBMYXN0IG1vZGlmaWVkIHRpbWVzdGFtcFxuICovXG5MYXN0TW9kaWZpZWRUaW1lPzogc3RyaW5nXG4vKipcbiAqIFNjaGVtYSBvZiB0aGUgYmx1ZXByaW50XG4gKi9cblNjaGVtYToge1xuW2s6IHN0cmluZ106IHVua25vd25cbn1cbi8qKlxuICogTW9kYWxpdHkgVHlwZVxuICovXG5UeXBlOiAoXCJET0NVTUVOVFwiIHwgXCJJTUFHRVwiIHwgXCJBVURJT1wiIHwgXCJWSURFT1wiKVxuLyoqXG4gKiBTdGFnZSBvZiB0aGUgQmx1ZXByaW50XG4gKi9cbkJsdWVwcmludFN0YWdlPzogKFwiREVWRUxPUE1FTlRcIiB8IFwiTElWRVwiKVxuLyoqXG4gKiBLTVMga2V5IGlkZW50aWZpZXJcbiAqL1xuS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogS01TIGVuY3J5cHRpb24gY29udGV4dFxuICovXG5LbXNFbmNyeXB0aW9uQ29udGV4dD86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiXi4qJFwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG4vKipcbiAqIExpc3Qgb2YgVGFnc1xuICogXG4gKiBAbWluSXRlbXMgMFxuICogQG1heEl0ZW1zIDIwMFxuICovXG5UYWdzPzogVGFnW11cbn1cbi8qKlxuICogRGVmaW5pdGlvbiBvZiB0aGUga2V5L3ZhbHVlIHBhaXIgZm9yIGEgdGFnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogS2V5IGZvciB0aGUgdGFnXG4gKi9cbktleTogc3RyaW5nXG4vKipcbiAqIFZhbHVlIGZvciB0aGUgdGFnXG4gKi9cblZhbHVlOiBzdHJpbmdcbn1cbiJdfQ==
@@ -1,10 +1,8 @@
1
+ export type ProvisioningConfiguration = LakeFormationConfiguration;
1
2
  /**
2
3
  * Definition of AWS::DataZone::EnvironmentBlueprintConfiguration Resource Type
3
4
  */
4
5
  export interface _AWS_DATAZONE_ENVIRONMENTBLUEPRINTCONFIGURATION {
5
- RegionalParameters?: RegionalParameter[];
6
- ProvisioningRoleArn?: string;
7
- DomainId?: string;
8
6
  CreatedAt?: string;
9
7
  /**
10
8
  * @minItems 0
@@ -13,7 +11,12 @@ export interface _AWS_DATAZONE_ENVIRONMENTBLUEPRINTCONFIGURATION {
13
11
  EnvironmentBlueprintIdentifier: string;
14
12
  EnvironmentBlueprintId?: string;
15
13
  UpdatedAt?: string;
14
+ RegionalParameters?: RegionalParameter[];
15
+ ProvisioningRoleArn?: string;
16
+ DomainId?: string;
17
+ ProvisioningConfigurations?: ProvisioningConfiguration[];
16
18
  DomainIdentifier: string;
19
+ EnvironmentRolePermissionBoundary?: string;
17
20
  ManageAccessRoleArn?: string;
18
21
  }
19
22
  export interface RegionalParameter {
@@ -27,3 +30,14 @@ export interface Parameter {
27
30
  */
28
31
  [k: string]: string;
29
32
  }
33
+ export interface LakeFormationConfiguration {
34
+ LakeFormationConfiguration: LakeFormationConfiguration1;
35
+ }
36
+ export interface LakeFormationConfiguration1 {
37
+ /**
38
+ * @minItems 0
39
+ * @maxItems 20
40
+ */
41
+ LocationRegistrationExcludeS3Locations?: string[];
42
+ LocationRegistrationRole?: string;
43
+ }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWRhdGF6b25lLWVudmlyb25tZW50Ymx1ZXByaW50Y29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1kYXRhem9uZS1lbnZpcm9ubWVudGJsdWVwcmludGNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGVmaW5pdGlvbiBvZiBBV1M6OkRhdGFab25lOjpFbnZpcm9ubWVudEJsdWVwcmludENvbmZpZ3VyYXRpb24gUmVzb3VyY2UgVHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfREFUQVpPTkVfRU5WSVJPTk1FTlRCTFVFUFJJTlRDT05GSUdVUkFUSU9OIHtcblJlZ2lvbmFsUGFyYW1ldGVycz86IFJlZ2lvbmFsUGFyYW1ldGVyW11cblByb3Zpc2lvbmluZ1JvbGVBcm4/OiBzdHJpbmdcbkRvbWFpbklkPzogc3RyaW5nXG5DcmVhdGVkQXQ/OiBzdHJpbmdcbi8qKlxuICogQG1pbkl0ZW1zIDBcbiAqL1xuRW5hYmxlZFJlZ2lvbnM6IHN0cmluZ1tdXG5FbnZpcm9ubWVudEJsdWVwcmludElkZW50aWZpZXI6IHN0cmluZ1xuRW52aXJvbm1lbnRCbHVlcHJpbnRJZD86IHN0cmluZ1xuVXBkYXRlZEF0Pzogc3RyaW5nXG5Eb21haW5JZGVudGlmaWVyOiBzdHJpbmdcbk1hbmFnZUFjY2Vzc1JvbGVBcm4/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uYWxQYXJhbWV0ZXIge1xuUGFyYW1ldGVycz86IFBhcmFtZXRlclxuUmVnaW9uPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlciB7XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGBQYXJhbWV0ZXJgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi4rXCIuXG4gKi9cbltrOiBzdHJpbmddOiBzdHJpbmdcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWRhdGF6b25lLWVudmlyb25tZW50Ymx1ZXByaW50Y29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1kYXRhem9uZS1lbnZpcm9ubWVudGJsdWVwcmludGNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFByb3Zpc2lvbmluZ0NvbmZpZ3VyYXRpb24gPSBMYWtlRm9ybWF0aW9uQ29uZmlndXJhdGlvblxuXG4vKipcbiAqIERlZmluaXRpb24gb2YgQVdTOjpEYXRhWm9uZTo6RW52aXJvbm1lbnRCbHVlcHJpbnRDb25maWd1cmF0aW9uIFJlc291cmNlIFR5cGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0RBVEFaT05FX0VOVklST05NRU5UQkxVRVBSSU5UQ09ORklHVVJBVElPTiB7XG5DcmVhdGVkQXQ/OiBzdHJpbmdcbi8qKlxuICogQG1pbkl0ZW1zIDBcbiAqL1xuRW5hYmxlZFJlZ2lvbnM6IHN0cmluZ1tdXG5FbnZpcm9ubWVudEJsdWVwcmludElkZW50aWZpZXI6IHN0cmluZ1xuRW52aXJvbm1lbnRCbHVlcHJpbnRJZD86IHN0cmluZ1xuVXBkYXRlZEF0Pzogc3RyaW5nXG5SZWdpb25hbFBhcmFtZXRlcnM/OiBSZWdpb25hbFBhcmFtZXRlcltdXG5Qcm92aXNpb25pbmdSb2xlQXJuPzogc3RyaW5nXG5Eb21haW5JZD86IHN0cmluZ1xuUHJvdmlzaW9uaW5nQ29uZmlndXJhdGlvbnM/OiBQcm92aXNpb25pbmdDb25maWd1cmF0aW9uW11cbkRvbWFpbklkZW50aWZpZXI6IHN0cmluZ1xuRW52aXJvbm1lbnRSb2xlUGVybWlzc2lvbkJvdW5kYXJ5Pzogc3RyaW5nXG5NYW5hZ2VBY2Nlc3NSb2xlQXJuPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvbmFsUGFyYW1ldGVyIHtcblBhcmFtZXRlcnM/OiBQYXJhbWV0ZXJcblJlZ2lvbj86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXIge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgUGFyYW1ldGVyYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuK1wiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIExha2VGb3JtYXRpb25Db25maWd1cmF0aW9uIHtcbkxha2VGb3JtYXRpb25Db25maWd1cmF0aW9uOiBMYWtlRm9ybWF0aW9uQ29uZmlndXJhdGlvbjFcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTGFrZUZvcm1hdGlvbkNvbmZpZ3VyYXRpb24xIHtcbi8qKlxuICogQG1pbkl0ZW1zIDBcbiAqIEBtYXhJdGVtcyAyMFxuICovXG5Mb2NhdGlvblJlZ2lzdHJhdGlvbkV4Y2x1ZGVTM0xvY2F0aW9ucz86IHN0cmluZ1tdXG5Mb2NhdGlvblJlZ2lzdHJhdGlvblJvbGU/OiBzdHJpbmdcbn1cbiJdfQ==
@@ -22,6 +22,10 @@ export interface _AWS_DATAZONE_PROJECT {
22
22
  * The ID of the Amazon DataZone domain in which this project is created.
23
23
  */
24
24
  DomainIdentifier: string;
25
+ /**
26
+ * The ID of the domain unit.
27
+ */
28
+ DomainUnitId?: string;
25
29
  /**
26
30
  * The glossary terms that can be used in this Amazon DataZone project.
27
31
  *
@@ -41,4 +45,29 @@ export interface _AWS_DATAZONE_PROJECT {
41
45
  * The name of the Amazon DataZone project.
42
46
  */
43
47
  Name: string;
48
+ /**
49
+ * The project profile ID.
50
+ */
51
+ ProjectProfileId?: string;
52
+ /**
53
+ * The project profile version to which the project should be updated. You can only specify the following string for this parameter: latest.
54
+ */
55
+ ProjectProfileVersion?: string;
56
+ /**
57
+ * The status of the project.
58
+ */
59
+ ProjectStatus?: ("ACTIVE" | "MOVING" | "DELETING" | "DELETE_FAILED" | "UPDATING" | "UPDATE_FAILED");
60
+ /**
61
+ * The user parameters of the project.
62
+ */
63
+ UserParameters?: EnvironmentConfigurationUserParameter[];
64
+ }
65
+ export interface EnvironmentConfigurationUserParameter {
66
+ EnvironmentId?: string;
67
+ EnvironmentConfigurationName?: string;
68
+ EnvironmentParameters?: EnvironmentParameter[];
69
+ }
70
+ export interface EnvironmentParameter {
71
+ Name?: string;
72
+ Value?: string;
44
73
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWRhdGF6b25lLXByb2plY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtZGF0YXpvbmUtcHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbWF6b24gRGF0YVpvbmUgcHJvamVjdHMgYXJlIGJ1c2luZXNzIHVzZSBjYXNl4oCTYmFzZWQgZ3JvdXBpbmdzIG9mIHBlb3BsZSwgYXNzZXRzIChkYXRhKSwgYW5kIHRvb2xzIHVzZWQgdG8gc2ltcGxpZnkgYWNjZXNzIHRvIHRoZSBBV1MgYW5hbHl0aWNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfREFUQVpPTkVfUFJPSkVDVCB7XG4vKipcbiAqIFRoZSB0aW1lc3RhbXAgb2Ygd2hlbiB0aGUgcHJvamVjdCB3YXMgY3JlYXRlZC5cbiAqL1xuQ3JlYXRlZEF0Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gRGF0YVpvbmUgdXNlciB3aG8gY3JlYXRlZCB0aGUgcHJvamVjdC5cbiAqL1xuQ3JlYXRlZEJ5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQW1hem9uIERhdGFab25lIHByb2plY3QuXG4gKi9cbkRlc2NyaXB0aW9uPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBBbWF6b24gRGF0YVpvbmUgZG9tYWluIGluIHdoaWNoIHRoZSBwcm9qZWN0IHdhcyBjcmVhdGVkLlxuICovXG5Eb21haW5JZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIEFtYXpvbiBEYXRhWm9uZSBkb21haW4gaW4gd2hpY2ggdGhpcyBwcm9qZWN0IGlzIGNyZWF0ZWQuXG4gKi9cbkRvbWFpbklkZW50aWZpZXI6IHN0cmluZ1xuLyoqXG4gKiBUaGUgZ2xvc3NhcnkgdGVybXMgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGlzIEFtYXpvbiBEYXRhWm9uZSBwcm9qZWN0LlxuICogXG4gKiBAbWluSXRlbXMgMVxuICogQG1heEl0ZW1zIDIwXG4gKi9cbkdsb3NzYXJ5VGVybXM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIEFtYXpvbiBEYXRhWm9uZSBwcm9qZWN0LlxuICovXG5JZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGltZXN0YW1wIG9mIHdoZW4gdGhlIHByb2plY3Qgd2FzIGxhc3QgdXBkYXRlZC5cbiAqL1xuTGFzdFVwZGF0ZWRBdD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgQW1hem9uIERhdGFab25lIHByb2plY3QuXG4gKi9cbk5hbWU6IHN0cmluZ1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWRhdGF6b25lLXByb2plY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtZGF0YXpvbmUtcHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbWF6b24gRGF0YVpvbmUgcHJvamVjdHMgYXJlIGJ1c2luZXNzIHVzZSBjYXNl4oCTYmFzZWQgZ3JvdXBpbmdzIG9mIHBlb3BsZSwgYXNzZXRzIChkYXRhKSwgYW5kIHRvb2xzIHVzZWQgdG8gc2ltcGxpZnkgYWNjZXNzIHRvIHRoZSBBV1MgYW5hbHl0aWNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfREFUQVpPTkVfUFJPSkVDVCB7XG4vKipcbiAqIFRoZSB0aW1lc3RhbXAgb2Ygd2hlbiB0aGUgcHJvamVjdCB3YXMgY3JlYXRlZC5cbiAqL1xuQ3JlYXRlZEF0Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gRGF0YVpvbmUgdXNlciB3aG8gY3JlYXRlZCB0aGUgcHJvamVjdC5cbiAqL1xuQ3JlYXRlZEJ5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQW1hem9uIERhdGFab25lIHByb2plY3QuXG4gKi9cbkRlc2NyaXB0aW9uPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBBbWF6b24gRGF0YVpvbmUgZG9tYWluIGluIHdoaWNoIHRoZSBwcm9qZWN0IHdhcyBjcmVhdGVkLlxuICovXG5Eb21haW5JZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIEFtYXpvbiBEYXRhWm9uZSBkb21haW4gaW4gd2hpY2ggdGhpcyBwcm9qZWN0IGlzIGNyZWF0ZWQuXG4gKi9cbkRvbWFpbklkZW50aWZpZXI6IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGRvbWFpbiB1bml0LlxuICovXG5Eb21haW5Vbml0SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIGdsb3NzYXJ5IHRlcm1zIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhpcyBBbWF6b24gRGF0YVpvbmUgcHJvamVjdC5cbiAqIFxuICogQG1pbkl0ZW1zIDFcbiAqIEBtYXhJdGVtcyAyMFxuICovXG5HbG9zc2FyeVRlcm1zPzogc3RyaW5nW11cbi8qKlxuICogVGhlIElEIG9mIHRoZSBBbWF6b24gRGF0YVpvbmUgcHJvamVjdC5cbiAqL1xuSWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHRpbWVzdGFtcCBvZiB3aGVuIHRoZSBwcm9qZWN0IHdhcyBsYXN0IHVwZGF0ZWQuXG4gKi9cbkxhc3RVcGRhdGVkQXQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIEFtYXpvbiBEYXRhWm9uZSBwcm9qZWN0LlxuICovXG5OYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIHByb2plY3QgcHJvZmlsZSBJRC5cbiAqL1xuUHJvamVjdFByb2ZpbGVJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcHJvamVjdCBwcm9maWxlIHZlcnNpb24gdG8gd2hpY2ggdGhlIHByb2plY3Qgc2hvdWxkIGJlIHVwZGF0ZWQuIFlvdSBjYW4gb25seSBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgc3RyaW5nIGZvciB0aGlzIHBhcmFtZXRlcjogbGF0ZXN0LlxuICovXG5Qcm9qZWN0UHJvZmlsZVZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogVGhlIHN0YXR1cyBvZiB0aGUgcHJvamVjdC5cbiAqL1xuUHJvamVjdFN0YXR1cz86IChcIkFDVElWRVwiIHwgXCJNT1ZJTkdcIiB8IFwiREVMRVRJTkdcIiB8IFwiREVMRVRFX0ZBSUxFRFwiIHwgXCJVUERBVElOR1wiIHwgXCJVUERBVEVfRkFJTEVEXCIpXG4vKipcbiAqIFRoZSB1c2VyIHBhcmFtZXRlcnMgb2YgdGhlIHByb2plY3QuXG4gKi9cblVzZXJQYXJhbWV0ZXJzPzogRW52aXJvbm1lbnRDb25maWd1cmF0aW9uVXNlclBhcmFtZXRlcltdXG59XG5leHBvcnQgaW50ZXJmYWNlIEVudmlyb25tZW50Q29uZmlndXJhdGlvblVzZXJQYXJhbWV0ZXIge1xuRW52aXJvbm1lbnRJZD86IHN0cmluZ1xuRW52aXJvbm1lbnRDb25maWd1cmF0aW9uTmFtZT86IHN0cmluZ1xuRW52aXJvbm1lbnRQYXJhbWV0ZXJzPzogRW52aXJvbm1lbnRQYXJhbWV0ZXJbXVxufVxuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudFBhcmFtZXRlciB7XG5OYW1lPzogc3RyaW5nXG5WYWx1ZT86IHN0cmluZ1xufVxuIl19
@@ -179,7 +179,7 @@ export interface ServiceVolumeConfiguration {
179
179
  */
180
180
  export interface ServiceManagedEBSVolumeConfiguration {
181
181
  /**
182
- * The snapshot that Amazon ECS uses to create the volume. You must specify either a snapshot ID or a volume size. This parameter maps 1:1 with the ``SnapshotId`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*.
182
+ * The snapshot that Amazon ECS uses to create volumes for attachment to tasks maintained by the service. You must specify either ``snapshotId`` or ``sizeInGiB`` in your volume configuration. This parameter maps 1:1 with the ``SnapshotId`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*.
183
183
  */
184
184
  SnapshotId?: string;
185
185
  /**
@@ -194,7 +194,7 @@ export interface ServiceManagedEBSVolumeConfiguration {
194
194
  */
195
195
  VolumeType?: string;
196
196
  /**
197
- * The Amazon Resource Name (ARN) identifier of the AWS Key Management Service key to use for Amazon EBS encryption. When encryption is turned on and no AWS Key Management Service key is specified, the default AWS managed key for Amazon EBS volumes is used. This parameter maps 1:1 with the ``KmsKeyId`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*.
197
+ * The Amazon Resource Name (ARN) identifier of the AWS Key Management Service key to use for Amazon EBS encryption. When a key is specified using this parameter, it overrides Amazon EBS default encryption or any KMS key that you specified for cluster-level managed storage encryption. This parameter maps 1:1 with the ``KmsKeyId`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*. For more information about encrypting Amazon EBS volumes attached to tasks, see [Encrypt data stored in Amazon EBS volumes attached to Amazon ECS tasks](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ebs-kms-encryption.html).
198
198
  * AWS authenticates the AWS Key Management Service key asynchronously. Therefore, if you specify an ID, alias, or ARN that is invalid, the action can appear to complete, but eventually fails.
199
199
  */
200
200
  KmsKeyId?: string;
@@ -203,14 +203,14 @@ export interface ServiceManagedEBSVolumeConfiguration {
203
203
  */
204
204
  TagSpecifications?: EBSTagSpecification[];
205
205
  /**
206
- * The filesystem type for the volume. For volumes created from a snapshot, you must specify the same filesystem type that the volume was using when the snapshot was created. If there is a filesystem type mismatch, the task will fail to start.
206
+ * The filesystem type for the volume. For volumes created from a snapshot, you must specify the same filesystem type that the volume was using when the snapshot was created. If there is a filesystem type mismatch, the tasks will fail to start.
207
207
  * The available Linux filesystem types are
208
208
  ``ext3``, ``ext4``, and ``xfs``. If no value is specified, the ``xfs`` filesystem type is used by default.
209
209
  * The available Windows filesystem types are ``NTFS``.
210
210
  */
211
211
  FilesystemType?: string;
212
212
  /**
213
- * Indicates whether the volume should be encrypted. If no value is specified, encryption is turned on by default. This parameter maps 1:1 with the ``Encrypted`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*.
213
+ * Indicates whether the volume should be encrypted. If you turn on Region-level Amazon EBS encryption by default but set this value as ``false``, the setting is overridden and the volume is encrypted with the KMS key specified for Amazon EBS encryption by default. This parameter maps 1:1 with the ``Encrypted`` parameter of the [CreateVolume API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html) in the *Amazon EC2 API Reference*.
214
214
  */
215
215
  Encrypted?: boolean;
216
216
  /**
@@ -218,6 +218,9 @@ export interface ServiceManagedEBSVolumeConfiguration {
218
218
  * This parameter is only supported for the ``gp3`` volume type.
219
219
  */
220
220
  Throughput?: number;
221
+ /**
222
+ * The rate, in MiB/s, at which data is fetched from a snapshot of an existing EBS volume to create new volumes for attachment to the tasks maintained by the service. This property can be specified only if you specify a ``snapshotId``. For more information, see [Initialize Amazon EBS volumes](https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html) in the *Amazon EBS User Guide*.
223
+ */
221
224
  VolumeInitializationRate?: number;
222
225
  /**
223
226
  * The number of I/O operations per second (IOPS). For ``gp3``, ``io1``, and ``io2`` volumes, this represents the number of IOPS that are provisioned for the volume. For ``gp2`` volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting.
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAgbXVzdCBoYXZlIGEgbmFtZSB0aGF0IGlzIHVuaXF1ZSBpbiB0aGUgbmFtZXNwYWNlLlxuICogICAgU3RhcnRpbmcgQXByaWwgMTUsIDIwMjMsIEFXUzsgd2lsbCBub3Qgb25ib2FyZCBuZXcgY3VzdG9tZXJzIHRvIEFtYXpvbiBFbGFzdGljIEluZmVyZW5jZSAoRUkpLCBhbmQgd2lsbCBoZWxwIGN1cnJlbnQgY3VzdG9tZXJzIG1pZ3JhdGUgdGhlaXIgd29ya2xvYWRzIHRvIG9wdGlvbnMgdGhhdCBvZmZlciBiZXR0ZXIgcHJpY2UgYW5kIHBlcmZvcm1hbmNlLiBBZnRlciBBcHJpbCAxNSwgMjAyMywgbmV3IGN1c3RvbWVycyB3aWxsIG5vdCBiZSBhYmxlIHRvIGxhdW5jaCBpbnN0YW5jZXMgd2l0aCBBbWF6b24gRUkgYWNjZWxlcmF0b3JzIGluIEFtYXpvbiBTYWdlTWFrZXIsIEVDUywgb3IgRUMyLiBIb3dldmVyLCBjdXN0b21lcnMgd2hvIGhhdmUgdXNlZCBBbWF6b24gRUkgYXQgbGVhc3Qgb25jZSBkdXJpbmcgdGhlIHBhc3QgMzAtZGF5IHBlcmlvZCBhcmUgY29uc2lkZXJlZCBjdXJyZW50IGN1c3RvbWVycyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBzZXJ2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfRUNTX1NFUlZJQ0Uge1xuLyoqXG4gKiBUaGUgcGxhdGZvcm0gdmVyc2lvbiB0aGF0IHlvdXIgdGFza3MgaW4gdGhlIHNlcnZpY2UgYXJlIHJ1bm5pbmcgb24uIEEgcGxhdGZvcm0gdmVyc2lvbiBpcyBzcGVjaWZpZWQgb25seSBmb3IgdGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuIElmIG9uZSBpc24ndCBzcGVjaWZpZWQsIHRoZSBgYExBVEVTVGBgIHBsYXRmb3JtIHZlcnNpb24gaXMgdXNlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbcGxhdGZvcm0gdmVyc2lvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3BsYXRmb3JtX3ZlcnNpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUGxhdGZvcm1WZXJzaW9uPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHByb3BhZ2F0ZSB0aGUgdGFncyBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gdG8gdGhlIHRhc2suIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIHRhZ3MgYXJlbid0IHByb3BhZ2F0ZWQuIFRhZ3MgY2FuIG9ubHkgYmUgcHJvcGFnYXRlZCB0byB0aGUgdGFzayBkdXJpbmcgdGFzayBjcmVhdGlvbi4gVG8gYWRkIHRhZ3MgdG8gYSB0YXNrIGFmdGVyIHRhc2sgY3JlYXRpb24sIHVzZSB0aGUgW1RhZ1Jlc291cmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1RhZ1Jlc291cmNlLmh0bWwpIEFQSSBhY3Rpb24uXG4gKiAgWW91IG11c3Qgc2V0IHRoaXMgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIGBgTk9ORWBgIHdoZW4geW91IHVzZSBDb3N0IEV4cGxvcmVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIHVzYWdlIHJlcG9ydHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzYWdlLXJlcG9ydHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBkZWZhdWx0IGlzIGBgTk9ORWBgLlxuICovXG5Qcm9wYWdhdGVUYWdzPzogKFwiU0VSVklDRVwiIHwgXCJUQVNLX0RFRklOSVRJT05cIilcblNlcnZpY2VBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBsYWNlbWVudCBzdHJhdGVneSBvYmplY3RzIHRvIHVzZSBmb3IgdGFza3MgaW4geW91ciBzZXJ2aWNlLiBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIG9mIDUgc3RyYXRlZ3kgcnVsZXMgZm9yIGVhY2ggc2VydmljZS5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBQbGFjZW1lbnRTdHJhdGVneWBgIGFycmF5LlxuICovXG5QbGFjZW1lbnRTdHJhdGVnaWVzPzogUGxhY2VtZW50U3RyYXRlZ3lbXVxuLyoqXG4gKiBUaGUgZGV0YWlscyBvZiB0aGUgc2VydmljZSBkaXNjb3ZlcnkgcmVnaXN0cnkgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIGRpc2NvdmVyeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1kaXNjb3ZlcnkuaHRtbCkuXG4gKiAgIEVhY2ggc2VydmljZSBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIG9uZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBNdWx0aXBsZSBzZXJ2aWNlIHJlZ2lzdHJpZXMgZm9yIGVhY2ggc2VydmljZSBpc24ndCBzdXBwb3J0ZWQuXG4gKiAgICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFNlcnZpY2VSZWdpc3RyeWBgIGFycmF5LlxuICovXG5TZXJ2aWNlUmVnaXN0cmllcz86IFNlcnZpY2VSZWdpc3RyeVtdXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhIHZvbHVtZSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhcyBhIHZvbHVtZSB0aGF0IGlzIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZvbHVtZSB0eXBlIGlzIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uYGAgYXJyYXkuXG4gKi9cblZvbHVtZUNvbmZpZ3VyYXRpb25zPzogU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25bXVxuLyoqXG4gKiBUaGUgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgc2VydmljZS5cbiAqICBJZiBhIGBgY2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgaXMgc3BlY2lmaWVkLCB0aGUgYGBsYXVuY2hUeXBlYGAgcGFyYW1ldGVyIG11c3QgYmUgb21pdHRlZC4gSWYgbm8gYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBvciBgYGxhdW5jaFR5cGVgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGRlZmF1bHRDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBmb3IgdGhlIGNsdXN0ZXIgaXMgdXNlZC5cbiAqICBBIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBjb250YWluIGEgbWF4aW11bSBvZiAyMCBjYXBhY2l0eSBwcm92aWRlcnMuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbWBgIGFycmF5LlxuICovXG5DYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3k/OiBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtW11cbi8qKlxuICogVGhlIGxhdW5jaCB0eXBlIG9uIHdoaWNoIHRvIHJ1biB5b3VyIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgTGF1bmNoIFR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5MYXVuY2hUeXBlPzogKFwiRUMyXCIgfCBcIkZBUkdBVEVcIiB8IFwiRVhURVJOQUxcIilcbk5hbWU/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIEF2YWlsYWJpbGl0eSBab25lIHJlYmFsYW5jaW5nIGZvciB0aGUgc2VydmljZS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCYWxhbmNpbmcgYW4gQW1hem9uIEVDUyBzZXJ2aWNlIGFjcm9zcyBBdmFpbGFiaWxpdHkgWm9uZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtcmViYWxhbmNpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5BdmFpbGFiaWxpdHlab25lUmViYWxhbmNpbmc/OiAoXCJFTkFCTEVEXCIgfCBcIkRJU0FCTEVEXCIpXG4vKipcbiAqIFRoZSBzY2hlZHVsaW5nIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuXG4gKiAgVGhlcmUgYXJlIHR3byBzZXJ2aWNlIHNjaGVkdWxlciBzdHJhdGVnaWVzIGF2YWlsYWJsZTpcbiAqICAgKyAgYGBSRVBMSUNBYGAtVGhlIHJlcGxpY2Egc2NoZWR1bGluZyBzdHJhdGVneSBwbGFjZXMgYW5kIG1haW50YWlucyB0aGUgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MgYWNyb3NzIHlvdXIgY2x1c3Rlci4gQnkgZGVmYXVsdCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHNwcmVhZHMgdGFza3MgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lcy4gWW91IGNhbiB1c2UgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llcyBhbmQgY29uc3RyYWludHMgdG8gY3VzdG9taXplIHRhc2sgcGxhY2VtZW50IGRlY2lzaW9ucy4gVGhpcyBzY2hlZHVsZXIgc3RyYXRlZ3kgaXMgcmVxdWlyZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMuXG4gKiAgICsgIGBgREFFTU9OYGAtVGhlIGRhZW1vbiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRlcGxveXMgZXhhY3RseSBvbmUgdGFzayBvbiBlYWNoIGFjdGl2ZSBjb250YWluZXIgaW5zdGFuY2UgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIHRoYXQgeW91IHNwZWNpZnkgaW4geW91ciBjbHVzdGVyLiBUaGUgc2VydmljZSBzY2hlZHVsZXIgYWxzbyBldmFsdWF0ZXMgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGZvciBydW5uaW5nIHRhc2tzIGFuZCB3aWxsIHN0b3AgdGFza3MgdGhhdCBkb24ndCBtZWV0IHRoZSBwbGFjZW1lbnQgY29uc3RyYWludHMuIFdoZW4geW91J3JlIHVzaW5nIHRoaXMgc3RyYXRlZ3ksIHlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcywgYSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSwgb3IgdXNlIFNlcnZpY2UgQXV0byBTY2FsaW5nIHBvbGljaWVzLlxuICogICBUYXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSBvciB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMgZG9uJ3Qgc3VwcG9ydCB0aGUgYGBEQUVNT05gYCBzY2hlZHVsaW5nIHN0cmF0ZWd5LlxuICovXG5TY2hlZHVsaW5nU3RyYXRlZ3k/OiAoXCJEQUVNT05cIiB8IFwiUkVQTElDQVwiKVxuTmV0d29ya0NvbmZpZ3VyYXRpb24/OiBOZXR3b3JrQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gdGhlIHNlcnZpY2UgdG8gaGVscCB5b3UgY2F0ZWdvcml6ZSBhbmQgb3JnYW5pemUgdGhlbS4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLCBib3RoIG9mIHdoaWNoIHlvdSBkZWZpbmUuIFdoZW4gYSBzZXJ2aWNlIGlzIGRlbGV0ZWQsIHRoZSB0YWdzIGFyZSBkZWxldGVkIGFzIHdlbGwuXG4gKiAgVGhlIGZvbGxvd2luZyBiYXNpYyByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGFnczpcbiAqICAgKyAgTWF4aW11bSBudW1iZXIgb2YgdGFncyBwZXIgcmVzb3VyY2UgLSA1MFxuICogICArICBGb3IgZWFjaCByZXNvdXJjZSwgZWFjaCB0YWcga2V5IG11c3QgYmUgdW5pcXVlLCBhbmQgZWFjaCB0YWcga2V5IGNhbiBoYXZlIG9ubHkgb25lIHZhbHVlLlxuICogICArICBNYXhpbXVtIGtleSBsZW5ndGggLSAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIE1heGltdW0gdmFsdWUgbGVuZ3RoIC0gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBJZiB5b3VyIHRhZ2dpbmcgc2NoZW1hIGlzIHVzZWQgYWNyb3NzIG11bHRpcGxlIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIHJlbWVtYmVyIHRoYXQgb3RoZXIgc2VydmljZXMgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhcmFjdGVycy4gR2VuZXJhbGx5IGFsbG93ZWQgY2hhcmFjdGVycyBhcmU6IGxldHRlcnMsIG51bWJlcnMsIGFuZCBzcGFjZXMgcmVwcmVzZW50YWJsZSBpbiBVVEYtOCwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogKyAtID0gLiBfIDogLyBALlxuICogICArICBUYWcga2V5cyBhbmQgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqICAgKyAgRG8gbm90IHVzZSBgYGF3czpgYCwgYGBBV1M6YGAsIG9yIGFueSB1cHBlciBvciBsb3dlcmNhc2UgY29tYmluYXRpb24gb2Ygc3VjaCBhcyBhIHByZWZpeCBmb3IgZWl0aGVyIGtleXMgb3IgdmFsdWVzIGFzIGl0IGlzIHJlc2VydmVkIGZvciBBV1MgdXNlLiBZb3UgY2Fubm90IGVkaXQgb3IgZGVsZXRlIHRhZyBrZXlzIG9yIHZhbHVlcyB3aXRoIHRoaXMgcHJlZml4LiBUYWdzIHdpdGggdGhpcyBwcmVmaXggZG8gbm90IGNvdW50IGFnYWluc3QgeW91ciB0YWdzIHBlciByZXNvdXJjZSBsaW1pdC5cbiAqL1xuVGFncz86IFRhZ1tdXG4vKipcbiAqIFRoZSBwZXJpb2Qgb2YgdGltZSwgaW4gc2Vjb25kcywgdGhhdCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciBpZ25vcmVzIHVuaGVhbHRoeSBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBWUEMgTGF0dGljZSwgYW5kIGNvbnRhaW5lciBoZWFsdGggY2hlY2tzIGFmdGVyIGEgdGFzayBoYXMgZmlyc3Qgc3RhcnRlZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIHZhbHVlLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLiBJZiB5b3UgZG9uJ3QgdXNlIGFueSBvZiB0aGUgaGVhbHRoIGNoZWNrcywgdGhlbiBgYGhlYWx0aENoZWNrR3JhY2VQZXJpb2RTZWNvbmRzYGAgaXMgdW51c2VkLlxuICogIElmIHlvdXIgc2VydmljZSdzIHRhc2tzIHRha2UgYSB3aGlsZSB0byBzdGFydCBhbmQgcmVzcG9uZCB0byBoZWFsdGggY2hlY2tzLCB5b3UgY2FuIHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIG9mIHVwIHRvIDIsMTQ3LDQ4Myw2NDcgc2Vjb25kcyAoYWJvdXQgNjkgeWVhcnMpLiBEdXJpbmcgdGhhdCB0aW1lLCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciBpZ25vcmVzIGhlYWx0aCBjaGVjayBzdGF0dXMuIFRoaXMgZ3JhY2UgcGVyaW9kIGNhbiBwcmV2ZW50IHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBmcm9tIG1hcmtpbmcgdGFza3MgYXMgdW5oZWFsdGh5IGFuZCBzdG9wcGluZyB0aGVtIGJlZm9yZSB0aGV5IGhhdmUgdGltZSB0byBjb21lIHVwLlxuICovXG5IZWFsdGhDaGVja0dyYWNlUGVyaW9kU2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byB0dXJuIG9uIEFtYXpvbiBFQ1MgbWFuYWdlZCB0YWdzIGZvciB0aGUgdGFza3Mgd2l0aGluIHRoZSBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYWdnaW5nIHlvdXIgQW1hem9uIEVDUyByZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy11c2luZy10YWdzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBXaGVuIHlvdSB1c2UgQW1hem9uIEVDUyBtYW5hZ2VkIHRhZ3MsIHlvdSBuZWVkIHRvIHNldCB0aGUgYGBwcm9wYWdhdGVUYWdzYGAgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKi9cbkVuYWJsZUVDU01hbmFnZWRUYWdzPzogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbmFsaXR5IGlzIHR1cm5lZCBvbiBmb3IgdGhlIHNlcnZpY2UuIElmIGBgdHJ1ZWBgLCB0aGUgZXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9uYWxpdHkgaXMgdHVybmVkIG9uIGZvciBhbGwgY29udGFpbmVycyBpbiB0YXNrcyBhcyBwYXJ0IG9mIHRoZSBzZXJ2aWNlLlxuICovXG5FbmFibGVFeGVjdXRlQ29tbWFuZD86IGJvb2xlYW5cbi8qKlxuICogQW4gYXJyYXkgb2YgcGxhY2VtZW50IGNvbnN0cmFpbnQgb2JqZWN0cyB0byB1c2UgZm9yIHRhc2tzIGluIHlvdXIgc2VydmljZS4gWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSBvZiAxMCBjb25zdHJhaW50cyBmb3IgZWFjaCB0YXNrLiBUaGlzIGxpbWl0IGluY2x1ZGVzIGNvbnN0cmFpbnRzIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYW5kIHRob3NlIHNwZWNpZmllZCBhdCBydW50aW1lLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFBsYWNlbWVudENvbnN0cmFpbnRgYCBhcnJheS5cbiAqL1xuUGxhY2VtZW50Q29uc3RyYWludHM/OiBQbGFjZW1lbnRDb25zdHJhaW50W11cbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgY2x1c3RlciB0aGF0IHlvdSBydW4geW91ciBzZXJ2aWNlIG9uLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBjbHVzdGVyLCB0aGUgZGVmYXVsdCBjbHVzdGVyIGlzIGFzc3VtZWQuXG4gKi9cbkNsdXN0ZXI/OiBzdHJpbmdcbi8qKlxuICogQSBsaXN0IG9mIGxvYWQgYmFsYW5jZXIgb2JqZWN0cyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmljZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgUm9sZWBgIHByb3BlcnR5LCBgYExvYWRCYWxhbmNlcnNgYCBtdXN0IGJlIHNwZWNpZmllZCBhcyB3ZWxsLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG51bWJlciBvZiBsb2FkIGJhbGFuY2VycyB0aGF0IHlvdSBjYW4gc3BlY2lmeSBwZXIgc2VydmljZSwgc2VlIFtTZXJ2aWNlIExvYWQgQmFsYW5jaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWxvYWQtYmFsYW5jaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBMb2FkQmFsYW5jZXJgYCBhcnJheS5cbiAqL1xuTG9hZEJhbGFuY2Vycz86IExvYWRCYWxhbmNlcltdXG5TZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24/OiBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG51bWJlciBvZiBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc3BlY2lmaWVkIHRhc2sgZGVmaW5pdGlvbiB0byBwbGFjZSBhbmQga2VlcCBydW5uaW5nIGluIHlvdXIgc2VydmljZS5cbiAqICBGb3IgbmV3IHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IHZhbHVlIG9mIGBgMWBgIGlzIHVzZWQuIFdoZW4gdXNpbmcgdGhlIGBgREFFTU9OYGAgc2NoZWR1bGluZyBzdHJhdGVneSwgdGhlIGRlc2lyZWQgY291bnQgaXMgbm90IHJlcXVpcmVkLlxuICogIEZvciBleGlzdGluZyBzZXJ2aWNlcywgaWYgYSBkZXNpcmVkIGNvdW50IGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIG9taXR0ZWQgZnJvbSB0aGUgb3BlcmF0aW9uLlxuICovXG5EZXNpcmVkQ291bnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZXJ2aWNlIGJlaW5nIGNyZWF0ZWQuXG4gKi9cblZwY0xhdHRpY2VDb25maWd1cmF0aW9ucz86IFZwY0xhdHRpY2VDb25maWd1cmF0aW9uW11cbkRlcGxveW1lbnRDb250cm9sbGVyPzogRGVwbG95bWVudENvbnRyb2xsZXJcbi8qKlxuICogVGhlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBhbGxvd3MgQW1hem9uIEVDUyB0byBtYWtlIGNhbGxzIHRvIHlvdXIgbG9hZCBiYWxhbmNlciBvbiB5b3VyIGJlaGFsZi4gVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBwZXJtaXR0ZWQgaWYgeW91IGFyZSB1c2luZyBhIGxvYWQgYmFsYW5jZXIgd2l0aCB5b3VyIHNlcnZpY2UgYW5kIHlvdXIgdGFzayBkZWZpbml0aW9uIGRvZXNuJ3QgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgcm9sZWBgIHBhcmFtZXRlciwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGEgbG9hZCBiYWxhbmNlciBvYmplY3Qgd2l0aCB0aGUgYGBsb2FkQmFsYW5jZXJzYGAgcGFyYW1ldGVyLlxuICogICBJZiB5b3VyIGFjY291bnQgaGFzIGFscmVhZHkgY3JlYXRlZCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlLCB0aGF0IHJvbGUgaXMgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIHVubGVzcyB5b3Ugc3BlY2lmeSBhIHJvbGUgaGVyZS4gVGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgaXMgcmVxdWlyZWQgaWYgeW91ciB0YXNrIGRlZmluaXRpb24gdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgb3IgaWYgdGhlIHNlcnZpY2UgaXMgY29uZmlndXJlZCB0byB1c2Ugc2VydmljZSBkaXNjb3ZlcnksIGFuIGV4dGVybmFsIGRlcGxveW1lbnQgY29udHJvbGxlciwgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcywgb3IgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3JzIGluIHdoaWNoIGNhc2UgeW91IGRvbid0IHNwZWNpZnkgYSByb2xlIGhlcmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIHNlcnZpY2UtbGlua2VkIHJvbGVzIGZvciBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZy1zZXJ2aWNlLWxpbmtlZC1yb2xlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc3BlY2lmaWVkIHJvbGUgaGFzIGEgcGF0aCBvdGhlciB0aGFuIGBgL2BgLCB0aGVuIHlvdSBtdXN0IGVpdGhlciBzcGVjaWZ5IHRoZSBmdWxsIHJvbGUgQVJOICh0aGlzIGlzIHJlY29tbWVuZGVkKSBvciBwcmVmaXggdGhlIHJvbGUgbmFtZSB3aXRoIHRoZSBwYXRoLiBGb3IgZXhhbXBsZSwgaWYgYSByb2xlIHdpdGggdGhlIG5hbWUgYGBiYXJgYCBoYXMgYSBwYXRoIG9mIGBgL2Zvby9gYCB0aGVuIHlvdSB3b3VsZCBzcGVjaWZ5IGBgL2Zvby9iYXJgYCBhcyB0aGUgcm9sZSBuYW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtGcmllbmRseSBuYW1lcyBhbmQgcGF0aHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWRlbnRpZmllcnMuaHRtbCNpZGVudGlmaWVycy1mcmllbmRseS1uYW1lcykgaW4gdGhlICpJQU0gVXNlciBHdWlkZSouXG4gKi9cblJvbGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgZmFtaWx5YGAgYW5kIGBgcmV2aXNpb25gYCAoYGBmYW1pbHk6cmV2aXNpb25gYCkgb3IgZnVsbCBBUk4gb2YgdGhlIHRhc2sgZGVmaW5pdGlvbiB0byBydW4gaW4geW91ciBzZXJ2aWNlLiBJZiBhIGBgcmV2aXNpb25gYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgYGBBQ1RJVkVgYCByZXZpc2lvbiBpcyB1c2VkLlxuICogIEEgdGFzayBkZWZpbml0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBgYEVDU2BgIG9yIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXJzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlcGxveW1lbnQgdHlwZXMsIHNlZSBbQW1hem9uIEVDUyBkZXBsb3ltZW50IHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGVzLmh0bWwpLlxuICovXG5UYXNrRGVmaW5pdGlvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB5b3VyIHNlcnZpY2UuIFVwIHRvIDI1NSBsZXR0ZXJzICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSksIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucyBhcmUgYWxsb3dlZC4gU2VydmljZSBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBjbHVzdGVyLCBidXQgeW91IGNhbiBoYXZlIHNpbWlsYXJseSBuYW1lZCBzZXJ2aWNlcyBpbiBtdWx0aXBsZSBjbHVzdGVycyB3aXRoaW4gYSBSZWdpb24gb3IgYWNyb3NzIG11bHRpcGxlIFJlZ2lvbnMuXG4gKiAgIFRoZSBzdGFjayB1cGRhdGUgZmFpbHMgaWYgeW91IGNoYW5nZSBhbnkgcHJvcGVydGllcyB0aGF0IHJlcXVpcmUgcmVwbGFjZW1lbnQgYW5kIHRoZSBgYFNlcnZpY2VOYW1lYGAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VOYW1lYGAgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGNsdXN0ZXIuXG4gKi9cblNlcnZpY2VOYW1lPzogc3RyaW5nXG5EZXBsb3ltZW50Q29uZmlndXJhdGlvbj86IERlcGxveW1lbnRDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSBmb3IgYSB0YXNrIG9yIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IHN0cmF0ZWdpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stcGxhY2VtZW50LXN0cmF0ZWdpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudFN0cmF0ZWd5IHtcbi8qKlxuICogVGhlIGZpZWxkIHRvIGFwcGx5IHRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgYWdhaW5zdC4gRm9yIHRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGluc3RhbmNlSWRgYCAob3IgYGBob3N0YGAsIHdoaWNoIGhhcyB0aGUgc2FtZSBlZmZlY3QpLCBvciBhbnkgcGxhdGZvcm0gb3IgY3VzdG9tIGF0dHJpYnV0ZSB0aGF0J3MgYXBwbGllZCB0byBhIGNvbnRhaW5lciBpbnN0YW5jZSwgc3VjaCBhcyBgYGF0dHJpYnV0ZTplY3MuYXZhaWxhYmlsaXR5LXpvbmVgYC4gRm9yIHRoZSBgYGJpbnBhY2tgYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHZhbGlkIHZhbHVlcyBhcmUgYGBjcHVgYCBhbmQgYGBtZW1vcnlgYC4gRm9yIHRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSwgdGhpcyBmaWVsZCBpcyBub3QgdXNlZC5cbiAqL1xuRmllbGQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgcGxhY2VtZW50IHN0cmF0ZWd5LiBUaGUgYGByYW5kb21gYCBwbGFjZW1lbnQgc3RyYXRlZ3kgcmFuZG9tbHkgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzLiBUaGUgYGBzcHJlYWRgYCBwbGFjZW1lbnQgc3RyYXRlZ3kgc3ByZWFkcyBwbGFjZW1lbnQgYWNyb3NzIGF2YWlsYWJsZSBjYW5kaWRhdGVzIGV2ZW5seSBiYXNlZCBvbiB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gVGhlIGBgYmlucGFja2BgIHN0cmF0ZWd5IHBsYWNlcyB0YXNrcyBvbiBhdmFpbGFibGUgY2FuZGlkYXRlcyB0aGF0IGhhdmUgdGhlIGxlYXN0IGF2YWlsYWJsZSBhbW91bnQgb2YgdGhlIHJlc291cmNlIHRoYXQncyBzcGVjaWZpZWQgd2l0aCB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUsIGlmIHlvdSBiaW5wYWNrIG9uIG1lbW9yeSwgYSB0YXNrIGlzIHBsYWNlZCBvbiB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHJlbWFpbmluZyBtZW1vcnkgYnV0IHN0aWxsIGVub3VnaCB0byBydW4gdGhlIHRhc2suXG4gKi9cblR5cGU6IChcImJpbnBhY2tcIiB8IFwicmFuZG9tXCIgfCBcInNwcmVhZFwiKVxufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBmb3IgdGhlIHNlcnZpY2UgcmVnaXN0cnkuXG4gKiAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGFyZSBub3Qgc3VwcG9ydGVkLlxuICogIFdoZW4geW91IGFkZCwgdXBkYXRlLCBvciByZW1vdmUgdGhlIHNlcnZpY2UgcmVnaXN0cmllcyBjb25maWd1cmF0aW9uLCBBbWF6b24gRUNTIHN0YXJ0cyBhIG5ldyBkZXBsb3ltZW50LiBOZXcgdGFza3MgYXJlIHJlZ2lzdGVyZWQgYW5kIGRlcmVnaXN0ZXJlZCB0byB0aGUgdXBkYXRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVJlZ2lzdHJ5IHtcbi8qKlxuICogVGhlIGNvbnRhaW5lciBuYW1lIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZS4gSXQncyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdXNlZCBpZiB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2Ugc3BlY2lmaWVkIGFuIFNSViByZWNvcmQuIFRoaXMgZmllbGQgbWlnaHQgYmUgdXNlZCBpZiBib3RoIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgU1JWIHJlY29yZHMgYXJlIHVzZWQuXG4gKi9cblBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24geW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIGEgdHlwZSBTUlYgRE5TIHJlY29yZCBpcyB1c2VkLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBvciBhIGBgcG9ydGBgIHZhbHVlLiBIb3dldmVyLCB5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VydmljZSByZWdpc3RyeS4gVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgc2VydmljZSByZWdpc3RyeSBpcyBDTUFQLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGVTZXJ2aWNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbCkuXG4gKi9cblJlZ2lzdHJ5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhIHZvbHVtZSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhcyBhIHZvbHVtZSB0aGF0IGlzIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZvbHVtZSB0eXBlIGlzIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uIHtcbk1hbmFnZWRFQlNWb2x1bWU/OiBTZXJ2aWNlTWFuYWdlZEVCU1ZvbHVtZUNvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHZvbHVtZS4gVGhpcyB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgbmFtZSBmcm9tIHRoZSBgYFZvbHVtZWBgIG9iamVjdCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBbWF6b24gRUJTIHZvbHVtZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBhbmQgbWFuYWdlcyBvbiB5b3VyIGJlaGFsZi4gVGhlc2Ugc2V0dGluZ3MgYXJlIHVzZWQgdG8gY3JlYXRlIGVhY2ggQW1hem9uIEVCUyB2b2x1bWUsIHdpdGggb25lIHZvbHVtZSBjcmVhdGVkIGZvciBlYWNoIHRhc2sgaW4gdGhlIHNlcnZpY2UuIFRoZSBBbWF6b24gRUJTIHZvbHVtZXMgYXJlIHZpc2libGUgaW4geW91ciBhY2NvdW50IGluIHRoZSBBbWF6b24gRUMyIGNvbnNvbGUgb25jZSB0aGV5IGFyZSBjcmVhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzbmFwc2hvdCB0aGF0IEFtYXpvbiBFQ1MgdXNlcyB0byBjcmVhdGUgdGhlIHZvbHVtZS4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBzbmFwc2hvdCBJRCBvciBhIHZvbHVtZSBzaXplLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFNuYXBzaG90SWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblNuYXBzaG90SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZvbHVtZSB0eXBlLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFZvbHVtZVR5cGVgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQlMgdm9sdW1lIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSouXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2b2x1bWUgdHlwZXMuXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSBTU0Q6IGBgZ3AyYGB8YGBncDNgYFxuICogICArICBQcm92aXNpb25lZCBJT1BTIFNTRDogYGBpbzFgYHxgYGlvMmBgXG4gKiAgICsgIFRocm91Z2hwdXQgT3B0aW1pemVkIEhERDogYGBzdDFgYFxuICogICArICBDb2xkIEhERDogYGBzYzFgYFxuICogICArICBNYWduZXRpYzogYGBzdGFuZGFyZGBgXG4gKiAgIFRoZSBtYWduZXRpYyB2b2x1bWUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIG9uIEZhcmdhdGUuXG4gKi9cblZvbHVtZVR5cGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIGlkZW50aWZpZXIgb2YgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSB0byB1c2UgZm9yIEFtYXpvbiBFQlMgZW5jcnlwdGlvbi4gV2hlbiBlbmNyeXB0aW9uIGlzIHR1cm5lZCBvbiBhbmQgbm8gQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgQVdTIG1hbmFnZWQga2V5IGZvciBBbWF6b24gRUJTIHZvbHVtZXMgaXMgdXNlZC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBLbXNLZXlJZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqICAgQVdTIGF1dGhlbnRpY2F0ZXMgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSBhc3luY2hyb25vdXNseS4gVGhlcmVmb3JlLCBpZiB5b3Ugc3BlY2lmeSBhbiBJRCwgYWxpYXMsIG9yIEFSTiB0aGF0IGlzIGludmFsaWQsIHRoZSBhY3Rpb24gY2FuIGFwcGVhciB0byBjb21wbGV0ZSwgYnV0IGV2ZW50dWFsbHkgZmFpbHMuXG4gKi9cbkttc0tleUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSB2b2x1bWUuIEFtYXpvbiBFQ1MgYXBwbGllcyBzZXJ2aWNlLW1hbmFnZWQgdGFncyBieSBkZWZhdWx0LiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRhZ1NwZWNpZmljYXRpb25zLk5gYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblRhZ1NwZWNpZmljYXRpb25zPzogRUJTVGFnU3BlY2lmaWNhdGlvbltdXG4vKipcbiAqIFRoZSBmaWxlc3lzdGVtIHR5cGUgZm9yIHRoZSB2b2x1bWUuIEZvciB2b2x1bWVzIGNyZWF0ZWQgZnJvbSBhIHNuYXBzaG90LCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBzYW1lIGZpbGVzeXN0ZW0gdHlwZSB0aGF0IHRoZSB2b2x1bWUgd2FzIHVzaW5nIHdoZW4gdGhlIHNuYXBzaG90IHdhcyBjcmVhdGVkLiBJZiB0aGVyZSBpcyBhIGZpbGVzeXN0ZW0gdHlwZSBtaXNtYXRjaCwgdGhlIHRhc2sgd2lsbCBmYWlsIHRvIHN0YXJ0LlxuICogIFRoZSBhdmFpbGFibGUgTGludXggZmlsZXN5c3RlbSB0eXBlcyBhcmXigKggYGBleHQzYGAsIGBgZXh0NGBgLCBhbmQgYGB4ZnNgYC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgYGB4ZnNgYCBmaWxlc3lzdGVtIHR5cGUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICogIFRoZSBhdmFpbGFibGUgV2luZG93cyBmaWxlc3lzdGVtIHR5cGVzIGFyZSBgYE5URlNgYC5cbiAqL1xuRmlsZXN5c3RlbVR5cGU/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZvbHVtZSBzaG91bGQgYmUgZW5jcnlwdGVkLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIGVuY3J5cHRpb24gaXMgdHVybmVkIG9uIGJ5IGRlZmF1bHQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgRW5jcnlwdGVkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5FbmNyeXB0ZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSB0aHJvdWdocHV0IHRvIHByb3Zpc2lvbiBmb3IgYSB2b2x1bWUsIGluIE1pQi9zLCB3aXRoIGEgbWF4aW11bSBvZiAxLDAwMCBNaUIvcy4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBUaHJvdWdocHV0YGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogICBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGBgZ3AzYGAgdm9sdW1lIHR5cGUuXG4gKi9cblRocm91Z2hwdXQ/OiBudW1iZXJcblZvbHVtZUluaXRpYWxpemF0aW9uUmF0ZT86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpLiBGb3IgYGBncDNgYCwgYGBpbzFgYCwgYW5kIGBgaW8yYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgSU9QUyB0aGF0IGFyZSBwcm92aXNpb25lZCBmb3IgdGhlIHZvbHVtZS4gRm9yIGBgZ3AyYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBiYXNlbGluZSBwZXJmb3JtYW5jZSBvZiB0aGUgdm9sdW1lIGFuZCB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgdm9sdW1lIGFjY3VtdWxhdGVzIEkvTyBjcmVkaXRzIGZvciBidXJzdGluZy5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZS5cbiAqICAgKyAgYGBncDNgYDogMywwMDAgLSAxNiwwMDAgSU9QU1xuICogICArICBgYGlvMWBgOiAxMDAgLSA2NCwwMDAgSU9QU1xuICogICArICBgYGlvMmBgOiAxMDAgLSAyNTYsMDAwIElPUFNcbiAqICAgXG4gKiAgVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIGBgaW8xYGAgYW5kIGBgaW8yYGAgdm9sdW1lIHR5cGVzLiBUaGUgZGVmYXVsdCBmb3IgYGBncDNgYCB2b2x1bWVzIGlzIGBgMywwMDAgSU9QU2BgLiBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBgYHN0MWBgLCBgYHNjMWBgLCBvciBgYHN0YW5kYXJkYGAgdm9sdW1lIHR5cGVzLlxuICogIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgSW9wc2BgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuSW9wcz86IG51bWJlclxuLyoqXG4gKiBUaGUgc2l6ZSBvZiB0aGUgdm9sdW1lIGluIEdpQi4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSB2b2x1bWUgc2l6ZSBvciBhIHNuYXBzaG90IElELiBJZiB5b3Ugc3BlY2lmeSBhIHNuYXBzaG90IElELCB0aGUgc25hcHNob3Qgc2l6ZSBpcyB1c2VkIGZvciB0aGUgdm9sdW1lIHNpemUgYnkgZGVmYXVsdC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSB2b2x1bWUgc2l6ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNuYXBzaG90IHNpemUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgU2l6ZWBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZvbHVtZSBzaXplIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZS5cbiAqICAgKyAgYGBncDJgYCBhbmQgYGBncDNgYDogMS0xNiwzODRcbiAqICAgKyAgYGBpbzFgYCBhbmQgYGBpbzJgYDogNC0xNiwzODRcbiAqICAgKyAgYGBzdDFgYCBhbmQgYGBzYzFgYDogMTI1LTE2LDM4NFxuICogICArICBgYHN0YW5kYXJkYGA6IDEtMSwwMjRcbiAqL1xuU2l6ZUluR2lCPzogbnVtYmVyXG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIElBTSByb2xlIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgdm9sdW1lLiBUaGlzIGlzIHRoZSBBbWF6b24gRUNTIGluZnJhc3RydWN0dXJlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBtYW5hZ2UgeW91ciBBV1MgaW5mcmFzdHJ1Y3R1cmUuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgQW1hem9uIEVDUy1tYW5hZ2VkIGBgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yVm9sdW1lc2BgIElBTSBwb2xpY3kgd2l0aCB0aGlzIHJvbGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2luZnJhc3RydWN0dXJlX0lBTV9yb2xlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDUyBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHRhZyBzcGVjaWZpY2F0aW9ucyBvZiBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFQlNUYWdTcGVjaWZpY2F0aW9uIHtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHByb3BhZ2F0ZSB0aGUgdGFncyBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gdG8g4oCodGhlIEFtYXpvbiBFQlMgdm9sdW1lLiBUYWdzIGNhbiBvbmx5IHByb3BhZ2F0ZSB0byBhIGBgU0VSVklDRWBgIHNwZWNpZmllZCBpbiDigKhgYFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uYGAuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIHRhZ3MgYXJlbid0IOKAqHByb3BhZ2F0ZWQuXG4gKi9cblByb3BhZ2F0ZVRhZ3M/OiAoXCJTRVJWSUNFXCIgfCBcIlRBU0tfREVGSU5JVElPTlwiKVxuLyoqXG4gKiBUaGUgdHlwZSBvZiB2b2x1bWUgcmVzb3VyY2UuXG4gKi9cblJlc291cmNlVHlwZTogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIGFwcGxpZWQgdG8gdGhpcyBBbWF6b24gRUJTIHZvbHVtZS4gYGBBbWF6b25FQ1NDcmVhdGVkYGAgYW5kIGBgQW1hem9uRUNTTWFuYWdlZGBgIGFyZSByZXNlcnZlZCB0YWdzIHRoYXQgY2FuJ3QgYmUgdXNlZC5cbiAqL1xuVGFncz86IFRhZ1tdXG59XG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byBhIHJlc291cmNlIHRvIGhlbHAgeW91IGNhdGVnb3JpemUgYW5kIG9yZ2FuaXplIHRoZW0uIEVhY2ggdGFnIGNvbnNpc3RzIG9mIGEga2V5IGFuZCBhbiBvcHRpb25hbCB2YWx1ZS4gWW91IGRlZmluZSB0aGVtLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKiAgIFxuICogIEluIG9yZGVyIHRvIHRhZyBhIHNlcnZpY2UgdGhhdCBoYXMgdGhlIGZvbGxvd2luZyBBUk4gZm9ybWF0LCB5b3UgbmVlZCB0byBtaWdyYXRlIHRoZSBzZXJ2aWNlIHRvIHRoZSBsb25nIEFSTi4gWW91IG11c3QgdXNlIHRoZSBBUEksIENMSSBvciBjb25zb2xlIHRvIG1pZ3JhdGUgdGhlIHNlcnZpY2UgQVJOLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNaWdyYXRlIGFuIHNob3J0IHNlcnZpY2UgQVJOIHRvIGEgbG9uZyBBUk5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtYXJuLW1pZ3JhdGlvbi5odG1sKSBpbiB0aGUgKkRldmVsb3BlciBHdWlkZSouXG4gKiAgIGBgYXJuOmF3czplY3M6cmVnaW9uOmF3c19hY2NvdW50X2lkOnNlcnZpY2Uvc2VydmljZS1uYW1lYGAgXG4gKiAgQWZ0ZXIgdGhlIG1pZ3JhdGlvbiBpcyBjb21wbGV0ZSwgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZTpcbiAqICAgKyAgIFRoZSBzZXJ2aWNlIEFSTiBpczogYGBhcm46YXdzOmVjczpyZWdpb246YXdzX2FjY291bnRfaWQ6c2VydmljZS9jbHVzdGVyLW5hbWUvc2VydmljZS1uYW1lYGBcbiAqICAgKyAgWW91IGNhbiB1c2UgQ0ZOIHRvIHRhZyB0aGUgc2VydmljZSBhcyB5b3Ugd291bGQgYSBzZXJ2aWNlIHdpdGggYSBsb25nIEFSTiBmb3JtYXQuXG4gKiAgICsgIFdoZW4gdGhlIGBgUGh5c2ljYWxSZXNvdXJjZUlkYGAgaW4gdGhlIENGTiBzdGFjayByZXByZXNlbnRzIGEgc2VydmljZSwgdGhlIHZhbHVlIGRvZXMgbm90IGNoYW5nZSBhbmQgd2lsbCBiZSB0aGUgc2hvcnQgc2VydmljZSBBUk4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVGhlIG9wdGlvbmFsIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGB2YWx1ZWBgIGFjdHMgYXMgYSBkZXNjcmlwdG9yIHdpdGhpbiBhIHRhZyBjYXRlZ29yeSAoa2V5KS5cbiAqL1xuVmFsdWU/OiBzdHJpbmdcbi8qKlxuICogT25lIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGBrZXlgYCBpcyBhIGdlbmVyYWwgbGFiZWwgdGhhdCBhY3RzIGxpa2UgYSBjYXRlZ29yeSBmb3IgbW9yZSBzcGVjaWZpYyB0YWcgdmFsdWVzLlxuICovXG5LZXk/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRldGFpbHMgb2YgYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS4gQSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBjYW4gYmUgc2V0IHdoZW4gdXNpbmcgdGhlIGBgUnVuVGFza2BgIG9yIGBgQ3JlYXRlU2VydmljZWBgIEFQSXMgb3IgYXMgdGhlIGRlZmF1bHQgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgZm9yIGEgY2x1c3RlciB3aXRoIHRoZSBgYENyZWF0ZUNsdXN0ZXJgYCBBUEkuXG4gKiAgT25seSBjYXBhY2l0eSBwcm92aWRlcnMgdGhhdCBhcmUgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBjbHVzdGVyIGFuZCBoYXZlIGFuIGBgQUNUSVZFYGAgb3IgYGBVUERBVElOR2BgIHN0YXR1cyBjYW4gYmUgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LiBUaGUgYGBQdXRDbHVzdGVyQ2FwYWNpdHlQcm92aWRlcnNgYCBBUEkgaXMgdXNlZCB0byBhc3NvY2lhdGUgYSBjYXBhY2l0eSBwcm92aWRlciB3aXRoIGEgY2x1c3Rlci5cbiAqICBJZiBzcGVjaWZ5aW5nIGEgY2FwYWNpdHkgcHJvdmlkZXIgdGhhdCB1c2VzIGFuIEF1dG8gU2NhbGluZyBncm91cCwgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIG11c3QgYWxyZWFkeSBiZSBjcmVhdGVkLiBOZXcgQXV0byBTY2FsaW5nIGdyb3VwIGNhcGFjaXR5IHByb3ZpZGVycyBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBgYENyZWF0ZUNhcGFjaXR5UHJvdmlkZXJgYCBBUEkgb3BlcmF0aW9uLlxuICogIFRvIHVzZSBhbiBGQVJHQVRFbG9uZyBjYXBhY2l0eSBwcm92aWRlciwgc3BlY2lmeSBlaXRoZXIgdGhlIGBgRkFSR0FURWBgIG9yIGBgRkFSR0FURV9TUE9UYGAgY2FwYWNpdHkgcHJvdmlkZXJzLiBUaGUgRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgdG8gYWxsIGFjY291bnRzIGFuZCBvbmx5IG5lZWQgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciB0byBiZSB1c2VkIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbSB7XG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBjYXBhY2l0eSBwcm92aWRlci5cbiAqL1xuQ2FwYWNpdHlQcm92aWRlcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgKmJhc2UqIHZhbHVlIGRlc2lnbmF0ZXMgaG93IG1hbnkgdGFza3MsIGF0IGEgbWluaW11bSwgdG8gcnVuIG9uIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgcHJvdmlkZXIuIE9ubHkgb25lIGNhcGFjaXR5IHByb3ZpZGVyIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGhhdmUgYSAqYmFzZSogZGVmaW5lZC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLlxuICovXG5CYXNlPzogbnVtYmVyXG4vKipcbiAqIFRoZSAqd2VpZ2h0KiB2YWx1ZSBkZXNpZ25hdGVzIHRoZSByZWxhdGl2ZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgdGFza3MgbGF1bmNoZWQgdGhhdCBzaG91bGQgdXNlIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkgcHJvdmlkZXIuIFRoZSBgYHdlaWdodGBgIHZhbHVlIGlzIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBhZnRlciB0aGUgYGBiYXNlYGAgdmFsdWUsIGlmIGRlZmluZWQsIGlzIHNhdGlzZmllZC5cbiAqICBJZiBubyBgYHdlaWdodGBgIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC4gV2hlbiBtdWx0aXBsZSBjYXBhY2l0eSBwcm92aWRlcnMgYXJlIHNwZWNpZmllZCB3aXRoaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBjYXBhY2l0eSBwcm92aWRlcnMgbXVzdCBoYXZlIGEgd2VpZ2h0IHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBhbnkgY2FwYWNpdHkgcHJvdmlkZXJzIHdpdGggYSB3ZWlnaHQgb2YgYGAwYGAgY2FuJ3QgYmUgdXNlZCB0byBwbGFjZSB0YXNrcy4gSWYgeW91IHNwZWNpZnkgbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGluIGEgc3RyYXRlZ3kgdGhhdCBhbGwgaGF2ZSBhIHdlaWdodCBvZiBgYDBgYCwgYW55IGBgUnVuVGFza2BgIG9yIGBgQ3JlYXRlU2VydmljZWBgIGFjdGlvbnMgdXNpbmcgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IHdpbGwgZmFpbC5cbiAqICBBbiBleGFtcGxlIHNjZW5hcmlvIGZvciB1c2luZyB3ZWlnaHRzIGlzIGRlZmluaW5nIGEgc3RyYXRlZ3kgdGhhdCBjb250YWlucyB0d28gY2FwYWNpdHkgcHJvdmlkZXJzIGFuZCBib3RoIGhhdmUgYSB3ZWlnaHQgb2YgYGAxYGAsIHRoZW4gd2hlbiB0aGUgYGBiYXNlYGAgaXMgc2F0aXNmaWVkLCB0aGUgdGFza3Mgd2lsbCBiZSBzcGxpdCBldmVubHkgYWNyb3NzIHRoZSB0d28gY2FwYWNpdHkgcHJvdmlkZXJzLiBVc2luZyB0aGF0IHNhbWUgbG9naWMsIGlmIHlvdSBzcGVjaWZ5IGEgd2VpZ2h0IG9mIGBgMWBgIGZvciAqY2FwYWNpdHlQcm92aWRlckEqIGFuZCBhIHdlaWdodCBvZiBgYDRgYCBmb3IgKmNhcGFjaXR5UHJvdmlkZXJCKiwgdGhlbiBmb3IgZXZlcnkgb25lIHRhc2sgdGhhdCdzIHJ1biB1c2luZyAqY2FwYWNpdHlQcm92aWRlckEqLCBmb3VyIHRhc2tzIHdvdWxkIHVzZSAqY2FwYWNpdHlQcm92aWRlckIqLlxuICovXG5XZWlnaHQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGZvciB0YXNrIGRlZmluaXRpb25zIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSB0byByZWNlaXZlIHRoZWlyIG93biBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBhbmQgaXQgaXMgbm90IHN1cHBvcnRlZCBmb3Igb3RoZXIgbmV0d29yayBtb2Rlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBOZXR3b3JraW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLW5ldHdvcmtpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtDb25maWd1cmF0aW9uIHtcbkF3c3ZwY0NvbmZpZ3VyYXRpb24/OiBBd3NWcGNDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSBWUEMgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIHRhc2suXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzVnBjQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHNlY3VyaXR5IGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2sgb3Igc2VydmljZS4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBzZWN1cml0eSBncm91cCwgdGhlIGRlZmF1bHQgc2VjdXJpdHkgZ3JvdXAgZm9yIHRoZSBWUEMgaXMgdXNlZC4gVGhlcmUncyBhIGxpbWl0IG9mIDUgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgY2FuIGJlIHNwZWNpZmllZC5cbiAqICAgQWxsIHNwZWNpZmllZCBzZWN1cml0eSBncm91cHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuU2VjdXJpdHlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgSURzIG9mIHRoZSBzdWJuZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzayBvciBzZXJ2aWNlLiBUaGVyZSdzIGEgbGltaXQgb2YgMTYgc3VibmV0cyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQuXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TdWJuZXRzPzogc3RyaW5nW11cbi8qKlxuICogV2hldGhlciB0aGUgdGFzaydzIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UgcmVjZWl2ZXMgYSBwdWJsaWMgSVAgYWRkcmVzcy4gXG4gKiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyB3aGVuIHlvdSBzZXQgdGhpcyB2YWx1ZTpcbiAqICAgKyAgV2hlbiB5b3UgdXNlIGBgY3JlYXRlLXNlcnZpY2VgYCBvciBgYHVwZGF0ZS1zZXJ2aWNlYGAsIHRoZSBkZWZhdWx0IGlzIGBgRElTQUJMRURgYC4gXG4gKiAgICsgIFdoZW4gdGhlIHNlcnZpY2UgYGBkZXBsb3ltZW50Q29udHJvbGxlcmBgIGlzIGBgRUNTYGAsIHRoZSB2YWx1ZSBtdXN0IGJlIGBgRElTQUJMRURgYC5cbiAqL1xuQXNzaWduUHVibGljSXA/OiAoXCJESVNBQkxFRFwiIHwgXCJFTkFCTEVEXCIpXG59XG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb25zdHJhaW50IG9uIHRhc2sgcGxhY2VtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIHBsYWNlbWVudCBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtY29uc3RyYWludHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB5b3UncmUgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGFyZW4ndCBzdXBwb3J0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhY2VtZW50Q29uc3RyYWludCB7XG4vKipcbiAqIFRoZSB0eXBlIG9mIGNvbnN0cmFpbnQuIFVzZSBgYGRpc3RpbmN0SW5zdGFuY2VgYCB0byBlbnN1cmUgdGhhdCBlYWNoIHRhc2sgaW4gYSBwYXJ0aWN1bGFyIGdyb3VwIGlzIHJ1bm5pbmcgb24gYSBkaWZmZXJlbnQgY29udGFpbmVyIGluc3RhbmNlLiBVc2UgYGBtZW1iZXJPZmBgIHRvIHJlc3RyaWN0IHRoZSBzZWxlY3Rpb24gdG8gYSBncm91cCBvZiB2YWxpZCBjYW5kaWRhdGVzLlxuICovXG5UeXBlOiAoXCJkaXN0aW5jdEluc3RhbmNlXCIgfCBcIm1lbWJlck9mXCIpXG4vKipcbiAqIEEgY2x1c3RlciBxdWVyeSBsYW5ndWFnZSBleHByZXNzaW9uIHRvIGFwcGx5IHRvIHRoZSBjb25zdHJhaW50LiBUaGUgZXhwcmVzc2lvbiBjYW4gaGF2ZSBhIG1heGltdW0gbGVuZ3RoIG9mIDIwMDAgY2hhcmFjdGVycy4gWW91IGNhbid0IHNwZWNpZnkgYW4gZXhwcmVzc2lvbiBpZiB0aGUgY29uc3RyYWludCB0eXBlIGlzIGBgZGlzdGluY3RJbnN0YW5jZWBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDbHVzdGVyIHF1ZXJ5IGxhbmd1YWdlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jbHVzdGVyLXF1ZXJ5LWxhbmd1YWdlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRXhwcmVzc2lvbj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYGBMb2FkQmFsYW5jZXJgYCBwcm9wZXJ0eSBzcGVjaWZpZXMgZGV0YWlscyBvbiBhIGxvYWQgYmFsYW5jZXIgdGhhdCBpcyB1c2VkIHdpdGggYSBzZXJ2aWNlLlxuICogIElmIHRoZSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB0aGUgc2VydmljZSBpcyByZXF1aXJlZCB0byB1c2UgZWl0aGVyIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBXaGVuIHlvdSBhcmUgY3JlYXRpbmcgYW4gQUNEbG9uZyBkZXBsb3ltZW50IGdyb3VwLCB5b3Ugc3BlY2lmeSB0d28gdGFyZ2V0IGdyb3VwcyAocmVmZXJyZWQgdG8gYXMgYSBgYHRhcmdldEdyb3VwUGFpcmBgKS4gRWFjaCB0YXJnZXQgZ3JvdXAgYmluZHMgdG8gYSBzZXBhcmF0ZSB0YXNrIHNldCBpbiB0aGUgZGVwbG95bWVudC4gVGhlIGxvYWQgYmFsYW5jZXIgY2FuIGFsc28gaGF2ZSB1cCB0byB0d28gbGlzdGVuZXJzLCBhIHJlcXVpcmVkIGxpc3RlbmVyIGZvciBwcm9kdWN0aW9uIHRyYWZmaWMgYW5kIGFuIG9wdGlvbmFsIGxpc3RlbmVyIHRoYXQgYWxsb3dzIHlvdSB0byB0ZXN0IG5ldyByZXZpc2lvbnMgb2YgdGhlIHNlcnZpY2UgYmVmb3JlIHJvdXRpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIGl0LlxuICogIFNlcnZpY2VzIHdpdGggdGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIChmb3IgZXhhbXBsZSwgdGhvc2Ugd2l0aCB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSkgb25seSBzdXBwb3J0IEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzIGFuZCBOZXR3b3JrIExvYWQgQmFsYW5jZXJzLiBDbGFzc2ljIExvYWQgQmFsYW5jZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiBBbHNvLCB3aGVuIHlvdSBjcmVhdGUgYW55IHRhcmdldCBncm91cHMgZm9yIHRoZXNlIHNlcnZpY2VzLCB5b3UgbXVzdCBjaG9vc2UgYGBpcGBgIGFzIHRoZSB0YXJnZXQgdHlwZSwgbm90IGBgaW5zdGFuY2VgYC4gVGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGFyZSBhc3NvY2lhdGVkIHdpdGggYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgbm90IGFuIEFtYXpvbiBFQzIgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyIHtcbi8qKlxuICogVGhlIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgdGFyZ2V0IGdyb3VwIG9yIGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggYSBzZXJ2aWNlIG9yIHRhc2sgc2V0LlxuICogIEEgdGFyZ2V0IGdyb3VwIEFSTiBpcyBvbmx5IHNwZWNpZmllZCB3aGVuIHVzaW5nIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBcbiAqICBGb3Igc2VydmljZXMgdXNpbmcgdGhlIGBgRUNTYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UgY2FuIHNwZWNpZnkgb25lIG9yIG11bHRpcGxlIHRhcmdldCBncm91cHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JlZ2lzdGVyaW5nIG11bHRpcGxlIHRhcmdldCBncm91cHMgd2l0aCBhIHNlcnZpY2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3JlZ2lzdGVyLW11bHRpcGxlLXRhcmdldGdyb3Vwcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIHNlcnZpY2VzIHVzaW5nIHRoZSBgYENPREVfREVQTE9ZYGAgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UncmUgcmVxdWlyZWQgdG8gZGVmaW5lIHR3byB0YXJnZXQgZ3JvdXBzIGZvciB0aGUgbG9hZCBiYWxhbmNlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQmx1ZS9ncmVlbiBkZXBsb3ltZW50IHdpdGggQ29kZURlcGxveV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWJsdWVncmVlbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc2VydmljZSdzIHRhc2sgZGVmaW5pdGlvbiB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSwgeW91IG11c3QgY2hvb3NlIGBgaXBgYCBhcyB0aGUgdGFyZ2V0IHR5cGUsIG5vdCBgYGluc3RhbmNlYGAuIERvIHRoaXMgd2hlbiBjcmVhdGluZyB5b3VyIHRhcmdldCBncm91cHMgYmVjYXVzZSB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS4gVGhpcyBuZXR3b3JrIG1vZGUgaXMgcmVxdWlyZWQgZm9yIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLlxuICovXG5UYXJnZXRHcm91cEFybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbG9hZCBiYWxhbmNlciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIG9yIHRhc2sgc2V0LlxuICogIElmIHlvdSBhcmUgdXNpbmcgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBhIE5ldHdvcmsgTG9hZCBCYWxhbmNlciB0aGUgbG9hZCBiYWxhbmNlciBuYW1lIHBhcmFtZXRlciBzaG91bGQgYmUgb21pdHRlZC5cbiAqL1xuTG9hZEJhbGFuY2VyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIChhcyBpdCBhcHBlYXJzIGluIGEgY29udGFpbmVyIGRlZmluaXRpb24pIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLlxuICogIFlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGNvbnRhaW5lciBuYW1lIHdoZW4gY29uZmlndXJpbmcgdGhlIHRhcmdldCBncm91cCBmb3IgYW4gQW1hem9uIEVDUyBsb2FkIGJhbGFuY2VyLlxuICovXG5Db250YWluZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwb3J0IG9uIHRoZSBjb250YWluZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuIFRoaXMgcG9ydCBtdXN0IGNvcnJlc3BvbmQgdG8gYSBgYGNvbnRhaW5lclBvcnRgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBhcmUgdXNpbmcuIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgY29udGFpbmVyIGluc3RhbmNlIHRoZXkncmUgbGF1bmNoZWQgb24gbXVzdCBhbGxvdyBpbmdyZXNzIHRyYWZmaWMgb24gdGhlIGBgaG9zdFBvcnRgYCBvZiB0aGUgcG9ydCBtYXBwaW5nLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIHNlcnZpY2UgdG8gZGlzY292ZXIgYW5kIGNvbm5lY3QgdG8gc2VydmljZXMsIGFuZCBiZSBkaXNjb3ZlcmVkIGJ5LCBhbmQgY29ubmVjdGVkIGZyb20sIG90aGVyIHNlcnZpY2VzIHdpdGhpbiBhIG5hbWVzcGFjZS5cbiAqICBUYXNrcyB0aGF0IHJ1biBpbiBhIG5hbWVzcGFjZSBjYW4gdXNlIHNob3J0IG5hbWVzIHRvIGNvbm5lY3QgdG8gc2VydmljZXMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY2FuIGNvbm5lY3QgdG8gc2VydmljZXMgYWNyb3NzIGFsbCBvZiB0aGUgY2x1c3RlcnMgaW4gdGhlIG5hbWVzcGFjZS4gVGFza3MgY29ubmVjdCB0aHJvdWdoIGEgbWFuYWdlZCBwcm94eSBjb250YWluZXIgdGhhdCBjb2xsZWN0cyBsb2dzIGFuZCBtZXRyaWNzIGZvciBpbmNyZWFzZWQgdmlzaWJpbGl0eS4gT25seSB0aGUgdGFza3MgdGhhdCBBbWF6b24gRUNTIHNlcnZpY2VzIGNyZWF0ZSBhcmUgc3VwcG9ydGVkIHdpdGggU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGxpc3Qgb2YgU2VydmljZSBDb25uZWN0IHNlcnZpY2Ugb2JqZWN0cy4gVGhlc2UgYXJlIG5hbWVzIGFuZCBhbGlhc2VzIChhbHNvIGtub3duIGFzIGVuZHBvaW50cykgdGhhdCBhcmUgdXNlZCBieSBvdGhlciBBbWF6b24gRUNTIHNlcnZpY2VzIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLiBcbiAqICBUaGlzIGZpZWxkIGlzIG5vdCByZXF1aXJlZCBmb3IgYSBcImNsaWVudFwiIEFtYXpvbiBFQ1Mgc2VydmljZSB0aGF0J3MgYSBtZW1iZXIgb2YgYSBuYW1lc3BhY2Ugb25seSB0byBjb25uZWN0IHRvIG90aGVyIHNlcnZpY2VzIHdpdGhpbiB0aGUgbmFtZXNwYWNlLiBBbiBleGFtcGxlIG9mIHRoaXMgd291bGQgYmUgYSBmcm9udGVuZCBhcHBsaWNhdGlvbiB0aGF0IGFjY2VwdHMgaW5jb21pbmcgcmVxdWVzdHMgZnJvbSBlaXRoZXIgYSBsb2FkIGJhbGFuY2VyIHRoYXQncyBhdHRhY2hlZCB0byB0aGUgc2VydmljZSBvciBieSBvdGhlciBtZWFucy5cbiAqICBBbiBvYmplY3Qgc2VsZWN0cyBhIHBvcnQgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLCBhc3NpZ25zIGEgbmFtZSBmb3IgdGhlIENNQVBsb25nIHNlcnZpY2UsIGFuZCBhIGxpc3Qgb2YgYWxpYXNlcyAoZW5kcG9pbnRzKSBhbmQgcG9ydHMgZm9yIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gcmVmZXIgdG8gdGhpcyBzZXJ2aWNlLlxuICovXG5TZXJ2aWNlcz86IFNlcnZpY2VDb25uZWN0U2VydmljZVtdXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHVzZSBTZXJ2aWNlIENvbm5lY3Qgd2l0aCB0aGlzIHNlcnZpY2UuXG4gKi9cbkVuYWJsZWQ6IGJvb2xlYW5cbkxvZ0NvbmZpZ3VyYXRpb24/OiBMb2dDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBuYW1lc3BhY2UgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBDTUFQbG9uZyBuYW1lc3BhY2UgZm9yIHVzZSB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gVGhlIG5hbWVzcGFjZSBtdXN0IGJlIGluIHRoZSBzYW1lIEFXUyBSZWdpb24gYXMgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBhbmQgY2x1c3Rlci4gVGhlIHR5cGUgb2YgbmFtZXNwYWNlIGRvZXNuJ3QgYWZmZWN0IFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQ01BUGxvbmcsIHNlZSBbV29ya2luZyB3aXRoIFNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9kZy93b3JraW5nLXdpdGgtc2VydmljZXMuaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5OYW1lc3BhY2U/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlIG9iamVjdCBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RTZXJ2aWNlIHtcblRpbWVvdXQ/OiBUaW1lb3V0Q29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgcG9ydCBudW1iZXIgZm9yIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkgdG8gbGlzdGVuIG9uLlxuICogIFVzZSB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCB0byBieXBhc3MgdGhlIHByb3h5IGZvciB0cmFmZmljIG9uIHRoZSBwb3J0IG51bWJlciBzcGVjaWZpZWQgaW4gdGhlIG5hbWVkIGBgcG9ydE1hcHBpbmdgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIG9mIHRoaXMgYXBwbGljYXRpb24sIGFuZCB0aGVuIHVzZSBpdCBpbiB5b3VyIFZQQyBzZWN1cml0eSBncm91cHMgdG8gYWxsb3cgdHJhZmZpYyBpbnRvIHRoZSBwcm94eSBmb3IgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKiAgSW4gYGBhd3N2cGNgYCBtb2RlIGFuZCBGYXJnYXRlLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgY29udGFpbmVyIHBvcnQgbnVtYmVyLiBUaGUgY29udGFpbmVyIHBvcnQgbnVtYmVyIGlzIGluIHRoZSBgYHBvcnRNYXBwaW5nYGAgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSW4gYnJpZGdlIG1vZGUsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBlcGhlbWVyYWwgcG9ydCBvZiB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5LlxuICovXG5JbmdyZXNzUG9ydE92ZXJyaWRlPzogbnVtYmVyXG4vKipcbiAqIFRoZSBsaXN0IG9mIGNsaWVudCBhbGlhc2VzIGZvciB0aGlzIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlLiBZb3UgdXNlIHRoZXNlIHRvIGFzc2lnbiBuYW1lcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGNsaWVudCBhcHBsaWNhdGlvbnMuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjbGllbnQgYWxpYXNlcyB0aGF0IHlvdSBjYW4gaGF2ZSBpbiB0aGlzIGxpc3QgaXMgMS5cbiAqICBFYWNoIGFsaWFzIChcImVuZHBvaW50XCIpIGlzIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgYW5kIHBvcnQgbnVtYmVyIHRoYXQgb3RoZXIgQW1hem9uIEVDUyB0YXNrcyAoXCJjbGllbnRzXCIpIGNhbiB1c2UgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuXG4gKiAgRWFjaCBuYW1lIGFuZCBwb3J0IG1hcHBpbmcgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBuYW1lc3BhY2UuXG4gKiAgRm9yIGVhY2ggYGBTZXJ2aWNlQ29ubmVjdFNlcnZpY2VgYCwgeW91IG11c3QgcHJvdmlkZSBhdCBsZWFzdCBvbmUgYGBjbGllbnRBbGlhc2BgIHdpdGggb25lIGBgcG9ydGBgLlxuICovXG5DbGllbnRBbGlhc2VzPzogU2VydmljZUNvbm5lY3RDbGllbnRBbGlhc1tdXG5UbHM/OiBTZXJ2aWNlQ29ubmVjdFRsc0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzIHRoZSBuYW1lIG9mIHRoZSBuZXcgQ01BUCBzZXJ2aWNlIHRoYXQgQW1hem9uIEVDUyBjcmVhdGVzIGZvciB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS4gVGhpcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIENNQVAgbmFtZXNwYWNlLiBUaGUgbmFtZSBjYW4gY29udGFpbiB1cCB0byA2NCBjaGFyYWN0ZXJzLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSBsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMgKF8pLCBhbmQgaHlwaGVucyAoLSkuIFRoZSBuYW1lIGNhbid0IHN0YXJ0IHdpdGggYSBoeXBoZW4uXG4gKiAgSWYgdGhlIGBgZGlzY292ZXJ5TmFtZWBgIGlzbid0IHNwZWNpZmllZCwgdGhlIHBvcnQgbWFwcGluZyBuYW1lIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiBpcyB1c2VkIGluIGBgcG9ydE5hbWUubmFtZXNwYWNlYGAuXG4gKi9cbkRpc2NvdmVyeU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgcG9ydE5hbWVgYCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGUgYGBwb3J0TWFwcGluZ3NgYCBmcm9tIGFsbCB0aGUgY29udGFpbmVycyBpbiB0aGUgdGFzayBkZWZpbml0aW9uIG9mIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLlxuICovXG5Qb3J0TmFtZTogc3RyaW5nXG59XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGNvbmZpZ3VyZWQgdGltZW91dHMgZm9yIFNlcnZpY2UgQ29ubmVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lb3V0Q29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSB3YWl0aW5nIGZvciB0aGUgdXBzdHJlYW0gdG8gcmVzcG9uZCB3aXRoIGEgY29tcGxldGUgcmVzcG9uc2UgcGVyIHJlcXVlc3QuIEEgdmFsdWUgb2YgYGAwYGAgY2FuIGJlIHNldCB0byBkaXNhYmxlIGBgcGVyUmVxdWVzdFRpbWVvdXRgYC4gYGBwZXJSZXF1ZXN0VGltZW91dGBgIGNhbiBvbmx5IGJlIHNldCBpZiBTZXJ2aWNlIENvbm5lY3QgYGBhcHBQcm90b2NvbGBgIGlzbid0IGBgVENQYGAuIE9ubHkgYGBpZGxlVGltZW91dGBgIGlzIGFsbG93ZWQgZm9yIGBgVENQYGBgYGFwcFByb3RvY29sYGAuXG4gKi9cblBlclJlcXVlc3RUaW1lb3V0U2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyBhIGNvbm5lY3Rpb24gd2lsbCBzdGF5IGFjdGl2ZSB3aGlsZSBpZGxlLiBBIHZhbHVlIG9mIGBgMGBgIGNhbiBiZSBzZXQgdG8gZGlzYWJsZSBgYGlkbGVUaW1lb3V0YGAuXG4gKiAgVGhlIGBgaWRsZVRpbWVvdXRgYCBkZWZhdWx0IGZvciBgYEhUVFBgYC9gYEhUVFAyYGAvYGBHUlBDYGAgaXMgNSBtaW51dGVzLlxuICogIFRoZSBgYGlkbGVUaW1lb3V0YGAgZGVmYXVsdCBmb3IgYGBUQ1BgYCBpcyAxIGhvdXIuXG4gKi9cbklkbGVUaW1lb3V0U2Vjb25kcz86IG51bWJlclxufVxuLyoqXG4gKiBFYWNoIGFsaWFzIChcImVuZHBvaW50XCIpIGlzIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgYW5kIHBvcnQgbnVtYmVyIHRoYXQgb3RoZXIgdGFza3MgKFwiY2xpZW50c1wiKSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLlxuICogIEVhY2ggbmFtZSBhbmQgcG9ydCBtYXBwaW5nIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgbmFtZXNwYWNlLlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdENsaWVudEFsaWFzIHtcbi8qKlxuICogVGhlIGBgZG5zTmFtZWBgIGlzIHRoZSBuYW1lIHRoYXQgeW91IHVzZSBpbiB0aGUgYXBwbGljYXRpb25zIG9mIGNsaWVudCB0YXNrcyB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS4gVGhlIG5hbWUgbXVzdCBiZSBhIHZhbGlkIEROUyBuYW1lIGJ1dCBkb2Vzbid0IG5lZWQgdG8gYmUgZnVsbHktcXVhbGlmaWVkLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSB1cCB0byAxMjcgY2hhcmFjdGVycy4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIChfKSwgaHlwaGVucyAoLSksIGFuZCBwZXJpb2RzICguKS4gVGhlIG5hbWUgY2FuJ3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi5cbiAqICBJZiB0aGlzIHBhcmFtZXRlciBpc24ndCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgZGlzY292ZXJ5TmFtZS5uYW1lc3BhY2VgYCBpcyB1c2VkLiBJZiB0aGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgcG9ydCBtYXBwaW5nIG5hbWUgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIGlzIHVzZWQgaW4gYGBwb3J0TmFtZS5uYW1lc3BhY2VgYC5cbiAqICBUbyBhdm9pZCBjaGFuZ2luZyB5b3VyIGFwcGxpY2F0aW9ucyBpbiBjbGllbnQgQW1hem9uIEVDUyBzZXJ2aWNlcywgc2V0IHRoaXMgdG8gdGhlIHNhbWUgbmFtZSB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdXNlcyBieSBkZWZhdWx0LiBGb3IgZXhhbXBsZSwgYSBmZXcgY29tbW9uIG5hbWVzIGFyZSBgYGRhdGFiYXNlYGAsIGBgZGJgYCwgb3IgdGhlIGxvd2VyY2FzZSBuYW1lIG9mIGEgZGF0YWJhc2UsIHN1Y2ggYXMgYGBteXNxbGBgIG9yIGBgcmVkaXNgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5EbnNOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBsaXN0ZW5pbmcgcG9ydCBudW1iZXIgZm9yIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkuIFRoaXMgcG9ydCBpcyBhdmFpbGFibGUgaW5zaWRlIG9mIGFsbCBvZiB0aGUgdGFza3Mgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZS5cbiAqICBUbyBhdm9pZCBjaGFuZ2luZyB5b3VyIGFwcGxpY2F0aW9ucyBpbiBjbGllbnQgQW1hem9uIEVDUyBzZXJ2aWNlcywgc2V0IHRoaXMgdG8gdGhlIHNhbWUgcG9ydCB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdXNlcyBieSBkZWZhdWx0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblBvcnQ6IG51bWJlclxufVxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUbHNDb25maWd1cmF0aW9uIHtcbklzc3VlckNlcnRpZmljYXRlQXV0aG9yaXR5OiBTZXJ2aWNlQ29ubmVjdFRsc0NlcnRpZmljYXRlQXV0aG9yaXR5XG4vKipcbiAqIFRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkuXG4gKi9cbkttc0tleT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIFNlcnZpY2UgQ29ubmVjdCBUTFMuXG4gKi9cblJvbGVBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHNpZ25lciBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUbHNDZXJ0aWZpY2F0ZUF1dGhvcml0eSB7XG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSBjZXJ0aWZpY2F0ZS5cbiAqL1xuQXdzUGNhQXV0aG9yaXR5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYExvZ0NvbmZpZ2BgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWxvZy1kcml2ZXJgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICBCeSBkZWZhdWx0LCBjb250YWluZXJzIHVzZSB0aGUgc2FtZSBsb2dnaW5nIGRyaXZlciB0aGF0IHRoZSBEb2NrZXIgZGFlbW9uIHVzZXMuIEhvd2V2ZXIsIHRoZSBjb250YWluZXIgbWlnaHQgdXNlIGEgZGlmZmVyZW50IGxvZ2dpbmcgZHJpdmVyIHRoYW4gdGhlIERvY2tlciBkYWVtb24gYnkgc3BlY2lmeWluZyBhIGxvZyBkcml2ZXIgY29uZmlndXJhdGlvbiBpbiB0aGUgY29udGFpbmVyIGRlZmluaXRpb24uXG4gKiAgVW5kZXJzdGFuZCB0aGUgZm9sbG93aW5nIHdoZW4gc3BlY2lmeWluZyBhIGxvZyBjb25maWd1cmF0aW9uIGZvciB5b3VyIGNvbnRhaW5lcnMuXG4gKiAgICsgIEFtYXpvbiBFQ1MgY3VycmVudGx5IHN1cHBvcnRzIGEgc3Vic2V0IG9mIHRoZSBsb2dnaW5nIGRyaXZlcnMgYXZhaWxhYmxlIHRvIHRoZSBEb2NrZXIgZGFlbW9uLiBBZGRpdGlvbmFsIGxvZyBkcml2ZXJzIG1heSBiZSBhdmFpbGFibGUgaW4gZnV0dXJlIHJlbGVhc2VzIG9mIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudC5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCxgYHN5c2xvZ2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogICArICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTggb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IGFyZSBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBtdXN0IHJlZ2lzdGVyIHRoZSBhdmFpbGFibGUgbG9nZ2luZyBkcml2ZXJzIHdpdGggdGhlIGBgRUNTX0FWQUlMQUJMRV9MT0dHSU5HX0RSSVZFUlNgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWZvcmUgY29udGFpbmVycyBwbGFjZWQgb24gdGhhdCBpbnN0YW5jZSBjYW4gdXNlIHRoZXNlIGxvZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1hZ2VudC1jb25maWcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICArICBGb3IgdGFza3MgdGhhdCBhcmUgb24gRkFSR0FURWxvbmcsIGJlY2F1c2UgeW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIHlvdXIgdGFza3MgYXJlIGhvc3RlZCBvbiwgYW55IGFkZGl0aW9uYWwgc29mdHdhcmUgbmVlZGVkIG11c3QgYmUgaW5zdGFsbGVkIG91dHNpZGUgb2YgdGhlIHRhc2suIEZvciBleGFtcGxlLCB0aGUgRmx1ZW50ZCBvdXRwdXQgYWdncmVnYXRvcnMgb3IgYSByZW1vdGUgaG9zdCBydW5uaW5nIExvZ3N0YXNoIHRvIHNlbmQgR2VsZiBsb2dzIHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgc2VjcmV0cyB0byBwYXNzIHRvIHRoZSBsb2cgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblNlY3JldE9wdGlvbnM/OiBTZWNyZXRbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlbmQgdG8gdGhlIGxvZyBkcml2ZXIuXG4gKiAgVGhlIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IGRlcGVuZCBvbiB0aGUgbG9nIGRyaXZlci4gU29tZSBvZiB0aGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB5b3UgdXNlIHRoZSBgYGF3c2xvZ3NgYCBsb2cgZHJpdmVyIHRvIHJvdXRlIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggaW5jbHVkZSB0aGUgZm9sbG93aW5nOlxuICogICArIGF3c2xvZ3MtY3JlYXRlLWdyb3VwIFJlcXVpcmVkOiBObyBTcGVjaWZ5IHdoZXRoZXIgeW91IHdhbnQgdGhlIGxvZyBncm91cCB0byBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuIElmIHRoaXMgb3B0aW9uIGlzbid0IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gZmFsc2UuIFlvdXIgSUFNIHBvbGljeSBtdXN0IGluY2x1ZGUgdGhlIGxvZ3M6Q3JlYXRlTG9nR3JvdXAgcGVybWlzc2lvbiBiZWZvcmUgeW91IGF0dGVtcHQgdG8gdXNlIGF3c2xvZ3MtY3JlYXRlLWdyb3VwLiArIGF3c2xvZ3MtcmVnaW9uIFJlcXVpcmVkOiBZZXMgU3BlY2lmeSB0aGUgUmVnaW9uIHRoYXQgdGhlIGF3c2xvZ3MgbG9nIGRyaXZlciBpcyB0byBzZW5kIHlvdXIgRG9ja2VyIGxvZ3MgdG8uIFlvdSBjYW4gY2hvb3NlIHRvIHNlbmQgYWxsIG9mIHlvdXIgbG9ncyBmcm9tIGNsdXN0ZXJzIGluIGRpZmZlcmVudCBSZWdpb25zIHRvIGEgc2luZ2xlIHJlZ2lvbiBpbiBDbG91ZFdhdGNoIExvZ3MuIFRoaXMgaXMgc28gdGhhdCB0aGV5J3JlIGFsbCB2aXNpYmxlIGluIG9uZSBsb2NhdGlvbi4gT3RoZXJ3aXNlLCB5b3UgY2FuIHNlcGFyYXRlIHRoZW0gYnkgUmVnaW9uIGZvciBtb3JlIGdyYW51bGFyaXR5LiBNYWtlIHN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGxvZyBncm91cCBleGlzdHMgaW4gdGhlIFJlZ2lvbiB0aGF0IHlvdSBzcGVjaWZ5IHdpdGggdGhpcyBvcHRpb24uICsgYXdzbG9ncy1ncm91cCBSZXF1aXJlZDogWWVzIE1ha2Ugc3VyZSB0byBzcGVjaWZ5IGEgbG9nIGdyb3VwIHRoYXQgdGhlIGF3c2xvZ3MgbG9nIGRyaXZlciBzZW5kcyBpdHMgbG9nIHN0cmVhbXMgdG8uICsgYXdzbG9ncy1zdHJlYW0tcHJlZml4IFJlcXVpcmVkOiBZZXMsIHdoZW4gdXNpbmcgRmFyZ2F0ZS5PcHRpb25hbCB3aGVuIHVzaW5nIEVDMi4gVXNlIHRoZSBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggb3B0aW9uIHRvIGFzc29jaWF0ZSBhIGxvZyBzdHJlYW0gd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeCwgdGhlIGNvbnRhaW5lciBuYW1lLCBhbmQgdGhlIElEIG9mIHRoZSBBbWF6b24gRUNTIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIElmIHlvdSBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24sIHRoZW4gdGhlIGxvZyBzdHJlYW0gdGFrZXMgdGhlIGZvcm1hdCBwcmVmaXgtbmFtZS9jb250YWluZXItbmFtZS9lY3MtdGFzay1pZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSBpcyBuYW1lZCBhZnRlciB0aGUgY29udGFpbmVyIElEIHRoYXQncyBhc3NpZ25lZCBieSB0aGUgRG9ja2VyIGRhZW1vbiBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlLiBCZWNhdXNlIGl0J3MgZGlmZmljdWx0IHRvIHRyYWNlIGxvZ3MgYmFjayB0byB0aGUgY29udGFpbmVyIHRoYXQgc2VudCB0aGVtIHdpdGgganVzdCB0aGUgRG9ja2VyIGNvbnRhaW5lciBJRCAod2hpY2ggaXMgb25seSBhdmFpbGFibGUgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSksIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24uIEZvciBBbWF6b24gRUNTIHNlcnZpY2VzLCB5b3UgY2FuIHVzZSB0aGUgc2VydmljZSBuYW1lIGFzIHRoZSBwcmVmaXguIERvaW5nIHNvLCB5b3UgY2FuIHRyYWNlIGxvZyBzdHJlYW1zIHRvIHRoZSBzZXJ2aWNlIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLCB0aGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIHRoYXQgc2VudCB0aGVtLCBhbmQgdGhlIElEIG9mIHRoZSB0YXNrIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLiBZb3UgbXVzdCBzcGVjaWZ5IGEgc3RyZWFtLXByZWZpeCBmb3IgeW91ciBsb2dzIHRvIGhhdmUgeW91ciBsb2dzIGFwcGVhciBpbiB0aGUgTG9nIHBhbmUgd2hlbiB1c2luZyB0aGUgQW1hem9uIEVDUyBjb25zb2xlLiArIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IFJlcXVpcmVkOiBObyBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gaW4gUHl0aG9uIHN0cmZ0aW1lIGZvcm1hdC4gQSBsb2cgbWVzc2FnZSBjb25zaXN0cyBvZiBhIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGFuZCBhbnkgZm9sbG93aW5nIGxpbmVzIHRoYXQgZG9u4oCZdCBtYXRjaCB0aGUgcGF0dGVybi4gVGhlIG1hdGNoZWQgbGluZSBpcyB0aGUgZGVsaW1pdGVyIGJldHdlZW4gbG9nIG1lc3NhZ2VzLiBPbmUgZXhhbXBsZSBvZiBhIHVzZSBjYXNlIGZvciB1c2luZyB0aGlzIGZvcm1hdCBpcyBmb3IgcGFyc2luZyBvdXRwdXQgc3VjaCBhcyBhIHN0YWNrIGR1bXAsIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBiZSBsb2dnZWQgaW4gbXVsdGlwbGUgZW50cmllcy4gVGhlIGNvcnJlY3QgcGF0dGVybiBhbGxvd3MgaXQgdG8gYmUgY2FwdHVyZWQgaW4gYSBzaW5nbGUgZW50cnkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQuIFlvdSBjYW5ub3QgY29uZmlndXJlIGJvdGggdGhlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGFuZCBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIG9wdGlvbnMuIE11bHRpbGluZSBsb2dnaW5nIHBlcmZvcm1zIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBtYXRjaGluZyBvZiBhbGwgbG9nIG1lc3NhZ2VzLiBUaGlzIG1pZ2h0IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbG9nZ2luZyBwZXJmb3JtYW5jZS4gKyBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIFJlcXVpcmVkOiBObyBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gdGhhdCB1c2VzIGEgcmVndWxhciBleHByZXNzaW9uLiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybi4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBpcyBhbHNvIGNvbmZpZ3VyZWQuIFlvdSBjYW5ub3QgY29uZmlndXJlIGJvdGggdGhlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGFuZCBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIG9wdGlvbnMuIE11bHRpbGluZSBsb2dnaW5nIHBlcmZvcm1zIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBtYXRjaGluZyBvZiBhbGwgbG9nIG1lc3NhZ2VzLiBUaGlzIG1pZ2h0IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbG9nZ2luZyBwZXJmb3JtYW5jZS4gXG4gKiAgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFwcGx5IHRvIGFsbCBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMuXG4gKiAgICsgbW9kZSBSZXF1aXJlZDogTm8gVmFsaWQgdmFsdWVzOiBub24tYmxvY2tpbmcgfCBibG9ja2luZyBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBkZWxpdmVyeSBtb2RlIG9mIGxvZyBtZXNzYWdlcyBmcm9tIHRoZSBjb250YWluZXIgdG8gdGhlIGxvZyBkcml2ZXIgc3BlY2lmaWVkIHVzaW5nIGxvZ0RyaXZlci4gVGhlIGRlbGl2ZXJ5IG1vZGUgeW91IGNob29zZSBhZmZlY3RzIGFwcGxpY2F0aW9uIGF2YWlsYWJpbGl0eSB3aGVuIHRoZSBmbG93IG9mIGxvZ3MgZnJvbSBjb250YWluZXIgaXMgaW50ZXJydXB0ZWQuIElmIHlvdSB1c2UgdGhlIGJsb2NraW5nIG1vZGUgYW5kIHRoZSBmbG93IG9mIGxvZ3MgaXMgaW50ZXJydXB0ZWQsIGNhbGxzIGZyb20gY29udGFpbmVyIGNvZGUgdG8gd3JpdGUgdG8gdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHN0cmVhbXMgd2lsbCBibG9jay4gVGhlIGxvZ2dpbmcgdGhyZWFkIG9mIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJsb2NrIGFzIGEgcmVzdWx0LiBUaGlzIG1heSBjYXVzZSB0aGUgYXBwbGljYXRpb24gdG8gYmVjb21lIHVucmVzcG9uc2l2ZSBhbmQgbGVhZCB0byBjb250YWluZXIgaGVhbHRoY2hlY2sgZmFpbHVyZS4gSWYgeW91IHVzZSB0aGUgbm9uLWJsb2NraW5nIG1vZGUsIHRoZSBjb250YWluZXIncyBsb2dzIGFyZSBpbnN0ZWFkIHN0b3JlZCBpbiBhbiBpbi1tZW1vcnkgaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb25maWd1cmVkIHdpdGggdGhlIG1heC1idWZmZXItc2l6ZSBvcHRpb24uIFRoaXMgcHJldmVudHMgdGhlIGFwcGxpY2F0aW9uIGZyb20gYmVjb21pbmcgdW5yZXNwb25zaXZlIHdoZW4gbG9ncyBjYW5ub3QgYmUgc2VudC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoaXMgbW9kZSBpZiB5b3Ugd2FudCB0byBlbnN1cmUgc2VydmljZSBhdmFpbGFiaWxpdHkgYW5kIGFyZSBva2F5IHdpdGggc29tZSBsb2cgbG9zcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBQcmV2ZW50aW5nIGxvZyBsb3NzIHdpdGggbm9uLWJsb2NraW5nIG1vZGUgaW4gdGhlIGF3c2xvZ3MgY29udGFpbmVyIGxvZyBkcml2ZXIuIFlvdSBjYW4gc2V0IGEgZGVmYXVsdCBtb2RlIGZvciBhbGwgY29udGFpbmVycyBpbiBhIHNwZWNpZmljIFJlZ2lvbiBieSB1c2luZyB0aGUgZGVmYXVsdExvZ0RyaXZlck1vZGUgYWNjb3VudCBzZXR0aW5nLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgbW9kZSBvcHRpb24gb3IgY29uZmlndXJlIHRoZSBhY2NvdW50IHNldHRpbmcsIEFtYXpvbiBFQ1Mgd2lsbCBkZWZhdWx0IHRvIHRoZSBibG9ja2luZyBtb2RlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWNjb3VudCBzZXR0aW5nLCBzZWUgRGVmYXVsdCBsb2cgZHJpdmVyIG1vZGUgaW4gdGhlIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZS4gKyBtYXgtYnVmZmVyLXNpemUgUmVxdWlyZWQ6IE5vIERlZmF1bHQgdmFsdWU6IDFtIFdoZW4gbm9uLWJsb2NraW5nIG1vZGUgaXMgdXNlZCwgdGhlIG1heC1idWZmZXItc2l6ZSBsb2cgb3B0aW9uIGNvbnRyb2xzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdGhhdCdzIHVzZWQgZm9yIGludGVybWVkaWF0ZSBtZXNzYWdlIHN0b3JhZ2UuIE1ha2Ugc3VyZSB0byBzcGVjaWZ5IGFuIGFkZXF1YXRlIGJ1ZmZlciBzaXplIGJhc2VkIG9uIHlvdXIgYXBwbGljYXRpb24uIFdoZW4gdGhlIGJ1ZmZlciBmaWxscyB1cCwgZnVydGhlciBsb2dzIGNhbm5vdCBiZSBzdG9yZWQuIExvZ3MgdGhhdCBjYW5ub3QgYmUgc3RvcmVkIGFyZSBsb3N0LiBcbiAqICBUbyByb3V0ZSBsb2dzIHVzaW5nIHRoZSBgYHNwbHVua2BgIGxvZyByb3V0ZXIsIHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBgYHNwbHVuay10b2tlbmBgIGFuZCBhIGBgc3BsdW5rLXVybGBgLlxuICogIFdoZW4geW91IHVzZSB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyByb3V0ZXIgdG8gcm91dGUgbG9ncyB0byBhbiBBV1MgU2VydmljZSBvciBBV1MgUGFydG5lciBOZXR3b3JrIGRlc3RpbmF0aW9uIGZvciBsb2cgc3RvcmFnZSBhbmQgYW5hbHl0aWNzLCB5b3UgY2FuIHNldCB0aGUgYGBsb2ctZHJpdmVyLWJ1ZmZlci1saW1pdGBgIG9wdGlvbiB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGV2ZW50cyB0aGF0IGFyZSBidWZmZXJlZCBpbiBtZW1vcnksIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBsb2cgcm91dGVyIGNvbnRhaW5lci4gSXQgY2FuIGhlbHAgdG8gcmVzb2x2ZSBwb3RlbnRpYWwgbG9nIGxvc3MgaXNzdWUgYmVjYXVzZSBoaWdoIHRocm91Z2hwdXQgbWlnaHQgcmVzdWx0IGluIG1lbW9yeSBydW5uaW5nIG91dCBmb3IgdGhlIGJ1ZmZlciBpbnNpZGUgb2YgRG9ja2VyLlxuICogIE90aGVyIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IHdoZW4gdXNpbmcgYGBhd3NmaXJlbGVuc2BgIHRvIHJvdXRlIGxvZ3MgZGVwZW5kIG9uIHRoZSBkZXN0aW5hdGlvbi4gV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIERhdGEgRmlyZWhvc2UsIHlvdSBjYW4gc3BlY2lmeSB0aGUgQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgbmFtZSBmb3IgdGhlIGxvZyBzdHJlYW0gd2l0aCBgYGRlbGl2ZXJ5X3N0cmVhbWBgLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBLaW5lc2lzIERhdGEgU3RyZWFtcywgeW91IGNhbiBzcGVjaWZ5IGFuIEFXUyBSZWdpb24gd2l0aCBgYHJlZ2lvbmBgIGFuZCBhIGRhdGEgc3RyZWFtIG5hbWUgd2l0aCBgYHN0cmVhbWBgLlxuICogICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlLCB5b3UgY2FuIHNwZWNpZnkgb3B0aW9ucyBsaWtlIGBgTmFtZWBgLCBgYEhvc3RgYCAoT3BlblNlYXJjaCBTZXJ2aWNlIGVuZHBvaW50IHdpdGhvdXQgcHJvdG9jb2wpLCBgYFBvcnRgYCwgYGBJbmRleGBgLCBgYFR5cGVgYCwgYGBBd3NfYXV0aGBgLCBgYEF3c19yZWdpb25gYCwgYGBTdXBwcmVzc19UeXBlX05hbWVgYCwgYW5kIGBgdGxzYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VuZGVyIHRoZSBob29kOiBGaXJlTGVucyBmb3IgQW1hem9uIEVDUyBUYXNrc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvbnRhaW5lcnMvdW5kZXItdGhlLWhvb2QtZmlyZWxlbnMtZm9yLWFtYXpvbi1lY3MtdGFza3MvKS5cbiAqICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gUzMsIHlvdSBjYW4gc3BlY2lmeSB0aGUgYnVja2V0IHVzaW5nIHRoZSBgYGJ1Y2tldGBgIG9wdGlvbi4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYGByZWdpb25gYCwgYGB0b3RhbF9maWxlX3NpemVgYCwgYGB1cGxvYWRfdGltZW91dGBgLCBhbmQgYGB1c2VfcHV0X29iamVjdGBgIGFzIG9wdGlvbnMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjE5IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLiBUbyBjaGVjayB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgdmVyc2lvbiBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSwgbG9nIGluIHRvIHlvdXIgY29udGFpbmVyIGluc3RhbmNlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOiBgYHN1ZG8gZG9ja2VyIHZlcnNpb24gLS1mb3JtYXQgJ3t7LlNlcnZlci5BUElWZXJzaW9ufX0nYGBcbiAqL1xuT3B0aW9ucz86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLnsxLH1cIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIGRyaXZlciB0byB1c2UgZm9yIHRoZSBjb250YWluZXIuXG4gKiAgRm9yIHRhc2tzIG9uIEZBUkdBVEVsb25nLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgdGFza3MgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBmbHVlbnRkYGAsIGBgZ2VsZmBgLCBgYGpzb24tZmlsZWBgLCBgYGpvdXJuYWxkYGAsIGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gQ2xvdWRXYXRjaF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfYXdzbG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzZmlyZWxlbnNgYCBsb2cgZHJpdmVyLCBzZWUgW1NlbmQgQW1hem9uIEVDUyBsb2dzIHRvIGFuIHNlcnZpY2Ugb3IgUGFydG5lcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfZmlyZWxlbnMuaHRtbCkuXG4gKiAgIElmIHlvdSBoYXZlIGEgY3VzdG9tIGRyaXZlciB0aGF0IGlzbid0IGxpc3RlZCwgeW91IGNhbiBmb3JrIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBwcm9qZWN0IHRoYXQncyBbYXZhaWxhYmxlIG9uIEdpdEh1Yl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYW1hem9uLWVjcy1hZ2VudCkgYW5kIGN1c3RvbWl6ZSBpdCB0byB3b3JrIHdpdGggdGhhdCBkcml2ZXIuIFdlIGVuY291cmFnZSB5b3UgdG8gc3VibWl0IHB1bGwgcmVxdWVzdHMgZm9yIGNoYW5nZXMgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBoYXZlIGluY2x1ZGVkLiBIb3dldmVyLCB3ZSBkb24ndCBjdXJyZW50bHkgcHJvdmlkZSBzdXBwb3J0IGZvciBydW5uaW5nIG1vZGlmaWVkIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLlxuICovXG5Mb2dEcml2ZXI/OiBzdHJpbmdcbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2VjcmV0IHRvIGV4cG9zZSB0byB5b3VyIGNvbnRhaW5lci4gU2VjcmV0cyBjYW4gYmUgZXhwb3NlZCB0byBhIGNvbnRhaW5lciBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAgICsgIFRvIGluamVjdCBzZW5zaXRpdmUgZGF0YSBpbnRvIHlvdXIgY29udGFpbmVycyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHVzZSB0aGUgYGBzZWNyZXRzYGAgY29udGFpbmVyIGRlZmluaXRpb24gcGFyYW1ldGVyLlxuICogICArICBUbyByZWZlcmVuY2Ugc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIHRoZSBsb2cgY29uZmlndXJhdGlvbiBvZiBhIGNvbnRhaW5lciwgdXNlIHRoZSBgYHNlY3JldE9wdGlvbnNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgc2Vuc2l0aXZlIGRhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldCB7XG4vKipcbiAqIFRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHRoZSBjb250YWluZXIuIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9mIHRoZSBBU01sb25nIHNlY3JldCBvciB0aGUgZnVsbCBBUk4gb2YgdGhlIHBhcmFtZXRlciBpbiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZS5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVpcmUgSUFNbG9uZyBwZXJtaXNzaW9ucywgc2VlIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1zZWNyZXRzLmh0bWwjc2VjcmV0cy1pYW0pIChmb3IgU2VjcmV0cyBNYW5hZ2VyKSBvciBbUmVxdWlyZWQgSUFNIHBlcm1pc3Npb25zIGZvciBBbWF6b24gRUNTIHNlY3JldHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEtcGFyYW1ldGVycy5odG1sKSAoZm9yIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgc3RvcmUpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgdGhlIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGFyYW1ldGVyIGV4aXN0cyBpbiB0aGUgc2FtZSBSZWdpb24gYXMgdGhlIHRhc2sgeW91J3JlIGxhdW5jaGluZywgdGhlbiB5b3UgY2FuIHVzZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9yIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4gSWYgdGhlIHBhcmFtZXRlciBleGlzdHMgaW4gYSBkaWZmZXJlbnQgUmVnaW9uLCB0aGVuIHRoZSBmdWxsIEFSTiBtdXN0IGJlIHNwZWNpZmllZC5cbiAqL1xuVmFsdWVGcm9tOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHNlY3JldC5cbiAqL1xuTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uIGZvciB5b3VyIHNlcnZpY2UgdGhhdCBob2xkcyB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSB0YXJnZXQgZ3JvdXAocykgQW1hem9uIEVDUyB0YXNrcyB3aWxsIGJlIHJlZ2lzdGVyZWQgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjTGF0dGljZUNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgdGFyZ2V0IGdyb3VwIG9yIGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggdGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gdGhhdCB0aGUgQW1hem9uIEVDUyB0YXNrcyB3aWxsIGJlIHJlZ2lzdGVyZWQgdG8uXG4gKi9cblRhcmdldEdyb3VwQXJuOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHBvcnQgbWFwcGluZyB0byByZWdpc3RlciBpbiB0aGUgVlBDIExhdHRpY2UgdGFyZ2V0IGdyb3VwLiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBgYHBvcnRNYXBwaW5nYGAgeW91IGRlZmluZWQgaW4geW91ciB0YXNrIGRlZmluaXRpb24uXG4gKi9cblBvcnROYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgSUFNIHJvbGUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBWUEMgTGF0dGljZSBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHRoZSBBbWF6b24gRUNT4oCoIGluZnJhc3RydWN0dXJlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBtYW5hZ2UgeW91ciBWUEMgTGF0dGljZSBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gSWYgbm8gZGVwbG95bWVudCBjb250cm9sbGVyIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBFQ1NgYCBpcyB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDb250cm9sbGVyIHtcbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlIHRvIHVzZS4gVGhlcmUgYXJlIHRocmVlIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcyBhdmFpbGFibGU6XG4gKiAgICsgRUNTIFRoZSByb2xsaW5nIHVwZGF0ZSAoRUNTKSBkZXBsb3ltZW50IHR5cGUgaW52b2x2ZXMgcmVwbGFjaW5nIHRoZSBjdXJyZW50IHJ1bm5pbmcgdmVyc2lvbiBvZiB0aGUgY29udGFpbmVyIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uLiBUaGUgbnVtYmVyIG9mIGNvbnRhaW5lcnMgQW1hem9uIEVDUyBhZGRzIG9yIHJlbW92ZXMgZnJvbSB0aGUgc2VydmljZSBkdXJpbmcgYSByb2xsaW5nIHVwZGF0ZSBpcyBjb250cm9sbGVkIGJ5IGFkanVzdGluZyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgaGVhbHRoeSB0YXNrcyBhbGxvd2VkIGR1cmluZyBhIHNlcnZpY2UgZGVwbG95bWVudCwgYXMgc3BlY2lmaWVkIGluIHRoZSBEZXBsb3ltZW50Q29uZmlndXJhdGlvbi4gKyBDT0RFX0RFUExPWSBUaGUgYmx1ZS9ncmVlbiAoQ09ERV9ERVBMT1kpIGRlcGxveW1lbnQgdHlwZSB1c2VzIHRoZSBibHVlL2dyZWVuIGRlcGxveW1lbnQgbW9kZWwgcG93ZXJlZCBieSAsIHdoaWNoIGFsbG93cyB5b3UgdG8gdmVyaWZ5IGEgbmV3IGRlcGxveW1lbnQgb2YgYSBzZXJ2aWNlIGJlZm9yZSBzZW5kaW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byBpdC4gKyBFWFRFUk5BTCBUaGUgZXh0ZXJuYWwgKEVYVEVSTkFMKSBkZXBsb3ltZW50IHR5cGUgZW5hYmxlcyB5b3UgdG8gdXNlIGFueSB0aGlyZC1wYXJ0eSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgZm9yIGZ1bGwgY29udHJvbCBvdmVyIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MgZm9yIGFuIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqL1xuVHlwZT86IChcIkNPREVfREVQTE9ZXCIgfCBcIkVDU1wiIHwgXCJFWFRFUk5BTFwiKVxufVxuLyoqXG4gKiBPcHRpb25hbCBkZXBsb3ltZW50IHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIGhvdyBtYW55IHRhc2tzIHJ1biBkdXJpbmcgdGhlIGRlcGxveW1lbnQgYW5kIHRoZSBvcmRlcmluZyBvZiBzdG9wcGluZyBhbmQgc3RhcnRpbmcgdGFza3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbmZpZ3VyYXRpb24ge1xuQWxhcm1zPzogRGVwbG95bWVudEFsYXJtc1xuRGVwbG95bWVudENpcmN1aXRCcmVha2VyPzogRGVwbG95bWVudENpcmN1aXRCcmVha2VyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWF4aW11bVBlcmNlbnRgYCBwYXJhbWV0ZXIgcmVwcmVzZW50cyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgYXJlIGFsbG93ZWQgaW4gdGhlIGBgUlVOTklOR2BgIG9yIGBgUEVORElOR2BgIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYGBkZXNpcmVkQ291bnRgYCAocm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZWZpbmUgdGhlIGRlcGxveW1lbnQgYmF0Y2ggc2l6ZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2VydmljZSBpcyB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgYW5kIGhhcyBhIGBgZGVzaXJlZENvdW50YGAgb2YgZm91ciB0YXNrcyBhbmQgYSBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgb2YgMjAwJSwgdGhlIHNjaGVkdWxlciBtYXkgc3RhcnQgZm91ciBuZXcgdGFza3MgYmVmb3JlIHN0b3BwaW5nIHRoZSBmb3VyIG9sZGVyIHRhc2tzIChwcm92aWRlZCB0aGF0IHRoZSBjbHVzdGVyIHJlc291cmNlcyByZXF1aXJlZCB0byBkbyB0aGlzIGFyZSBhdmFpbGFibGUpLiBUaGUgZGVmYXVsdCBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgaXMgMjAwJS5cbiAqICBUaGUgQW1hem9uIEVDUyBzY2hlZHVsZXIgdXNlcyB0aGlzIHBhcmFtZXRlciB0byByZXBsYWNlIHVuaGVhbHRoeSB0YXNrcyBieSBzdGFydGluZyByZXBsYWNlbWVudCB0YXNrcyBmaXJzdCBhbmQgdGhlbiBzdG9wcGluZyB0aGUgdW5oZWFsdGh5IHRhc2tzLCBhcyBsb25nIGFzIGNsdXN0ZXIgcmVzb3VyY2VzIGZvciBzdGFydGluZyByZXBsYWNlbWVudCB0YXNrcyBhcmUgYXZhaWxhYmxlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIHNjaGVkdWxlciByZXBsYWNlcyB1bmhlYWx0aHkgdGFza3MsIHNlZSBbQW1hem9uIEVDUyBzZXJ2aWNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzX3NlcnZpY2VzLmh0bWwpLlxuICogIElmIGEgc2VydmljZSBpcyB1c2luZyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMsIGFuZCB0YXNrcyBpbiB0aGUgc2VydmljZSB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlICptYXhpbXVtIHBlcmNlbnQqIHZhbHVlIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlICptYXhpbXVtIHBlcmNlbnQqIHZhbHVlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB0aGF0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgd2hpbGUgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGluIHRoZSBgYERSQUlOSU5HYGAgc3RhdGUuXG4gKiAgIFlvdSBjYW4ndCBzcGVjaWZ5IGEgY3VzdG9tIGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHRoYXQgdXNlcyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGhhcyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLlxuICogICBJZiB0aGUgc2VydmljZSB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcywgYW5kIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB1c2UgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSBtYXhpbXVtIHBlcmNlbnQgdmFsdWUgaXMgbm90IHVzZWQuIFRoZSB2YWx1ZSBpcyBzdGlsbCByZXR1cm5lZCB3aGVuIGRlc2NyaWJpbmcgeW91ciBzZXJ2aWNlLlxuICovXG5NYXhpbXVtUGVyY2VudD86IG51bWJlclxuLyoqXG4gKiBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUsIHRoZSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIHJlcHJlc2VudHMgYSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgbXVzdCByZW1haW4gaW4gdGhlIGBgUlVOTklOR2BgIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYGBkZXNpcmVkQ291bnRgYCAocm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKS4gVGhpcyBwYXJhbWV0ZXIgZW5hYmxlcyB5b3UgdG8gZGVwbG95IHdpdGhvdXQgdXNpbmcgYWRkaXRpb25hbCBjbHVzdGVyIGNhcGFjaXR5LiBGb3IgZXhhbXBsZSwgaWYgeW91ciBzZXJ2aWNlIGhhcyBhIGBgZGVzaXJlZENvdW50YGAgb2YgZm91ciB0YXNrcyBhbmQgYSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIG9mIDUwJSwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIG1heSBzdG9wIHR3byBleGlzdGluZyB0YXNrcyB0byBmcmVlIHVwIGNsdXN0ZXIgY2FwYWNpdHkgYmVmb3JlIHN0YXJ0aW5nIHR3byBuZXcgdGFza3MuIFxuICogICBJZiBhbnkgdGFza3MgYXJlIHVuaGVhbHRoeSBhbmQgaWYgYGBtYXhpbXVtUGVyY2VudGBgIGRvZXNuJ3QgYWxsb3cgdGhlIEFtYXpvbiBFQ1Mgc2NoZWR1bGVyIHRvIHN0YXJ0IHJlcGxhY2VtZW50IHRhc2tzLCB0aGUgc2NoZWR1bGVyIHN0b3BzIHRoZSB1bmhlYWx0aHkgdGFza3Mgb25lLWJ5LW9uZSDigJQgdXNpbmcgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgYXMgYSBjb25zdHJhaW50IOKAlCB0byBjbGVhciB1cCBjYXBhY2l0eSB0byBsYXVuY2ggcmVwbGFjZW1lbnQgdGFza3MuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgc2NoZWR1bGVyIHJlcGxhY2VzIHVuaGVhbHRoeSB0YXNrcywgc2VlIFtBbWF6b24gRUNTIHNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkgLiBcbiAqICBGb3Igc2VydmljZXMgdGhhdCAqZG8gbm90KiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgQSBzZXJ2aWNlIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSBpZiBhbGwgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBwYXNzIHRoZWlyIGhlYWx0aCBjaGVja3MuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciA0MCBzZWNvbmRzIGFmdGVyIGEgdGFzayByZWFjaGVzIGEgYGBSVU5OSU5HYGAgc3RhdGUgYmVmb3JlIHRoZSB0YXNrIGlzIGNvdW50ZWQgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgb25lIG9yIG1vcmUgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyBpdCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC4gQSB0YXNrIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSB3aGVuIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2sgaGF2ZSBwYXNzZWQgdGhlaXIgaGVhbHRoIGNoZWNrcy4gVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBjYW4gd2FpdCBmb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY29udGFpbmVyIGhlYWx0aCBjaGVjayBzZXR0aW5ncy4gXG4gKiAgIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyogdXNlIGEgbG9hZCBiYWxhbmNlciwgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgbm90ZWQ6XG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBhbiBlc3NlbnRpYWwgY29udGFpbmVyIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgYm90aCB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGFuZCB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgXG4gKiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgcmVwbGljYSBzZXJ2aWNlIGZvciBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIGlzIDEwMCUuIFRoZSBkZWZhdWx0IGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBEQUVNT05gYCBzZXJ2aWNlIHNjaGVkdWxlIGlzIDAlIGZvciB0aGUgQ0xJLCB0aGUgQVdTIFNES3MsIGFuZCB0aGUgQVBJcyBhbmQgNTAlIGZvciB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS5cbiAqICBUaGUgbWluaW11bSBudW1iZXIgb2YgaGVhbHRoeSB0YXNrcyBkdXJpbmcgYSBkZXBsb3ltZW50IGlzIHRoZSBgYGRlc2lyZWRDb3VudGBgIG11bHRpcGxpZWQgYnkgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAvMTAwLCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1pbmltdW0gaGVhbHRoeSBwZXJjZW50KiB2YWx1ZSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB0aGF0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgd2hpbGUgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGluIHRoZSBgYERSQUlOSU5HYGAgc3RhdGUuXG4gKiAgIFlvdSBjYW4ndCBzcGVjaWZ5IGEgY3VzdG9tIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB0aGF0IHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBoYXMgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZS5cbiAqICAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHZhbHVlIGlzIG5vdCB1c2VkLCBhbHRob3VnaCBpdCBpcyByZXR1cm5lZCB3aGVuIGRlc2NyaWJpbmcgeW91ciBzZXJ2aWNlLlxuICovXG5NaW5pbXVtSGVhbHRoeVBlcmNlbnQ/OiBudW1iZXJcbn1cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIENsb3VkV2F0Y2ggYWxhcm1zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRBbGFybXMge1xuLyoqXG4gKiBPbmUgb3IgbW9yZSBDbG91ZFdhdGNoIGFsYXJtIG5hbWVzLiBVc2UgYSBcIixcIiB0byBzZXBhcmF0ZSB0aGUgYWxhcm1zLlxuICovXG5BbGFybU5hbWVzOiBzdHJpbmdbXVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBDbG91ZFdhdGNoIGFsYXJtIG9wdGlvbiBpbiB0aGUgc2VydmljZSBkZXBsb3ltZW50IHByb2Nlc3MuXG4gKi9cbkVuYWJsZTogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29uZmlndXJlIEFtYXpvbiBFQ1MgdG8gcm9sbCBiYWNrIHRoZSBzZXJ2aWNlIGlmIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLiBJZiByb2xsYmFjayBpcyB1c2VkLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuUm9sbGJhY2s6IGJvb2xlYW5cbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHNlcnZpY2VzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLlxuICogICBUaGUgKmRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyKiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBzZXJ2aWNlIGRlcGxveW1lbnQgd2lsbCBmYWlsIGlmIHRoZSBzZXJ2aWNlIGNhbid0IHJlYWNoIGEgc3RlYWR5IHN0YXRlLiBJZiB5b3UgdXNlIHRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciwgYSBzZXJ2aWNlIGRlcGxveW1lbnQgd2lsbCB0cmFuc2l0aW9uIHRvIGEgZmFpbGVkIHN0YXRlIGFuZCBzdG9wIGxhdW5jaGluZyBuZXcgdGFza3MuIElmIHlvdSB1c2UgdGhlIHJvbGxiYWNrIG9wdGlvbiwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JvbGxpbmcgdXBkYXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtZWNzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDaXJjdWl0QnJlYWtlciB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyIGxvZ2ljIGZvciB0aGUgc2VydmljZS5cbiAqL1xuRW5hYmxlOiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBjb25maWd1cmUgQW1hem9uIEVDUyB0byByb2xsIGJhY2sgdGhlIHNlcnZpY2UgaWYgYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMuIElmIHJvbGxiYWNrIGlzIG9uLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuUm9sbGJhY2s6IGJvb2xlYW5cbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSBpcyBjb25maWd1cmVkLiBUaGlzIGlzIGJlY2F1c2UgQVdTIENsb3VkRm9ybWF0aW9uIGNyZWF0ZXMgdGhlIHJlcGxhY2VtZW50IHNlcnZpY2UgZmlyc3QsIGJ1dCBlYWNoIGBgU2VydmljZUNvbm5lY3RTZXJ2aWNlYGAgbXVzdCBoYXZlIGEgbmFtZSB0aGF0IGlzIHVuaXF1ZSBpbiB0aGUgbmFtZXNwYWNlLlxuICogICAgU3RhcnRpbmcgQXByaWwgMTUsIDIwMjMsIEFXUzsgd2lsbCBub3Qgb25ib2FyZCBuZXcgY3VzdG9tZXJzIHRvIEFtYXpvbiBFbGFzdGljIEluZmVyZW5jZSAoRUkpLCBhbmQgd2lsbCBoZWxwIGN1cnJlbnQgY3VzdG9tZXJzIG1pZ3JhdGUgdGhlaXIgd29ya2xvYWRzIHRvIG9wdGlvbnMgdGhhdCBvZmZlciBiZXR0ZXIgcHJpY2UgYW5kIHBlcmZvcm1hbmNlLiBBZnRlciBBcHJpbCAxNSwgMjAyMywgbmV3IGN1c3RvbWVycyB3aWxsIG5vdCBiZSBhYmxlIHRvIGxhdW5jaCBpbnN0YW5jZXMgd2l0aCBBbWF6b24gRUkgYWNjZWxlcmF0b3JzIGluIEFtYXpvbiBTYWdlTWFrZXIsIEVDUywgb3IgRUMyLiBIb3dldmVyLCBjdXN0b21lcnMgd2hvIGhhdmUgdXNlZCBBbWF6b24gRUkgYXQgbGVhc3Qgb25jZSBkdXJpbmcgdGhlIHBhc3QgMzAtZGF5IHBlcmlvZCBhcmUgY29uc2lkZXJlZCBjdXJyZW50IGN1c3RvbWVycyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBzZXJ2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfRUNTX1NFUlZJQ0Uge1xuLyoqXG4gKiBUaGUgcGxhdGZvcm0gdmVyc2lvbiB0aGF0IHlvdXIgdGFza3MgaW4gdGhlIHNlcnZpY2UgYXJlIHJ1bm5pbmcgb24uIEEgcGxhdGZvcm0gdmVyc2lvbiBpcyBzcGVjaWZpZWQgb25seSBmb3IgdGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuIElmIG9uZSBpc24ndCBzcGVjaWZpZWQsIHRoZSBgYExBVEVTVGBgIHBsYXRmb3JtIHZlcnNpb24gaXMgdXNlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbcGxhdGZvcm0gdmVyc2lvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3BsYXRmb3JtX3ZlcnNpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUGxhdGZvcm1WZXJzaW9uPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHByb3BhZ2F0ZSB0aGUgdGFncyBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gdG8gdGhlIHRhc2suIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIHRhZ3MgYXJlbid0IHByb3BhZ2F0ZWQuIFRhZ3MgY2FuIG9ubHkgYmUgcHJvcGFnYXRlZCB0byB0aGUgdGFzayBkdXJpbmcgdGFzayBjcmVhdGlvbi4gVG8gYWRkIHRhZ3MgdG8gYSB0YXNrIGFmdGVyIHRhc2sgY3JlYXRpb24sIHVzZSB0aGUgW1RhZ1Jlc291cmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1RhZ1Jlc291cmNlLmh0bWwpIEFQSSBhY3Rpb24uXG4gKiAgWW91IG11c3Qgc2V0IHRoaXMgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIGBgTk9ORWBgIHdoZW4geW91IHVzZSBDb3N0IEV4cGxvcmVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIHVzYWdlIHJlcG9ydHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzYWdlLXJlcG9ydHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBkZWZhdWx0IGlzIGBgTk9ORWBgLlxuICovXG5Qcm9wYWdhdGVUYWdzPzogKFwiU0VSVklDRVwiIHwgXCJUQVNLX0RFRklOSVRJT05cIilcblNlcnZpY2VBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBsYWNlbWVudCBzdHJhdGVneSBvYmplY3RzIHRvIHVzZSBmb3IgdGFza3MgaW4geW91ciBzZXJ2aWNlLiBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIG9mIDUgc3RyYXRlZ3kgcnVsZXMgZm9yIGVhY2ggc2VydmljZS5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBQbGFjZW1lbnRTdHJhdGVneWBgIGFycmF5LlxuICovXG5QbGFjZW1lbnRTdHJhdGVnaWVzPzogUGxhY2VtZW50U3RyYXRlZ3lbXVxuLyoqXG4gKiBUaGUgZGV0YWlscyBvZiB0aGUgc2VydmljZSBkaXNjb3ZlcnkgcmVnaXN0cnkgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIGRpc2NvdmVyeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1kaXNjb3ZlcnkuaHRtbCkuXG4gKiAgIEVhY2ggc2VydmljZSBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIG9uZSBzZXJ2aWNlIHJlZ2lzdHJ5LiBNdWx0aXBsZSBzZXJ2aWNlIHJlZ2lzdHJpZXMgZm9yIGVhY2ggc2VydmljZSBpc24ndCBzdXBwb3J0ZWQuXG4gKiAgICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFNlcnZpY2VSZWdpc3RyeWBgIGFycmF5LlxuICovXG5TZXJ2aWNlUmVnaXN0cmllcz86IFNlcnZpY2VSZWdpc3RyeVtdXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhIHZvbHVtZSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhcyBhIHZvbHVtZSB0aGF0IGlzIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZvbHVtZSB0eXBlIGlzIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uYGAgYXJyYXkuXG4gKi9cblZvbHVtZUNvbmZpZ3VyYXRpb25zPzogU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25bXVxuLyoqXG4gKiBUaGUgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgc2VydmljZS5cbiAqICBJZiBhIGBgY2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5YGAgaXMgc3BlY2lmaWVkLCB0aGUgYGBsYXVuY2hUeXBlYGAgcGFyYW1ldGVyIG11c3QgYmUgb21pdHRlZC4gSWYgbm8gYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBvciBgYGxhdW5jaFR5cGVgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGRlZmF1bHRDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBmb3IgdGhlIGNsdXN0ZXIgaXMgdXNlZC5cbiAqICBBIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBjb250YWluIGEgbWF4aW11bSBvZiAyMCBjYXBhY2l0eSBwcm92aWRlcnMuXG4gKiAgIFRvIHJlbW92ZSB0aGlzIHByb3BlcnR5IGZyb20geW91ciBzZXJ2aWNlIHJlc291cmNlLCBzcGVjaWZ5IGFuIGVtcHR5IGBgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbWBgIGFycmF5LlxuICovXG5DYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3k/OiBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtW11cbi8qKlxuICogVGhlIGxhdW5jaCB0eXBlIG9uIHdoaWNoIHRvIHJ1biB5b3VyIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgTGF1bmNoIFR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5MYXVuY2hUeXBlPzogKFwiRUMyXCIgfCBcIkZBUkdBVEVcIiB8IFwiRVhURVJOQUxcIilcbk5hbWU/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIEF2YWlsYWJpbGl0eSBab25lIHJlYmFsYW5jaW5nIGZvciB0aGUgc2VydmljZS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCYWxhbmNpbmcgYW4gQW1hem9uIEVDUyBzZXJ2aWNlIGFjcm9zcyBBdmFpbGFiaWxpdHkgWm9uZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtcmViYWxhbmNpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5BdmFpbGFiaWxpdHlab25lUmViYWxhbmNpbmc/OiAoXCJFTkFCTEVEXCIgfCBcIkRJU0FCTEVEXCIpXG4vKipcbiAqIFRoZSBzY2hlZHVsaW5nIHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuXG4gKiAgVGhlcmUgYXJlIHR3byBzZXJ2aWNlIHNjaGVkdWxlciBzdHJhdGVnaWVzIGF2YWlsYWJsZTpcbiAqICAgKyAgYGBSRVBMSUNBYGAtVGhlIHJlcGxpY2Egc2NoZWR1bGluZyBzdHJhdGVneSBwbGFjZXMgYW5kIG1haW50YWlucyB0aGUgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MgYWNyb3NzIHlvdXIgY2x1c3Rlci4gQnkgZGVmYXVsdCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHNwcmVhZHMgdGFza3MgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lcy4gWW91IGNhbiB1c2UgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llcyBhbmQgY29uc3RyYWludHMgdG8gY3VzdG9taXplIHRhc2sgcGxhY2VtZW50IGRlY2lzaW9ucy4gVGhpcyBzY2hlZHVsZXIgc3RyYXRlZ3kgaXMgcmVxdWlyZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMuXG4gKiAgICsgIGBgREFFTU9OYGAtVGhlIGRhZW1vbiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRlcGxveXMgZXhhY3RseSBvbmUgdGFzayBvbiBlYWNoIGFjdGl2ZSBjb250YWluZXIgaW5zdGFuY2UgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIHRoYXQgeW91IHNwZWNpZnkgaW4geW91ciBjbHVzdGVyLiBUaGUgc2VydmljZSBzY2hlZHVsZXIgYWxzbyBldmFsdWF0ZXMgdGhlIHRhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzIGZvciBydW5uaW5nIHRhc2tzIGFuZCB3aWxsIHN0b3AgdGFza3MgdGhhdCBkb24ndCBtZWV0IHRoZSBwbGFjZW1lbnQgY29uc3RyYWludHMuIFdoZW4geW91J3JlIHVzaW5nIHRoaXMgc3RyYXRlZ3ksIHlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcywgYSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSwgb3IgdXNlIFNlcnZpY2UgQXV0byBTY2FsaW5nIHBvbGljaWVzLlxuICogICBUYXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSBvciB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMgZG9uJ3Qgc3VwcG9ydCB0aGUgYGBEQUVNT05gYCBzY2hlZHVsaW5nIHN0cmF0ZWd5LlxuICovXG5TY2hlZHVsaW5nU3RyYXRlZ3k/OiAoXCJEQUVNT05cIiB8IFwiUkVQTElDQVwiKVxuTmV0d29ya0NvbmZpZ3VyYXRpb24/OiBOZXR3b3JrQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gdGhlIHNlcnZpY2UgdG8gaGVscCB5b3UgY2F0ZWdvcml6ZSBhbmQgb3JnYW5pemUgdGhlbS4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLCBib3RoIG9mIHdoaWNoIHlvdSBkZWZpbmUuIFdoZW4gYSBzZXJ2aWNlIGlzIGRlbGV0ZWQsIHRoZSB0YWdzIGFyZSBkZWxldGVkIGFzIHdlbGwuXG4gKiAgVGhlIGZvbGxvd2luZyBiYXNpYyByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGFnczpcbiAqICAgKyAgTWF4aW11bSBudW1iZXIgb2YgdGFncyBwZXIgcmVzb3VyY2UgLSA1MFxuICogICArICBGb3IgZWFjaCByZXNvdXJjZSwgZWFjaCB0YWcga2V5IG11c3QgYmUgdW5pcXVlLCBhbmQgZWFjaCB0YWcga2V5IGNhbiBoYXZlIG9ubHkgb25lIHZhbHVlLlxuICogICArICBNYXhpbXVtIGtleSBsZW5ndGggLSAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIE1heGltdW0gdmFsdWUgbGVuZ3RoIC0gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBJZiB5b3VyIHRhZ2dpbmcgc2NoZW1hIGlzIHVzZWQgYWNyb3NzIG11bHRpcGxlIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIHJlbWVtYmVyIHRoYXQgb3RoZXIgc2VydmljZXMgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhcmFjdGVycy4gR2VuZXJhbGx5IGFsbG93ZWQgY2hhcmFjdGVycyBhcmU6IGxldHRlcnMsIG51bWJlcnMsIGFuZCBzcGFjZXMgcmVwcmVzZW50YWJsZSBpbiBVVEYtOCwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogKyAtID0gLiBfIDogLyBALlxuICogICArICBUYWcga2V5cyBhbmQgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqICAgKyAgRG8gbm90IHVzZSBgYGF3czpgYCwgYGBBV1M6YGAsIG9yIGFueSB1cHBlciBvciBsb3dlcmNhc2UgY29tYmluYXRpb24gb2Ygc3VjaCBhcyBhIHByZWZpeCBmb3IgZWl0aGVyIGtleXMgb3IgdmFsdWVzIGFzIGl0IGlzIHJlc2VydmVkIGZvciBBV1MgdXNlLiBZb3UgY2Fubm90IGVkaXQgb3IgZGVsZXRlIHRhZyBrZXlzIG9yIHZhbHVlcyB3aXRoIHRoaXMgcHJlZml4LiBUYWdzIHdpdGggdGhpcyBwcmVmaXggZG8gbm90IGNvdW50IGFnYWluc3QgeW91ciB0YWdzIHBlciByZXNvdXJjZSBsaW1pdC5cbiAqL1xuVGFncz86IFRhZ1tdXG4vKipcbiAqIFRoZSBwZXJpb2Qgb2YgdGltZSwgaW4gc2Vjb25kcywgdGhhdCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciBpZ25vcmVzIHVuaGVhbHRoeSBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBWUEMgTGF0dGljZSwgYW5kIGNvbnRhaW5lciBoZWFsdGggY2hlY2tzIGFmdGVyIGEgdGFzayBoYXMgZmlyc3Qgc3RhcnRlZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIHZhbHVlLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLiBJZiB5b3UgZG9uJ3QgdXNlIGFueSBvZiB0aGUgaGVhbHRoIGNoZWNrcywgdGhlbiBgYGhlYWx0aENoZWNrR3JhY2VQZXJpb2RTZWNvbmRzYGAgaXMgdW51c2VkLlxuICogIElmIHlvdXIgc2VydmljZSdzIHRhc2tzIHRha2UgYSB3aGlsZSB0byBzdGFydCBhbmQgcmVzcG9uZCB0byBoZWFsdGggY2hlY2tzLCB5b3UgY2FuIHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIG9mIHVwIHRvIDIsMTQ3LDQ4Myw2NDcgc2Vjb25kcyAoYWJvdXQgNjkgeWVhcnMpLiBEdXJpbmcgdGhhdCB0aW1lLCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIHNjaGVkdWxlciBpZ25vcmVzIGhlYWx0aCBjaGVjayBzdGF0dXMuIFRoaXMgZ3JhY2UgcGVyaW9kIGNhbiBwcmV2ZW50IHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBmcm9tIG1hcmtpbmcgdGFza3MgYXMgdW5oZWFsdGh5IGFuZCBzdG9wcGluZyB0aGVtIGJlZm9yZSB0aGV5IGhhdmUgdGltZSB0byBjb21lIHVwLlxuICovXG5IZWFsdGhDaGVja0dyYWNlUGVyaW9kU2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byB0dXJuIG9uIEFtYXpvbiBFQ1MgbWFuYWdlZCB0YWdzIGZvciB0aGUgdGFza3Mgd2l0aGluIHRoZSBzZXJ2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYWdnaW5nIHlvdXIgQW1hem9uIEVDUyByZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy11c2luZy10YWdzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBXaGVuIHlvdSB1c2UgQW1hem9uIEVDUyBtYW5hZ2VkIHRhZ3MsIHlvdSBuZWVkIHRvIHNldCB0aGUgYGBwcm9wYWdhdGVUYWdzYGAgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gKi9cbkVuYWJsZUVDU01hbmFnZWRUYWdzPzogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbmFsaXR5IGlzIHR1cm5lZCBvbiBmb3IgdGhlIHNlcnZpY2UuIElmIGBgdHJ1ZWBgLCB0aGUgZXhlY3V0ZSBjb21tYW5kIGZ1bmN0aW9uYWxpdHkgaXMgdHVybmVkIG9uIGZvciBhbGwgY29udGFpbmVycyBpbiB0YXNrcyBhcyBwYXJ0IG9mIHRoZSBzZXJ2aWNlLlxuICovXG5FbmFibGVFeGVjdXRlQ29tbWFuZD86IGJvb2xlYW5cbi8qKlxuICogQW4gYXJyYXkgb2YgcGxhY2VtZW50IGNvbnN0cmFpbnQgb2JqZWN0cyB0byB1c2UgZm9yIHRhc2tzIGluIHlvdXIgc2VydmljZS4gWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSBvZiAxMCBjb25zdHJhaW50cyBmb3IgZWFjaCB0YXNrLiBUaGlzIGxpbWl0IGluY2x1ZGVzIGNvbnN0cmFpbnRzIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYW5kIHRob3NlIHNwZWNpZmllZCBhdCBydW50aW1lLlxuICogICBUbyByZW1vdmUgdGhpcyBwcm9wZXJ0eSBmcm9tIHlvdXIgc2VydmljZSByZXNvdXJjZSwgc3BlY2lmeSBhbiBlbXB0eSBgYFBsYWNlbWVudENvbnN0cmFpbnRgYCBhcnJheS5cbiAqL1xuUGxhY2VtZW50Q29uc3RyYWludHM/OiBQbGFjZW1lbnRDb25zdHJhaW50W11cbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgY2x1c3RlciB0aGF0IHlvdSBydW4geW91ciBzZXJ2aWNlIG9uLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBjbHVzdGVyLCB0aGUgZGVmYXVsdCBjbHVzdGVyIGlzIGFzc3VtZWQuXG4gKi9cbkNsdXN0ZXI/OiBzdHJpbmdcbi8qKlxuICogQSBsaXN0IG9mIGxvYWQgYmFsYW5jZXIgb2JqZWN0cyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmljZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgUm9sZWBgIHByb3BlcnR5LCBgYExvYWRCYWxhbmNlcnNgYCBtdXN0IGJlIHNwZWNpZmllZCBhcyB3ZWxsLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG51bWJlciBvZiBsb2FkIGJhbGFuY2VycyB0aGF0IHlvdSBjYW4gc3BlY2lmeSBwZXIgc2VydmljZSwgc2VlIFtTZXJ2aWNlIExvYWQgQmFsYW5jaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWxvYWQtYmFsYW5jaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVG8gcmVtb3ZlIHRoaXMgcHJvcGVydHkgZnJvbSB5b3VyIHNlcnZpY2UgcmVzb3VyY2UsIHNwZWNpZnkgYW4gZW1wdHkgYGBMb2FkQmFsYW5jZXJgYCBhcnJheS5cbiAqL1xuTG9hZEJhbGFuY2Vycz86IExvYWRCYWxhbmNlcltdXG5TZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24/OiBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG51bWJlciBvZiBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc3BlY2lmaWVkIHRhc2sgZGVmaW5pdGlvbiB0byBwbGFjZSBhbmQga2VlcCBydW5uaW5nIGluIHlvdXIgc2VydmljZS5cbiAqICBGb3IgbmV3IHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IHZhbHVlIG9mIGBgMWBgIGlzIHVzZWQuIFdoZW4gdXNpbmcgdGhlIGBgREFFTU9OYGAgc2NoZWR1bGluZyBzdHJhdGVneSwgdGhlIGRlc2lyZWQgY291bnQgaXMgbm90IHJlcXVpcmVkLlxuICogIEZvciBleGlzdGluZyBzZXJ2aWNlcywgaWYgYSBkZXNpcmVkIGNvdW50IGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIG9taXR0ZWQgZnJvbSB0aGUgb3BlcmF0aW9uLlxuICovXG5EZXNpcmVkQ291bnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZXJ2aWNlIGJlaW5nIGNyZWF0ZWQuXG4gKi9cblZwY0xhdHRpY2VDb25maWd1cmF0aW9ucz86IFZwY0xhdHRpY2VDb25maWd1cmF0aW9uW11cbkRlcGxveW1lbnRDb250cm9sbGVyPzogRGVwbG95bWVudENvbnRyb2xsZXJcbi8qKlxuICogVGhlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBhbGxvd3MgQW1hem9uIEVDUyB0byBtYWtlIGNhbGxzIHRvIHlvdXIgbG9hZCBiYWxhbmNlciBvbiB5b3VyIGJlaGFsZi4gVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBwZXJtaXR0ZWQgaWYgeW91IGFyZSB1c2luZyBhIGxvYWQgYmFsYW5jZXIgd2l0aCB5b3VyIHNlcnZpY2UgYW5kIHlvdXIgdGFzayBkZWZpbml0aW9uIGRvZXNuJ3QgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgcm9sZWBgIHBhcmFtZXRlciwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGEgbG9hZCBiYWxhbmNlciBvYmplY3Qgd2l0aCB0aGUgYGBsb2FkQmFsYW5jZXJzYGAgcGFyYW1ldGVyLlxuICogICBJZiB5b3VyIGFjY291bnQgaGFzIGFscmVhZHkgY3JlYXRlZCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlLCB0aGF0IHJvbGUgaXMgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIHVubGVzcyB5b3Ugc3BlY2lmeSBhIHJvbGUgaGVyZS4gVGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgaXMgcmVxdWlyZWQgaWYgeW91ciB0YXNrIGRlZmluaXRpb24gdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgb3IgaWYgdGhlIHNlcnZpY2UgaXMgY29uZmlndXJlZCB0byB1c2Ugc2VydmljZSBkaXNjb3ZlcnksIGFuIGV4dGVybmFsIGRlcGxveW1lbnQgY29udHJvbGxlciwgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcywgb3IgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3JzIGluIHdoaWNoIGNhc2UgeW91IGRvbid0IHNwZWNpZnkgYSByb2xlIGhlcmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIHNlcnZpY2UtbGlua2VkIHJvbGVzIGZvciBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZy1zZXJ2aWNlLWxpbmtlZC1yb2xlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc3BlY2lmaWVkIHJvbGUgaGFzIGEgcGF0aCBvdGhlciB0aGFuIGBgL2BgLCB0aGVuIHlvdSBtdXN0IGVpdGhlciBzcGVjaWZ5IHRoZSBmdWxsIHJvbGUgQVJOICh0aGlzIGlzIHJlY29tbWVuZGVkKSBvciBwcmVmaXggdGhlIHJvbGUgbmFtZSB3aXRoIHRoZSBwYXRoLiBGb3IgZXhhbXBsZSwgaWYgYSByb2xlIHdpdGggdGhlIG5hbWUgYGBiYXJgYCBoYXMgYSBwYXRoIG9mIGBgL2Zvby9gYCB0aGVuIHlvdSB3b3VsZCBzcGVjaWZ5IGBgL2Zvby9iYXJgYCBhcyB0aGUgcm9sZSBuYW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtGcmllbmRseSBuYW1lcyBhbmQgcGF0aHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWRlbnRpZmllcnMuaHRtbCNpZGVudGlmaWVycy1mcmllbmRseS1uYW1lcykgaW4gdGhlICpJQU0gVXNlciBHdWlkZSouXG4gKi9cblJvbGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgZmFtaWx5YGAgYW5kIGBgcmV2aXNpb25gYCAoYGBmYW1pbHk6cmV2aXNpb25gYCkgb3IgZnVsbCBBUk4gb2YgdGhlIHRhc2sgZGVmaW5pdGlvbiB0byBydW4gaW4geW91ciBzZXJ2aWNlLiBJZiBhIGBgcmV2aXNpb25gYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgYGBBQ1RJVkVgYCByZXZpc2lvbiBpcyB1c2VkLlxuICogIEEgdGFzayBkZWZpbml0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBgYEVDU2BgIG9yIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXJzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlcGxveW1lbnQgdHlwZXMsIHNlZSBbQW1hem9uIEVDUyBkZXBsb3ltZW50IHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGVzLmh0bWwpLlxuICovXG5UYXNrRGVmaW5pdGlvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB5b3VyIHNlcnZpY2UuIFVwIHRvIDI1NSBsZXR0ZXJzICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSksIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucyBhcmUgYWxsb3dlZC4gU2VydmljZSBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBjbHVzdGVyLCBidXQgeW91IGNhbiBoYXZlIHNpbWlsYXJseSBuYW1lZCBzZXJ2aWNlcyBpbiBtdWx0aXBsZSBjbHVzdGVycyB3aXRoaW4gYSBSZWdpb24gb3IgYWNyb3NzIG11bHRpcGxlIFJlZ2lvbnMuXG4gKiAgIFRoZSBzdGFjayB1cGRhdGUgZmFpbHMgaWYgeW91IGNoYW5nZSBhbnkgcHJvcGVydGllcyB0aGF0IHJlcXVpcmUgcmVwbGFjZW1lbnQgYW5kIHRoZSBgYFNlcnZpY2VOYW1lYGAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VOYW1lYGAgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGNsdXN0ZXIuXG4gKi9cblNlcnZpY2VOYW1lPzogc3RyaW5nXG5EZXBsb3ltZW50Q29uZmlndXJhdGlvbj86IERlcGxveW1lbnRDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSBmb3IgYSB0YXNrIG9yIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IHN0cmF0ZWdpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stcGxhY2VtZW50LXN0cmF0ZWdpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudFN0cmF0ZWd5IHtcbi8qKlxuICogVGhlIGZpZWxkIHRvIGFwcGx5IHRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgYWdhaW5zdC4gRm9yIHRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGluc3RhbmNlSWRgYCAob3IgYGBob3N0YGAsIHdoaWNoIGhhcyB0aGUgc2FtZSBlZmZlY3QpLCBvciBhbnkgcGxhdGZvcm0gb3IgY3VzdG9tIGF0dHJpYnV0ZSB0aGF0J3MgYXBwbGllZCB0byBhIGNvbnRhaW5lciBpbnN0YW5jZSwgc3VjaCBhcyBgYGF0dHJpYnV0ZTplY3MuYXZhaWxhYmlsaXR5LXpvbmVgYC4gRm9yIHRoZSBgYGJpbnBhY2tgYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHZhbGlkIHZhbHVlcyBhcmUgYGBjcHVgYCBhbmQgYGBtZW1vcnlgYC4gRm9yIHRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSwgdGhpcyBmaWVsZCBpcyBub3QgdXNlZC5cbiAqL1xuRmllbGQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgcGxhY2VtZW50IHN0cmF0ZWd5LiBUaGUgYGByYW5kb21gYCBwbGFjZW1lbnQgc3RyYXRlZ3kgcmFuZG9tbHkgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzLiBUaGUgYGBzcHJlYWRgYCBwbGFjZW1lbnQgc3RyYXRlZ3kgc3ByZWFkcyBwbGFjZW1lbnQgYWNyb3NzIGF2YWlsYWJsZSBjYW5kaWRhdGVzIGV2ZW5seSBiYXNlZCBvbiB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gVGhlIGBgYmlucGFja2BgIHN0cmF0ZWd5IHBsYWNlcyB0YXNrcyBvbiBhdmFpbGFibGUgY2FuZGlkYXRlcyB0aGF0IGhhdmUgdGhlIGxlYXN0IGF2YWlsYWJsZSBhbW91bnQgb2YgdGhlIHJlc291cmNlIHRoYXQncyBzcGVjaWZpZWQgd2l0aCB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUsIGlmIHlvdSBiaW5wYWNrIG9uIG1lbW9yeSwgYSB0YXNrIGlzIHBsYWNlZCBvbiB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHJlbWFpbmluZyBtZW1vcnkgYnV0IHN0aWxsIGVub3VnaCB0byBydW4gdGhlIHRhc2suXG4gKi9cblR5cGU6IChcImJpbnBhY2tcIiB8IFwicmFuZG9tXCIgfCBcInNwcmVhZFwiKVxufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBmb3IgdGhlIHNlcnZpY2UgcmVnaXN0cnkuXG4gKiAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGFyZSBub3Qgc3VwcG9ydGVkLlxuICogIFdoZW4geW91IGFkZCwgdXBkYXRlLCBvciByZW1vdmUgdGhlIHNlcnZpY2UgcmVnaXN0cmllcyBjb25maWd1cmF0aW9uLCBBbWF6b24gRUNTIHN0YXJ0cyBhIG5ldyBkZXBsb3ltZW50LiBOZXcgdGFza3MgYXJlIHJlZ2lzdGVyZWQgYW5kIGRlcmVnaXN0ZXJlZCB0byB0aGUgdXBkYXRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVJlZ2lzdHJ5IHtcbi8qKlxuICogVGhlIGNvbnRhaW5lciBuYW1lIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZS4gSXQncyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdXNlZCBpZiB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2Ugc3BlY2lmaWVkIGFuIFNSViByZWNvcmQuIFRoaXMgZmllbGQgbWlnaHQgYmUgdXNlZCBpZiBib3RoIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgU1JWIHJlY29yZHMgYXJlIHVzZWQuXG4gKi9cblBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24geW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIGEgdHlwZSBTUlYgRE5TIHJlY29yZCBpcyB1c2VkLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBvciBhIGBgcG9ydGBgIHZhbHVlLiBIb3dldmVyLCB5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VydmljZSByZWdpc3RyeS4gVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgc2VydmljZSByZWdpc3RyeSBpcyBDTUFQLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGVTZXJ2aWNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbCkuXG4gKi9cblJlZ2lzdHJ5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhIHZvbHVtZSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhcyBhIHZvbHVtZSB0aGF0IGlzIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZvbHVtZSB0eXBlIGlzIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uIHtcbk1hbmFnZWRFQlNWb2x1bWU/OiBTZXJ2aWNlTWFuYWdlZEVCU1ZvbHVtZUNvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHZvbHVtZS4gVGhpcyB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgbmFtZSBmcm9tIHRoZSBgYFZvbHVtZWBgIG9iamVjdCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBbWF6b24gRUJTIHZvbHVtZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBhbmQgbWFuYWdlcyBvbiB5b3VyIGJlaGFsZi4gVGhlc2Ugc2V0dGluZ3MgYXJlIHVzZWQgdG8gY3JlYXRlIGVhY2ggQW1hem9uIEVCUyB2b2x1bWUsIHdpdGggb25lIHZvbHVtZSBjcmVhdGVkIGZvciBlYWNoIHRhc2sgaW4gdGhlIHNlcnZpY2UuIFRoZSBBbWF6b24gRUJTIHZvbHVtZXMgYXJlIHZpc2libGUgaW4geW91ciBhY2NvdW50IGluIHRoZSBBbWF6b24gRUMyIGNvbnNvbGUgb25jZSB0aGV5IGFyZSBjcmVhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzbmFwc2hvdCB0aGF0IEFtYXpvbiBFQ1MgdXNlcyB0byBjcmVhdGUgdm9sdW1lcyBmb3IgYXR0YWNobWVudCB0byB0YXNrcyBtYWludGFpbmVkIGJ5IHRoZSBzZXJ2aWNlLiBZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBgYHNuYXBzaG90SWRgYCBvciBgYHNpemVJbkdpQmBgIGluIHlvdXIgdm9sdW1lIGNvbmZpZ3VyYXRpb24uIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgU25hcHNob3RJZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuU25hcHNob3RJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdm9sdW1lIHR5cGUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgVm9sdW1lVHlwZWBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVCUyB2b2x1bWUgdHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlKi5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZvbHVtZSB0eXBlcy5cbiAqICAgKyAgR2VuZXJhbCBQdXJwb3NlIFNTRDogYGBncDJgYHxgYGdwM2BgXG4gKiAgICsgIFByb3Zpc2lvbmVkIElPUFMgU1NEOiBgYGlvMWBgfGBgaW8yYGBcbiAqICAgKyAgVGhyb3VnaHB1dCBPcHRpbWl6ZWQgSEREOiBgYHN0MWBgXG4gKiAgICsgIENvbGQgSEREOiBgYHNjMWBgXG4gKiAgICsgIE1hZ25ldGljOiBgYHN0YW5kYXJkYGBcbiAqICAgVGhlIG1hZ25ldGljIHZvbHVtZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgb24gRmFyZ2F0ZS5cbiAqL1xuVm9sdW1lVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgaWRlbnRpZmllciBvZiB0aGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IHRvIHVzZSBmb3IgQW1hem9uIEVCUyBlbmNyeXB0aW9uLiBXaGVuIGEga2V5IGlzIHNwZWNpZmllZCB1c2luZyB0aGlzIHBhcmFtZXRlciwgaXQgb3ZlcnJpZGVzIEFtYXpvbiBFQlMgZGVmYXVsdCBlbmNyeXB0aW9uIG9yIGFueSBLTVMga2V5IHRoYXQgeW91IHNwZWNpZmllZCBmb3IgY2x1c3Rlci1sZXZlbCBtYW5hZ2VkIHN0b3JhZ2UgZW5jcnlwdGlvbi4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBLbXNLZXlJZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZW5jcnlwdGluZyBBbWF6b24gRUJTIHZvbHVtZXMgYXR0YWNoZWQgdG8gdGFza3MsIHNlZSBbRW5jcnlwdCBkYXRhIHN0b3JlZCBpbiBBbWF6b24gRUJTIHZvbHVtZXMgYXR0YWNoZWQgdG8gQW1hem9uIEVDUyB0YXNrc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWJzLWttcy1lbmNyeXB0aW9uLmh0bWwpLlxuICogICBBV1MgYXV0aGVudGljYXRlcyB0aGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IGFzeW5jaHJvbm91c2x5LiBUaGVyZWZvcmUsIGlmIHlvdSBzcGVjaWZ5IGFuIElELCBhbGlhcywgb3IgQVJOIHRoYXQgaXMgaW52YWxpZCwgdGhlIGFjdGlvbiBjYW4gYXBwZWFyIHRvIGNvbXBsZXRlLCBidXQgZXZlbnR1YWxseSBmYWlscy5cbiAqL1xuS21zS2V5SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIHZvbHVtZS4gQW1hem9uIEVDUyBhcHBsaWVzIHNlcnZpY2UtbWFuYWdlZCB0YWdzIGJ5IGRlZmF1bHQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgVGFnU3BlY2lmaWNhdGlvbnMuTmBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuVGFnU3BlY2lmaWNhdGlvbnM/OiBFQlNUYWdTcGVjaWZpY2F0aW9uW11cbi8qKlxuICogVGhlIGZpbGVzeXN0ZW0gdHlwZSBmb3IgdGhlIHZvbHVtZS4gRm9yIHZvbHVtZXMgY3JlYXRlZCBmcm9tIGEgc25hcHNob3QsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIHNhbWUgZmlsZXN5c3RlbSB0eXBlIHRoYXQgdGhlIHZvbHVtZSB3YXMgdXNpbmcgd2hlbiB0aGUgc25hcHNob3Qgd2FzIGNyZWF0ZWQuIElmIHRoZXJlIGlzIGEgZmlsZXN5c3RlbSB0eXBlIG1pc21hdGNoLCB0aGUgdGFza3Mgd2lsbCBmYWlsIHRvIHN0YXJ0LlxuICogIFRoZSBhdmFpbGFibGUgTGludXggZmlsZXN5c3RlbSB0eXBlcyBhcmXigKggYGBleHQzYGAsIGBgZXh0NGBgLCBhbmQgYGB4ZnNgYC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgYGB4ZnNgYCBmaWxlc3lzdGVtIHR5cGUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICogIFRoZSBhdmFpbGFibGUgV2luZG93cyBmaWxlc3lzdGVtIHR5cGVzIGFyZSBgYE5URlNgYC5cbiAqL1xuRmlsZXN5c3RlbVR5cGU/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZvbHVtZSBzaG91bGQgYmUgZW5jcnlwdGVkLiBJZiB5b3UgdHVybiBvbiBSZWdpb24tbGV2ZWwgQW1hem9uIEVCUyBlbmNyeXB0aW9uIGJ5IGRlZmF1bHQgYnV0IHNldCB0aGlzIHZhbHVlIGFzIGBgZmFsc2VgYCwgdGhlIHNldHRpbmcgaXMgb3ZlcnJpZGRlbiBhbmQgdGhlIHZvbHVtZSBpcyBlbmNyeXB0ZWQgd2l0aCB0aGUgS01TIGtleSBzcGVjaWZpZWQgZm9yIEFtYXpvbiBFQlMgZW5jcnlwdGlvbiBieSBkZWZhdWx0LiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYEVuY3J5cHRlZGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuRW5jcnlwdGVkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgdGhyb3VnaHB1dCB0byBwcm92aXNpb24gZm9yIGEgdm9sdW1lLCBpbiBNaUIvcywgd2l0aCBhIG1heGltdW0gb2YgMSwwMDAgTWlCL3MuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgVGhyb3VnaHB1dGBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRoZSBgYGdwM2BgIHZvbHVtZSB0eXBlLlxuICovXG5UaHJvdWdocHV0PzogbnVtYmVyXG4vKipcbiAqIFRoZSByYXRlLCBpbiBNaUIvcywgYXQgd2hpY2ggZGF0YSBpcyBmZXRjaGVkIGZyb20gYSBzbmFwc2hvdCBvZiBhbiBleGlzdGluZyBFQlMgdm9sdW1lIHRvIGNyZWF0ZSBuZXcgdm9sdW1lcyBmb3IgYXR0YWNobWVudCB0byB0aGUgdGFza3MgbWFpbnRhaW5lZCBieSB0aGUgc2VydmljZS4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc3BlY2lmaWVkIG9ubHkgaWYgeW91IHNwZWNpZnkgYSBgYHNuYXBzaG90SWRgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSW5pdGlhbGl6ZSBBbWF6b24gRUJTIHZvbHVtZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9pbml0YWxpemUtdm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVCUyBVc2VyIEd1aWRlKi5cbiAqL1xuVm9sdW1lSW5pdGlhbGl6YXRpb25SYXRlPzogbnVtYmVyXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgSS9PIG9wZXJhdGlvbnMgcGVyIHNlY29uZCAoSU9QUykuIEZvciBgYGdwM2BgLCBgYGlvMWBgLCBhbmQgYGBpbzJgYCB2b2x1bWVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBJT1BTIHRoYXQgYXJlIHByb3Zpc2lvbmVkIGZvciB0aGUgdm9sdW1lLiBGb3IgYGBncDJgYCB2b2x1bWVzLCB0aGlzIHJlcHJlc2VudHMgdGhlIGJhc2VsaW5lIHBlcmZvcm1hbmNlIG9mIHRoZSB2b2x1bWUgYW5kIHRoZSByYXRlIGF0IHdoaWNoIHRoZSB2b2x1bWUgYWNjdW11bGF0ZXMgSS9PIGNyZWRpdHMgZm9yIGJ1cnN0aW5nLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdmFsdWVzIGZvciBlYWNoIHZvbHVtZSB0eXBlLlxuICogICArICBgYGdwM2BgOiAzLDAwMCAtIDE2LDAwMCBJT1BTXG4gKiAgICsgIGBgaW8xYGA6IDEwMCAtIDY0LDAwMCBJT1BTXG4gKiAgICsgIGBgaW8yYGA6IDEwMCAtIDI1NiwwMDAgSU9QU1xuICogICBcbiAqICBUaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgYGBpbzFgYCBhbmQgYGBpbzJgYCB2b2x1bWUgdHlwZXMuIFRoZSBkZWZhdWx0IGZvciBgYGdwM2BgIHZvbHVtZXMgaXMgYGAzLDAwMCBJT1BTYGAuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGBgc3QxYGAsIGBgc2MxYGAsIG9yIGBgc3RhbmRhcmRgYCB2b2x1bWUgdHlwZXMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBJb3BzYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICovXG5Jb3BzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBzaXplIG9mIHRoZSB2b2x1bWUgaW4gR2lCLiBZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIHZvbHVtZSBzaXplIG9yIGEgc25hcHNob3QgSUQuIElmIHlvdSBzcGVjaWZ5IGEgc25hcHNob3QgSUQsIHRoZSBzbmFwc2hvdCBzaXplIGlzIHVzZWQgZm9yIHRoZSB2b2x1bWUgc2l6ZSBieSBkZWZhdWx0LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhIHZvbHVtZSBzaXplIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc25hcHNob3Qgc2l6ZS4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBTaXplYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBzdXBwb3J0ZWQgdm9sdW1lIHNpemUgdmFsdWVzIGZvciBlYWNoIHZvbHVtZSB0eXBlLlxuICogICArICBgYGdwMmBgIGFuZCBgYGdwM2BgOiAxLTE2LDM4NFxuICogICArICBgYGlvMWBgIGFuZCBgYGlvMmBgOiA0LTE2LDM4NFxuICogICArICBgYHN0MWBgIGFuZCBgYHNjMWBgOiAxMjUtMTYsMzg0XG4gKiAgICsgIGBgc3RhbmRhcmRgYDogMS0xLDAyNFxuICovXG5TaXplSW5HaUI/OiBudW1iZXJcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgSUFNIHJvbGUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyB2b2x1bWUuIFRoaXMgaXMgdGhlIEFtYXpvbiBFQ1MgaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGUgdGhhdCBpcyB1c2VkIHRvIG1hbmFnZSB5b3VyIEFXUyBpbmZyYXN0cnVjdHVyZS4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBBbWF6b24gRUNTLW1hbmFnZWQgYGBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWb2x1bWVzYGAgSUFNIHBvbGljeSB3aXRoIHRoaXMgcm9sZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaW5mcmFzdHJ1Y3R1cmVfSUFNX3JvbGUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUNTIERldmVsb3BlciBHdWlkZSouXG4gKi9cblJvbGVBcm46IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgdGFnIHNwZWNpZmljYXRpb25zIG9mIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVCU1RhZ1NwZWNpZmljYXRpb24ge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcHJvcGFnYXRlIHRoZSB0YWdzIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbiB0byDigKh0aGUgQW1hem9uIEVCUyB2b2x1bWUuIFRhZ3MgY2FuIG9ubHkgcHJvcGFnYXRlIHRvIGEgYGBTRVJWSUNFYGAgc3BlY2lmaWVkIGluIOKAqGBgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25gYC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgdGFncyBhcmVuJ3Qg4oCocHJvcGFnYXRlZC5cbiAqL1xuUHJvcGFnYXRlVGFncz86IChcIlNFUlZJQ0VcIiB8IFwiVEFTS19ERUZJTklUSU9OXCIpXG4vKipcbiAqIFRoZSB0eXBlIG9mIHZvbHVtZSByZXNvdXJjZS5cbiAqL1xuUmVzb3VyY2VUeXBlOiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZ3MgYXBwbGllZCB0byB0aGlzIEFtYXpvbiBFQlMgdm9sdW1lLiBgYEFtYXpvbkVDU0NyZWF0ZWRgYCBhbmQgYGBBbWF6b25FQ1NNYW5hZ2VkYGAgYXJlIHJlc2VydmVkIHRhZ3MgdGhhdCBjYW4ndCBiZSB1c2VkLlxuICovXG5UYWdzPzogVGFnW11cbn1cbi8qKlxuICogVGhlIG1ldGFkYXRhIHRoYXQgeW91IGFwcGx5IHRvIGEgcmVzb3VyY2UgdG8gaGVscCB5b3UgY2F0ZWdvcml6ZSBhbmQgb3JnYW5pemUgdGhlbS4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLiBZb3UgZGVmaW5lIHRoZW0uXG4gKiAgVGhlIGZvbGxvd2luZyBiYXNpYyByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGFnczpcbiAqICAgKyAgTWF4aW11bSBudW1iZXIgb2YgdGFncyBwZXIgcmVzb3VyY2UgLSA1MFxuICogICArICBGb3IgZWFjaCByZXNvdXJjZSwgZWFjaCB0YWcga2V5IG11c3QgYmUgdW5pcXVlLCBhbmQgZWFjaCB0YWcga2V5IGNhbiBoYXZlIG9ubHkgb25lIHZhbHVlLlxuICogICArICBNYXhpbXVtIGtleSBsZW5ndGggLSAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIE1heGltdW0gdmFsdWUgbGVuZ3RoIC0gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBJZiB5b3VyIHRhZ2dpbmcgc2NoZW1hIGlzIHVzZWQgYWNyb3NzIG11bHRpcGxlIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIHJlbWVtYmVyIHRoYXQgb3RoZXIgc2VydmljZXMgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhcmFjdGVycy4gR2VuZXJhbGx5IGFsbG93ZWQgY2hhcmFjdGVycyBhcmU6IGxldHRlcnMsIG51bWJlcnMsIGFuZCBzcGFjZXMgcmVwcmVzZW50YWJsZSBpbiBVVEYtOCwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogKyAtID0gLiBfIDogLyBALlxuICogICArICBUYWcga2V5cyBhbmQgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqICAgKyAgRG8gbm90IHVzZSBgYGF3czpgYCwgYGBBV1M6YGAsIG9yIGFueSB1cHBlciBvciBsb3dlcmNhc2UgY29tYmluYXRpb24gb2Ygc3VjaCBhcyBhIHByZWZpeCBmb3IgZWl0aGVyIGtleXMgb3IgdmFsdWVzIGFzIGl0IGlzIHJlc2VydmVkIGZvciBBV1MgdXNlLiBZb3UgY2Fubm90IGVkaXQgb3IgZGVsZXRlIHRhZyBrZXlzIG9yIHZhbHVlcyB3aXRoIHRoaXMgcHJlZml4LiBUYWdzIHdpdGggdGhpcyBwcmVmaXggZG8gbm90IGNvdW50IGFnYWluc3QgeW91ciB0YWdzIHBlciByZXNvdXJjZSBsaW1pdC5cbiAqICAgXG4gKiAgSW4gb3JkZXIgdG8gdGFnIGEgc2VydmljZSB0aGF0IGhhcyB0aGUgZm9sbG93aW5nIEFSTiBmb3JtYXQsIHlvdSBuZWVkIHRvIG1pZ3JhdGUgdGhlIHNlcnZpY2UgdG8gdGhlIGxvbmcgQVJOLiBZb3UgbXVzdCB1c2UgdGhlIEFQSSwgQ0xJIG9yIGNvbnNvbGUgdG8gbWlncmF0ZSB0aGUgc2VydmljZSBBUk4uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01pZ3JhdGUgYW4gc2hvcnQgc2VydmljZSBBUk4gdG8gYSBsb25nIEFSTl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1hcm4tbWlncmF0aW9uLmh0bWwpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgYGBhcm46YXdzOmVjczpyZWdpb246YXdzX2FjY291bnRfaWQ6c2VydmljZS9zZXJ2aWNlLW5hbWVgYCBcbiAqICBBZnRlciB0aGUgbWlncmF0aW9uIGlzIGNvbXBsZXRlLCB0aGUgZm9sbG93aW5nIGFyZSB0cnVlOlxuICogICArICAgVGhlIHNlcnZpY2UgQVJOIGlzOiBgYGFybjphd3M6ZWNzOnJlZ2lvbjphd3NfYWNjb3VudF9pZDpzZXJ2aWNlL2NsdXN0ZXItbmFtZS9zZXJ2aWNlLW5hbWVgYFxuICogICArICBZb3UgY2FuIHVzZSBDRk4gdG8gdGFnIHRoZSBzZXJ2aWNlIGFzIHlvdSB3b3VsZCBhIHNlcnZpY2Ugd2l0aCBhIGxvbmcgQVJOIGZvcm1hdC5cbiAqICAgKyAgV2hlbiB0aGUgYGBQaHlzaWNhbFJlc291cmNlSWRgYCBpbiB0aGUgQ0ZOIHN0YWNrIHJlcHJlc2VudHMgYSBzZXJ2aWNlLCB0aGUgdmFsdWUgZG9lcyBub3QgY2hhbmdlIGFuZCB3aWxsIGJlIHRoZSBzaG9ydCBzZXJ2aWNlIEFSTi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBUaGUgb3B0aW9uYWwgcGFydCBvZiBhIGtleS12YWx1ZSBwYWlyIHRoYXQgbWFrZSB1cCBhIHRhZy4gQSBgYHZhbHVlYGAgYWN0cyBhcyBhIGRlc2NyaXB0b3Igd2l0aGluIGEgdGFnIGNhdGVnb3J5IChrZXkpLlxuICovXG5WYWx1ZT86IHN0cmluZ1xuLyoqXG4gKiBPbmUgcGFydCBvZiBhIGtleS12YWx1ZSBwYWlyIHRoYXQgbWFrZSB1cCBhIHRhZy4gQSBgYGtleWBgIGlzIGEgZ2VuZXJhbCBsYWJlbCB0aGF0IGFjdHMgbGlrZSBhIGNhdGVnb3J5IGZvciBtb3JlIHNwZWNpZmljIHRhZyB2YWx1ZXMuXG4gKi9cbktleT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBvZiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LiBBIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBiZSBzZXQgd2hlbiB1c2luZyB0aGUgYGBSdW5UYXNrYGAgb3IgYGBDcmVhdGVTZXJ2aWNlYGAgQVBJcyBvciBhcyB0aGUgZGVmYXVsdCBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBmb3IgYSBjbHVzdGVyIHdpdGggdGhlIGBgQ3JlYXRlQ2x1c3RlcmBgIEFQSS5cbiAqICBPbmx5IGNhcGFjaXR5IHByb3ZpZGVycyB0aGF0IGFyZSBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgYW5kIGhhdmUgYW4gYGBBQ1RJVkVgYCBvciBgYFVQREFUSU5HYGAgc3RhdHVzIGNhbiBiZSB1c2VkIGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIFRoZSBgYFB1dENsdXN0ZXJDYXBhY2l0eVByb3ZpZGVyc2BgIEFQSSBpcyB1c2VkIHRvIGFzc29jaWF0ZSBhIGNhcGFjaXR5IHByb3ZpZGVyIHdpdGggYSBjbHVzdGVyLlxuICogIElmIHNwZWNpZnlpbmcgYSBjYXBhY2l0eSBwcm92aWRlciB0aGF0IHVzZXMgYW4gQXV0byBTY2FsaW5nIGdyb3VwLCB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgbXVzdCBhbHJlYWR5IGJlIGNyZWF0ZWQuIE5ldyBBdXRvIFNjYWxpbmcgZ3JvdXAgY2FwYWNpdHkgcHJvdmlkZXJzIGNhbiBiZSBjcmVhdGVkIHdpdGggdGhlIGBgQ3JlYXRlQ2FwYWNpdHlQcm92aWRlcmBgIEFQSSBvcGVyYXRpb24uXG4gKiAgVG8gdXNlIGFuIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVyLCBzcGVjaWZ5IGVpdGhlciB0aGUgYGBGQVJHQVRFYGAgb3IgYGBGQVJHQVRFX1NQT1RgYCBjYXBhY2l0eSBwcm92aWRlcnMuIFRoZSBGQVJHQVRFbG9uZyBjYXBhY2l0eSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSB0byBhbGwgYWNjb3VudHMgYW5kIG9ubHkgbmVlZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggYSBjbHVzdGVyIHRvIGJlIHVzZWQgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtIHtcbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb2YgdGhlIGNhcGFjaXR5IHByb3ZpZGVyLlxuICovXG5DYXBhY2l0eVByb3ZpZGVyPzogc3RyaW5nXG4vKipcbiAqIFRoZSAqYmFzZSogdmFsdWUgZGVzaWduYXRlcyBob3cgbWFueSB0YXNrcywgYXQgYSBtaW5pbXVtLCB0byBydW4gb24gdGhlIHNwZWNpZmllZCBjYXBhY2l0eSBwcm92aWRlci4gT25seSBvbmUgY2FwYWNpdHkgcHJvdmlkZXIgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBjYW4gaGF2ZSBhICpiYXNlKiBkZWZpbmVkLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuXG4gKi9cbkJhc2U/OiBudW1iZXJcbi8qKlxuICogVGhlICp3ZWlnaHQqIHZhbHVlIGRlc2lnbmF0ZXMgdGhlIHJlbGF0aXZlIHBlcmNlbnRhZ2Ugb2YgdGhlIHRvdGFsIG51bWJlciBvZiB0YXNrcyBsYXVuY2hlZCB0aGF0IHNob3VsZCB1c2UgdGhlIHNwZWNpZmllZCBjYXBhY2l0eSBwcm92aWRlci4gVGhlIGBgd2VpZ2h0YGAgdmFsdWUgaXMgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGFmdGVyIHRoZSBgYGJhc2VgYCB2YWx1ZSwgaWYgZGVmaW5lZCwgaXMgc2F0aXNmaWVkLlxuICogIElmIG5vIGBgd2VpZ2h0YGAgdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLiBXaGVuIG11bHRpcGxlIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgc3BlY2lmaWVkIHdpdGhpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LCBhdCBsZWFzdCBvbmUgb2YgdGhlIGNhcGFjaXR5IHByb3ZpZGVycyBtdXN0IGhhdmUgYSB3ZWlnaHQgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGFueSBjYXBhY2l0eSBwcm92aWRlcnMgd2l0aCBhIHdlaWdodCBvZiBgYDBgYCBjYW4ndCBiZSB1c2VkIHRvIHBsYWNlIHRhc2tzLiBJZiB5b3Ugc3BlY2lmeSBtdWx0aXBsZSBjYXBhY2l0eSBwcm92aWRlcnMgaW4gYSBzdHJhdGVneSB0aGF0IGFsbCBoYXZlIGEgd2VpZ2h0IG9mIGBgMGBgLCBhbnkgYGBSdW5UYXNrYGAgb3IgYGBDcmVhdGVTZXJ2aWNlYGAgYWN0aW9ucyB1c2luZyB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgd2lsbCBmYWlsLlxuICogIEFuIGV4YW1wbGUgc2NlbmFyaW8gZm9yIHVzaW5nIHdlaWdodHMgaXMgZGVmaW5pbmcgYSBzdHJhdGVneSB0aGF0IGNvbnRhaW5zIHR3byBjYXBhY2l0eSBwcm92aWRlcnMgYW5kIGJvdGggaGF2ZSBhIHdlaWdodCBvZiBgYDFgYCwgdGhlbiB3aGVuIHRoZSBgYGJhc2VgYCBpcyBzYXRpc2ZpZWQsIHRoZSB0YXNrcyB3aWxsIGJlIHNwbGl0IGV2ZW5seSBhY3Jvc3MgdGhlIHR3byBjYXBhY2l0eSBwcm92aWRlcnMuIFVzaW5nIHRoYXQgc2FtZSBsb2dpYywgaWYgeW91IHNwZWNpZnkgYSB3ZWlnaHQgb2YgYGAxYGAgZm9yICpjYXBhY2l0eVByb3ZpZGVyQSogYW5kIGEgd2VpZ2h0IG9mIGBgNGBgIGZvciAqY2FwYWNpdHlQcm92aWRlckIqLCB0aGVuIGZvciBldmVyeSBvbmUgdGFzayB0aGF0J3MgcnVuIHVzaW5nICpjYXBhY2l0eVByb3ZpZGVyQSosIGZvdXIgdGFza3Mgd291bGQgdXNlICpjYXBhY2l0eVByb3ZpZGVyQiouXG4gKi9cbldlaWdodD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VydmljZS4gVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIHRhc2sgZGVmaW5pdGlvbnMgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIHRvIHJlY2VpdmUgdGhlaXIgb3duIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIGFuZCBpdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBvdGhlciBuZXR3b3JrIG1vZGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIE5ldHdvcmtpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stbmV0d29ya2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0NvbmZpZ3VyYXRpb24ge1xuQXdzdnBjQ29uZmlndXJhdGlvbj86IEF3c1ZwY0NvbmZpZ3VyYXRpb25cbn1cbi8qKlxuICogVGhlIFZQQyBzdWJuZXRzIGFuZCBzZWN1cml0eSBncm91cHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgdGFzay5cbiAqICAgQWxsIHNwZWNpZmllZCBzdWJuZXRzIGFuZCBzZWN1cml0eSBncm91cHMgbXVzdCBiZSBmcm9tIHRoZSBzYW1lIFZQQy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NWcGNDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIElEcyBvZiB0aGUgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzayBvciBzZXJ2aWNlLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHNlY3VyaXR5IGdyb3VwLCB0aGUgZGVmYXVsdCBzZWN1cml0eSBncm91cCBmb3IgdGhlIFZQQyBpcyB1c2VkLiBUaGVyZSdzIGEgbGltaXQgb2YgNSBzZWN1cml0eSBncm91cHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkLlxuICogICBBbGwgc3BlY2lmaWVkIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHN1Ym5ldHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIFRoZXJlJ3MgYSBsaW1pdCBvZiAxNiBzdWJuZXRzIHRoYXQgY2FuIGJlIHNwZWNpZmllZC5cbiAqICAgQWxsIHNwZWNpZmllZCBzdWJuZXRzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cblN1Ym5ldHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHRoZSB0YXNrJ3MgZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSByZWNlaXZlcyBhIHB1YmxpYyBJUCBhZGRyZXNzLiBcbiAqICBDb25zaWRlciB0aGUgZm9sbG93aW5nIHdoZW4geW91IHNldCB0aGlzIHZhbHVlOlxuICogICArICBXaGVuIHlvdSB1c2UgYGBjcmVhdGUtc2VydmljZWBgIG9yIGBgdXBkYXRlLXNlcnZpY2VgYCwgdGhlIGRlZmF1bHQgaXMgYGBESVNBQkxFRGBgLiBcbiAqICAgKyAgV2hlbiB0aGUgc2VydmljZSBgYGRlcGxveW1lbnRDb250cm9sbGVyYGAgaXMgYGBFQ1NgYCwgdGhlIHZhbHVlIG11c3QgYmUgYGBESVNBQkxFRGBgLlxuICovXG5Bc3NpZ25QdWJsaWNJcD86IChcIkRJU0FCTEVEXCIgfCBcIkVOQUJMRURcIilcbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGNvbnN0cmFpbnQgb24gdGFzayBwbGFjZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLXBsYWNlbWVudC1jb25zdHJhaW50cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdSdyZSB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgYXJlbid0IHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRDb25zdHJhaW50IHtcbi8qKlxuICogVGhlIHR5cGUgb2YgY29uc3RyYWludC4gVXNlIGBgZGlzdGluY3RJbnN0YW5jZWBgIHRvIGVuc3VyZSB0aGF0IGVhY2ggdGFzayBpbiBhIHBhcnRpY3VsYXIgZ3JvdXAgaXMgcnVubmluZyBvbiBhIGRpZmZlcmVudCBjb250YWluZXIgaW5zdGFuY2UuIFVzZSBgYG1lbWJlck9mYGAgdG8gcmVzdHJpY3QgdGhlIHNlbGVjdGlvbiB0byBhIGdyb3VwIG9mIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblR5cGU6IChcImRpc3RpbmN0SW5zdGFuY2VcIiB8IFwibWVtYmVyT2ZcIilcbi8qKlxuICogQSBjbHVzdGVyIHF1ZXJ5IGxhbmd1YWdlIGV4cHJlc3Npb24gdG8gYXBwbHkgdG8gdGhlIGNvbnN0cmFpbnQuIFRoZSBleHByZXNzaW9uIGNhbiBoYXZlIGEgbWF4aW11bSBsZW5ndGggb2YgMjAwMCBjaGFyYWN0ZXJzLiBZb3UgY2FuJ3Qgc3BlY2lmeSBhbiBleHByZXNzaW9uIGlmIHRoZSBjb25zdHJhaW50IHR5cGUgaXMgYGBkaXN0aW5jdEluc3RhbmNlYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NsdXN0ZXIgcXVlcnkgbGFuZ3VhZ2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NsdXN0ZXItcXVlcnktbGFuZ3VhZ2UuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5FeHByZXNzaW9uPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYExvYWRCYWxhbmNlcmBgIHByb3BlcnR5IHNwZWNpZmllcyBkZXRhaWxzIG9uIGEgbG9hZCBiYWxhbmNlciB0aGF0IGlzIHVzZWQgd2l0aCBhIHNlcnZpY2UuXG4gKiAgSWYgdGhlIHNlcnZpY2UgaXMgdXNpbmcgdGhlIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHRoZSBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRvIHVzZSBlaXRoZXIgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIFdoZW4geW91IGFyZSBjcmVhdGluZyBhbiBBQ0Rsb25nIGRlcGxveW1lbnQgZ3JvdXAsIHlvdSBzcGVjaWZ5IHR3byB0YXJnZXQgZ3JvdXBzIChyZWZlcnJlZCB0byBhcyBhIGBgdGFyZ2V0R3JvdXBQYWlyYGApLiBFYWNoIHRhcmdldCBncm91cCBiaW5kcyB0byBhIHNlcGFyYXRlIHRhc2sgc2V0IGluIHRoZSBkZXBsb3ltZW50LiBUaGUgbG9hZCBiYWxhbmNlciBjYW4gYWxzbyBoYXZlIHVwIHRvIHR3byBsaXN0ZW5lcnMsIGEgcmVxdWlyZWQgbGlzdGVuZXIgZm9yIHByb2R1Y3Rpb24gdHJhZmZpYyBhbmQgYW4gb3B0aW9uYWwgbGlzdGVuZXIgdGhhdCBhbGxvd3MgeW91IHRvIHRlc3QgbmV3IHJldmlzaW9ucyBvZiB0aGUgc2VydmljZSBiZWZvcmUgcm91dGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gaXQuXG4gKiAgU2VydmljZXMgd2l0aCB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgKGZvciBleGFtcGxlLCB0aG9zZSB3aXRoIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlKSBvbmx5IHN1cHBvcnQgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcnMgYW5kIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnMuIENsYXNzaWMgTG9hZCBCYWxhbmNlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIEFsc28sIHdoZW4geW91IGNyZWF0ZSBhbnkgdGFyZ2V0IGdyb3VwcyBmb3IgdGhlc2Ugc2VydmljZXMsIHlvdSBtdXN0IGNob29zZSBgYGlwYGAgYXMgdGhlIHRhcmdldCB0eXBlLCBub3QgYGBpbnN0YW5jZWBgLiBUYXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkQmFsYW5jZXIge1xuLyoqXG4gKiBUaGUgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCBhIHNlcnZpY2Ugb3IgdGFzayBzZXQuXG4gKiAgQSB0YXJnZXQgZ3JvdXAgQVJOIGlzIG9ubHkgc3BlY2lmaWVkIHdoZW4gdXNpbmcgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIFxuICogIEZvciBzZXJ2aWNlcyB1c2luZyB0aGUgYGBFQ1NgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb3IgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVnaXN0ZXJpbmcgbXVsdGlwbGUgdGFyZ2V0IGdyb3VwcyB3aXRoIGEgc2VydmljZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcmVnaXN0ZXItbXVsdGlwbGUtdGFyZ2V0Z3JvdXBzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3Igc2VydmljZXMgdXNpbmcgdGhlIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSdyZSByZXF1aXJlZCB0byBkZWZpbmUgdHdvIHRhcmdldCBncm91cHMgZm9yIHRoZSBsb2FkIGJhbGFuY2VyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCbHVlL2dyZWVuIGRlcGxveW1lbnQgd2l0aCBDb2RlRGVwbG95XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtYmx1ZWdyZWVuLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFzayBkZWZpbml0aW9uIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBjaG9vc2UgYGBpcGBgIGFzIHRoZSB0YXJnZXQgdHlwZSwgbm90IGBgaW5zdGFuY2VgYC4gRG8gdGhpcyB3aGVuIGNyZWF0aW5nIHlvdXIgdGFyZ2V0IGdyb3VwcyBiZWNhdXNlIHRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIG5vdCBhbiBBbWF6b24gRUMyIGluc3RhbmNlLiBUaGlzIG5ldHdvcmsgbW9kZSBpcyByZXF1aXJlZCBmb3IgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuXG4gKi9cblRhcmdldEdyb3VwQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsb2FkIGJhbGFuY2VyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugb3IgdGFzayBzZXQuXG4gKiAgSWYgeW91IGFyZSB1c2luZyBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIGEgTmV0d29yayBMb2FkIEJhbGFuY2VyIHRoZSBsb2FkIGJhbGFuY2VyIG5hbWUgcGFyYW1ldGVyIHNob3VsZCBiZSBvbWl0dGVkLlxuICovXG5Mb2FkQmFsYW5jZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgKGFzIGl0IGFwcGVhcnMgaW4gYSBjb250YWluZXIgZGVmaW5pdGlvbikgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuXG4gKiAgWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY29udGFpbmVyIG5hbWUgd2hlbiBjb25maWd1cmluZyB0aGUgdGFyZ2V0IGdyb3VwIGZvciBhbiBBbWF6b24gRUNTIGxvYWQgYmFsYW5jZXIuXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgb24gdGhlIGNvbnRhaW5lciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci4gVGhpcyBwb3J0IG11c3QgY29ycmVzcG9uZCB0byBhIGBgY29udGFpbmVyUG9ydGBgIGluIHRoZSB0YXNrIGRlZmluaXRpb24gdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIGFyZSB1c2luZy4gRm9yIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSBjb250YWluZXIgaW5zdGFuY2UgdGhleSdyZSBsYXVuY2hlZCBvbiBtdXN0IGFsbG93IGluZ3Jlc3MgdHJhZmZpYyBvbiB0aGUgYGBob3N0UG9ydGBgIG9mIHRoZSBwb3J0IG1hcHBpbmcuXG4gKi9cbkNvbnRhaW5lclBvcnQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgc2VydmljZSB0byBkaXNjb3ZlciBhbmQgY29ubmVjdCB0byBzZXJ2aWNlcywgYW5kIGJlIGRpc2NvdmVyZWQgYnksIGFuZCBjb25uZWN0ZWQgZnJvbSwgb3RoZXIgc2VydmljZXMgd2l0aGluIGEgbmFtZXNwYWNlLlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgbGlzdCBvZiBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZSBvYmplY3RzLiBUaGVzZSBhcmUgbmFtZXMgYW5kIGFsaWFzZXMgKGFsc28ga25vd24gYXMgZW5kcG9pbnRzKSB0aGF0IGFyZSB1c2VkIGJ5IG90aGVyIEFtYXpvbiBFQ1Mgc2VydmljZXMgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuIFxuICogIFRoaXMgZmllbGQgaXMgbm90IHJlcXVpcmVkIGZvciBhIFwiY2xpZW50XCIgQW1hem9uIEVDUyBzZXJ2aWNlIHRoYXQncyBhIG1lbWJlciBvZiBhIG5hbWVzcGFjZSBvbmx5IHRvIGNvbm5lY3QgdG8gb3RoZXIgc2VydmljZXMgd2l0aGluIHRoZSBuYW1lc3BhY2UuIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSBhIGZyb250ZW5kIGFwcGxpY2F0aW9uIHRoYXQgYWNjZXB0cyBpbmNvbWluZyByZXF1ZXN0cyBmcm9tIGVpdGhlciBhIGxvYWQgYmFsYW5jZXIgdGhhdCdzIGF0dGFjaGVkIHRvIHRoZSBzZXJ2aWNlIG9yIGJ5IG90aGVyIG1lYW5zLlxuICogIEFuIG9iamVjdCBzZWxlY3RzIGEgcG9ydCBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24sIGFzc2lnbnMgYSBuYW1lIGZvciB0aGUgQ01BUGxvbmcgc2VydmljZSwgYW5kIGEgbGlzdCBvZiBhbGlhc2VzIChlbmRwb2ludHMpIGFuZCBwb3J0cyBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byByZWZlciB0byB0aGlzIHNlcnZpY2UuXG4gKi9cblNlcnZpY2VzPzogU2VydmljZUNvbm5lY3RTZXJ2aWNlW11cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIFNlcnZpY2UgQ29ubmVjdCB3aXRoIHRoaXMgc2VydmljZS5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxuTG9nQ29uZmlndXJhdGlvbj86IExvZ0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWVzcGFjZSBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIENNQVBsb25nIG5hbWVzcGFjZSBmb3IgdXNlIHdpdGggU2VydmljZSBDb25uZWN0LiBUaGUgbmFtZXNwYWNlIG11c3QgYmUgaW4gdGhlIHNhbWUgQVdTIFJlZ2lvbiBhcyB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIGFuZCBjbHVzdGVyLiBUaGUgdHlwZSBvZiBuYW1lc3BhY2UgZG9lc24ndCBhZmZlY3QgU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDTUFQbG9uZywgc2VlIFtXb3JraW5nIHdpdGggU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2RnL3dvcmtpbmctd2l0aC1zZXJ2aWNlcy5odG1sKSBpbiB0aGUgKkRldmVsb3BlciBHdWlkZSouXG4gKi9cbk5hbWVzcGFjZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgU2VydmljZSBDb25uZWN0IHNlcnZpY2Ugb2JqZWN0IGNvbmZpZ3VyYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFNlcnZpY2Uge1xuVGltZW91dD86IFRpbWVvdXRDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBwb3J0IG51bWJlciBmb3IgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eSB0byBsaXN0ZW4gb24uXG4gKiAgVXNlIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIHRvIGJ5cGFzcyB0aGUgcHJveHkgZm9yIHRyYWZmaWMgb24gdGhlIHBvcnQgbnVtYmVyIHNwZWNpZmllZCBpbiB0aGUgbmFtZWQgYGBwb3J0TWFwcGluZ2BgIGluIHRoZSB0YXNrIGRlZmluaXRpb24gb2YgdGhpcyBhcHBsaWNhdGlvbiwgYW5kIHRoZW4gdXNlIGl0IGluIHlvdXIgVlBDIHNlY3VyaXR5IGdyb3VwcyB0byBhbGxvdyB0cmFmZmljIGludG8gdGhlIHByb3h5IGZvciB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqICBJbiBgYGF3c3ZwY2BgIG1vZGUgYW5kIEZhcmdhdGUsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBjb250YWluZXIgcG9ydCBudW1iZXIuIFRoZSBjb250YWluZXIgcG9ydCBudW1iZXIgaXMgaW4gdGhlIGBgcG9ydE1hcHBpbmdgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJbiBicmlkZ2UgbW9kZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGVwaGVtZXJhbCBwb3J0IG9mIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkuXG4gKi9cbkluZ3Jlc3NQb3J0T3ZlcnJpZGU/OiBudW1iZXJcbi8qKlxuICogVGhlIGxpc3Qgb2YgY2xpZW50IGFsaWFzZXMgZm9yIHRoaXMgU2VydmljZSBDb25uZWN0IHNlcnZpY2UuIFlvdSB1c2UgdGhlc2UgdG8gYXNzaWduIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucy4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNsaWVudCBhbGlhc2VzIHRoYXQgeW91IGNhbiBoYXZlIGluIHRoaXMgbGlzdCBpcyAxLlxuICogIEVhY2ggYWxpYXMgKFwiZW5kcG9pbnRcIikgaXMgYSBmdWxseS1xdWFsaWZpZWQgbmFtZSBhbmQgcG9ydCBudW1iZXIgdGhhdCBvdGhlciBBbWF6b24gRUNTIHRhc2tzIChcImNsaWVudHNcIikgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS5cbiAqICBFYWNoIG5hbWUgYW5kIHBvcnQgbWFwcGluZyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZS5cbiAqICBGb3IgZWFjaCBgYFNlcnZpY2VDb25uZWN0U2VydmljZWBgLCB5b3UgbXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSBgYGNsaWVudEFsaWFzYGAgd2l0aCBvbmUgYGBwb3J0YGAuXG4gKi9cbkNsaWVudEFsaWFzZXM/OiBTZXJ2aWNlQ29ubmVjdENsaWVudEFsaWFzW11cblRscz86IFNlcnZpY2VDb25uZWN0VGxzQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXMgdGhlIG5hbWUgb2YgdGhlIG5ldyBDTUFQIHNlcnZpY2UgdGhhdCBBbWF6b24gRUNTIGNyZWF0ZXMgZm9yIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLiBUaGlzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgQ01BUCBuYW1lc3BhY2UuIFRoZSBuYW1lIGNhbiBjb250YWluIHVwIHRvIDY0IGNoYXJhY3RlcnMuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcyAoXyksIGFuZCBoeXBoZW5zICgtKS4gVGhlIG5hbWUgY2FuJ3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi5cbiAqICBJZiB0aGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgcG9ydCBtYXBwaW5nIG5hbWUgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIGlzIHVzZWQgaW4gYGBwb3J0TmFtZS5uYW1lc3BhY2VgYC5cbiAqL1xuRGlzY292ZXJ5TmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYGBwb3J0TmFtZWBgIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBgYHBvcnRNYXBwaW5nc2BgIGZyb20gYWxsIHRoZSBjb250YWluZXJzIGluIHRoZSB0YXNrIGRlZmluaXRpb24gb2YgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKi9cblBvcnROYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgY29uZmlndXJlZCB0aW1lb3V0cyBmb3IgU2VydmljZSBDb25uZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIHdhaXRpbmcgZm9yIHRoZSB1cHN0cmVhbSB0byByZXNwb25kIHdpdGggYSBjb21wbGV0ZSByZXNwb25zZSBwZXIgcmVxdWVzdC4gQSB2YWx1ZSBvZiBgYDBgYCBjYW4gYmUgc2V0IHRvIGRpc2FibGUgYGBwZXJSZXF1ZXN0VGltZW91dGBgLiBgYHBlclJlcXVlc3RUaW1lb3V0YGAgY2FuIG9ubHkgYmUgc2V0IGlmIFNlcnZpY2UgQ29ubmVjdCBgYGFwcFByb3RvY29sYGAgaXNuJ3QgYGBUQ1BgYC4gT25seSBgYGlkbGVUaW1lb3V0YGAgaXMgYWxsb3dlZCBmb3IgYGBUQ1BgYGBgYXBwUHJvdG9jb2xgYC5cbiAqL1xuUGVyUmVxdWVzdFRpbWVvdXRTZWNvbmRzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIGEgY29ubmVjdGlvbiB3aWxsIHN0YXkgYWN0aXZlIHdoaWxlIGlkbGUuIEEgdmFsdWUgb2YgYGAwYGAgY2FuIGJlIHNldCB0byBkaXNhYmxlIGBgaWRsZVRpbWVvdXRgYC5cbiAqICBUaGUgYGBpZGxlVGltZW91dGBgIGRlZmF1bHQgZm9yIGBgSFRUUGBgL2BgSFRUUDJgYC9gYEdSUENgYCBpcyA1IG1pbnV0ZXMuXG4gKiAgVGhlIGBgaWRsZVRpbWVvdXRgYCBkZWZhdWx0IGZvciBgYFRDUGBgIGlzIDEgaG91ci5cbiAqL1xuSWRsZVRpbWVvdXRTZWNvbmRzPzogbnVtYmVyXG59XG4vKipcbiAqIEVhY2ggYWxpYXMgKFwiZW5kcG9pbnRcIikgaXMgYSBmdWxseS1xdWFsaWZpZWQgbmFtZSBhbmQgcG9ydCBudW1iZXIgdGhhdCBvdGhlciB0YXNrcyAoXCJjbGllbnRzXCIpIGNhbiB1c2UgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuXG4gKiAgRWFjaCBuYW1lIGFuZCBwb3J0IG1hcHBpbmcgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBuYW1lc3BhY2UuXG4gKiAgVGFza3MgdGhhdCBydW4gaW4gYSBuYW1lc3BhY2UgY2FuIHVzZSBzaG9ydCBuYW1lcyB0byBjb25uZWN0IHRvIHNlcnZpY2VzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNhbiBjb25uZWN0IHRvIHNlcnZpY2VzIGFjcm9zcyBhbGwgb2YgdGhlIGNsdXN0ZXJzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNvbm5lY3QgdGhyb3VnaCBhIG1hbmFnZWQgcHJveHkgY29udGFpbmVyIHRoYXQgY29sbGVjdHMgbG9ncyBhbmQgbWV0cmljcyBmb3IgaW5jcmVhc2VkIHZpc2liaWxpdHkuIE9ubHkgdGhlIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBzZXJ2aWNlcyBjcmVhdGUgYXJlIHN1cHBvcnRlZCB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0Q2xpZW50QWxpYXMge1xuLyoqXG4gKiBUaGUgYGBkbnNOYW1lYGAgaXMgdGhlIG5hbWUgdGhhdCB5b3UgdXNlIGluIHRoZSBhcHBsaWNhdGlvbnMgb2YgY2xpZW50IHRhc2tzIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLiBUaGUgbmFtZSBtdXN0IGJlIGEgdmFsaWQgRE5TIG5hbWUgYnV0IGRvZXNuJ3QgbmVlZCB0byBiZSBmdWxseS1xdWFsaWZpZWQuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIHVwIHRvIDEyNyBjaGFyYWN0ZXJzLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSBsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMgKF8pLCBoeXBoZW5zICgtKSwgYW5kIHBlcmlvZHMgKC4pLiBUaGUgbmFtZSBjYW4ndCBzdGFydCB3aXRoIGEgaHlwaGVuLlxuICogIElmIHRoaXMgcGFyYW1ldGVyIGlzbid0IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBkaXNjb3ZlcnlOYW1lLm5hbWVzcGFjZWBgIGlzIHVzZWQuIElmIHRoZSBgYGRpc2NvdmVyeU5hbWVgYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBwb3J0IG1hcHBpbmcgbmFtZSBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24gaXMgdXNlZCBpbiBgYHBvcnROYW1lLm5hbWVzcGFjZWBgLlxuICogIFRvIGF2b2lkIGNoYW5naW5nIHlvdXIgYXBwbGljYXRpb25zIGluIGNsaWVudCBBbWF6b24gRUNTIHNlcnZpY2VzLCBzZXQgdGhpcyB0byB0aGUgc2FtZSBuYW1lIHRoYXQgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB1c2VzIGJ5IGRlZmF1bHQuIEZvciBleGFtcGxlLCBhIGZldyBjb21tb24gbmFtZXMgYXJlIGBgZGF0YWJhc2VgYCwgYGBkYmBgLCBvciB0aGUgbG93ZXJjYXNlIG5hbWUgb2YgYSBkYXRhYmFzZSwgc3VjaCBhcyBgYG15c3FsYGAgb3IgYGByZWRpc2BgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkRuc05hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGxpc3RlbmluZyBwb3J0IG51bWJlciBmb3IgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eS4gVGhpcyBwb3J0IGlzIGF2YWlsYWJsZSBpbnNpZGUgb2YgYWxsIG9mIHRoZSB0YXNrcyB3aXRoaW4gdGhlIHNhbWUgbmFtZXNwYWNlLlxuICogIFRvIGF2b2lkIGNoYW5naW5nIHlvdXIgYXBwbGljYXRpb25zIGluIGNsaWVudCBBbWF6b24gRUNTIHNlcnZpY2VzLCBzZXQgdGhpcyB0byB0aGUgc2FtZSBwb3J0IHRoYXQgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB1c2VzIGJ5IGRlZmF1bHQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUG9ydDogbnVtYmVyXG59XG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRsc0NvbmZpZ3VyYXRpb24ge1xuSXNzdWVyQ2VydGlmaWNhdGVBdXRob3JpdHk6IFNlcnZpY2VDb25uZWN0VGxzQ2VydGlmaWNhdGVBdXRob3JpdHlcbi8qKlxuICogVGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleS5cbiAqL1xuS21zS2V5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgU2VydmljZSBDb25uZWN0IFRMUy5cbiAqL1xuUm9sZUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgc2lnbmVyIGNlcnRpZmljYXRlIGF1dGhvcml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFRsc0NlcnRpZmljYXRlQXV0aG9yaXR5IHtcbi8qKlxuICogVGhlIEFSTiBvZiB0aGUgQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGNlcnRpZmljYXRlLlxuICovXG5Bd3NQY2FBdXRob3JpdHlBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGxvZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgTG9nQ29uZmlnYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tbG9nLWRyaXZlcmBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogIEJ5IGRlZmF1bHQsIGNvbnRhaW5lcnMgdXNlIHRoZSBzYW1lIGxvZ2dpbmcgZHJpdmVyIHRoYXQgdGhlIERvY2tlciBkYWVtb24gdXNlcy4gSG93ZXZlciwgdGhlIGNvbnRhaW5lciBtaWdodCB1c2UgYSBkaWZmZXJlbnQgbG9nZ2luZyBkcml2ZXIgdGhhbiB0aGUgRG9ja2VyIGRhZW1vbiBieSBzcGVjaWZ5aW5nIGEgbG9nIGRyaXZlciBjb25maWd1cmF0aW9uIGluIHRoZSBjb250YWluZXIgZGVmaW5pdGlvbi5cbiAqICBVbmRlcnN0YW5kIHRoZSBmb2xsb3dpbmcgd2hlbiBzcGVjaWZ5aW5nIGEgbG9nIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgY29udGFpbmVycy5cbiAqICAgKyAgQW1hem9uIEVDUyBjdXJyZW50bHkgc3VwcG9ydHMgYSBzdWJzZXQgb2YgdGhlIGxvZ2dpbmcgZHJpdmVycyBhdmFpbGFibGUgdG8gdGhlIERvY2tlciBkYWVtb24uIEFkZGl0aW9uYWwgbG9nIGRyaXZlcnMgbWF5IGJlIGF2YWlsYWJsZSBpbiBmdXR1cmUgcmVsZWFzZXMgb2YgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50LlxuICogIEZvciB0YXNrcyBvbiBGQVJHQVRFbG9uZywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIHRhc2tzIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgZmx1ZW50ZGBgLCBgYGdlbGZgYCwgYGBqc29uLWZpbGVgYCwgYGBqb3VybmFsZGBgLGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgICsgIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOCBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS5cbiAqICAgKyAgRm9yIHRhc2tzIHRoYXQgYXJlIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IG11c3QgcmVnaXN0ZXIgdGhlIGF2YWlsYWJsZSBsb2dnaW5nIGRyaXZlcnMgd2l0aCB0aGUgYGBFQ1NfQVZBSUxBQkxFX0xPR0dJTkdfRFJJVkVSU2BgIGVudmlyb25tZW50IHZhcmlhYmxlIGJlZm9yZSBjb250YWluZXJzIHBsYWNlZCBvbiB0aGF0IGluc3RhbmNlIGNhbiB1c2UgdGhlc2UgbG9nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgY29uZmlndXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLWFnZW50LWNvbmZpZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IGFyZSBvbiBGQVJHQVRFbG9uZywgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgeW91ciB0YXNrcyBhcmUgaG9zdGVkIG9uLCBhbnkgYWRkaXRpb25hbCBzb2Z0d2FyZSBuZWVkZWQgbXVzdCBiZSBpbnN0YWxsZWQgb3V0c2lkZSBvZiB0aGUgdGFzay4gRm9yIGV4YW1wbGUsIHRoZSBGbHVlbnRkIG91dHB1dCBhZ2dyZWdhdG9ycyBvciBhIHJlbW90ZSBob3N0IHJ1bm5pbmcgTG9nc3Rhc2ggdG8gc2VuZCBHZWxmIGxvZ3MgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzZWNyZXRzIHRvIHBhc3MgdG8gdGhlIGxvZyBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTcGVjaWZ5aW5nIHNlbnNpdGl2ZSBkYXRhXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuU2VjcmV0T3B0aW9ucz86IFNlY3JldFtdXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VuZCB0byB0aGUgbG9nIGRyaXZlci5cbiAqICBUaGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgZGVwZW5kIG9uIHRoZSBsb2cgZHJpdmVyLiBTb21lIG9mIHRoZSBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSB3aGVuIHlvdSB1c2UgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIgdG8gcm91dGUgbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgYXdzbG9ncy1jcmVhdGUtZ3JvdXAgUmVxdWlyZWQ6IE5vIFNwZWNpZnkgd2hldGhlciB5b3Ugd2FudCB0aGUgbG9nIGdyb3VwIHRvIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS4gSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBmYWxzZS4gWW91ciBJQU0gcG9saWN5IG11c3QgaW5jbHVkZSB0aGUgbG9nczpDcmVhdGVMb2dHcm91cCBwZXJtaXNzaW9uIGJlZm9yZSB5b3UgYXR0ZW1wdCB0byB1c2UgYXdzbG9ncy1jcmVhdGUtZ3JvdXAuICsgYXdzbG9ncy1yZWdpb24gUmVxdWlyZWQ6IFllcyBTcGVjaWZ5IHRoZSBSZWdpb24gdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIGlzIHRvIHNlbmQgeW91ciBEb2NrZXIgbG9ncyB0by4gWW91IGNhbiBjaG9vc2UgdG8gc2VuZCBhbGwgb2YgeW91ciBsb2dzIGZyb20gY2x1c3RlcnMgaW4gZGlmZmVyZW50IFJlZ2lvbnMgdG8gYSBzaW5nbGUgcmVnaW9uIGluIENsb3VkV2F0Y2ggTG9ncy4gVGhpcyBpcyBzbyB0aGF0IHRoZXkncmUgYWxsIHZpc2libGUgaW4gb25lIGxvY2F0aW9uLiBPdGhlcndpc2UsIHlvdSBjYW4gc2VwYXJhdGUgdGhlbSBieSBSZWdpb24gZm9yIG1vcmUgZ3JhbnVsYXJpdHkuIE1ha2Ugc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgbG9nIGdyb3VwIGV4aXN0cyBpbiB0aGUgUmVnaW9uIHRoYXQgeW91IHNwZWNpZnkgd2l0aCB0aGlzIG9wdGlvbi4gKyBhd3Nsb2dzLWdyb3VwIFJlcXVpcmVkOiBZZXMgTWFrZSBzdXJlIHRvIHNwZWNpZnkgYSBsb2cgZ3JvdXAgdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIHNlbmRzIGl0cyBsb2cgc3RyZWFtcyB0by4gKyBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggUmVxdWlyZWQ6IFllcywgd2hlbiB1c2luZyBGYXJnYXRlLk9wdGlvbmFsIHdoZW4gdXNpbmcgRUMyLiBVc2UgdGhlIGF3c2xvZ3Mtc3RyZWFtLXByZWZpeCBvcHRpb24gdG8gYXNzb2NpYXRlIGEgbG9nIHN0cmVhbSB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LCB0aGUgY29udGFpbmVyIG5hbWUsIGFuZCB0aGUgSUQgb2YgdGhlIEFtYXpvbiBFQ1MgdGFzayB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0by4gSWYgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSB0YWtlcyB0aGUgZm9ybWF0IHByZWZpeC1uYW1lL2NvbnRhaW5lci1uYW1lL2Vjcy10YXNrLWlkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLCB0aGVuIHRoZSBsb2cgc3RyZWFtIGlzIG5hbWVkIGFmdGVyIHRoZSBjb250YWluZXIgSUQgdGhhdCdzIGFzc2lnbmVkIGJ5IHRoZSBEb2NrZXIgZGFlbW9uIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UuIEJlY2F1c2UgaXQncyBkaWZmaWN1bHQgdG8gdHJhY2UgbG9ncyBiYWNrIHRvIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0gd2l0aCBqdXN0IHRoZSBEb2NrZXIgY29udGFpbmVyIElEICh3aGljaCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlKSwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbi4gRm9yIEFtYXpvbiBFQ1Mgc2VydmljZXMsIHlvdSBjYW4gdXNlIHRoZSBzZXJ2aWNlIG5hbWUgYXMgdGhlIHByZWZpeC4gRG9pbmcgc28sIHlvdSBjYW4gdHJhY2UgbG9nIHN0cmVhbXMgdG8gdGhlIHNlcnZpY2UgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8sIHRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0sIGFuZCB0aGUgSUQgb2YgdGhlIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIFlvdSBtdXN0IHNwZWNpZnkgYSBzdHJlYW0tcHJlZml4IGZvciB5b3VyIGxvZ3MgdG8gaGF2ZSB5b3VyIGxvZ3MgYXBwZWFyIGluIHRoZSBMb2cgcGFuZSB3aGVuIHVzaW5nIHRoZSBBbWF6b24gRUNTIGNvbnNvbGUuICsgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiBpbiBQeXRob24gc3RyZnRpbWUgZm9ybWF0LiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIE9uZSBleGFtcGxlIG9mIGEgdXNlIGNhc2UgZm9yIHVzaW5nIHRoaXMgZm9ybWF0IGlzIGZvciBwYXJzaW5nIG91dHB1dCBzdWNoIGFzIGEgc3RhY2sgZHVtcCwgd2hpY2ggbWlnaHQgb3RoZXJ3aXNlIGJlIGxvZ2dlZCBpbiBtdWx0aXBsZSBlbnRyaWVzLiBUaGUgY29ycmVjdCBwYXR0ZXJuIGFsbG93cyBpdCB0byBiZSBjYXB0dXJlZCBpbiBhIHNpbmdsZSBlbnRyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiArIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiB0aGF0IHVzZXMgYSByZWd1bGFyIGV4cHJlc3Npb24uIEEgbG9nIG1lc3NhZ2UgY29uc2lzdHMgb2YgYSBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybiBhbmQgYW55IGZvbGxvd2luZyBsaW5lcyB0aGF0IGRvbuKAmXQgbWF0Y2ggdGhlIHBhdHRlcm4uIFRoZSBtYXRjaGVkIGxpbmUgaXMgdGhlIGRlbGltaXRlciBiZXR3ZWVuIGxvZyBtZXNzYWdlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuLiBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGlzIGFsc28gY29uZmlndXJlZC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiBcbiAqICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXBwbHkgdG8gYWxsIHN1cHBvcnRlZCBsb2cgZHJpdmVycy5cbiAqICAgKyBtb2RlIFJlcXVpcmVkOiBObyBWYWxpZCB2YWx1ZXM6IG5vbi1ibG9ja2luZyB8IGJsb2NraW5nIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIGRlbGl2ZXJ5IG1vZGUgb2YgbG9nIG1lc3NhZ2VzIGZyb20gdGhlIGNvbnRhaW5lciB0byB0aGUgbG9nIGRyaXZlciBzcGVjaWZpZWQgdXNpbmcgbG9nRHJpdmVyLiBUaGUgZGVsaXZlcnkgbW9kZSB5b3UgY2hvb3NlIGFmZmVjdHMgYXBwbGljYXRpb24gYXZhaWxhYmlsaXR5IHdoZW4gdGhlIGZsb3cgb2YgbG9ncyBmcm9tIGNvbnRhaW5lciBpcyBpbnRlcnJ1cHRlZC4gSWYgeW91IHVzZSB0aGUgYmxvY2tpbmcgbW9kZSBhbmQgdGhlIGZsb3cgb2YgbG9ncyBpcyBpbnRlcnJ1cHRlZCwgY2FsbHMgZnJvbSBjb250YWluZXIgY29kZSB0byB3cml0ZSB0byB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyB3aWxsIGJsb2NrLiBUaGUgbG9nZ2luZyB0aHJlYWQgb2YgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmxvY2sgYXMgYSByZXN1bHQuIFRoaXMgbWF5IGNhdXNlIHRoZSBhcHBsaWNhdGlvbiB0byBiZWNvbWUgdW5yZXNwb25zaXZlIGFuZCBsZWFkIHRvIGNvbnRhaW5lciBoZWFsdGhjaGVjayBmYWlsdXJlLiBJZiB5b3UgdXNlIHRoZSBub24tYmxvY2tpbmcgbW9kZSwgdGhlIGNvbnRhaW5lcidzIGxvZ3MgYXJlIGluc3RlYWQgc3RvcmVkIGluIGFuIGluLW1lbW9yeSBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvbmZpZ3VyZWQgd2l0aCB0aGUgbWF4LWJ1ZmZlci1zaXplIG9wdGlvbi4gVGhpcyBwcmV2ZW50cyB0aGUgYXBwbGljYXRpb24gZnJvbSBiZWNvbWluZyB1bnJlc3BvbnNpdmUgd2hlbiBsb2dzIGNhbm5vdCBiZSBzZW50LiBXZSByZWNvbW1lbmQgdXNpbmcgdGhpcyBtb2RlIGlmIHlvdSB3YW50IHRvIGVuc3VyZSBzZXJ2aWNlIGF2YWlsYWJpbGl0eSBhbmQgYXJlIG9rYXkgd2l0aCBzb21lIGxvZyBsb3NzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFByZXZlbnRpbmcgbG9nIGxvc3Mgd2l0aCBub24tYmxvY2tpbmcgbW9kZSBpbiB0aGUgYXdzbG9ncyBjb250YWluZXIgbG9nIGRyaXZlci4gWW91IGNhbiBzZXQgYSBkZWZhdWx0IG1vZGUgZm9yIGFsbCBjb250YWluZXJzIGluIGEgc3BlY2lmaWMgUmVnaW9uIGJ5IHVzaW5nIHRoZSBkZWZhdWx0TG9nRHJpdmVyTW9kZSBhY2NvdW50IHNldHRpbmcuIElmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBtb2RlIG9wdGlvbiBvciBjb25maWd1cmUgdGhlIGFjY291bnQgc2V0dGluZywgQW1hem9uIEVDUyB3aWxsIGRlZmF1bHQgdG8gdGhlIGJsb2NraW5nIG1vZGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY2NvdW50IHNldHRpbmcsIHNlZSBEZWZhdWx0IGxvZyBkcml2ZXIgbW9kZSBpbiB0aGUgQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlLiArIG1heC1idWZmZXItc2l6ZSBSZXF1aXJlZDogTm8gRGVmYXVsdCB2YWx1ZTogMW0gV2hlbiBub24tYmxvY2tpbmcgbW9kZSBpcyB1c2VkLCB0aGUgbWF4LWJ1ZmZlci1zaXplIGxvZyBvcHRpb24gY29udHJvbHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0aGF0J3MgdXNlZCBmb3IgaW50ZXJtZWRpYXRlIG1lc3NhZ2Ugc3RvcmFnZS4gTWFrZSBzdXJlIHRvIHNwZWNpZnkgYW4gYWRlcXVhdGUgYnVmZmVyIHNpemUgYmFzZWQgb24geW91ciBhcHBsaWNhdGlvbi4gV2hlbiB0aGUgYnVmZmVyIGZpbGxzIHVwLCBmdXJ0aGVyIGxvZ3MgY2Fubm90IGJlIHN0b3JlZC4gTG9ncyB0aGF0IGNhbm5vdCBiZSBzdG9yZWQgYXJlIGxvc3QuIFxuICogIFRvIHJvdXRlIGxvZ3MgdXNpbmcgdGhlIGBgc3BsdW5rYGAgbG9nIHJvdXRlciwgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGBgc3BsdW5rLXRva2VuYGAgYW5kIGEgYGBzcGx1bmstdXJsYGAuXG4gKiAgV2hlbiB5b3UgdXNlIHRoZSBgYGF3c2ZpcmVsZW5zYGAgbG9nIHJvdXRlciB0byByb3V0ZSBsb2dzIHRvIGFuIEFXUyBTZXJ2aWNlIG9yIEFXUyBQYXJ0bmVyIE5ldHdvcmsgZGVzdGluYXRpb24gZm9yIGxvZyBzdG9yYWdlIGFuZCBhbmFseXRpY3MsIHlvdSBjYW4gc2V0IHRoZSBgYGxvZy1kcml2ZXItYnVmZmVyLWxpbWl0YGAgb3B0aW9uIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgYXJlIGJ1ZmZlcmVkIGluIG1lbW9yeSwgYmVmb3JlIGJlaW5nIHNlbnQgdG8gdGhlIGxvZyByb3V0ZXIgY29udGFpbmVyLiBJdCBjYW4gaGVscCB0byByZXNvbHZlIHBvdGVudGlhbCBsb2cgbG9zcyBpc3N1ZSBiZWNhdXNlIGhpZ2ggdGhyb3VnaHB1dCBtaWdodCByZXN1bHQgaW4gbWVtb3J5IHJ1bm5pbmcgb3V0IGZvciB0aGUgYnVmZmVyIGluc2lkZSBvZiBEb2NrZXIuXG4gKiAgT3RoZXIgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB1c2luZyBgYGF3c2ZpcmVsZW5zYGAgdG8gcm91dGUgbG9ncyBkZXBlbmQgb24gdGhlIGRlc3RpbmF0aW9uLiBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gRGF0YSBGaXJlaG9zZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBBV1MgUmVnaW9uIHdpdGggYGByZWdpb25gYCBhbmQgYSBuYW1lIGZvciB0aGUgbG9nIHN0cmVhbSB3aXRoIGBgZGVsaXZlcnlfc3RyZWFtYGAuXG4gKiAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIEtpbmVzaXMgRGF0YSBTdHJlYW1zLCB5b3UgY2FuIHNwZWNpZnkgYW4gQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgZGF0YSBzdHJlYW0gbmFtZSB3aXRoIGBgc3RyZWFtYGAuXG4gKiAgIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UsIHlvdSBjYW4gc3BlY2lmeSBvcHRpb25zIGxpa2UgYGBOYW1lYGAsIGBgSG9zdGBgIChPcGVuU2VhcmNoIFNlcnZpY2UgZW5kcG9pbnQgd2l0aG91dCBwcm90b2NvbCksIGBgUG9ydGBgLCBgYEluZGV4YGAsIGBgVHlwZWBgLCBgYEF3c19hdXRoYGAsIGBgQXdzX3JlZ2lvbmBgLCBgYFN1cHByZXNzX1R5cGVfTmFtZWBgLCBhbmQgYGB0bHNgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5kZXIgdGhlIGhvb2Q6IEZpcmVMZW5zIGZvciBBbWF6b24gRUNTIFRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29udGFpbmVycy91bmRlci10aGUtaG9vZC1maXJlbGVucy1mb3ItYW1hem9uLWVjcy10YXNrcy8pLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBTMywgeW91IGNhbiBzcGVjaWZ5IHRoZSBidWNrZXQgdXNpbmcgdGhlIGBgYnVja2V0YGAgb3B0aW9uLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBgYHJlZ2lvbmBgLCBgYHRvdGFsX2ZpbGVfc2l6ZWBgLCBgYHVwbG9hZF90aW1lb3V0YGAsIGFuZCBgYHVzZV9wdXRfb2JqZWN0YGAgYXMgb3B0aW9ucy5cbiAqICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTkgb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuIFRvIGNoZWNrIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSB2ZXJzaW9uIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLCBsb2cgaW4gdG8geW91ciBjb250YWluZXIgaW5zdGFuY2UgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6IGBgc3VkbyBkb2NrZXIgdmVyc2lvbiAtLWZvcm1hdCAne3suU2VydmVyLkFQSVZlcnNpb259fSdgYFxuICovXG5PcHRpb25zPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsfVwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgZHJpdmVyIHRvIHVzZSBmb3IgdGhlIGNvbnRhaW5lci5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCwgYGBzeXNsb2dgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3Nsb2dzYGAgbG9nIGRyaXZlciwgc2VlIFtTZW5kIEFtYXpvbiBFQ1MgbG9ncyB0byBDbG91ZFdhdGNoXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19hd3Nsb2dzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gYW4gc2VydmljZSBvciBQYXJ0bmVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZ19maXJlbGVucy5odG1sKS5cbiAqICAgSWYgeW91IGhhdmUgYSBjdXN0b20gZHJpdmVyIHRoYXQgaXNuJ3QgbGlzdGVkLCB5b3UgY2FuIGZvcmsgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IHByb2plY3QgdGhhdCdzIFthdmFpbGFibGUgb24gR2l0SHViXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hbWF6b24tZWNzLWFnZW50KSBhbmQgY3VzdG9taXplIGl0IHRvIHdvcmsgd2l0aCB0aGF0IGRyaXZlci4gV2UgZW5jb3VyYWdlIHlvdSB0byBzdWJtaXQgcHVsbCByZXF1ZXN0cyBmb3IgY2hhbmdlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgaW5jbHVkZWQuIEhvd2V2ZXIsIHdlIGRvbid0IGN1cnJlbnRseSBwcm92aWRlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgbW9kaWZpZWQgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuXG4gKi9cbkxvZ0RyaXZlcj86IHN0cmluZ1xufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHlvdXIgY29udGFpbmVyLiBTZWNyZXRzIGNhbiBiZSBleHBvc2VkIHRvIGEgY29udGFpbmVyIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqICAgKyAgVG8gaW5qZWN0IHNlbnNpdGl2ZSBkYXRhIGludG8geW91ciBjb250YWluZXJzIGFzIGVudmlyb25tZW50IHZhcmlhYmxlcywgdXNlIHRoZSBgYHNlY3JldHNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgICsgIFRvIHJlZmVyZW5jZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gdGhlIGxvZyBjb25maWd1cmF0aW9uIG9mIGEgY29udGFpbmVyLCB1c2UgdGhlIGBgc2VjcmV0T3B0aW9uc2BgIGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlci5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0IHtcbi8qKlxuICogVGhlIHNlY3JldCB0byBleHBvc2UgdG8gdGhlIGNvbnRhaW5lci4gVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIGVpdGhlciB0aGUgZnVsbCBBUk4gb2YgdGhlIEFTTWxvbmcgc2VjcmV0IG9yIHRoZSBmdWxsIEFSTiBvZiB0aGUgcGFyYW1ldGVyIGluIHRoZSBTU00gUGFyYW1ldGVyIFN0b3JlLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWlyZSBJQU1sb25nIHBlcm1pc3Npb25zLCBzZWUgW1JlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIEVDUyBzZWNyZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLXNlY3JldHMuaHRtbCNzZWNyZXRzLWlhbSkgKGZvciBTZWNyZXRzIE1hbmFnZXIpIG9yIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1wYXJhbWV0ZXJzLmh0bWwpIChmb3IgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBzdG9yZSkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJZiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZSBwYXJhbWV0ZXIgZXhpc3RzIGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB0aGUgdGFzayB5b3UncmUgbGF1bmNoaW5nLCB0aGVuIHlvdSBjYW4gdXNlIGVpdGhlciB0aGUgZnVsbCBBUk4gb3IgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLiBJZiB0aGUgcGFyYW1ldGVyIGV4aXN0cyBpbiBhIGRpZmZlcmVudCBSZWdpb24sIHRoZW4gdGhlIGZ1bGwgQVJOIG11c3QgYmUgc3BlY2lmaWVkLlxuICovXG5WYWx1ZUZyb206IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0LlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgc2VydmljZSB0aGF0IGhvbGRzIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRhcmdldCBncm91cChzKSBBbWF6b24gRUNTIHRhc2tzIHdpbGwgYmUgcmVnaXN0ZXJlZCB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNMYXR0aWNlQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDIExhdHRpY2UgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBBbWF6b24gRUNTIHRhc2tzIHdpbGwgYmUgcmVnaXN0ZXJlZCB0by5cbiAqL1xuVGFyZ2V0R3JvdXBBcm46IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcG9ydCBtYXBwaW5nIHRvIHJlZ2lzdGVyIGluIHRoZSBWUEMgTGF0dGljZSB0YXJnZXQgZ3JvdXAuIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGBgcG9ydE1hcHBpbmdgYCB5b3UgZGVmaW5lZCBpbiB5b3VyIHRhc2sgZGVmaW5pdGlvbi5cbiAqL1xuUG9ydE5hbWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIFZQQyBMYXR0aWNlIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgdGhlIEFtYXpvbiBFQ1PigKggaW5mcmFzdHJ1Y3R1cmUgSUFNIHJvbGUgdGhhdCBpcyB1c2VkIHRvIG1hbmFnZSB5b3VyIFZQQyBMYXR0aWNlIGluZnJhc3RydWN0dXJlLlxuICovXG5Sb2xlQXJuOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLiBJZiBubyBkZXBsb3ltZW50IGNvbnRyb2xsZXIgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYEVDU2BgIGlzIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbnRyb2xsZXIge1xuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGUgdG8gdXNlLiBUaGVyZSBhcmUgdGhyZWUgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGVzIGF2YWlsYWJsZTpcbiAqICAgKyBFQ1MgVGhlIHJvbGxpbmcgdXBkYXRlIChFQ1MpIGRlcGxveW1lbnQgdHlwZSBpbnZvbHZlcyByZXBsYWNpbmcgdGhlIGN1cnJlbnQgcnVubmluZyB2ZXJzaW9uIG9mIHRoZSBjb250YWluZXIgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24uIFRoZSBudW1iZXIgb2YgY29udGFpbmVycyBBbWF6b24gRUNTIGFkZHMgb3IgcmVtb3ZlcyBmcm9tIHRoZSBzZXJ2aWNlIGR1cmluZyBhIHJvbGxpbmcgdXBkYXRlIGlzIGNvbnRyb2xsZWQgYnkgYWRqdXN0aW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiBoZWFsdGh5IHRhc2tzIGFsbG93ZWQgZHVyaW5nIGEgc2VydmljZSBkZXBsb3ltZW50LCBhcyBzcGVjaWZpZWQgaW4gdGhlIERlcGxveW1lbnRDb25maWd1cmF0aW9uLiArIENPREVfREVQTE9ZIFRoZSBibHVlL2dyZWVuIChDT0RFX0RFUExPWSkgZGVwbG95bWVudCB0eXBlIHVzZXMgdGhlIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBtb2RlbCBwb3dlcmVkIGJ5ICwgd2hpY2ggYWxsb3dzIHlvdSB0byB2ZXJpZnkgYSBuZXcgZGVwbG95bWVudCBvZiBhIHNlcnZpY2UgYmVmb3JlIHNlbmRpbmcgcHJvZHVjdGlvbiB0cmFmZmljIHRvIGl0LiArIEVYVEVSTkFMIFRoZSBleHRlcm5hbCAoRVhURVJOQUwpIGRlcGxveW1lbnQgdHlwZSBlbmFibGVzIHlvdSB0byB1c2UgYW55IHRoaXJkLXBhcnR5IGRlcGxveW1lbnQgY29udHJvbGxlciBmb3IgZnVsbCBjb250cm9sIG92ZXIgdGhlIGRlcGxveW1lbnQgcHJvY2VzcyBmb3IgYW4gQW1hem9uIEVDUyBzZXJ2aWNlLlxuICovXG5UeXBlPzogKFwiQ09ERV9ERVBMT1lcIiB8IFwiRUNTXCIgfCBcIkVYVEVSTkFMXCIpXG59XG4vKipcbiAqIE9wdGlvbmFsIGRlcGxveW1lbnQgcGFyYW1ldGVycyB0aGF0IGNvbnRyb2wgaG93IG1hbnkgdGFza3MgcnVuIGR1cmluZyB0aGUgZGVwbG95bWVudCBhbmQgdGhlIG9yZGVyaW5nIG9mIHN0b3BwaW5nIGFuZCBzdGFydGluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q29uZmlndXJhdGlvbiB7XG5BbGFybXM/OiBEZXBsb3ltZW50QWxhcm1zXG5EZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXI/OiBEZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXJcbi8qKlxuICogSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLCB0aGUgYGBtYXhpbXVtUGVyY2VudGBgIHBhcmFtZXRlciByZXByZXNlbnRzIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBhcmUgYWxsb3dlZCBpbiB0aGUgYGBSVU5OSU5HYGAgb3IgYGBQRU5ESU5HYGAgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBgYGRlc2lyZWRDb3VudGBgIChyb3VuZGVkIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikuIFRoaXMgcGFyYW1ldGVyIGVuYWJsZXMgeW91IHRvIGRlZmluZSB0aGUgZGVwbG95bWVudCBiYXRjaCBzaXplLiBGb3IgZXhhbXBsZSwgaWYgeW91ciBzZXJ2aWNlIGlzIHVzaW5nIHRoZSBgYFJFUExJQ0FgYCBzZXJ2aWNlIHNjaGVkdWxlciBhbmQgaGFzIGEgYGBkZXNpcmVkQ291bnRgYCBvZiBmb3VyIHRhc2tzIGFuZCBhIGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBvZiAyMDAlLCB0aGUgc2NoZWR1bGVyIG1heSBzdGFydCBmb3VyIG5ldyB0YXNrcyBiZWZvcmUgc3RvcHBpbmcgdGhlIGZvdXIgb2xkZXIgdGFza3MgKHByb3ZpZGVkIHRoYXQgdGhlIGNsdXN0ZXIgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIGRvIHRoaXMgYXJlIGF2YWlsYWJsZSkuIFRoZSBkZWZhdWx0IGBgbWF4aW11bVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHVzaW5nIHRoZSBgYFJFUExJQ0FgYCBzZXJ2aWNlIHNjaGVkdWxlciBpcyAyMDAlLlxuICogIFRoZSBBbWF6b24gRUNTIHNjaGVkdWxlciB1c2VzIHRoaXMgcGFyYW1ldGVyIHRvIHJlcGxhY2UgdW5oZWFsdGh5IHRhc2tzIGJ5IHN0YXJ0aW5nIHJlcGxhY2VtZW50IHRhc2tzIGZpcnN0IGFuZCB0aGVuIHN0b3BwaW5nIHRoZSB1bmhlYWx0aHkgdGFza3MsIGFzIGxvbmcgYXMgY2x1c3RlciByZXNvdXJjZXMgZm9yIHN0YXJ0aW5nIHJlcGxhY2VtZW50IHRhc2tzIGFyZSBhdmFpbGFibGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgc2NoZWR1bGVyIHJlcGxhY2VzIHVuaGVhbHRoeSB0YXNrcywgc2VlIFtBbWF6b24gRUNTIHNlcnZpY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Nfc2VydmljZXMuaHRtbCkuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcywgYW5kIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBUaGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdGhhdCB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaGFzIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUuXG4gKiAgIElmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzLCBhbmQgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1heGltdW0gcGVyY2VudCB2YWx1ZSBpcyBub3QgdXNlZC4gVGhlIHZhbHVlIGlzIHN0aWxsIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1heGltdW1QZXJjZW50PzogbnVtYmVyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgcmVwcmVzZW50cyBhIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBtdXN0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBgYGRlc2lyZWRDb3VudGBgIChyb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZXBsb3kgd2l0aG91dCB1c2luZyBhZGRpdGlvbmFsIGNsdXN0ZXIgY2FwYWNpdHkuIEZvciBleGFtcGxlLCBpZiB5b3VyIHNlcnZpY2UgaGFzIGEgYGBkZXNpcmVkQ291bnRgYCBvZiBmb3VyIHRhc2tzIGFuZCBhIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgb2YgNTAlLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgbWF5IHN0b3AgdHdvIGV4aXN0aW5nIHRhc2tzIHRvIGZyZWUgdXAgY2x1c3RlciBjYXBhY2l0eSBiZWZvcmUgc3RhcnRpbmcgdHdvIG5ldyB0YXNrcy4gXG4gKiAgIElmIGFueSB0YXNrcyBhcmUgdW5oZWFsdGh5IGFuZCBpZiBgYG1heGltdW1QZXJjZW50YGAgZG9lc24ndCBhbGxvdyB0aGUgQW1hem9uIEVDUyBzY2hlZHVsZXIgdG8gc3RhcnQgcmVwbGFjZW1lbnQgdGFza3MsIHRoZSBzY2hlZHVsZXIgc3RvcHMgdGhlIHVuaGVhbHRoeSB0YXNrcyBvbmUtYnktb25lIOKAlCB1c2luZyB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBhcyBhIGNvbnN0cmFpbnQg4oCUIHRvIGNsZWFyIHVwIGNhcGFjaXR5IHRvIGxhdW5jaCByZXBsYWNlbWVudCB0YXNrcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBzY2hlZHVsZXIgcmVwbGFjZXMgdW5oZWFsdGh5IHRhc2tzLCBzZWUgW0FtYXpvbiBFQ1Mgc2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKSAuIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyBub3QqIHVzZSBhIGxvYWQgYmFsYW5jZXIsIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIG5vdGVkOlxuICogICArICBBIHNlcnZpY2UgaXMgY29uc2lkZXJlZCBoZWFsdGh5IGlmIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHBhc3MgdGhlaXIgaGVhbHRoIGNoZWNrcy5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBubyBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIDQwIHNlY29uZHMgYWZ0ZXIgYSB0YXNrIHJlYWNoZXMgYSBgYFJVTk5JTkdgYCBzdGF0ZSBiZWZvcmUgdGhlIHRhc2sgaXMgY291bnRlZCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBvbmUgb3IgbW9yZSBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIHRoZSB0YXNrIHRvIHJlYWNoIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIGl0IHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLiBBIHRhc2sgaXMgY29uc2lkZXJlZCBoZWFsdGh5IHdoZW4gYWxsIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGhpbiB0aGUgdGFzayBoYXZlIHBhc3NlZCB0aGVpciBoZWFsdGggY2hlY2tzLiBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGNhbiB3YWl0IGZvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb250YWluZXIgaGVhbHRoIGNoZWNrIHNldHRpbmdzLiBcbiAqICAgXG4gKiAgRm9yIHNlcnZpY2VzIHRoYXQgKmRvKiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBubyBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldCBncm91cCBoZWFsdGggY2hlY2sgdG8gcmV0dXJuIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIHRoZSB0YXNrIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICArICBJZiBhIHRhc2sgaGFzIGFuIGVzc2VudGlhbCBjb250YWluZXIgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciBib3RoIHRoZSB0YXNrIHRvIHJlYWNoIGEgaGVhbHRoeSBzdGF0dXMgYW5kIHRoZSBsb2FkIGJhbGFuY2VyIHRhcmdldCBncm91cCBoZWFsdGggY2hlY2sgdG8gcmV0dXJuIGEgaGVhbHRoeSBzdGF0dXMgYmVmb3JlIGNvdW50aW5nIHRoZSB0YXNrIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICBcbiAqICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSByZXBsaWNhIHNlcnZpY2UgZm9yIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgaXMgMTAwJS4gVGhlIGRlZmF1bHQgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHVzaW5nIHRoZSBgYERBRU1PTmBgIHNlcnZpY2Ugc2NoZWR1bGUgaXMgMCUgZm9yIHRoZSBDTEksIHRoZSBBV1MgU0RLcywgYW5kIHRoZSBBUElzIGFuZCA1MCUgZm9yIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLlxuICogIFRoZSBtaW5pbXVtIG51bWJlciBvZiBoZWFsdGh5IHRhc2tzIGR1cmluZyBhIGRlcGxveW1lbnQgaXMgdGhlIGBgZGVzaXJlZENvdW50YGAgbXVsdGlwbGllZCBieSB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYC8xMDAsIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciB2YWx1ZS5cbiAqICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBpcyBydW5uaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlICptaW5pbXVtIGhlYWx0aHkgcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCB2YWx1ZSBmb3IgYSBzZXJ2aWNlIHRoYXQgdXNlcyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGhhcyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLlxuICogICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBpcyBydW5uaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdmFsdWUgaXMgbm90IHVzZWQsIGFsdGhvdWdoIGl0IGlzIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1pbmltdW1IZWFsdGh5UGVyY2VudD86IG51bWJlclxufVxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgQ2xvdWRXYXRjaCBhbGFybXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudEFsYXJtcyB7XG4vKipcbiAqIE9uZSBvciBtb3JlIENsb3VkV2F0Y2ggYWxhcm0gbmFtZXMuIFVzZSBhIFwiLFwiIHRvIHNlcGFyYXRlIHRoZSBhbGFybXMuXG4gKi9cbkFsYXJtTmFtZXM6IHN0cmluZ1tdXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIENsb3VkV2F0Y2ggYWxhcm0gb3B0aW9uIGluIHRoZSBzZXJ2aWNlIGRlcGxveW1lbnQgcHJvY2Vzcy5cbiAqL1xuRW5hYmxlOiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBjb25maWd1cmUgQW1hem9uIEVDUyB0byByb2xsIGJhY2sgdGhlIHNlcnZpY2UgaWYgYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMuIElmIHJvbGxiYWNrIGlzIHVzZWQsIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICovXG5Sb2xsYmFjazogYm9vbGVhblxufVxuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIgY2FuIG9ubHkgYmUgdXNlZCBmb3Igc2VydmljZXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUuXG4gKiAgIFRoZSAqZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIqIGRldGVybWluZXMgd2hldGhlciBhIHNlcnZpY2UgZGVwbG95bWVudCB3aWxsIGZhaWwgaWYgdGhlIHNlcnZpY2UgY2FuJ3QgcmVhY2ggYSBzdGVhZHkgc3RhdGUuIElmIHlvdSB1c2UgdGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyLCBhIHNlcnZpY2UgZGVwbG95bWVudCB3aWxsIHRyYW5zaXRpb24gdG8gYSBmYWlsZWQgc3RhdGUgYW5kIHN0b3AgbGF1bmNoaW5nIG5ldyB0YXNrcy4gSWYgeW91IHVzZSB0aGUgcm9sbGJhY2sgb3B0aW9uLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUm9sbGluZyB1cGRhdGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZS1lY3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENpcmN1aXRCcmVha2VyIHtcbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIgbG9naWMgZm9yIHRoZSBzZXJ2aWNlLlxuICovXG5FbmFibGU6IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNvbmZpZ3VyZSBBbWF6b24gRUNTIHRvIHJvbGwgYmFjayB0aGUgc2VydmljZSBpZiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscy4gSWYgcm9sbGJhY2sgaXMgb24sIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICovXG5Sb2xsYmFjazogYm9vbGVhblxufVxuIl19
@@ -2,19 +2,19 @@
2
2
  * The ``AWS::EFS::MountTarget`` resource is an Amazon EFS resource that creates a mount target for an EFS file system. You can then mount the file system on Amazon EC2 instances or other resources by using the mount target.
3
3
  */
4
4
  export interface _AWS_EFS_MOUNTTARGET {
5
- Id?: string;
6
5
  /**
7
- * Valid IPv4 address within the address range of the specified subnet.
6
+ * VPC security group IDs, of the form ``sg-xxxxxxxx``. These must be for the same VPC as the subnet specified. The maximum number of security groups depends on account quota. For more information, see [Amazon VPC Quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html) in the *Amazon VPC User Guide* (see the *Security Groups* table).
8
7
  */
9
- IpAddress?: string;
8
+ SecurityGroups: string[];
10
9
  /**
11
10
  * The ID of the file system for which to create the mount target.
12
11
  */
13
12
  FileSystemId: string;
14
13
  /**
15
- * VPC security group IDs, of the form ``sg-xxxxxxxx``. These must be for the same VPC as the subnet specified. The maximum number of security groups depends on account quota. For more information, see [Amazon VPC Quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html) in the *Amazon VPC User Guide* (see the *Security Groups* table).
14
+ * Valid IPv4 address within the address range of the specified subnet.
16
15
  */
17
- SecurityGroups: string[];
16
+ IpAddress?: string;
17
+ Id?: string;
18
18
  /**
19
19
  * The ID of the subnet to add the mount target in. For One Zone file systems, use the subnet that is associated with the file system's Availability Zone.
20
20
  */
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVmcy1tb3VudHRhcmdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1lZnMtbW91bnR0YXJnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGBgQVdTOjpFRlM6Ok1vdW50VGFyZ2V0YGAgcmVzb3VyY2UgaXMgYW4gQW1hem9uIEVGUyByZXNvdXJjZSB0aGF0IGNyZWF0ZXMgYSBtb3VudCB0YXJnZXQgZm9yIGFuIEVGUyBmaWxlIHN5c3RlbS4gWW91IGNhbiB0aGVuIG1vdW50IHRoZSBmaWxlIHN5c3RlbSBvbiBBbWF6b24gRUMyIGluc3RhbmNlcyBvciBvdGhlciByZXNvdXJjZXMgYnkgdXNpbmcgdGhlIG1vdW50IHRhcmdldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VGU19NT1VOVFRBUkdFVCB7XG5JZD86IHN0cmluZ1xuLyoqXG4gKiBWYWxpZCBJUHY0IGFkZHJlc3Mgd2l0aGluIHRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSBzcGVjaWZpZWQgc3VibmV0LlxuICovXG5JcEFkZHJlc3M/OiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSBmaWxlIHN5c3RlbSBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBtb3VudCB0YXJnZXQuXG4gKi9cbkZpbGVTeXN0ZW1JZDogc3RyaW5nXG4vKipcbiAqIFZQQyBzZWN1cml0eSBncm91cCBJRHMsIG9mIHRoZSBmb3JtIGBgc2cteHh4eHh4eHhgYC4gVGhlc2UgbXVzdCBiZSBmb3IgdGhlIHNhbWUgVlBDIGFzIHRoZSBzdWJuZXQgc3BlY2lmaWVkLiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2VjdXJpdHkgZ3JvdXBzIGRlcGVuZHMgb24gYWNjb3VudCBxdW90YS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIFZQQyBRdW90YXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS9hbWF6b24tdnBjLWxpbWl0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBWUEMgVXNlciBHdWlkZSogKHNlZSB0aGUgKlNlY3VyaXR5IEdyb3VwcyogdGFibGUpLlxuICovXG5TZWN1cml0eUdyb3Vwczogc3RyaW5nW11cbi8qKlxuICogVGhlIElEIG9mIHRoZSBzdWJuZXQgdG8gYWRkIHRoZSBtb3VudCB0YXJnZXQgaW4uIEZvciBPbmUgWm9uZSBmaWxlIHN5c3RlbXMsIHVzZSB0aGUgc3VibmV0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlIHN5c3RlbSdzIEF2YWlsYWJpbGl0eSBab25lLlxuICovXG5TdWJuZXRJZDogc3RyaW5nXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVmcy1tb3VudHRhcmdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1lZnMtbW91bnR0YXJnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGBgQVdTOjpFRlM6Ok1vdW50VGFyZ2V0YGAgcmVzb3VyY2UgaXMgYW4gQW1hem9uIEVGUyByZXNvdXJjZSB0aGF0IGNyZWF0ZXMgYSBtb3VudCB0YXJnZXQgZm9yIGFuIEVGUyBmaWxlIHN5c3RlbS4gWW91IGNhbiB0aGVuIG1vdW50IHRoZSBmaWxlIHN5c3RlbSBvbiBBbWF6b24gRUMyIGluc3RhbmNlcyBvciBvdGhlciByZXNvdXJjZXMgYnkgdXNpbmcgdGhlIG1vdW50IHRhcmdldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VGU19NT1VOVFRBUkdFVCB7XG4vKipcbiAqIFZQQyBzZWN1cml0eSBncm91cCBJRHMsIG9mIHRoZSBmb3JtIGBgc2cteHh4eHh4eHhgYC4gVGhlc2UgbXVzdCBiZSBmb3IgdGhlIHNhbWUgVlBDIGFzIHRoZSBzdWJuZXQgc3BlY2lmaWVkLiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2VjdXJpdHkgZ3JvdXBzIGRlcGVuZHMgb24gYWNjb3VudCBxdW90YS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIFZQQyBRdW90YXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS9hbWF6b24tdnBjLWxpbWl0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBWUEMgVXNlciBHdWlkZSogKHNlZSB0aGUgKlNlY3VyaXR5IEdyb3VwcyogdGFibGUpLlxuICovXG5TZWN1cml0eUdyb3Vwczogc3RyaW5nW11cbi8qKlxuICogVGhlIElEIG9mIHRoZSBmaWxlIHN5c3RlbSBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBtb3VudCB0YXJnZXQuXG4gKi9cbkZpbGVTeXN0ZW1JZDogc3RyaW5nXG4vKipcbiAqIFZhbGlkIElQdjQgYWRkcmVzcyB3aXRoaW4gdGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIHNwZWNpZmllZCBzdWJuZXQuXG4gKi9cbklwQWRkcmVzcz86IHN0cmluZ1xuSWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSBzdWJuZXQgdG8gYWRkIHRoZSBtb3VudCB0YXJnZXQgaW4uIEZvciBPbmUgWm9uZSBmaWxlIHN5c3RlbXMsIHVzZSB0aGUgc3VibmV0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlIHN5c3RlbSdzIEF2YWlsYWJpbGl0eSBab25lLlxuICovXG5TdWJuZXRJZDogc3RyaW5nXG59XG4iXX0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@horietakehiro/aws-cdk-utul",
3
3
  "license": "MIT",
4
- "version": "0.33.45",
4
+ "version": "0.33.46",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/horietakehiro/aws-cdk-utul"