@horietakehiro/aws-cdk-utul 0.10.2 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/lib/stack-manager.d.ts +41 -0
  2. package/lib/stack-manager.js +132 -0
  3. package/lib/types/cfn-resource-types/aws-amazonmq-configuration.d.ts +35 -5
  4. package/lib/types/cfn-resource-types/aws-amazonmq-configuration.js +1 -1
  5. package/lib/types/cfn-resource-types/aws-apigateway-vpclink.d.ts +0 -9
  6. package/lib/types/cfn-resource-types/aws-apigateway-vpclink.js +1 -1
  7. package/lib/types/cfn-resource-types/aws-apigatewayv2-domainname.d.ts +2 -2
  8. package/lib/types/cfn-resource-types/aws-apigatewayv2-domainname.js +1 -1
  9. package/lib/types/cfn-resource-types/aws-appconfig-deploymentstrategy.d.ts +56 -8
  10. package/lib/types/cfn-resource-types/aws-appconfig-deploymentstrategy.js +1 -1
  11. package/lib/types/cfn-resource-types/aws-appsync-datasource.d.ts +151 -31
  12. package/lib/types/cfn-resource-types/aws-appsync-datasource.js +1 -1
  13. package/lib/types/cfn-resource-types/aws-appsync-graphqlapi.d.ts +225 -36
  14. package/lib/types/cfn-resource-types/aws-appsync-graphqlapi.js +1 -1
  15. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.d.ts +6 -1
  16. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.js +1 -1
  17. package/lib/types/cfn-resource-types/aws-b2bi-capability.d.ts +2 -0
  18. package/lib/types/cfn-resource-types/aws-b2bi-capability.js +1 -1
  19. package/lib/types/cfn-resource-types/aws-b2bi-partnership.d.ts +37 -1
  20. package/lib/types/cfn-resource-types/aws-b2bi-partnership.js +1 -1
  21. package/lib/types/cfn-resource-types/aws-b2bi-transformer.d.ts +41 -4
  22. package/lib/types/cfn-resource-types/aws-b2bi-transformer.js +1 -1
  23. package/lib/types/cfn-resource-types/aws-backup-logicallyairgappedbackupvault.d.ts +28 -0
  24. package/lib/types/cfn-resource-types/aws-backup-logicallyairgappedbackupvault.js +3 -0
  25. package/lib/types/cfn-resource-types/aws-bedrock-agent.d.ts +1 -1
  26. package/lib/types/cfn-resource-types/aws-bedrock-agent.js +1 -1
  27. package/lib/types/cfn-resource-types/aws-bedrock-flow.d.ts +17 -6
  28. package/lib/types/cfn-resource-types/aws-bedrock-flow.js +1 -1
  29. package/lib/types/cfn-resource-types/aws-bedrock-flowversion.d.ts +17 -6
  30. package/lib/types/cfn-resource-types/aws-bedrock-flowversion.js +1 -1
  31. package/lib/types/cfn-resource-types/aws-bedrock-prompt.d.ts +3 -7
  32. package/lib/types/cfn-resource-types/aws-bedrock-prompt.js +1 -1
  33. package/lib/types/cfn-resource-types/aws-bedrock-promptversion.d.ts +4 -8
  34. package/lib/types/cfn-resource-types/aws-bedrock-promptversion.js +1 -1
  35. package/lib/types/cfn-resource-types/aws-cloudformation-customresource.d.ts +2 -1
  36. package/lib/types/cfn-resource-types/aws-cloudformation-customresource.js +1 -1
  37. package/lib/types/cfn-resource-types/aws-codepipeline-pipeline.d.ts +23 -2
  38. package/lib/types/cfn-resource-types/aws-codepipeline-pipeline.js +1 -1
  39. package/lib/types/cfn-resource-types/aws-cognito-userpool.d.ts +2 -0
  40. package/lib/types/cfn-resource-types/aws-cognito-userpool.js +1 -1
  41. package/lib/types/cfn-resource-types/aws-cognito-userpoolidentityprovider.d.ts +15 -8
  42. package/lib/types/cfn-resource-types/aws-cognito-userpoolidentityprovider.js +1 -1
  43. package/lib/types/cfn-resource-types/aws-connect-contactflow.d.ts +1 -1
  44. package/lib/types/cfn-resource-types/aws-connect-contactflow.js +1 -1
  45. package/lib/types/cfn-resource-types/aws-connect-hoursofoperation.d.ts +18 -18
  46. package/lib/types/cfn-resource-types/aws-connect-hoursofoperation.js +1 -1
  47. package/lib/types/cfn-resource-types/aws-datasync-task.d.ts +96 -96
  48. package/lib/types/cfn-resource-types/aws-datasync-task.js +1 -1
  49. package/lib/types/cfn-resource-types/aws-dms-datamigration.d.ts +90 -0
  50. package/lib/types/cfn-resource-types/aws-dms-datamigration.js +3 -0
  51. package/lib/types/cfn-resource-types/aws-dms-replicationinstance.d.ts +1 -0
  52. package/lib/types/cfn-resource-types/aws-dms-replicationinstance.js +1 -1
  53. package/lib/types/cfn-resource-types/aws-ec2-capacityreservation.d.ts +1 -0
  54. package/lib/types/cfn-resource-types/aws-ec2-capacityreservation.js +1 -1
  55. package/lib/types/cfn-resource-types/aws-ec2-eip.d.ts +2 -0
  56. package/lib/types/cfn-resource-types/aws-ec2-eip.js +1 -1
  57. package/lib/types/cfn-resource-types/aws-ec2-natgateway.d.ts +1 -1
  58. package/lib/types/cfn-resource-types/aws-ec2-natgateway.js +1 -1
  59. package/lib/types/cfn-resource-types/aws-ec2-transitgateway.d.ts +6 -5
  60. package/lib/types/cfn-resource-types/aws-ec2-transitgateway.js +1 -1
  61. package/lib/types/cfn-resource-types/aws-ec2-transitgatewayattachment.d.ts +4 -0
  62. package/lib/types/cfn-resource-types/aws-ec2-transitgatewayattachment.js +1 -1
  63. package/lib/types/cfn-resource-types/aws-ec2-transitgatewayvpcattachment.d.ts +14 -10
  64. package/lib/types/cfn-resource-types/aws-ec2-transitgatewayvpcattachment.js +1 -1
  65. package/lib/types/cfn-resource-types/aws-ec2-vpc.d.ts +1 -1
  66. package/lib/types/cfn-resource-types/aws-ec2-vpc.js +1 -1
  67. package/lib/types/cfn-resource-types/aws-ec2-vpcendpoint.d.ts +2 -1
  68. package/lib/types/cfn-resource-types/aws-ec2-vpcendpoint.js +1 -1
  69. package/lib/types/cfn-resource-types/aws-ec2-vpcendpointconnectionnotification.d.ts +8 -8
  70. package/lib/types/cfn-resource-types/aws-ec2-vpcendpointconnectionnotification.js +1 -1
  71. package/lib/types/cfn-resource-types/aws-ec2-vpnconnection.d.ts +213 -3
  72. package/lib/types/cfn-resource-types/aws-ec2-vpnconnection.js +1 -1
  73. package/lib/types/cfn-resource-types/aws-ecs-capacityprovider.d.ts +1 -1
  74. package/lib/types/cfn-resource-types/aws-ecs-capacityprovider.js +1 -1
  75. package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +10 -1
  76. package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
  77. package/lib/types/cfn-resource-types/aws-ecs-taskset.d.ts +57 -51
  78. package/lib/types/cfn-resource-types/aws-ecs-taskset.js +1 -1
  79. package/lib/types/cfn-resource-types/aws-eks-cluster.d.ts +11 -1
  80. package/lib/types/cfn-resource-types/aws-eks-cluster.js +1 -1
  81. package/lib/types/cfn-resource-types/aws-elasticache-globalreplicationgroup.d.ts +4 -0
  82. package/lib/types/cfn-resource-types/aws-elasticache-globalreplicationgroup.js +1 -1
  83. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-listener.d.ts +79 -63
  84. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-listener.js +1 -1
  85. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-listenerrule.d.ts +65 -63
  86. package/lib/types/cfn-resource-types/aws-elasticloadbalancingv2-listenerrule.js +1 -1
  87. package/lib/types/cfn-resource-types/aws-emr-cluster.d.ts +35 -14
  88. package/lib/types/cfn-resource-types/aws-emr-cluster.js +1 -1
  89. package/lib/types/cfn-resource-types/aws-emr-instancefleetconfig.d.ts +21 -0
  90. package/lib/types/cfn-resource-types/aws-emr-instancefleetconfig.js +1 -1
  91. package/lib/types/cfn-resource-types/aws-fis-experimenttemplate.d.ts +81 -81
  92. package/lib/types/cfn-resource-types/aws-fis-experimenttemplate.js +1 -1
  93. package/lib/types/cfn-resource-types/aws-gamelift-containergroupdefinition.d.ts +19 -0
  94. package/lib/types/cfn-resource-types/aws-gamelift-containergroupdefinition.js +1 -1
  95. package/lib/types/cfn-resource-types/aws-glue-crawler.d.ts +179 -1
  96. package/lib/types/cfn-resource-types/aws-glue-crawler.js +1 -1
  97. package/lib/types/cfn-resource-types/aws-glue-job.d.ts +96 -6
  98. package/lib/types/cfn-resource-types/aws-glue-job.js +1 -1
  99. package/lib/types/cfn-resource-types/aws-glue-schema.d.ts +1 -1
  100. package/lib/types/cfn-resource-types/aws-glue-schema.js +1 -1
  101. package/lib/types/cfn-resource-types/aws-glue-usageprofile.d.ts +64 -0
  102. package/lib/types/cfn-resource-types/aws-glue-usageprofile.js +3 -0
  103. package/lib/types/cfn-resource-types/aws-iam-policy.d.ts +4 -1
  104. package/lib/types/cfn-resource-types/aws-iam-policy.js +1 -1
  105. package/lib/types/cfn-resource-types/aws-iam-role.d.ts +3 -2
  106. package/lib/types/cfn-resource-types/aws-iam-role.js +1 -1
  107. package/lib/types/cfn-resource-types/aws-imagebuilder-component.d.ts +1 -1
  108. package/lib/types/cfn-resource-types/aws-imagebuilder-component.js +1 -1
  109. package/lib/types/cfn-resource-types/aws-imagebuilder-infrastructureconfiguration.d.ts +22 -0
  110. package/lib/types/cfn-resource-types/aws-imagebuilder-infrastructureconfiguration.js +1 -1
  111. package/lib/types/cfn-resource-types/aws-iot-domainconfiguration.d.ts +6 -0
  112. package/lib/types/cfn-resource-types/aws-iot-domainconfiguration.js +1 -1
  113. package/lib/types/cfn-resource-types/aws-iotevents-alarmmodel.d.ts +195 -79
  114. package/lib/types/cfn-resource-types/aws-iotevents-alarmmodel.js +1 -1
  115. package/lib/types/cfn-resource-types/aws-iotevents-detectormodel.d.ts +177 -85
  116. package/lib/types/cfn-resource-types/aws-iotevents-detectormodel.js +1 -1
  117. package/lib/types/cfn-resource-types/aws-iotevents-input.d.ts +9 -11
  118. package/lib/types/cfn-resource-types/aws-iotevents-input.js +1 -1
  119. package/lib/types/cfn-resource-types/aws-ivs-encoderconfiguration.d.ts +2 -2
  120. package/lib/types/cfn-resource-types/aws-ivs-encoderconfiguration.js +1 -1
  121. package/lib/types/cfn-resource-types/aws-kinesis-resourcepolicy.d.ts +17 -0
  122. package/lib/types/cfn-resource-types/aws-kinesis-resourcepolicy.js +3 -0
  123. package/lib/types/cfn-resource-types/aws-lakeformation-principalpermissions.d.ts +1 -1
  124. package/lib/types/cfn-resource-types/aws-lakeformation-principalpermissions.js +1 -1
  125. package/lib/types/cfn-resource-types/aws-lakeformation-tag.d.ts +1 -1
  126. package/lib/types/cfn-resource-types/aws-lakeformation-tag.js +1 -1
  127. package/lib/types/cfn-resource-types/aws-lambda-eventsourcemapping.d.ts +115 -108
  128. package/lib/types/cfn-resource-types/aws-lambda-eventsourcemapping.js +1 -1
  129. package/lib/types/cfn-resource-types/aws-medialive-channel.d.ts +2 -0
  130. package/lib/types/cfn-resource-types/aws-medialive-channel.js +1 -1
  131. package/lib/types/cfn-resource-types/aws-memorydb-cluster.d.ts +4 -0
  132. package/lib/types/cfn-resource-types/aws-memorydb-cluster.js +1 -1
  133. package/lib/types/cfn-resource-types/aws-networkfirewall-firewallpolicy.d.ts +3 -0
  134. package/lib/types/cfn-resource-types/aws-networkfirewall-firewallpolicy.js +1 -1
  135. package/lib/types/cfn-resource-types/aws-organizations-policy.d.ts +2 -2
  136. package/lib/types/cfn-resource-types/aws-organizations-policy.js +1 -1
  137. package/lib/types/cfn-resource-types/aws-qbusiness-webexperience.d.ts +6 -0
  138. package/lib/types/cfn-resource-types/aws-qbusiness-webexperience.js +1 -1
  139. package/lib/types/cfn-resource-types/aws-quicksight-analysis.d.ts +13 -0
  140. package/lib/types/cfn-resource-types/aws-quicksight-analysis.js +1 -1
  141. package/lib/types/cfn-resource-types/aws-quicksight-dashboard.d.ts +13 -0
  142. package/lib/types/cfn-resource-types/aws-quicksight-dashboard.js +1 -1
  143. package/lib/types/cfn-resource-types/aws-quicksight-dataset.d.ts +2 -2
  144. package/lib/types/cfn-resource-types/aws-quicksight-dataset.js +1 -1
  145. package/lib/types/cfn-resource-types/aws-quicksight-datasource.d.ts +247 -242
  146. package/lib/types/cfn-resource-types/aws-quicksight-datasource.js +1 -1
  147. package/lib/types/cfn-resource-types/aws-quicksight-folder.d.ts +79 -0
  148. package/lib/types/cfn-resource-types/aws-quicksight-folder.js +3 -0
  149. package/lib/types/cfn-resource-types/aws-quicksight-template.d.ts +8 -0
  150. package/lib/types/cfn-resource-types/aws-quicksight-template.js +1 -1
  151. package/lib/types/cfn-resource-types/aws-rds-dbcluster.d.ts +366 -366
  152. package/lib/types/cfn-resource-types/aws-rds-dbcluster.js +1 -1
  153. package/lib/types/cfn-resource-types/aws-rds-dbinstance.d.ts +1 -4
  154. package/lib/types/cfn-resource-types/aws-rds-dbinstance.js +1 -1
  155. package/lib/types/cfn-resource-types/aws-rds-globalcluster.d.ts +19 -0
  156. package/lib/types/cfn-resource-types/aws-rds-globalcluster.js +1 -1
  157. package/lib/types/cfn-resource-types/aws-redshift-integration.d.ts +61 -0
  158. package/lib/types/cfn-resource-types/aws-redshift-integration.js +3 -0
  159. package/lib/types/cfn-resource-types/aws-refactorspaces-environment.d.ts +2 -2
  160. package/lib/types/cfn-resource-types/aws-refactorspaces-environment.js +1 -1
  161. package/lib/types/cfn-resource-types/aws-route53profiles-profileassociation.d.ts +1 -1
  162. package/lib/types/cfn-resource-types/aws-route53profiles-profileassociation.js +1 -1
  163. package/lib/types/cfn-resource-types/aws-route53resolver-resolverrule.d.ts +4 -4
  164. package/lib/types/cfn-resource-types/aws-route53resolver-resolverrule.js +1 -1
  165. package/lib/types/cfn-resource-types/aws-s3-bucket.d.ts +599 -591
  166. package/lib/types/cfn-resource-types/aws-s3-bucket.js +1 -1
  167. package/lib/types/cfn-resource-types/aws-s3express-directorybucket.d.ts +34 -3
  168. package/lib/types/cfn-resource-types/aws-s3express-directorybucket.js +1 -1
  169. package/lib/types/cfn-resource-types/aws-sagemaker-domain.d.ts +8 -0
  170. package/lib/types/cfn-resource-types/aws-sagemaker-domain.js +1 -1
  171. package/lib/types/cfn-resource-types/aws-sagemaker-endpoint.d.ts +137 -20
  172. package/lib/types/cfn-resource-types/aws-sagemaker-endpoint.js +1 -1
  173. package/lib/types/cfn-resource-types/aws-secretsmanager-secret.d.ts +1 -1
  174. package/lib/types/cfn-resource-types/aws-secretsmanager-secret.js +1 -1
  175. package/lib/types/cfn-resource-types/aws-securityhub-automationrule.d.ts +4 -4
  176. package/lib/types/cfn-resource-types/aws-securityhub-automationrule.js +1 -1
  177. package/lib/types/cfn-resource-types/aws-securityhub-findingaggregator.d.ts +2 -2
  178. package/lib/types/cfn-resource-types/aws-securityhub-findingaggregator.js +1 -1
  179. package/lib/types/cfn-resource-types/aws-ses-mailmanagerruleset.d.ts +4 -1
  180. package/lib/types/cfn-resource-types/aws-ses-mailmanagerruleset.js +1 -1
  181. package/lib/types/cfn-resource-types/aws-sns-topic.d.ts +2 -6
  182. package/lib/types/cfn-resource-types/aws-sns-topic.js +1 -1
  183. package/lib/types/cfn-resource-types/aws-sqs-queue.d.ts +12 -12
  184. package/lib/types/cfn-resource-types/aws-sqs-queue.js +1 -1
  185. package/lib/types/cfn-resource-types/aws-sqs-queuepolicy.d.ts +1 -3
  186. package/lib/types/cfn-resource-types/aws-sqs-queuepolicy.js +1 -1
  187. package/lib/types/cfn-resource-types/aws-ssmquicksetup-configurationmanager.d.ts +1 -1
  188. package/lib/types/cfn-resource-types/aws-ssmquicksetup-configurationmanager.js +1 -1
  189. package/lib/types/cfn-resource-types/aws-transfer-server.d.ts +70 -36
  190. package/lib/types/cfn-resource-types/aws-transfer-server.js +1 -1
  191. package/lib/types/cfn-resource-types/aws-wisdom-aiprompt.d.ts +34 -0
  192. package/lib/types/cfn-resource-types/aws-wisdom-aiprompt.js +3 -0
  193. package/lib/types/cfn-resource-types/aws-wisdom-knowledgebase.d.ts +1 -1
  194. package/lib/types/cfn-resource-types/aws-wisdom-knowledgebase.js +1 -1
  195. package/lib/types/cfn-resource-types/aws-workspacesweb-identityprovider.d.ts +9 -0
  196. package/lib/types/cfn-resource-types/aws-workspacesweb-identityprovider.js +1 -1
  197. package/lib/types/cfn-resource-types.d.ts +14 -0
  198. package/lib/types/cfn-resource-types.js +40 -26
  199. package/package.json +11 -7
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSB0aGUgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VDb25uZWN0U2VydmljZWBgIG11c3QgaGF2ZSBhIG5hbWUgdGhhdCBpcyB1bmlxdWUgaW4gdGhlIG5hbWVzcGFjZS5cbiAqICAgIFN0YXJ0aW5nIEFwcmlsIDE1LCAyMDIzLCBBV1M7IHdpbGwgbm90IG9uYm9hcmQgbmV3IGN1c3RvbWVycyB0byBBbWF6b24gRWxhc3RpYyBJbmZlcmVuY2UgKEVJKSwgYW5kIHdpbGwgaGVscCBjdXJyZW50IGN1c3RvbWVycyBtaWdyYXRlIHRoZWlyIHdvcmtsb2FkcyB0byBvcHRpb25zIHRoYXQgb2ZmZXIgYmV0dGVyIHByaWNlIGFuZCBwZXJmb3JtYW5jZS4gQWZ0ZXIgQXByaWwgMTUsIDIwMjMsIG5ldyBjdXN0b21lcnMgd2lsbCBub3QgYmUgYWJsZSB0byBsYXVuY2ggaW5zdGFuY2VzIHdpdGggQW1hem9uIEVJIGFjY2VsZXJhdG9ycyBpbiBBbWF6b24gU2FnZU1ha2VyLCBFQ1MsIG9yIEVDMi4gSG93ZXZlciwgY3VzdG9tZXJzIHdobyBoYXZlIHVzZWQgQW1hem9uIEVJIGF0IGxlYXN0IG9uY2UgZHVyaW5nIHRoZSBwYXN0IDMwLWRheSBwZXJpb2QgYXJlIGNvbnNpZGVyZWQgY3VycmVudCBjdXN0b21lcnMgYW5kIHdpbGwgYmUgYWJsZSB0byBjb250aW51ZSB1c2luZyB0aGUgc2VydmljZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VDU19TRVJWSUNFIHtcbi8qKlxuICogVGhlIHBsYXRmb3JtIHZlcnNpb24gdGhhdCB5b3VyIHRhc2tzIGluIHRoZSBzZXJ2aWNlIGFyZSBydW5uaW5nIG9uLiBBIHBsYXRmb3JtIHZlcnNpb24gaXMgc3BlY2lmaWVkIG9ubHkgZm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLiBJZiBvbmUgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgYGBMQVRFU1RgYCBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHVzZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW3BsYXRmb3JtIHZlcnNpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9wbGF0Zm9ybV92ZXJzaW9ucy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblBsYXRmb3JtVmVyc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIHRoZSB0YXNrLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCBwcm9wYWdhdGVkLiBUYWdzIGNhbiBvbmx5IGJlIHByb3BhZ2F0ZWQgdG8gdGhlIHRhc2sgZHVyaW5nIHRhc2sgY3JlYXRpb24uIFRvIGFkZCB0YWdzIHRvIGEgdGFzayBhZnRlciB0YXNrIGNyZWF0aW9uLCB1c2UgdGhlIFtUYWdSZXNvdXJjZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9UYWdSZXNvdXJjZS5odG1sKSBBUEkgYWN0aW9uLlxuICogIFlvdSBtdXN0IHNldCB0aGlzIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5PTkVgYCB3aGVuIHlvdSB1c2UgQ29zdCBFeHBsb3Jlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyB1c2FnZSByZXBvcnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2FnZS1yZXBvcnRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgZGVmYXVsdCBpcyBgYE5PTkVgYC5cbiAqL1xuUHJvcGFnYXRlVGFncz86IChcIlNFUlZJQ0VcIiB8IFwiVEFTS19ERUZJTklUSU9OXCIpXG5TZXJ2aWNlQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgb2JqZWN0cyB0byB1c2UgZm9yIHRhc2tzIGluIHlvdXIgc2VydmljZS4gWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSBvZiA1IHN0cmF0ZWd5IHJ1bGVzIGZvciBlYWNoIHNlcnZpY2UuXG4gKi9cblBsYWNlbWVudFN0cmF0ZWdpZXM/OiBQbGFjZW1lbnRTdHJhdGVneVtdXG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZWdpc3RyeSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgZGlzY292ZXJ5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWRpc2NvdmVyeS5odG1sKS5cbiAqICAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuU2VydmljZVJlZ2lzdHJpZXM/OiBTZXJ2aWNlUmVnaXN0cnlbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgYSB2b2x1bWUgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYXMgYSB2b2x1bWUgdGhhdCBpcyBjb25maWd1cmVkIGF0IGxhdW5jaCB0aW1lLiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCB2b2x1bWUgdHlwZSBpcyBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuVm9sdW1lQ29uZmlndXJhdGlvbnM/OiBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICogIElmIGEgYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGxhdW5jaFR5cGVgYCBwYXJhbWV0ZXIgbXVzdCBiZSBvbWl0dGVkLiBJZiBubyBgYGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIG9yIGBgbGF1bmNoVHlwZWBgIGlzIHNwZWNpZmllZCwgdGhlIGBgZGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIGZvciB0aGUgY2x1c3RlciBpcyB1c2VkLlxuICogIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgbWF5IGNvbnRhaW4gYSBtYXhpbXVtIG9mIDYgY2FwYWNpdHkgcHJvdmlkZXJzLlxuICovXG5DYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3k/OiBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtW11cbi8qKlxuICogVGhlIGxhdW5jaCB0eXBlIG9uIHdoaWNoIHRvIHJ1biB5b3VyIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgTGF1bmNoIFR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5MYXVuY2hUeXBlPzogKFwiRUMyXCIgfCBcIkZBUkdBVEVcIiB8IFwiRVhURVJOQUxcIilcbk5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHNjaGVkdWxpbmcgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKS5cbiAqICBUaGVyZSBhcmUgdHdvIHNlcnZpY2Ugc2NoZWR1bGVyIHN0cmF0ZWdpZXMgYXZhaWxhYmxlOlxuICogICArICAgYGBSRVBMSUNBYGAtVGhlIHJlcGxpY2Egc2NoZWR1bGluZyBzdHJhdGVneSBwbGFjZXMgYW5kIG1haW50YWlucyB0aGUgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MgYWNyb3NzIHlvdXIgY2x1c3Rlci4gQnkgZGVmYXVsdCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHNwcmVhZHMgdGFza3MgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lcy4gWW91IGNhbiB1c2UgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llcyBhbmQgY29uc3RyYWludHMgdG8gY3VzdG9taXplIHRhc2sgcGxhY2VtZW50IGRlY2lzaW9ucy4gVGhpcyBzY2hlZHVsZXIgc3RyYXRlZ3kgaXMgcmVxdWlyZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMuXG4gKiAgICsgICBgYERBRU1PTmBgLVRoZSBkYWVtb24gc2NoZWR1bGluZyBzdHJhdGVneSBkZXBsb3lzIGV4YWN0bHkgb25lIHRhc2sgb24gZWFjaCBhY3RpdmUgY29udGFpbmVyIGluc3RhbmNlIHRoYXQgbWVldHMgYWxsIG9mIHRoZSB0YXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyB0aGF0IHlvdSBzcGVjaWZ5IGluIHlvdXIgY2x1c3Rlci4gVGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGFsc28gZXZhbHVhdGVzIHRoZSB0YXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyBmb3IgcnVubmluZyB0YXNrcyBhbmQgd2lsbCBzdG9wIHRhc2tzIHRoYXQgZG9uJ3QgbWVldCB0aGUgcGxhY2VtZW50IGNvbnN0cmFpbnRzLiBXaGVuIHlvdSdyZSB1c2luZyB0aGlzIHN0cmF0ZWd5LCB5b3UgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGEgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MsIGEgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ3ksIG9yIHVzZSBTZXJ2aWNlIEF1dG8gU2NhbGluZyBwb2xpY2llcy5cbiAqICAgVGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUgb3IgdGhlIGBgQ09ERV9ERVBMT1lgYCBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGVzIGRvbid0IHN1cHBvcnQgdGhlIGBgREFFTU9OYGAgc2NoZWR1bGluZyBzdHJhdGVneS5cbiAqL1xuU2NoZWR1bGluZ1N0cmF0ZWd5PzogKFwiREFFTU9OXCIgfCBcIlJFUExJQ0FcIilcbk5ldHdvcmtDb25maWd1cmF0aW9uPzogTmV0d29ya0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG1ldGFkYXRhIHRoYXQgeW91IGFwcGx5IHRvIHRoZSBzZXJ2aWNlIHRvIGhlbHAgeW91IGNhdGVnb3JpemUgYW5kIG9yZ2FuaXplIHRoZW0uIEVhY2ggdGFnIGNvbnNpc3RzIG9mIGEga2V5IGFuZCBhbiBvcHRpb25hbCB2YWx1ZSwgYm90aCBvZiB3aGljaCB5b3UgZGVmaW5lLiBXaGVuIGEgc2VydmljZSBpcyBkZWxldGVkLCB0aGUgdGFncyBhcmUgZGVsZXRlZCBhcyB3ZWxsLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKi9cblRhZ3M/OiBUYWdbXVxuLyoqXG4gKiBUaGUgcGVyaW9kIG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgaWdub3JlcyB1bmhlYWx0aHkgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgaGVhbHRoIGNoZWNrcyBhZnRlciBhIHRhc2sgaGFzIGZpcnN0IHN0YXJ0ZWQuIFRoaXMgaXMgb25seSB1c2VkIHdoZW4geW91ciBzZXJ2aWNlIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGEgbG9hZCBiYWxhbmNlci4gSWYgeW91ciBzZXJ2aWNlIGhhcyBhIGxvYWQgYmFsYW5jZXIgZGVmaW5lZCBhbmQgeW91IGRvbid0IHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIHZhbHVlLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLlxuICogIElmIHlvdSBkbyBub3QgdXNlIGFuIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIGBgc3RhcnRQZXJpb2RgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGhlYWx0aCBjaGVjayBwYXJhbWV0ZXJzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtIZWFsdGggY2hlY2tdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfSGVhbHRoQ2hlY2suaHRtbCkuXG4gKiAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGFrZSBhIHdoaWxlIHRvIHN0YXJ0IGFuZCByZXNwb25kIHRvIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgaGVhbHRoIGNoZWNrcywgeW91IGNhbiBzcGVjaWZ5IGEgaGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCBvZiB1cCB0byAyLDE0Nyw0ODMsNjQ3IHNlY29uZHMgKGFib3V0IDY5IHllYXJzKS4gRHVyaW5nIHRoYXQgdGltZSwgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgaWdub3JlcyBoZWFsdGggY2hlY2sgc3RhdHVzLiBUaGlzIGdyYWNlIHBlcmlvZCBjYW4gcHJldmVudCB0aGUgc2VydmljZSBzY2hlZHVsZXIgZnJvbSBtYXJraW5nIHRhc2tzIGFzIHVuaGVhbHRoeSBhbmQgc3RvcHBpbmcgdGhlbSBiZWZvcmUgdGhleSBoYXZlIHRpbWUgdG8gY29tZSB1cC5cbiAqL1xuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdHVybiBvbiBBbWF6b24gRUNTIG1hbmFnZWQgdGFncyBmb3IgdGhlIHRhc2tzIHdpdGhpbiB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFnZ2luZyB5b3VyIEFtYXpvbiBFQ1MgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtdXNpbmctdGFncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgV2hlbiB5b3UgdXNlIEFtYXpvbiBFQ1MgbWFuYWdlZCB0YWdzLCB5b3UgbmVlZCB0byBzZXQgdGhlIGBgcHJvcGFnYXRlVGFnc2BgIHJlcXVlc3QgcGFyYW1ldGVyLlxuICovXG5FbmFibGVFQ1NNYW5hZ2VkVGFncz86IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBleGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25hbGl0eSBpcyB0dXJuZWQgb24gZm9yIHRoZSBzZXJ2aWNlLiBJZiBgYHRydWVgYCwgdGhlIGV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbmFsaXR5IGlzIHR1cm5lZCBvbiBmb3IgYWxsIGNvbnRhaW5lcnMgaW4gdGFza3MgYXMgcGFydCBvZiB0aGUgc2VydmljZS5cbiAqL1xuRW5hYmxlRXhlY3V0ZUNvbW1hbmQ/OiBib29sZWFuXG4vKipcbiAqIEFuIGFycmF5IG9mIHBsYWNlbWVudCBjb25zdHJhaW50IG9iamVjdHMgdG8gdXNlIGZvciB0YXNrcyBpbiB5b3VyIHNlcnZpY2UuIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgMTAgY29uc3RyYWludHMgZm9yIGVhY2ggdGFzay4gVGhpcyBsaW1pdCBpbmNsdWRlcyBjb25zdHJhaW50cyBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFuZCB0aG9zZSBzcGVjaWZpZWQgYXQgcnVudGltZS5cbiAqL1xuUGxhY2VtZW50Q29uc3RyYWludHM/OiBQbGFjZW1lbnRDb25zdHJhaW50W11cbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgY2x1c3RlciB0aGF0IHlvdSBydW4geW91ciBzZXJ2aWNlIG9uLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBjbHVzdGVyLCB0aGUgZGVmYXVsdCBjbHVzdGVyIGlzIGFzc3VtZWQuXG4gKi9cbkNsdXN0ZXI/OiBzdHJpbmdcbi8qKlxuICogQSBsaXN0IG9mIGxvYWQgYmFsYW5jZXIgb2JqZWN0cyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmljZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgUm9sZWBgIHByb3BlcnR5LCBgYExvYWRCYWxhbmNlcnNgYCBtdXN0IGJlIHNwZWNpZmllZCBhcyB3ZWxsLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG51bWJlciBvZiBsb2FkIGJhbGFuY2VycyB0aGF0IHlvdSBjYW4gc3BlY2lmeSBwZXIgc2VydmljZSwgc2VlIFtTZXJ2aWNlIExvYWQgQmFsYW5jaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWxvYWQtYmFsYW5jaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTG9hZEJhbGFuY2Vycz86IExvYWRCYWxhbmNlcltdXG5TZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24/OiBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG51bWJlciBvZiBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc3BlY2lmaWVkIHRhc2sgZGVmaW5pdGlvbiB0byBwbGFjZSBhbmQga2VlcCBydW5uaW5nIGluIHlvdXIgc2VydmljZS5cbiAqICBGb3IgbmV3IHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IHZhbHVlIG9mIGBgMWBgIGlzIHVzZWQuIFdoZW4gdXNpbmcgdGhlIGBgREFFTU9OYGAgc2NoZWR1bGluZyBzdHJhdGVneSwgdGhlIGRlc2lyZWQgY291bnQgaXMgbm90IHJlcXVpcmVkLlxuICogIEZvciBleGlzdGluZyBzZXJ2aWNlcywgaWYgYSBkZXNpcmVkIGNvdW50IGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIG9taXR0ZWQgZnJvbSB0aGUgb3BlcmF0aW9uLlxuICovXG5EZXNpcmVkQ291bnQ/OiBudW1iZXJcbkRlcGxveW1lbnRDb250cm9sbGVyPzogRGVwbG95bWVudENvbnRyb2xsZXJcbi8qKlxuICogVGhlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBhbGxvd3MgQW1hem9uIEVDUyB0byBtYWtlIGNhbGxzIHRvIHlvdXIgbG9hZCBiYWxhbmNlciBvbiB5b3VyIGJlaGFsZi4gVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBwZXJtaXR0ZWQgaWYgeW91IGFyZSB1c2luZyBhIGxvYWQgYmFsYW5jZXIgd2l0aCB5b3VyIHNlcnZpY2UgYW5kIHlvdXIgdGFzayBkZWZpbml0aW9uIGRvZXNuJ3QgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgcm9sZWBgIHBhcmFtZXRlciwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGEgbG9hZCBiYWxhbmNlciBvYmplY3Qgd2l0aCB0aGUgYGBsb2FkQmFsYW5jZXJzYGAgcGFyYW1ldGVyLlxuICogICBJZiB5b3VyIGFjY291bnQgaGFzIGFscmVhZHkgY3JlYXRlZCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlLCB0aGF0IHJvbGUgaXMgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIHVubGVzcyB5b3Ugc3BlY2lmeSBhIHJvbGUgaGVyZS4gVGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgaXMgcmVxdWlyZWQgaWYgeW91ciB0YXNrIGRlZmluaXRpb24gdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgb3IgaWYgdGhlIHNlcnZpY2UgaXMgY29uZmlndXJlZCB0byB1c2Ugc2VydmljZSBkaXNjb3ZlcnksIGFuIGV4dGVybmFsIGRlcGxveW1lbnQgY29udHJvbGxlciwgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcywgb3IgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3JzIGluIHdoaWNoIGNhc2UgeW91IGRvbid0IHNwZWNpZnkgYSByb2xlIGhlcmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIHNlcnZpY2UtbGlua2VkIHJvbGVzIGZvciBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZy1zZXJ2aWNlLWxpbmtlZC1yb2xlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc3BlY2lmaWVkIHJvbGUgaGFzIGEgcGF0aCBvdGhlciB0aGFuIGBgL2BgLCB0aGVuIHlvdSBtdXN0IGVpdGhlciBzcGVjaWZ5IHRoZSBmdWxsIHJvbGUgQVJOICh0aGlzIGlzIHJlY29tbWVuZGVkKSBvciBwcmVmaXggdGhlIHJvbGUgbmFtZSB3aXRoIHRoZSBwYXRoLiBGb3IgZXhhbXBsZSwgaWYgYSByb2xlIHdpdGggdGhlIG5hbWUgYGBiYXJgYCBoYXMgYSBwYXRoIG9mIGBgL2Zvby9gYCB0aGVuIHlvdSB3b3VsZCBzcGVjaWZ5IGBgL2Zvby9iYXJgYCBhcyB0aGUgcm9sZSBuYW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtGcmllbmRseSBuYW1lcyBhbmQgcGF0aHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWRlbnRpZmllcnMuaHRtbCNpZGVudGlmaWVycy1mcmllbmRseS1uYW1lcykgaW4gdGhlICpJQU0gVXNlciBHdWlkZSouXG4gKi9cblJvbGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgZmFtaWx5YGAgYW5kIGBgcmV2aXNpb25gYCAoYGBmYW1pbHk6cmV2aXNpb25gYCkgb3IgZnVsbCBBUk4gb2YgdGhlIHRhc2sgZGVmaW5pdGlvbiB0byBydW4gaW4geW91ciBzZXJ2aWNlLiBJZiBhIGBgcmV2aXNpb25gYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgYGBBQ1RJVkVgYCByZXZpc2lvbiBpcyB1c2VkLlxuICogIEEgdGFzayBkZWZpbml0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBgYEVDU2BgIG9yIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXJzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlcGxveW1lbnQgdHlwZXMsIHNlZSBbQW1hem9uIEVDUyBkZXBsb3ltZW50IHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGVzLmh0bWwpLlxuICovXG5UYXNrRGVmaW5pdGlvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB5b3VyIHNlcnZpY2UuIFVwIHRvIDI1NSBsZXR0ZXJzICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSksIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucyBhcmUgYWxsb3dlZC4gU2VydmljZSBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBjbHVzdGVyLCBidXQgeW91IGNhbiBoYXZlIHNpbWlsYXJseSBuYW1lZCBzZXJ2aWNlcyBpbiBtdWx0aXBsZSBjbHVzdGVycyB3aXRoaW4gYSBSZWdpb24gb3IgYWNyb3NzIG11bHRpcGxlIFJlZ2lvbnMuXG4gKiAgIFRoZSBzdGFjayB1cGRhdGUgZmFpbHMgaWYgeW91IGNoYW5nZSBhbnkgcHJvcGVydGllcyB0aGF0IHJlcXVpcmUgcmVwbGFjZW1lbnQgYW5kIHRoZSBgYFNlcnZpY2VOYW1lYGAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VOYW1lYGAgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGNsdXN0ZXIuXG4gKi9cblNlcnZpY2VOYW1lPzogc3RyaW5nXG5EZXBsb3ltZW50Q29uZmlndXJhdGlvbj86IERlcGxveW1lbnRDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSBmb3IgYSB0YXNrIG9yIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IHN0cmF0ZWdpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stcGxhY2VtZW50LXN0cmF0ZWdpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudFN0cmF0ZWd5IHtcbi8qKlxuICogVGhlIGZpZWxkIHRvIGFwcGx5IHRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgYWdhaW5zdC4gRm9yIHRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGluc3RhbmNlSWRgYCAob3IgYGBob3N0YGAsIHdoaWNoIGhhcyB0aGUgc2FtZSBlZmZlY3QpLCBvciBhbnkgcGxhdGZvcm0gb3IgY3VzdG9tIGF0dHJpYnV0ZSB0aGF0J3MgYXBwbGllZCB0byBhIGNvbnRhaW5lciBpbnN0YW5jZSwgc3VjaCBhcyBgYGF0dHJpYnV0ZTplY3MuYXZhaWxhYmlsaXR5LXpvbmVgYC4gRm9yIHRoZSBgYGJpbnBhY2tgYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHZhbGlkIHZhbHVlcyBhcmUgYGBjcHVgYCBhbmQgYGBtZW1vcnlgYC4gRm9yIHRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSwgdGhpcyBmaWVsZCBpcyBub3QgdXNlZC5cbiAqL1xuRmllbGQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgcGxhY2VtZW50IHN0cmF0ZWd5LiBUaGUgYGByYW5kb21gYCBwbGFjZW1lbnQgc3RyYXRlZ3kgcmFuZG9tbHkgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzLiBUaGUgYGBzcHJlYWRgYCBwbGFjZW1lbnQgc3RyYXRlZ3kgc3ByZWFkcyBwbGFjZW1lbnQgYWNyb3NzIGF2YWlsYWJsZSBjYW5kaWRhdGVzIGV2ZW5seSBiYXNlZCBvbiB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gVGhlIGBgYmlucGFja2BgIHN0cmF0ZWd5IHBsYWNlcyB0YXNrcyBvbiBhdmFpbGFibGUgY2FuZGlkYXRlcyB0aGF0IGhhdmUgdGhlIGxlYXN0IGF2YWlsYWJsZSBhbW91bnQgb2YgdGhlIHJlc291cmNlIHRoYXQncyBzcGVjaWZpZWQgd2l0aCB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUsIGlmIHlvdSBiaW5wYWNrIG9uIG1lbW9yeSwgYSB0YXNrIGlzIHBsYWNlZCBvbiB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHJlbWFpbmluZyBtZW1vcnkgYnV0IHN0aWxsIGVub3VnaCB0byBydW4gdGhlIHRhc2suXG4gKi9cblR5cGU6IChcImJpbnBhY2tcIiB8IFwicmFuZG9tXCIgfCBcInNwcmVhZFwiKVxufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBmb3IgdGhlIHNlcnZpY2UgcmVnaXN0cnkuXG4gKiAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGFyZSBub3Qgc3VwcG9ydGVkLlxuICogIFdoZW4geW91IGFkZCwgdXBkYXRlLCBvciByZW1vdmUgdGhlIHNlcnZpY2UgcmVnaXN0cmllcyBjb25maWd1cmF0aW9uLCBBbWF6b24gRUNTIHN0YXJ0cyBhIG5ldyBkZXBsb3ltZW50LiBOZXcgdGFza3MgYXJlIHJlZ2lzdGVyZWQgYW5kIGRlcmVnaXN0ZXJlZCB0byB0aGUgdXBkYXRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVJlZ2lzdHJ5IHtcbi8qKlxuICogVGhlIGNvbnRhaW5lciBuYW1lIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZS4gSXQncyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdXNlZCBpZiB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2Ugc3BlY2lmaWVkIGFuIFNSViByZWNvcmQuIFRoaXMgZmllbGQgbWlnaHQgYmUgdXNlZCBpZiBib3RoIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgU1JWIHJlY29yZHMgYXJlIHVzZWQuXG4gKi9cblBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24geW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIGEgdHlwZSBTUlYgRE5TIHJlY29yZCBpcyB1c2VkLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBvciBhIGBgcG9ydGBgIHZhbHVlLiBIb3dldmVyLCB5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VydmljZSByZWdpc3RyeS4gVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgc2VydmljZSByZWdpc3RyeSBpcyBDTUFQLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGVTZXJ2aWNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbCkuXG4gKi9cblJlZ2lzdHJ5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhIHZvbHVtZSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhcyBhIHZvbHVtZSB0aGF0IGlzIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZvbHVtZSB0eXBlIGlzIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uIHtcbk1hbmFnZWRFQlNWb2x1bWU/OiBTZXJ2aWNlTWFuYWdlZEVCU1ZvbHVtZUNvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHZvbHVtZS4gVGhpcyB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgbmFtZSBmcm9tIHRoZSBgYFZvbHVtZWBgIG9iamVjdCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBbWF6b24gRUJTIHZvbHVtZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBhbmQgbWFuYWdlcyBvbiB5b3VyIGJlaGFsZi4gVGhlc2Ugc2V0dGluZ3MgYXJlIHVzZWQgdG8gY3JlYXRlIGVhY2ggQW1hem9uIEVCUyB2b2x1bWUsIHdpdGggb25lIHZvbHVtZSBjcmVhdGVkIGZvciBlYWNoIHRhc2sgaW4gdGhlIHNlcnZpY2UuIFRoZSBBbWF6b24gRUJTIHZvbHVtZXMgYXJlIHZpc2libGUgaW4geW91ciBhY2NvdW50IGluIHRoZSBBbWF6b24gRUMyIGNvbnNvbGUgb25jZSB0aGV5IGFyZSBjcmVhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzbmFwc2hvdCB0aGF0IEFtYXpvbiBFQ1MgdXNlcyB0byBjcmVhdGUgdGhlIHZvbHVtZS4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBzbmFwc2hvdCBJRCBvciBhIHZvbHVtZSBzaXplLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFNuYXBzaG90SWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblNuYXBzaG90SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZvbHVtZSB0eXBlLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFZvbHVtZVR5cGVgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQlMgdm9sdW1lIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSouXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2b2x1bWUgdHlwZXMuXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSBTU0Q6IGBgZ3AyYGB8YGBncDNgYCBcbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBTU0Q6IGBgaW8xYGB8YGBpbzJgYCBcbiAqICAgKyAgVGhyb3VnaHB1dCBPcHRpbWl6ZWQgSEREOiBgYHN0MWBgIFxuICogICArICBDb2xkIEhERDogYGBzYzFgYCBcbiAqICAgKyAgTWFnbmV0aWM6IGBgc3RhbmRhcmRgYCBcbiAqICAgVGhlIG1hZ25ldGljIHZvbHVtZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgb24gRmFyZ2F0ZS5cbiAqL1xuVm9sdW1lVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgaWRlbnRpZmllciBvZiB0aGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IHRvIHVzZSBmb3IgQW1hem9uIEVCUyBlbmNyeXB0aW9uLiBXaGVuIGVuY3J5cHRpb24gaXMgdHVybmVkIG9uIGFuZCBubyBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBBV1MgbWFuYWdlZCBrZXkgZm9yIEFtYXpvbiBFQlMgdm9sdW1lcyBpcyB1c2VkLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYEttc0tleUlkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogICAgQVdTIGF1dGhlbnRpY2F0ZXMgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSBhc3luY2hyb25vdXNseS4gVGhlcmVmb3JlLCBpZiB5b3Ugc3BlY2lmeSBhbiBJRCwgYWxpYXMsIG9yIEFSTiB0aGF0IGlzIGludmFsaWQsIHRoZSBhY3Rpb24gY2FuIGFwcGVhciB0byBjb21wbGV0ZSwgYnV0IGV2ZW50dWFsbHkgZmFpbHMuXG4gKi9cbkttc0tleUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSB2b2x1bWUuIEFtYXpvbiBFQ1MgYXBwbGllcyBzZXJ2aWNlLW1hbmFnZWQgdGFncyBieSBkZWZhdWx0LiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRhZ1NwZWNpZmljYXRpb25zLk5gYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblRhZ1NwZWNpZmljYXRpb25zPzogRUJTVGFnU3BlY2lmaWNhdGlvbltdXG4vKipcbiAqIFRoZSBMaW51eCBmaWxlc3lzdGVtIHR5cGUgZm9yIHRoZSB2b2x1bWUuIEZvciB2b2x1bWVzIGNyZWF0ZWQgZnJvbSBhIHNuYXBzaG90LCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBzYW1lIGZpbGVzeXN0ZW0gdHlwZSB0aGF0IHRoZSB2b2x1bWUgd2FzIHVzaW5nIHdoZW4gdGhlIHNuYXBzaG90IHdhcyBjcmVhdGVkLiBJZiB0aGVyZSBpcyBhIGZpbGVzeXN0ZW0gdHlwZSBtaXNtYXRjaCwgdGhlIHRhc2sgd2lsbCBmYWlsIHRvIHN0YXJ0LlxuICogIFRoZSBhdmFpbGFibGUgZmlsZXN5c3RlbSB0eXBlcyBhcmXigKggYGBleHQzYGAsIGBgZXh0NGBgLCBhbmQgYGB4ZnNgYC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgYGB4ZnNgYCBmaWxlc3lzdGVtIHR5cGUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICovXG5GaWxlc3lzdGVtVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdm9sdW1lIHNob3VsZCBiZSBlbmNyeXB0ZWQuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgZW5jcnlwdGlvbiBpcyB0dXJuZWQgb24gYnkgZGVmYXVsdC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBFbmNyeXB0ZWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cbkVuY3J5cHRlZD86IGJvb2xlYW5cbi8qKlxuICogVGhlIHRocm91Z2hwdXQgdG8gcHJvdmlzaW9uIGZvciBhIHZvbHVtZSwgaW4gTWlCL3MsIHdpdGggYSBtYXhpbXVtIG9mIDEsMDAwIE1pQi9zLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRocm91Z2hwdXRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB0aGUgYGBncDNgYCB2b2x1bWUgdHlwZS5cbiAqL1xuVGhyb3VnaHB1dD86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpLiBGb3IgYGBncDNgYCwgYGBpbzFgYCwgYW5kIGBgaW8yYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgSU9QUyB0aGF0IGFyZSBwcm92aXNpb25lZCBmb3IgdGhlIHZvbHVtZS4gRm9yIGBgZ3AyYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBiYXNlbGluZSBwZXJmb3JtYW5jZSBvZiB0aGUgdm9sdW1lIGFuZCB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgdm9sdW1lIGFjY3VtdWxhdGVzIEkvTyBjcmVkaXRzIGZvciBidXJzdGluZy5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZS5cbiAqICAgKyAgIGBgZ3AzYGA6IDMsMDAwIC0gMTYsMDAwIElPUFNcbiAqICAgKyAgIGBgaW8xYGA6IDEwMCAtIDY0LDAwMCBJT1BTXG4gKiAgICsgICBgYGlvMmBgOiAxMDAgLSAyNTYsMDAwIElPUFNcbiAqICAgXG4gKiAgVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIGBgaW8xYGAgYW5kIGBgaW8yYGAgdm9sdW1lIHR5cGVzLiBUaGUgZGVmYXVsdCBmb3IgYGBncDNgYCB2b2x1bWVzIGlzIGBgMywwMDAgSU9QU2BgLiBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBgYHN0MWBgLCBgYHNjMWBgLCBvciBgYHN0YW5kYXJkYGAgdm9sdW1lIHR5cGVzLlxuICogIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgSW9wc2BgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuSW9wcz86IG51bWJlclxuLyoqXG4gKiBUaGUgc2l6ZSBvZiB0aGUgdm9sdW1lIGluIEdpQi4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSB2b2x1bWUgc2l6ZSBvciBhIHNuYXBzaG90IElELiBJZiB5b3Ugc3BlY2lmeSBhIHNuYXBzaG90IElELCB0aGUgc25hcHNob3Qgc2l6ZSBpcyB1c2VkIGZvciB0aGUgdm9sdW1lIHNpemUgYnkgZGVmYXVsdC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSB2b2x1bWUgc2l6ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNuYXBzaG90IHNpemUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgU2l6ZWBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZvbHVtZSBzaXplIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZS5cbiAqICAgKyAgIGBgZ3AyYGAgYW5kIGBgZ3AzYGA6IDEtMTYsMzg0XG4gKiAgICsgICBgYGlvMWBgIGFuZCBgYGlvMmBgOiA0LTE2LDM4NFxuICogICArICAgYGBzdDFgYCBhbmQgYGBzYzFgYDogMTI1LTE2LDM4NFxuICogICArICAgYGBzdGFuZGFyZGBgOiAxLTEsMDI0XG4gKi9cblNpemVJbkdpQj86IG51bWJlclxuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHZvbHVtZS4gVGhpcyBpcyB0aGUgQW1hem9uIEVDUyBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gbWFuYWdlIHlvdXIgQVdTIGluZnJhc3RydWN0dXJlLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIEFtYXpvbiBFQ1MtbWFuYWdlZCBgYEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZvbHVtZXNgYCBJQU0gcG9saWN5IHdpdGggdGhpcyByb2xlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIGluZnJhc3RydWN0dXJlIElBTSByb2xlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9pbmZyYXN0cnVjdHVyZV9JQU1fcm9sZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQ1MgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSB0YWcgc3BlY2lmaWNhdGlvbnMgb2YgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUJTVGFnU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIOKAqHRoZSBBbWF6b24gRUJTIHZvbHVtZS4gVGFncyBjYW4gb25seSBwcm9wYWdhdGUgdG8gYSBgYFNFUlZJQ0VgYCBzcGVjaWZpZWQgaW4g4oCoYGBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbmBgLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCDigKhwcm9wYWdhdGVkLlxuICovXG5Qcm9wYWdhdGVUYWdzPzogKFwiU0VSVklDRVwiIHwgXCJUQVNLX0RFRklOSVRJT05cIilcbi8qKlxuICogVGhlIHR5cGUgb2Ygdm9sdW1lIHJlc291cmNlLlxuICovXG5SZXNvdXJjZVR5cGU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyBhcHBsaWVkIHRvIHRoaXMgQW1hem9uIEVCUyB2b2x1bWUuIGBgQW1hem9uRUNTQ3JlYXRlZGBgIGFuZCBgYEFtYXpvbkVDU01hbmFnZWRgYCBhcmUgcmVzZXJ2ZWQgdGFncyB0aGF0IGNhbid0IGJlIHVzZWQuXG4gKi9cblRhZ3M/OiBUYWdbXVxufVxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gYSByZXNvdXJjZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUuIFlvdSBkZWZpbmUgdGhlbS5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSBvcHRpb25hbCBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBgdmFsdWVgYCBhY3RzIGFzIGEgZGVzY3JpcHRvciB3aXRoaW4gYSB0YWcgY2F0ZWdvcnkgKGtleSkuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIE9uZSBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBga2V5YGAgaXMgYSBnZW5lcmFsIGxhYmVsIHRoYXQgYWN0cyBsaWtlIGEgY2F0ZWdvcnkgZm9yIG1vcmUgc3BlY2lmaWMgdGFnIHZhbHVlcy5cbiAqL1xuS2V5Pzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGJlIHNldCB3aGVuIHVzaW5nIHRoZSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBBUElzIG9yIGFzIHRoZSBkZWZhdWx0IGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGZvciBhIGNsdXN0ZXIgd2l0aCB0aGUgYGBDcmVhdGVDbHVzdGVyYGAgQVBJLlxuICogIE9ubHkgY2FwYWNpdHkgcHJvdmlkZXJzIHRoYXQgYXJlIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciBhbmQgaGF2ZSBhbiBgYEFDVElWRWBgIG9yIGBgVVBEQVRJTkdgYCBzdGF0dXMgY2FuIGJlIHVzZWQgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS4gVGhlIGBgUHV0Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJzYGAgQVBJIGlzIHVzZWQgdG8gYXNzb2NpYXRlIGEgY2FwYWNpdHkgcHJvdmlkZXIgd2l0aCBhIGNsdXN0ZXIuXG4gKiAgSWYgc3BlY2lmeWluZyBhIGNhcGFjaXR5IHByb3ZpZGVyIHRoYXQgdXNlcyBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAsIHRoZSBjYXBhY2l0eSBwcm92aWRlciBtdXN0IGFscmVhZHkgYmUgY3JlYXRlZC4gTmV3IEF1dG8gU2NhbGluZyBncm91cCBjYXBhY2l0eSBwcm92aWRlcnMgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgYGBDcmVhdGVDYXBhY2l0eVByb3ZpZGVyYGAgQVBJIG9wZXJhdGlvbi5cbiAqICBUbyB1c2UgYW4gRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXIsIHNwZWNpZnkgZWl0aGVyIHRoZSBgYEZBUkdBVEVgYCBvciBgYEZBUkdBVEVfU1BPVGBgIGNhcGFjaXR5IHByb3ZpZGVycy4gVGhlIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIHRvIGFsbCBhY2NvdW50cyBhbmQgb25seSBuZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgdG8gYmUgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW0ge1xuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXIuXG4gKi9cbkNhcGFjaXR5UHJvdmlkZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlICpiYXNlKiB2YWx1ZSBkZXNpZ25hdGVzIGhvdyBtYW55IHRhc2tzLCBhdCBhIG1pbmltdW0sIHRvIHJ1biBvbiB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBPbmx5IG9uZSBjYXBhY2l0eSBwcm92aWRlciBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBoYXZlIGEgKmJhc2UqIGRlZmluZWQuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC5cbiAqL1xuQmFzZT86IG51bWJlclxuLyoqXG4gKiBUaGUgKndlaWdodCogdmFsdWUgZGVzaWduYXRlcyB0aGUgcmVsYXRpdmUgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIHRhc2tzIGxhdW5jaGVkIHRoYXQgc2hvdWxkIHVzZSB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBUaGUgYGB3ZWlnaHRgYCB2YWx1ZSBpcyB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gYWZ0ZXIgdGhlIGBgYmFzZWBgIHZhbHVlLCBpZiBkZWZpbmVkLCBpcyBzYXRpc2ZpZWQuXG4gKiAgSWYgbm8gYGB3ZWlnaHRgYCB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuIFdoZW4gbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBzcGVjaWZpZWQgd2l0aGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3ksIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXJzIG11c3QgaGF2ZSBhIHdlaWdodCB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBhbmQgYW55IGNhcGFjaXR5IHByb3ZpZGVycyB3aXRoIGEgd2VpZ2h0IG9mIGBgMGBgIGNhbid0IGJlIHVzZWQgdG8gcGxhY2UgdGFza3MuIElmIHlvdSBzcGVjaWZ5IG11bHRpcGxlIGNhcGFjaXR5IHByb3ZpZGVycyBpbiBhIHN0cmF0ZWd5IHRoYXQgYWxsIGhhdmUgYSB3ZWlnaHQgb2YgYGAwYGAsIGFueSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBhY3Rpb25zIHVzaW5nIHRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB3aWxsIGZhaWwuXG4gKiAgQW4gZXhhbXBsZSBzY2VuYXJpbyBmb3IgdXNpbmcgd2VpZ2h0cyBpcyBkZWZpbmluZyBhIHN0cmF0ZWd5IHRoYXQgY29udGFpbnMgdHdvIGNhcGFjaXR5IHByb3ZpZGVycyBhbmQgYm90aCBoYXZlIGEgd2VpZ2h0IG9mIGBgMWBgLCB0aGVuIHdoZW4gdGhlIGBgYmFzZWBgIGlzIHNhdGlzZmllZCwgdGhlIHRhc2tzIHdpbGwgYmUgc3BsaXQgZXZlbmx5IGFjcm9zcyB0aGUgdHdvIGNhcGFjaXR5IHByb3ZpZGVycy4gVXNpbmcgdGhhdCBzYW1lIGxvZ2ljLCBpZiB5b3Ugc3BlY2lmeSBhIHdlaWdodCBvZiBgYDFgYCBmb3IgKmNhcGFjaXR5UHJvdmlkZXJBKiBhbmQgYSB3ZWlnaHQgb2YgYGA0YGAgZm9yICpjYXBhY2l0eVByb3ZpZGVyQiosIHRoZW4gZm9yIGV2ZXJ5IG9uZSB0YXNrIHRoYXQncyBydW4gdXNpbmcgKmNhcGFjaXR5UHJvdmlkZXJBKiwgZm91ciB0YXNrcyB3b3VsZCB1c2UgKmNhcGFjaXR5UHJvdmlkZXJCKi5cbiAqL1xuV2VpZ2h0PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZXJ2aWNlLiBUaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgdGFzayBkZWZpbml0aW9ucyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgdG8gcmVjZWl2ZSB0aGVpciBvd24gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgYW5kIGl0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG90aGVyIG5ldHdvcmsgbW9kZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgTmV0d29ya2luZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1uZXR3b3JraW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrQ29uZmlndXJhdGlvbiB7XG5Bd3N2cGNDb25maWd1cmF0aW9uPzogQXdzVnBjQ29uZmlndXJhdGlvblxufVxuLyoqXG4gKiBUaGUgVlBDIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3VwcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSB0YXNrLlxuICogICBBbGwgc3BlY2lmaWVkIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c1ZwY0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgSURzIG9mIHRoZSBzZWN1cml0eSBncm91cHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgc2VjdXJpdHkgZ3JvdXAsIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGdyb3VwIGZvciB0aGUgVlBDIGlzIHVzZWQuIFRoZXJlJ3MgYSBsaW1pdCBvZiA1IHNlY3VyaXR5IGdyb3VwcyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgcGVyIGBgYXdzdnBjQ29uZmlndXJhdGlvbmBgLlxuICogICBBbGwgc3BlY2lmaWVkIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHN1Ym5ldHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIFRoZXJlJ3MgYSBsaW1pdCBvZiAxNiBzdWJuZXRzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBwZXIgYGBhd3N2cGNDb25maWd1cmF0aW9uYGAuXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TdWJuZXRzPzogc3RyaW5nW11cbi8qKlxuICogV2hldGhlciB0aGUgdGFzaydzIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UgcmVjZWl2ZXMgYSBwdWJsaWMgSVAgYWRkcmVzcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGBESVNBQkxFRGBgLlxuICovXG5Bc3NpZ25QdWJsaWNJcD86IChcIkRJU0FCTEVEXCIgfCBcIkVOQUJMRURcIilcbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGNvbnN0cmFpbnQgb24gdGFzayBwbGFjZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLXBsYWNlbWVudC1jb25zdHJhaW50cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdSdyZSB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgYXJlbid0IHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRDb25zdHJhaW50IHtcbi8qKlxuICogVGhlIHR5cGUgb2YgY29uc3RyYWludC4gVXNlIGBgZGlzdGluY3RJbnN0YW5jZWBgIHRvIGVuc3VyZSB0aGF0IGVhY2ggdGFzayBpbiBhIHBhcnRpY3VsYXIgZ3JvdXAgaXMgcnVubmluZyBvbiBhIGRpZmZlcmVudCBjb250YWluZXIgaW5zdGFuY2UuIFVzZSBgYG1lbWJlck9mYGAgdG8gcmVzdHJpY3QgdGhlIHNlbGVjdGlvbiB0byBhIGdyb3VwIG9mIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblR5cGU6IChcImRpc3RpbmN0SW5zdGFuY2VcIiB8IFwibWVtYmVyT2ZcIilcbi8qKlxuICogQSBjbHVzdGVyIHF1ZXJ5IGxhbmd1YWdlIGV4cHJlc3Npb24gdG8gYXBwbHkgdG8gdGhlIGNvbnN0cmFpbnQuIFRoZSBleHByZXNzaW9uIGNhbiBoYXZlIGEgbWF4aW11bSBsZW5ndGggb2YgMjAwMCBjaGFyYWN0ZXJzLiBZb3UgY2FuJ3Qgc3BlY2lmeSBhbiBleHByZXNzaW9uIGlmIHRoZSBjb25zdHJhaW50IHR5cGUgaXMgYGBkaXN0aW5jdEluc3RhbmNlYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NsdXN0ZXIgcXVlcnkgbGFuZ3VhZ2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NsdXN0ZXItcXVlcnktbGFuZ3VhZ2UuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5FeHByZXNzaW9uPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYExvYWRCYWxhbmNlcmBgIHByb3BlcnR5IHNwZWNpZmllcyBkZXRhaWxzIG9uIGEgbG9hZCBiYWxhbmNlciB0aGF0IGlzIHVzZWQgd2l0aCBhIHNlcnZpY2UuXG4gKiAgSWYgdGhlIHNlcnZpY2UgaXMgdXNpbmcgdGhlIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHRoZSBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRvIHVzZSBlaXRoZXIgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIFdoZW4geW91IGFyZSBjcmVhdGluZyBhbiBBQ0Rsb25nIGRlcGxveW1lbnQgZ3JvdXAsIHlvdSBzcGVjaWZ5IHR3byB0YXJnZXQgZ3JvdXBzIChyZWZlcnJlZCB0byBhcyBhIGBgdGFyZ2V0R3JvdXBQYWlyYGApLiBFYWNoIHRhcmdldCBncm91cCBiaW5kcyB0byBhIHNlcGFyYXRlIHRhc2sgc2V0IGluIHRoZSBkZXBsb3ltZW50LiBUaGUgbG9hZCBiYWxhbmNlciBjYW4gYWxzbyBoYXZlIHVwIHRvIHR3byBsaXN0ZW5lcnMsIGEgcmVxdWlyZWQgbGlzdGVuZXIgZm9yIHByb2R1Y3Rpb24gdHJhZmZpYyBhbmQgYW4gb3B0aW9uYWwgbGlzdGVuZXIgdGhhdCBhbGxvd3MgeW91IHRvIHRlc3QgbmV3IHJldmlzaW9ucyBvZiB0aGUgc2VydmljZSBiZWZvcmUgcm91dGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gaXQuXG4gKiAgU2VydmljZXMgd2l0aCB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgKGZvciBleGFtcGxlLCB0aG9zZSB3aXRoIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlKSBvbmx5IHN1cHBvcnQgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcnMgYW5kIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnMuIENsYXNzaWMgTG9hZCBCYWxhbmNlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIEFsc28sIHdoZW4geW91IGNyZWF0ZSBhbnkgdGFyZ2V0IGdyb3VwcyBmb3IgdGhlc2Ugc2VydmljZXMsIHlvdSBtdXN0IGNob29zZSBgYGlwYGAgYXMgdGhlIHRhcmdldCB0eXBlLCBub3QgYGBpbnN0YW5jZWBgLiBUYXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkQmFsYW5jZXIge1xuLyoqXG4gKiBUaGUgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCBhIHNlcnZpY2Ugb3IgdGFzayBzZXQuXG4gKiAgQSB0YXJnZXQgZ3JvdXAgQVJOIGlzIG9ubHkgc3BlY2lmaWVkIHdoZW4gdXNpbmcgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIFxuICogIEZvciBzZXJ2aWNlcyB1c2luZyB0aGUgYGBFQ1NgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb3IgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVnaXN0ZXJpbmcgbXVsdGlwbGUgdGFyZ2V0IGdyb3VwcyB3aXRoIGEgc2VydmljZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcmVnaXN0ZXItbXVsdGlwbGUtdGFyZ2V0Z3JvdXBzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3Igc2VydmljZXMgdXNpbmcgdGhlIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSdyZSByZXF1aXJlZCB0byBkZWZpbmUgdHdvIHRhcmdldCBncm91cHMgZm9yIHRoZSBsb2FkIGJhbGFuY2VyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCbHVlL2dyZWVuIGRlcGxveW1lbnQgd2l0aCBDb2RlRGVwbG95XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtYmx1ZWdyZWVuLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFzayBkZWZpbml0aW9uIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBjaG9vc2UgYGBpcGBgIGFzIHRoZSB0YXJnZXQgdHlwZSwgbm90IGBgaW5zdGFuY2VgYC4gRG8gdGhpcyB3aGVuIGNyZWF0aW5nIHlvdXIgdGFyZ2V0IGdyb3VwcyBiZWNhdXNlIHRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIG5vdCBhbiBBbWF6b24gRUMyIGluc3RhbmNlLiBUaGlzIG5ldHdvcmsgbW9kZSBpcyByZXF1aXJlZCBmb3IgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuXG4gKi9cblRhcmdldEdyb3VwQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsb2FkIGJhbGFuY2VyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugb3IgdGFzayBzZXQuXG4gKiAgSWYgeW91IGFyZSB1c2luZyBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIGEgTmV0d29yayBMb2FkIEJhbGFuY2VyIHRoZSBsb2FkIGJhbGFuY2VyIG5hbWUgcGFyYW1ldGVyIHNob3VsZCBiZSBvbWl0dGVkLlxuICovXG5Mb2FkQmFsYW5jZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgKGFzIGl0IGFwcGVhcnMgaW4gYSBjb250YWluZXIgZGVmaW5pdGlvbikgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuXG4gKiAgWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY29udGFpbmVyIG5hbWUgd2hlbiBjb25maWd1cmluZyB0aGUgdGFyZ2V0IGdyb3VwIGZvciBhbiBBbWF6b24gRUNTIGxvYWQgYmFsYW5jZXIuXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgb24gdGhlIGNvbnRhaW5lciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci4gVGhpcyBwb3J0IG11c3QgY29ycmVzcG9uZCB0byBhIGBgY29udGFpbmVyUG9ydGBgIGluIHRoZSB0YXNrIGRlZmluaXRpb24gdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIGFyZSB1c2luZy4gRm9yIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSBjb250YWluZXIgaW5zdGFuY2UgdGhleSdyZSBsYXVuY2hlZCBvbiBtdXN0IGFsbG93IGluZ3Jlc3MgdHJhZmZpYyBvbiB0aGUgYGBob3N0UG9ydGBgIG9mIHRoZSBwb3J0IG1hcHBpbmcuXG4gKi9cbkNvbnRhaW5lclBvcnQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgc2VydmljZSB0byBkaXNjb3ZlciBhbmQgY29ubmVjdCB0byBzZXJ2aWNlcywgYW5kIGJlIGRpc2NvdmVyZWQgYnksIGFuZCBjb25uZWN0ZWQgZnJvbSwgb3RoZXIgc2VydmljZXMgd2l0aGluIGEgbmFtZXNwYWNlLlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgbGlzdCBvZiBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZSBvYmplY3RzLiBUaGVzZSBhcmUgbmFtZXMgYW5kIGFsaWFzZXMgKGFsc28ga25vd24gYXMgZW5kcG9pbnRzKSB0aGF0IGFyZSB1c2VkIGJ5IG90aGVyIEFtYXpvbiBFQ1Mgc2VydmljZXMgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuIFxuICogIFRoaXMgZmllbGQgaXMgbm90IHJlcXVpcmVkIGZvciBhIFwiY2xpZW50XCIgQW1hem9uIEVDUyBzZXJ2aWNlIHRoYXQncyBhIG1lbWJlciBvZiBhIG5hbWVzcGFjZSBvbmx5IHRvIGNvbm5lY3QgdG8gb3RoZXIgc2VydmljZXMgd2l0aGluIHRoZSBuYW1lc3BhY2UuIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSBhIGZyb250ZW5kIGFwcGxpY2F0aW9uIHRoYXQgYWNjZXB0cyBpbmNvbWluZyByZXF1ZXN0cyBmcm9tIGVpdGhlciBhIGxvYWQgYmFsYW5jZXIgdGhhdCdzIGF0dGFjaGVkIHRvIHRoZSBzZXJ2aWNlIG9yIGJ5IG90aGVyIG1lYW5zLlxuICogIEFuIG9iamVjdCBzZWxlY3RzIGEgcG9ydCBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24sIGFzc2lnbnMgYSBuYW1lIGZvciB0aGUgQ01BUGxvbmcgc2VydmljZSwgYW5kIGEgbGlzdCBvZiBhbGlhc2VzIChlbmRwb2ludHMpIGFuZCBwb3J0cyBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byByZWZlciB0byB0aGlzIHNlcnZpY2UuXG4gKi9cblNlcnZpY2VzPzogU2VydmljZUNvbm5lY3RTZXJ2aWNlW11cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIFNlcnZpY2UgQ29ubmVjdCB3aXRoIHRoaXMgc2VydmljZS5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxuTG9nQ29uZmlndXJhdGlvbj86IExvZ0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWVzcGFjZSBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIENNQVBsb25nIG5hbWVzcGFjZSBmb3IgdXNlIHdpdGggU2VydmljZSBDb25uZWN0LiBUaGUgbmFtZXNwYWNlIG11c3QgYmUgaW4gdGhlIHNhbWUgQVdTIFJlZ2lvbiBhcyB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIGFuZCBjbHVzdGVyLiBUaGUgdHlwZSBvZiBuYW1lc3BhY2UgZG9lc24ndCBhZmZlY3QgU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDTUFQbG9uZywgc2VlIFtXb3JraW5nIHdpdGggU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2RnL3dvcmtpbmctd2l0aC1zZXJ2aWNlcy5odG1sKSBpbiB0aGUgKkRldmVsb3BlciBHdWlkZSouXG4gKi9cbk5hbWVzcGFjZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgU2VydmljZSBDb25uZWN0IHNlcnZpY2Ugb2JqZWN0IGNvbmZpZ3VyYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFNlcnZpY2Uge1xuVGltZW91dD86IFRpbWVvdXRDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBwb3J0IG51bWJlciBmb3IgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eSB0byBsaXN0ZW4gb24uXG4gKiAgVXNlIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIHRvIGJ5cGFzcyB0aGUgcHJveHkgZm9yIHRyYWZmaWMgb24gdGhlIHBvcnQgbnVtYmVyIHNwZWNpZmllZCBpbiB0aGUgbmFtZWQgYGBwb3J0TWFwcGluZ2BgIGluIHRoZSB0YXNrIGRlZmluaXRpb24gb2YgdGhpcyBhcHBsaWNhdGlvbiwgYW5kIHRoZW4gdXNlIGl0IGluIHlvdXIgVlBDIHNlY3VyaXR5IGdyb3VwcyB0byBhbGxvdyB0cmFmZmljIGludG8gdGhlIHByb3h5IGZvciB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqICBJbiBgYGF3c3ZwY2BgIG1vZGUgYW5kIEZhcmdhdGUsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBjb250YWluZXIgcG9ydCBudW1iZXIuIFRoZSBjb250YWluZXIgcG9ydCBudW1iZXIgaXMgaW4gdGhlIGBgcG9ydE1hcHBpbmdgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJbiBicmlkZ2UgbW9kZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGVwaGVtZXJhbCBwb3J0IG9mIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkuXG4gKi9cbkluZ3Jlc3NQb3J0T3ZlcnJpZGU/OiBudW1iZXJcbi8qKlxuICogVGhlIGxpc3Qgb2YgY2xpZW50IGFsaWFzZXMgZm9yIHRoaXMgU2VydmljZSBDb25uZWN0IHNlcnZpY2UuIFlvdSB1c2UgdGhlc2UgdG8gYXNzaWduIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucy4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNsaWVudCBhbGlhc2VzIHRoYXQgeW91IGNhbiBoYXZlIGluIHRoaXMgbGlzdCBpcyAxLlxuICogIEVhY2ggYWxpYXMgKFwiZW5kcG9pbnRcIikgaXMgYSBmdWxseS1xdWFsaWZpZWQgbmFtZSBhbmQgcG9ydCBudW1iZXIgdGhhdCBvdGhlciBBbWF6b24gRUNTIHRhc2tzIChcImNsaWVudHNcIikgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS5cbiAqICBFYWNoIG5hbWUgYW5kIHBvcnQgbWFwcGluZyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZS5cbiAqICBGb3IgZWFjaCBgYFNlcnZpY2VDb25uZWN0U2VydmljZWBgLCB5b3UgbXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSBgYGNsaWVudEFsaWFzYGAgd2l0aCBvbmUgYGBwb3J0YGAuXG4gKi9cbkNsaWVudEFsaWFzZXM/OiBTZXJ2aWNlQ29ubmVjdENsaWVudEFsaWFzW11cblRscz86IFNlcnZpY2VDb25uZWN0VGxzQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXMgdGhlIG5hbWUgb2YgdGhlIG5ldyBDTUFQIHNlcnZpY2UgdGhhdCBBbWF6b24gRUNTIGNyZWF0ZXMgZm9yIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLiBUaGlzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgQ01BUCBuYW1lc3BhY2UuIFRoZSBuYW1lIGNhbiBjb250YWluIHVwIHRvIDY0IGNoYXJhY3RlcnMuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcyAoXyksIGFuZCBoeXBoZW5zICgtKS4gVGhlIG5hbWUgY2FuJ3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi5cbiAqICBJZiB0aGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgcG9ydCBtYXBwaW5nIG5hbWUgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIGlzIHVzZWQgaW4gYGBwb3J0TmFtZS5uYW1lc3BhY2VgYC5cbiAqL1xuRGlzY292ZXJ5TmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYGBwb3J0TmFtZWBgIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBgYHBvcnRNYXBwaW5nc2BgIGZyb20gYWxsIHRoZSBjb250YWluZXJzIGluIHRoZSB0YXNrIGRlZmluaXRpb24gb2YgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKi9cblBvcnROYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgY29uZmlndXJlZCB0aW1lb3V0cyBmb3IgU2VydmljZSBDb25uZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIHdhaXRpbmcgZm9yIHRoZSB1cHN0cmVhbSB0byByZXNwb25kIHdpdGggYSBjb21wbGV0ZSByZXNwb25zZSBwZXIgcmVxdWVzdC4gQSB2YWx1ZSBvZiBgYDBgYCBjYW4gYmUgc2V0IHRvIGRpc2FibGUgYGBwZXJSZXF1ZXN0VGltZW91dGBgLiBgYHBlclJlcXVlc3RUaW1lb3V0YGAgY2FuIG9ubHkgYmUgc2V0IGlmIFNlcnZpY2UgQ29ubmVjdCBgYGFwcFByb3RvY29sYGAgaXNuJ3QgYGBUQ1BgYC4gT25seSBgYGlkbGVUaW1lb3V0YGAgaXMgYWxsb3dlZCBmb3IgYGBUQ1BgYCBgYGFwcFByb3RvY29sYGAuXG4gKi9cblBlclJlcXVlc3RUaW1lb3V0U2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyBhIGNvbm5lY3Rpb24gd2lsbCBzdGF5IGFjdGl2ZSB3aGlsZSBpZGxlLiBBIHZhbHVlIG9mIGBgMGBgIGNhbiBiZSBzZXQgdG8gZGlzYWJsZSBgYGlkbGVUaW1lb3V0YGAuXG4gKiAgVGhlIGBgaWRsZVRpbWVvdXRgYCBkZWZhdWx0IGZvciBgYEhUVFBgYC9gYEhUVFAyYGAvYGBHUlBDYGAgaXMgNSBtaW51dGVzLlxuICogIFRoZSBgYGlkbGVUaW1lb3V0YGAgZGVmYXVsdCBmb3IgYGBUQ1BgYCBpcyAxIGhvdXIuXG4gKi9cbklkbGVUaW1lb3V0U2Vjb25kcz86IG51bWJlclxufVxuLyoqXG4gKiBFYWNoIGFsaWFzIChcImVuZHBvaW50XCIpIGlzIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgYW5kIHBvcnQgbnVtYmVyIHRoYXQgb3RoZXIgdGFza3MgKFwiY2xpZW50c1wiKSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLlxuICogIEVhY2ggbmFtZSBhbmQgcG9ydCBtYXBwaW5nIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgbmFtZXNwYWNlLlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdENsaWVudEFsaWFzIHtcbi8qKlxuICogVGhlIGBgZG5zTmFtZWBgIGlzIHRoZSBuYW1lIHRoYXQgeW91IHVzZSBpbiB0aGUgYXBwbGljYXRpb25zIG9mIGNsaWVudCB0YXNrcyB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS4gVGhlIG5hbWUgbXVzdCBiZSBhIHZhbGlkIEROUyBuYW1lIGJ1dCBkb2Vzbid0IG5lZWQgdG8gYmUgZnVsbHktcXVhbGlmaWVkLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSB1cCB0byAxMjcgY2hhcmFjdGVycy4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIChfKSwgaHlwaGVucyAoLSksIGFuZCBwZXJpb2RzICguKS4gVGhlIG5hbWUgY2FuJ3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi5cbiAqICBJZiB0aGlzIHBhcmFtZXRlciBpc24ndCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgZGlzY292ZXJ5TmFtZS5uYW1lc3BhY2VgYCBpcyB1c2VkLiBJZiB0aGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgcG9ydCBtYXBwaW5nIG5hbWUgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIGlzIHVzZWQgaW4gYGBwb3J0TmFtZS5uYW1lc3BhY2VgYC5cbiAqICBUbyBhdm9pZCBjaGFuZ2luZyB5b3VyIGFwcGxpY2F0aW9ucyBpbiBjbGllbnQgQW1hem9uIEVDUyBzZXJ2aWNlcywgc2V0IHRoaXMgdG8gdGhlIHNhbWUgbmFtZSB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdXNlcyBieSBkZWZhdWx0LiBGb3IgZXhhbXBsZSwgYSBmZXcgY29tbW9uIG5hbWVzIGFyZSBgYGRhdGFiYXNlYGAsIGBgZGJgYCwgb3IgdGhlIGxvd2VyY2FzZSBuYW1lIG9mIGEgZGF0YWJhc2UsIHN1Y2ggYXMgYGBteXNxbGBgIG9yIGBgcmVkaXNgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5EbnNOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBsaXN0ZW5pbmcgcG9ydCBudW1iZXIgZm9yIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkuIFRoaXMgcG9ydCBpcyBhdmFpbGFibGUgaW5zaWRlIG9mIGFsbCBvZiB0aGUgdGFza3Mgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZS5cbiAqICBUbyBhdm9pZCBjaGFuZ2luZyB5b3VyIGFwcGxpY2F0aW9ucyBpbiBjbGllbnQgQW1hem9uIEVDUyBzZXJ2aWNlcywgc2V0IHRoaXMgdG8gdGhlIHNhbWUgcG9ydCB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdXNlcyBieSBkZWZhdWx0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblBvcnQ6IG51bWJlclxufVxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUbHNDb25maWd1cmF0aW9uIHtcbklzc3VlckNlcnRpZmljYXRlQXV0aG9yaXR5OiBTZXJ2aWNlQ29ubmVjdFRsc0NlcnRpZmljYXRlQXV0aG9yaXR5XG4vKipcbiAqIFRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkuXG4gKi9cbkttc0tleT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIFNlcnZpY2UgQ29ubmVjdCBUTFMuXG4gKi9cblJvbGVBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHNpZ25lciBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUbHNDZXJ0aWZpY2F0ZUF1dGhvcml0eSB7XG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSBjZXJ0aWZpY2F0ZS5cbiAqL1xuQXdzUGNhQXV0aG9yaXR5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYExvZ0NvbmZpZ2BgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWxvZy1kcml2ZXJgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICBCeSBkZWZhdWx0LCBjb250YWluZXJzIHVzZSB0aGUgc2FtZSBsb2dnaW5nIGRyaXZlciB0aGF0IHRoZSBEb2NrZXIgZGFlbW9uIHVzZXMuIEhvd2V2ZXIsIHRoZSBjb250YWluZXIgbWlnaHQgdXNlIGEgZGlmZmVyZW50IGxvZ2dpbmcgZHJpdmVyIHRoYW4gdGhlIERvY2tlciBkYWVtb24gYnkgc3BlY2lmeWluZyBhIGxvZyBkcml2ZXIgY29uZmlndXJhdGlvbiBpbiB0aGUgY29udGFpbmVyIGRlZmluaXRpb24uXG4gKiAgVW5kZXJzdGFuZCB0aGUgZm9sbG93aW5nIHdoZW4gc3BlY2lmeWluZyBhIGxvZyBjb25maWd1cmF0aW9uIGZvciB5b3VyIGNvbnRhaW5lcnMuXG4gKiAgICsgIEFtYXpvbiBFQ1MgY3VycmVudGx5IHN1cHBvcnRzIGEgc3Vic2V0IG9mIHRoZSBsb2dnaW5nIGRyaXZlcnMgYXZhaWxhYmxlIHRvIHRoZSBEb2NrZXIgZGFlbW9uLiBBZGRpdGlvbmFsIGxvZyBkcml2ZXJzIG1heSBiZSBhdmFpbGFibGUgaW4gZnV0dXJlIHJlbGVhc2VzIG9mIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudC5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCxgYHN5c2xvZ2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogICArICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTggb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IGFyZSBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBtdXN0IHJlZ2lzdGVyIHRoZSBhdmFpbGFibGUgbG9nZ2luZyBkcml2ZXJzIHdpdGggdGhlIGBgRUNTX0FWQUlMQUJMRV9MT0dHSU5HX0RSSVZFUlNgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWZvcmUgY29udGFpbmVycyBwbGFjZWQgb24gdGhhdCBpbnN0YW5jZSBjYW4gdXNlIHRoZXNlIGxvZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1hZ2VudC1jb25maWcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICArICBGb3IgdGFza3MgdGhhdCBhcmUgb24gRkFSR0FURWxvbmcsIGJlY2F1c2UgeW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIHlvdXIgdGFza3MgYXJlIGhvc3RlZCBvbiwgYW55IGFkZGl0aW9uYWwgc29mdHdhcmUgbmVlZGVkIG11c3QgYmUgaW5zdGFsbGVkIG91dHNpZGUgb2YgdGhlIHRhc2suIEZvciBleGFtcGxlLCB0aGUgRmx1ZW50ZCBvdXRwdXQgYWdncmVnYXRvcnMgb3IgYSByZW1vdGUgaG9zdCBydW5uaW5nIExvZ3N0YXNoIHRvIHNlbmQgR2VsZiBsb2dzIHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgc2VjcmV0cyB0byBwYXNzIHRvIHRoZSBsb2cgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblNlY3JldE9wdGlvbnM/OiBTZWNyZXRbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlbmQgdG8gdGhlIGxvZyBkcml2ZXIuIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOSBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS4gVG8gY2hlY2sgdGhlIERvY2tlciBSZW1vdGUgQVBJIHZlcnNpb24gb24geW91ciBjb250YWluZXIgaW5zdGFuY2UsIGxvZyBpbiB0byB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogYGBzdWRvIGRvY2tlciB2ZXJzaW9uIC0tZm9ybWF0ICd7ey5TZXJ2ZXIuQVBJVmVyc2lvbn19J2BgXG4gKi9cbk9wdGlvbnM/OiB7XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi57MSx9XCIuXG4gKi9cbltrOiBzdHJpbmddOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGxvZyBkcml2ZXIgdG8gdXNlIGZvciB0aGUgY29udGFpbmVyLlxuICogIEZvciB0YXNrcyBvbiBGQVJHQVRFbG9uZywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIHRhc2tzIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgZmx1ZW50ZGBgLCBgYGdlbGZgYCwgYGBqc29uLWZpbGVgYCwgYGBqb3VybmFsZGBgLCBgYHN5c2xvZ2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIHRoZSBgYGF3c2xvZ3NgYCBsb2cgZHJpdmVyLCBzZWUgW1NlbmQgQW1hem9uIEVDUyBsb2dzIHRvIENsb3VkV2F0Y2hdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nX2F3c2xvZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIHRoZSBgYGF3c2ZpcmVsZW5zYGAgbG9nIGRyaXZlciwgc2VlIFtTZW5kIEFtYXpvbiBFQ1MgbG9ncyB0byBhbiBzZXJ2aWNlIG9yIFBhcnRuZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nX2ZpcmVsZW5zLmh0bWwpLlxuICogICBJZiB5b3UgaGF2ZSBhIGN1c3RvbSBkcml2ZXIgdGhhdCBpc24ndCBsaXN0ZWQsIHlvdSBjYW4gZm9yayB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgcHJvamVjdCB0aGF0J3MgW2F2YWlsYWJsZSBvbiBHaXRIdWJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2dpdGh1Yi5jb20vYXdzL2FtYXpvbi1lY3MtYWdlbnQpIGFuZCBjdXN0b21pemUgaXQgdG8gd29yayB3aXRoIHRoYXQgZHJpdmVyLiBXZSBlbmNvdXJhZ2UgeW91IHRvIHN1Ym1pdCBwdWxsIHJlcXVlc3RzIGZvciBjaGFuZ2VzIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gaGF2ZSBpbmNsdWRlZC4gSG93ZXZlciwgd2UgZG9uJ3QgY3VycmVudGx5IHByb3ZpZGUgc3VwcG9ydCBmb3IgcnVubmluZyBtb2RpZmllZCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS5cbiAqL1xuTG9nRHJpdmVyPzogc3RyaW5nXG59XG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNlY3JldCB0byBleHBvc2UgdG8geW91ciBjb250YWluZXIuIFNlY3JldHMgY2FuIGJlIGV4cG9zZWQgdG8gYSBjb250YWluZXIgaW4gdGhlIGZvbGxvd2luZyB3YXlzOlxuICogICArICBUbyBpbmplY3Qgc2Vuc2l0aXZlIGRhdGEgaW50byB5b3VyIGNvbnRhaW5lcnMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCB1c2UgdGhlIGBgc2VjcmV0c2BgIGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlci5cbiAqICAgKyAgVG8gcmVmZXJlbmNlIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBpbiB0aGUgbG9nIGNvbmZpZ3VyYXRpb24gb2YgYSBjb250YWluZXIsIHVzZSB0aGUgYGBzZWNyZXRPcHRpb25zYGAgY29udGFpbmVyIGRlZmluaXRpb24gcGFyYW1ldGVyLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTcGVjaWZ5aW5nIHNlbnNpdGl2ZSBkYXRhXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXQge1xuLyoqXG4gKiBUaGUgc2VjcmV0IHRvIGV4cG9zZSB0byB0aGUgY29udGFpbmVyLiBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmUgZWl0aGVyIHRoZSBmdWxsIEFSTiBvZiB0aGUgQVNNbG9uZyBzZWNyZXQgb3IgdGhlIGZ1bGwgQVJOIG9mIHRoZSBwYXJhbWV0ZXIgaW4gdGhlIFNTTSBQYXJhbWV0ZXIgU3RvcmUuXG4gKiAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXF1aXJlIElBTWxvbmcgcGVybWlzc2lvbnMsIHNlZSBbUmVxdWlyZWQgSUFNIHBlcm1pc3Npb25zIGZvciBBbWF6b24gRUNTIHNlY3JldHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEtc2VjcmV0cy5odG1sI3NlY3JldHMtaWFtKSAoZm9yIFNlY3JldHMgTWFuYWdlcikgb3IgW1JlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIEVDUyBzZWNyZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLXBhcmFtZXRlcnMuaHRtbCkgKGZvciBTeXN0ZW1zIE1hbmFnZXIgUGFyYW1ldGVyIHN0b3JlKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHRoZSBTU00gUGFyYW1ldGVyIFN0b3JlIHBhcmFtZXRlciBleGlzdHMgaW4gdGhlIHNhbWUgUmVnaW9uIGFzIHRoZSB0YXNrIHlvdSdyZSBsYXVuY2hpbmcsIHRoZW4geW91IGNhbiB1c2UgZWl0aGVyIHRoZSBmdWxsIEFSTiBvciBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuIElmIHRoZSBwYXJhbWV0ZXIgZXhpc3RzIGluIGEgZGlmZmVyZW50IFJlZ2lvbiwgdGhlbiB0aGUgZnVsbCBBUk4gbXVzdCBiZSBzcGVjaWZpZWQuXG4gKi9cblZhbHVlRnJvbTogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQuXG4gKi9cbk5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGVwbG95bWVudCBjb250cm9sbGVyIHRvIHVzZSBmb3IgdGhlIHNlcnZpY2UuIElmIG5vIGRlcGxveW1lbnQgY29udHJvbGxlciBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgRUNTYGAgaXMgdXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q29udHJvbGxlciB7XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZSB0byB1c2UuIFRoZXJlIGFyZSB0aHJlZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMgYXZhaWxhYmxlOlxuICogICArIEVDUyBUaGUgcm9sbGluZyB1cGRhdGUgKEVDUykgZGVwbG95bWVudCB0eXBlIGludm9sdmVzIHJlcGxhY2luZyB0aGUgY3VycmVudCBydW5uaW5nIHZlcnNpb24gb2YgdGhlIGNvbnRhaW5lciB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbi4gVGhlIG51bWJlciBvZiBjb250YWluZXJzIEFtYXpvbiBFQ1MgYWRkcyBvciByZW1vdmVzIGZyb20gdGhlIHNlcnZpY2UgZHVyaW5nIGEgcm9sbGluZyB1cGRhdGUgaXMgY29udHJvbGxlZCBieSBhZGp1c3RpbmcgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gbnVtYmVyIG9mIGhlYWx0aHkgdGFza3MgYWxsb3dlZCBkdXJpbmcgYSBzZXJ2aWNlIGRlcGxveW1lbnQsIGFzIHNwZWNpZmllZCBpbiB0aGUgRGVwbG95bWVudENvbmZpZ3VyYXRpb24uICsgQ09ERV9ERVBMT1kgVGhlIGJsdWUvZ3JlZW4gKENPREVfREVQTE9ZKSBkZXBsb3ltZW50IHR5cGUgdXNlcyB0aGUgYmx1ZS9ncmVlbiBkZXBsb3ltZW50IG1vZGVsIHBvd2VyZWQgYnkgLCB3aGljaCBhbGxvd3MgeW91IHRvIHZlcmlmeSBhIG5ldyBkZXBsb3ltZW50IG9mIGEgc2VydmljZSBiZWZvcmUgc2VuZGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gaXQuICsgRVhURVJOQUwgVGhlIGV4dGVybmFsIChFWFRFUk5BTCkgZGVwbG95bWVudCB0eXBlIGVuYWJsZXMgeW91IHRvIHVzZSBhbnkgdGhpcmQtcGFydHkgZGVwbG95bWVudCBjb250cm9sbGVyIGZvciBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgZGVwbG95bWVudCBwcm9jZXNzIGZvciBhbiBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKi9cblR5cGU/OiAoXCJDT0RFX0RFUExPWVwiIHwgXCJFQ1NcIiB8IFwiRVhURVJOQUxcIilcbn1cbi8qKlxuICogT3B0aW9uYWwgZGVwbG95bWVudCBwYXJhbWV0ZXJzIHRoYXQgY29udHJvbCBob3cgbWFueSB0YXNrcyBydW4gZHVyaW5nIHRoZSBkZXBsb3ltZW50IGFuZCB0aGUgb3JkZXJpbmcgb2Ygc3RvcHBpbmcgYW5kIHN0YXJ0aW5nIHRhc2tzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDb25maWd1cmF0aW9uIHtcbkFsYXJtcz86IERlcGxveW1lbnRBbGFybXNcbkRlcGxveW1lbnRDaXJjdWl0QnJlYWtlcj86IERlcGxveW1lbnRDaXJjdWl0QnJlYWtlclxuLyoqXG4gKiBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgdGhlIHJvbGxpbmcgdXBkYXRlIChgYEVDU2BgKSBkZXBsb3ltZW50IHR5cGUsIHRoZSBgYG1heGltdW1QZXJjZW50YGAgcGFyYW1ldGVyIHJlcHJlc2VudHMgYW4gdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0aGF0IGFyZSBhbGxvd2VkIGluIHRoZSBgYFJVTk5JTkdgYCBvciBgYFBFTkRJTkdgYCBzdGF0ZSBkdXJpbmcgYSBkZXBsb3ltZW50LCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGBgZGVzaXJlZENvdW50YGAgKHJvdW5kZWQgZG93biB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKS4gVGhpcyBwYXJhbWV0ZXIgZW5hYmxlcyB5b3UgdG8gZGVmaW5lIHRoZSBkZXBsb3ltZW50IGJhdGNoIHNpemUuIEZvciBleGFtcGxlLCBpZiB5b3VyIHNlcnZpY2UgaXMgdXNpbmcgdGhlIGBgUkVQTElDQWBgIHNlcnZpY2Ugc2NoZWR1bGVyIGFuZCBoYXMgYSBgYGRlc2lyZWRDb3VudGBgIG9mIGZvdXIgdGFza3MgYW5kIGEgYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIG9mIDIwMCUsIHRoZSBzY2hlZHVsZXIgbWF5IHN0YXJ0IGZvdXIgbmV3IHRhc2tzIGJlZm9yZSBzdG9wcGluZyB0aGUgZm91ciBvbGRlciB0YXNrcyAocHJvdmlkZWQgdGhhdCB0aGUgY2x1c3RlciByZXNvdXJjZXMgcmVxdWlyZWQgdG8gZG8gdGhpcyBhcmUgYXZhaWxhYmxlKS4gVGhlIGRlZmF1bHQgYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdXNpbmcgdGhlIGBgUkVQTElDQWBgIHNlcnZpY2Ugc2NoZWR1bGVyIGlzIDIwMCUuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcywgYW5kIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBUaGUgKm1heGltdW0gcGVyY2VudCogdmFsdWUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHRoYXQgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSB3aGlsZSB0aGUgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgaW4gdGhlIGBgRFJBSU5JTkdgYCBzdGF0ZS5cbiAqICAgWW91IGNhbid0IHNwZWNpZnkgYSBjdXN0b20gYGBtYXhpbXVtUGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdGhhdCB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaGFzIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUuXG4gKiAgIElmIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB1c2UgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSBtYXhpbXVtIHBlcmNlbnQgdmFsdWUgaXMgbm90IHVzZWQsIGFsdGhvdWdoIGl0IGlzIHJldHVybmVkIHdoZW4gZGVzY3JpYmluZyB5b3VyIHNlcnZpY2UuXG4gKi9cbk1heGltdW1QZXJjZW50PzogbnVtYmVyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgcmVwcmVzZW50cyBhIGxvd2VyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGhhdCBtdXN0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgZHVyaW5nIGEgZGVwbG95bWVudCwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBgYGRlc2lyZWRDb3VudGBgIChyb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZXBsb3kgd2l0aG91dCB1c2luZyBhZGRpdGlvbmFsIGNsdXN0ZXIgY2FwYWNpdHkuIEZvciBleGFtcGxlLCBpZiB5b3VyIHNlcnZpY2UgaGFzIGEgYGBkZXNpcmVkQ291bnRgYCBvZiBmb3VyIHRhc2tzIGFuZCBhIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgb2YgNTAlLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgbWF5IHN0b3AgdHdvIGV4aXN0aW5nIHRhc2tzIHRvIGZyZWUgdXAgY2x1c3RlciBjYXBhY2l0eSBiZWZvcmUgc3RhcnRpbmcgdHdvIG5ldyB0YXNrcy4gXG4gKiAgRm9yIHNlcnZpY2VzIHRoYXQgKmRvIG5vdCogdXNlIGEgbG9hZCBiYWxhbmNlciwgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgbm90ZWQ6XG4gKiAgICsgIEEgc2VydmljZSBpcyBjb25zaWRlcmVkIGhlYWx0aHkgaWYgYWxsIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGhpbiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgcGFzcyB0aGVpciBoZWFsdGggY2hlY2tzLlxuICogICArICBJZiBhIHRhc2sgaGFzIG5vIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgNDAgc2Vjb25kcyBhZnRlciBhIHRhc2sgcmVhY2hlcyBhIGBgUlVOTklOR2BgIHN0YXRlIGJlZm9yZSB0aGUgdGFzayBpcyBjb3VudGVkIHRvd2FyZHMgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHRvdGFsLlxuICogICArICBJZiBhIHRhc2sgaGFzIG9uZSBvciBtb3JlIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgdGhlIHRhc2sgdG8gcmVhY2ggYSBoZWFsdGh5IHN0YXR1cyBiZWZvcmUgY291bnRpbmcgaXQgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuIEEgdGFzayBpcyBjb25zaWRlcmVkIGhlYWx0aHkgd2hlbiBhbGwgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSB0YXNrIGhhdmUgcGFzc2VkIHRoZWlyIGhlYWx0aCBjaGVja3MuIFRoZSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmljZSBzY2hlZHVsZXIgY2FuIHdhaXQgZm9yIGlzIGRldGVybWluZWQgYnkgdGhlIGNvbnRhaW5lciBoZWFsdGggY2hlY2sgc2V0dGluZ3MuIFxuICogICBcbiAqICBGb3Igc2VydmljZXMgdGhhdCAqZG8qIHVzZSBhIGxvYWQgYmFsYW5jZXIsIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIG5vdGVkOlxuICogICArICBJZiBhIHRhc2sgaGFzIG5vIGVzc2VudGlhbCBjb250YWluZXJzIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgdGhlIGxvYWQgYmFsYW5jZXIgdGFyZ2V0IGdyb3VwIGhlYWx0aCBjaGVjayB0byByZXR1cm4gYSBoZWFsdGh5IHN0YXR1cyBiZWZvcmUgY291bnRpbmcgdGhlIHRhc2sgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgYW4gZXNzZW50aWFsIGNvbnRhaW5lciB3aXRoIGEgaGVhbHRoIGNoZWNrIGRlZmluZWQsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciB3aWxsIHdhaXQgZm9yIGJvdGggdGhlIHRhc2sgdG8gcmVhY2ggYSBoZWFsdGh5IHN0YXR1cyBhbmQgdGhlIGxvYWQgYmFsYW5jZXIgdGFyZ2V0IGdyb3VwIGhlYWx0aCBjaGVjayB0byByZXR1cm4gYSBoZWFsdGh5IHN0YXR1cyBiZWZvcmUgY291bnRpbmcgdGhlIHRhc2sgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgIFxuICogIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBhIHJlcGxpY2Egc2VydmljZSBmb3IgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBpcyAxMDAlLiBUaGUgZGVmYXVsdCBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdXNpbmcgdGhlIGBgREFFTU9OYGAgc2VydmljZSBzY2hlZHVsZSBpcyAwJSBmb3IgdGhlIENMSSwgdGhlIEFXUyBTREtzLCBhbmQgdGhlIEFQSXMgYW5kIDUwJSBmb3IgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuXG4gKiAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIGhlYWx0aHkgdGFza3MgZHVyaW5nIGEgZGVwbG95bWVudCBpcyB0aGUgYGBkZXNpcmVkQ291bnRgYCBtdWx0aXBsaWVkIGJ5IHRoZSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgLzEwMCwgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHZhbHVlLlxuICogIElmIGEgc2VydmljZSBpcyB1c2luZyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGlzIHJ1bm5pbmcgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlICptaW5pbXVtIGhlYWx0aHkgcGVyY2VudCogdmFsdWUgaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBUaGUgKm1pbmltdW0gaGVhbHRoeSBwZXJjZW50KiB2YWx1ZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgbG93ZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgdGhhdCByZW1haW4gaW4gdGhlIGBgUlVOTklOR2BgIHN0YXRlIHdoaWxlIHRoZSBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBpbiB0aGUgYGBEUkFJTklOR2BgIHN0YXRlLlxuICogICBZb3UgY2FuJ3Qgc3BlY2lmeSBhIGN1c3RvbSBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIHZhbHVlIGZvciBhIHNlcnZpY2UgdGhhdCB1c2VzIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaGFzIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUuXG4gKiAgIElmIGEgc2VydmljZSBpcyB1c2luZyBlaXRoZXIgdGhlIGJsdWUvZ3JlZW4gKGBgQ09ERV9ERVBMT1lgYCkgb3IgYGBFWFRFUk5BTGBgIGRlcGxveW1lbnQgdHlwZXMgYW5kIGlzIHJ1bm5pbmcgdGFza3MgdGhhdCB1c2UgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB2YWx1ZSBpcyBub3QgdXNlZCwgYWx0aG91Z2ggaXQgaXMgcmV0dXJuZWQgd2hlbiBkZXNjcmliaW5nIHlvdXIgc2VydmljZS5cbiAqL1xuTWluaW11bUhlYWx0aHlQZXJjZW50PzogbnVtYmVyXG59XG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBDbG91ZFdhdGNoIGFsYXJtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50QWxhcm1zIHtcbi8qKlxuICogT25lIG9yIG1vcmUgQ2xvdWRXYXRjaCBhbGFybSBuYW1lcy4gVXNlIGEgXCIsXCIgdG8gc2VwYXJhdGUgdGhlIGFsYXJtcy5cbiAqL1xuQWxhcm1OYW1lczogc3RyaW5nW11cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgQ2xvdWRXYXRjaCBhbGFybSBvcHRpb24gaW4gdGhlIHNlcnZpY2UgZGVwbG95bWVudCBwcm9jZXNzLlxuICovXG5FbmFibGU6IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNvbmZpZ3VyZSBBbWF6b24gRUNTIHRvIHJvbGwgYmFjayB0aGUgc2VydmljZSBpZiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscy4gSWYgcm9sbGJhY2sgaXMgdXNlZCwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gKi9cblJvbGxiYWNrOiBib29sZWFuXG59XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciBjYW4gb25seSBiZSB1c2VkIGZvciBzZXJ2aWNlcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZS5cbiAqICAgVGhlICpkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciogZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc2VydmljZSBkZXBsb3ltZW50IHdpbGwgZmFpbCBpZiB0aGUgc2VydmljZSBjYW4ndCByZWFjaCBhIHN0ZWFkeSBzdGF0ZS4gSWYgeW91IHVzZSB0aGUgZGVwbG95bWVudCBjaXJjdWl0IGJyZWFrZXIsIGEgc2VydmljZSBkZXBsb3ltZW50IHdpbGwgdHJhbnNpdGlvbiB0byBhIGZhaWxlZCBzdGF0ZSBhbmQgc3RvcCBsYXVuY2hpbmcgbmV3IHRhc2tzLiBJZiB5b3UgdXNlIHRoZSByb2xsYmFjayBvcHRpb24sIHdoZW4gYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMsIHRoZSBzZXJ2aWNlIGlzIHJvbGxlZCBiYWNrIHRvIHRoZSBsYXN0IGRlcGxveW1lbnQgdGhhdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSb2xsaW5nIHVwZGF0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWVjcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50Q2lyY3VpdEJyZWFrZXIge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciBsb2dpYyBmb3IgdGhlIHNlcnZpY2UuXG4gKi9cbkVuYWJsZTogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29uZmlndXJlIEFtYXpvbiBFQ1MgdG8gcm9sbCBiYWNrIHRoZSBzZXJ2aWNlIGlmIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLiBJZiByb2xsYmFjayBpcyBvbiwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4gKi9cblJvbGxiYWNrOiBib29sZWFuXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgYEFXUzo6RUNTOjpTZXJ2aWNlYGAgcmVzb3VyY2UgY3JlYXRlcyBhbiBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoQW1hem9uIEVDUykgc2VydmljZSB0aGF0IHJ1bnMgYW5kIG1haW50YWlucyB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0YXNrcyBhbmQgYXNzb2NpYXRlZCBsb2FkIGJhbGFuY2Vycy5cbiAqICAgVGhlIHN0YWNrIHVwZGF0ZSBmYWlscyBpZiB5b3UgY2hhbmdlIGFueSBwcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSByZXBsYWNlbWVudCBhbmQgYXQgbGVhc3Qgb25lIEVDUyBTZXJ2aWNlIENvbm5lY3QgYGBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBwcm9wZXJ0eSB0aGUgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VDb25uZWN0U2VydmljZWBgIG11c3QgaGF2ZSBhIG5hbWUgdGhhdCBpcyB1bmlxdWUgaW4gdGhlIG5hbWVzcGFjZS5cbiAqICAgIFN0YXJ0aW5nIEFwcmlsIDE1LCAyMDIzLCBBV1M7IHdpbGwgbm90IG9uYm9hcmQgbmV3IGN1c3RvbWVycyB0byBBbWF6b24gRWxhc3RpYyBJbmZlcmVuY2UgKEVJKSwgYW5kIHdpbGwgaGVscCBjdXJyZW50IGN1c3RvbWVycyBtaWdyYXRlIHRoZWlyIHdvcmtsb2FkcyB0byBvcHRpb25zIHRoYXQgb2ZmZXIgYmV0dGVyIHByaWNlIGFuZCBwZXJmb3JtYW5jZS4gQWZ0ZXIgQXByaWwgMTUsIDIwMjMsIG5ldyBjdXN0b21lcnMgd2lsbCBub3QgYmUgYWJsZSB0byBsYXVuY2ggaW5zdGFuY2VzIHdpdGggQW1hem9uIEVJIGFjY2VsZXJhdG9ycyBpbiBBbWF6b24gU2FnZU1ha2VyLCBFQ1MsIG9yIEVDMi4gSG93ZXZlciwgY3VzdG9tZXJzIHdobyBoYXZlIHVzZWQgQW1hem9uIEVJIGF0IGxlYXN0IG9uY2UgZHVyaW5nIHRoZSBwYXN0IDMwLWRheSBwZXJpb2QgYXJlIGNvbnNpZGVyZWQgY3VycmVudCBjdXN0b21lcnMgYW5kIHdpbGwgYmUgYWJsZSB0byBjb250aW51ZSB1c2luZyB0aGUgc2VydmljZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VDU19TRVJWSUNFIHtcbi8qKlxuICogVGhlIHBsYXRmb3JtIHZlcnNpb24gdGhhdCB5b3VyIHRhc2tzIGluIHRoZSBzZXJ2aWNlIGFyZSBydW5uaW5nIG9uLiBBIHBsYXRmb3JtIHZlcnNpb24gaXMgc3BlY2lmaWVkIG9ubHkgZm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLiBJZiBvbmUgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgYGBMQVRFU1RgYCBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHVzZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW3BsYXRmb3JtIHZlcnNpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9wbGF0Zm9ybV92ZXJzaW9ucy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblBsYXRmb3JtVmVyc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIHRoZSB0YXNrLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCBwcm9wYWdhdGVkLiBUYWdzIGNhbiBvbmx5IGJlIHByb3BhZ2F0ZWQgdG8gdGhlIHRhc2sgZHVyaW5nIHRhc2sgY3JlYXRpb24uIFRvIGFkZCB0YWdzIHRvIGEgdGFzayBhZnRlciB0YXNrIGNyZWF0aW9uLCB1c2UgdGhlIFtUYWdSZXNvdXJjZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9UYWdSZXNvdXJjZS5odG1sKSBBUEkgYWN0aW9uLlxuICogIFlvdSBtdXN0IHNldCB0aGlzIHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5PTkVgYCB3aGVuIHlvdSB1c2UgQ29zdCBFeHBsb3Jlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyB1c2FnZSByZXBvcnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2FnZS1yZXBvcnRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgZGVmYXVsdCBpcyBgYE5PTkVgYC5cbiAqL1xuUHJvcGFnYXRlVGFncz86IChcIlNFUlZJQ0VcIiB8IFwiVEFTS19ERUZJTklUSU9OXCIpXG5TZXJ2aWNlQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgb2JqZWN0cyB0byB1c2UgZm9yIHRhc2tzIGluIHlvdXIgc2VydmljZS4gWW91IGNhbiBzcGVjaWZ5IGEgbWF4aW11bSBvZiA1IHN0cmF0ZWd5IHJ1bGVzIGZvciBlYWNoIHNlcnZpY2UuXG4gKi9cblBsYWNlbWVudFN0cmF0ZWdpZXM/OiBQbGFjZW1lbnRTdHJhdGVneVtdXG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZWdpc3RyeSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgZGlzY292ZXJ5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWRpc2NvdmVyeS5odG1sKS5cbiAqICAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuU2VydmljZVJlZ2lzdHJpZXM/OiBTZXJ2aWNlUmVnaXN0cnlbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgYSB2b2x1bWUgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYXMgYSB2b2x1bWUgdGhhdCBpcyBjb25maWd1cmVkIGF0IGxhdW5jaCB0aW1lLiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCB2b2x1bWUgdHlwZSBpcyBhbiBBbWF6b24gRUJTIHZvbHVtZS5cbiAqL1xuVm9sdW1lQ29uZmlndXJhdGlvbnM/OiBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBzZXJ2aWNlLlxuICogIElmIGEgYGBjYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lgYCBpcyBzcGVjaWZpZWQsIHRoZSBgYGxhdW5jaFR5cGVgYCBwYXJhbWV0ZXIgbXVzdCBiZSBvbWl0dGVkLiBJZiBubyBgYGNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIG9yIGBgbGF1bmNoVHlwZWBgIGlzIHNwZWNpZmllZCwgdGhlIGBgZGVmYXVsdENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneWBgIGZvciB0aGUgY2x1c3RlciBpcyB1c2VkLlxuICogIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgbWF5IGNvbnRhaW4gYSBtYXhpbXVtIG9mIDYgY2FwYWNpdHkgcHJvdmlkZXJzLlxuICovXG5DYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3k/OiBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtW11cbi8qKlxuICogVGhlIGxhdW5jaCB0eXBlIG9uIHdoaWNoIHRvIHJ1biB5b3VyIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgTGF1bmNoIFR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5MYXVuY2hUeXBlPzogKFwiRUMyXCIgfCBcIkZBUkdBVEVcIiB8IFwiRVhURVJOQUxcIilcbk5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHNjaGVkdWxpbmcgc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjc19zZXJ2aWNlcy5odG1sKS5cbiAqICBUaGVyZSBhcmUgdHdvIHNlcnZpY2Ugc2NoZWR1bGVyIHN0cmF0ZWdpZXMgYXZhaWxhYmxlOlxuICogICArICAgYGBSRVBMSUNBYGAtVGhlIHJlcGxpY2Egc2NoZWR1bGluZyBzdHJhdGVneSBwbGFjZXMgYW5kIG1haW50YWlucyB0aGUgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MgYWNyb3NzIHlvdXIgY2x1c3Rlci4gQnkgZGVmYXVsdCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHNwcmVhZHMgdGFza3MgYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lcy4gWW91IGNhbiB1c2UgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ2llcyBhbmQgY29uc3RyYWludHMgdG8gY3VzdG9taXplIHRhc2sgcGxhY2VtZW50IGRlY2lzaW9ucy4gVGhpcyBzY2hlZHVsZXIgc3RyYXRlZ3kgaXMgcmVxdWlyZWQgaWYgdGhlIHNlcnZpY2UgdXNlcyB0aGUgYGBDT0RFX0RFUExPWWBgIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdHlwZXMuXG4gKiAgICsgICBgYERBRU1PTmBgLVRoZSBkYWVtb24gc2NoZWR1bGluZyBzdHJhdGVneSBkZXBsb3lzIGV4YWN0bHkgb25lIHRhc2sgb24gZWFjaCBhY3RpdmUgY29udGFpbmVyIGluc3RhbmNlIHRoYXQgbWVldHMgYWxsIG9mIHRoZSB0YXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyB0aGF0IHlvdSBzcGVjaWZ5IGluIHlvdXIgY2x1c3Rlci4gVGhlIHNlcnZpY2Ugc2NoZWR1bGVyIGFsc28gZXZhbHVhdGVzIHRoZSB0YXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyBmb3IgcnVubmluZyB0YXNrcyBhbmQgd2lsbCBzdG9wIHRhc2tzIHRoYXQgZG9uJ3QgbWVldCB0aGUgcGxhY2VtZW50IGNvbnN0cmFpbnRzLiBXaGVuIHlvdSdyZSB1c2luZyB0aGlzIHN0cmF0ZWd5LCB5b3UgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGEgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MsIGEgdGFzayBwbGFjZW1lbnQgc3RyYXRlZ3ksIG9yIHVzZSBTZXJ2aWNlIEF1dG8gU2NhbGluZyBwb2xpY2llcy5cbiAqICAgVGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUgb3IgdGhlIGBgQ09ERV9ERVBMT1lgYCBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCBjb250cm9sbGVyIHR5cGVzIGRvbid0IHN1cHBvcnQgdGhlIGBgREFFTU9OYGAgc2NoZWR1bGluZyBzdHJhdGVneS5cbiAqL1xuU2NoZWR1bGluZ1N0cmF0ZWd5PzogKFwiREFFTU9OXCIgfCBcIlJFUExJQ0FcIilcbk5ldHdvcmtDb25maWd1cmF0aW9uPzogTmV0d29ya0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG1ldGFkYXRhIHRoYXQgeW91IGFwcGx5IHRvIHRoZSBzZXJ2aWNlIHRvIGhlbHAgeW91IGNhdGVnb3JpemUgYW5kIG9yZ2FuaXplIHRoZW0uIEVhY2ggdGFnIGNvbnNpc3RzIG9mIGEga2V5IGFuZCBhbiBvcHRpb25hbCB2YWx1ZSwgYm90aCBvZiB3aGljaCB5b3UgZGVmaW5lLiBXaGVuIGEgc2VydmljZSBpcyBkZWxldGVkLCB0aGUgdGFncyBhcmUgZGVsZXRlZCBhcyB3ZWxsLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKi9cblRhZ3M/OiBUYWdbXVxuLyoqXG4gKiBUaGUgcGVyaW9kIG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgaWdub3JlcyB1bmhlYWx0aHkgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgaGVhbHRoIGNoZWNrcyBhZnRlciBhIHRhc2sgaGFzIGZpcnN0IHN0YXJ0ZWQuIFRoaXMgaXMgb25seSB1c2VkIHdoZW4geW91ciBzZXJ2aWNlIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGEgbG9hZCBiYWxhbmNlci4gSWYgeW91ciBzZXJ2aWNlIGhhcyBhIGxvYWQgYmFsYW5jZXIgZGVmaW5lZCBhbmQgeW91IGRvbid0IHNwZWNpZnkgYSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIHZhbHVlLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYDBgYCBpcyB1c2VkLlxuICogIElmIHlvdSBkbyBub3QgdXNlIGFuIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIGBgc3RhcnRQZXJpb2RgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGhlYWx0aCBjaGVjayBwYXJhbWV0ZXJzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtIZWFsdGggY2hlY2tdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfSGVhbHRoQ2hlY2suaHRtbCkuXG4gKiAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFza3MgdGFrZSBhIHdoaWxlIHRvIHN0YXJ0IGFuZCByZXNwb25kIHRvIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgaGVhbHRoIGNoZWNrcywgeW91IGNhbiBzcGVjaWZ5IGEgaGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCBvZiB1cCB0byAyLDE0Nyw0ODMsNjQ3IHNlY29uZHMgKGFib3V0IDY5IHllYXJzKS4gRHVyaW5nIHRoYXQgdGltZSwgdGhlIEFtYXpvbiBFQ1Mgc2VydmljZSBzY2hlZHVsZXIgaWdub3JlcyBoZWFsdGggY2hlY2sgc3RhdHVzLiBUaGlzIGdyYWNlIHBlcmlvZCBjYW4gcHJldmVudCB0aGUgc2VydmljZSBzY2hlZHVsZXIgZnJvbSBtYXJraW5nIHRhc2tzIGFzIHVuaGVhbHRoeSBhbmQgc3RvcHBpbmcgdGhlbSBiZWZvcmUgdGhleSBoYXZlIHRpbWUgdG8gY29tZSB1cC5cbiAqL1xuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFNlY29uZHM/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdHVybiBvbiBBbWF6b24gRUNTIG1hbmFnZWQgdGFncyBmb3IgdGhlIHRhc2tzIHdpdGhpbiB0aGUgc2VydmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFnZ2luZyB5b3VyIEFtYXpvbiBFQ1MgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtdXNpbmctdGFncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgV2hlbiB5b3UgdXNlIEFtYXpvbiBFQ1MgbWFuYWdlZCB0YWdzLCB5b3UgbmVlZCB0byBzZXQgdGhlIGBgcHJvcGFnYXRlVGFnc2BgIHJlcXVlc3QgcGFyYW1ldGVyLlxuICovXG5FbmFibGVFQ1NNYW5hZ2VkVGFncz86IGJvb2xlYW5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBleGVjdXRlIGNvbW1hbmQgZnVuY3Rpb25hbGl0eSBpcyB0dXJuZWQgb24gZm9yIHRoZSBzZXJ2aWNlLiBJZiBgYHRydWVgYCwgdGhlIGV4ZWN1dGUgY29tbWFuZCBmdW5jdGlvbmFsaXR5IGlzIHR1cm5lZCBvbiBmb3IgYWxsIGNvbnRhaW5lcnMgaW4gdGFza3MgYXMgcGFydCBvZiB0aGUgc2VydmljZS5cbiAqL1xuRW5hYmxlRXhlY3V0ZUNvbW1hbmQ/OiBib29sZWFuXG4vKipcbiAqIEFuIGFycmF5IG9mIHBsYWNlbWVudCBjb25zdHJhaW50IG9iamVjdHMgdG8gdXNlIGZvciB0YXNrcyBpbiB5b3VyIHNlcnZpY2UuIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgMTAgY29uc3RyYWludHMgZm9yIGVhY2ggdGFzay4gVGhpcyBsaW1pdCBpbmNsdWRlcyBjb25zdHJhaW50cyBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGFuZCB0aG9zZSBzcGVjaWZpZWQgYXQgcnVudGltZS5cbiAqL1xuUGxhY2VtZW50Q29uc3RyYWludHM/OiBQbGFjZW1lbnRDb25zdHJhaW50W11cbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgY2x1c3RlciB0aGF0IHlvdSBydW4geW91ciBzZXJ2aWNlIG9uLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBjbHVzdGVyLCB0aGUgZGVmYXVsdCBjbHVzdGVyIGlzIGFzc3VtZWQuXG4gKi9cbkNsdXN0ZXI/OiBzdHJpbmdcbi8qKlxuICogQSBsaXN0IG9mIGxvYWQgYmFsYW5jZXIgb2JqZWN0cyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmljZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgUm9sZWBgIHByb3BlcnR5LCBgYExvYWRCYWxhbmNlcnNgYCBtdXN0IGJlIHNwZWNpZmllZCBhcyB3ZWxsLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG51bWJlciBvZiBsb2FkIGJhbGFuY2VycyB0aGF0IHlvdSBjYW4gc3BlY2lmeSBwZXIgc2VydmljZSwgc2VlIFtTZXJ2aWNlIExvYWQgQmFsYW5jaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWxvYWQtYmFsYW5jaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTG9hZEJhbGFuY2Vycz86IExvYWRCYWxhbmNlcltdXG5TZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24/OiBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG51bWJlciBvZiBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc3BlY2lmaWVkIHRhc2sgZGVmaW5pdGlvbiB0byBwbGFjZSBhbmQga2VlcCBydW5uaW5nIGluIHlvdXIgc2VydmljZS5cbiAqICBGb3IgbmV3IHNlcnZpY2VzLCBpZiBhIGRlc2lyZWQgY291bnQgaXMgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IHZhbHVlIG9mIGBgMWBgIGlzIHVzZWQuIFdoZW4gdXNpbmcgdGhlIGBgREFFTU9OYGAgc2NoZWR1bGluZyBzdHJhdGVneSwgdGhlIGRlc2lyZWQgY291bnQgaXMgbm90IHJlcXVpcmVkLlxuICogIEZvciBleGlzdGluZyBzZXJ2aWNlcywgaWYgYSBkZXNpcmVkIGNvdW50IGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIG9taXR0ZWQgZnJvbSB0aGUgb3BlcmF0aW9uLlxuICovXG5EZXNpcmVkQ291bnQ/OiBudW1iZXJcbkRlcGxveW1lbnRDb250cm9sbGVyPzogRGVwbG95bWVudENvbnRyb2xsZXJcbi8qKlxuICogVGhlIG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgSUFNIHJvbGUgdGhhdCBhbGxvd3MgQW1hem9uIEVDUyB0byBtYWtlIGNhbGxzIHRvIHlvdXIgbG9hZCBiYWxhbmNlciBvbiB5b3VyIGJlaGFsZi4gVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBwZXJtaXR0ZWQgaWYgeW91IGFyZSB1c2luZyBhIGxvYWQgYmFsYW5jZXIgd2l0aCB5b3VyIHNlcnZpY2UgYW5kIHlvdXIgdGFzayBkZWZpbml0aW9uIGRvZXNuJ3QgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZS4gSWYgeW91IHNwZWNpZnkgdGhlIGBgcm9sZWBgIHBhcmFtZXRlciwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGEgbG9hZCBiYWxhbmNlciBvYmplY3Qgd2l0aCB0aGUgYGBsb2FkQmFsYW5jZXJzYGAgcGFyYW1ldGVyLlxuICogICBJZiB5b3VyIGFjY291bnQgaGFzIGFscmVhZHkgY3JlYXRlZCB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlLWxpbmtlZCByb2xlLCB0aGF0IHJvbGUgaXMgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIHVubGVzcyB5b3Ugc3BlY2lmeSBhIHJvbGUgaGVyZS4gVGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgaXMgcmVxdWlyZWQgaWYgeW91ciB0YXNrIGRlZmluaXRpb24gdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgb3IgaWYgdGhlIHNlcnZpY2UgaXMgY29uZmlndXJlZCB0byB1c2Ugc2VydmljZSBkaXNjb3ZlcnksIGFuIGV4dGVybmFsIGRlcGxveW1lbnQgY29udHJvbGxlciwgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcywgb3IgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3JzIGluIHdoaWNoIGNhc2UgeW91IGRvbid0IHNwZWNpZnkgYSByb2xlIGhlcmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIHNlcnZpY2UtbGlua2VkIHJvbGVzIGZvciBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2luZy1zZXJ2aWNlLWxpbmtlZC1yb2xlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdXIgc3BlY2lmaWVkIHJvbGUgaGFzIGEgcGF0aCBvdGhlciB0aGFuIGBgL2BgLCB0aGVuIHlvdSBtdXN0IGVpdGhlciBzcGVjaWZ5IHRoZSBmdWxsIHJvbGUgQVJOICh0aGlzIGlzIHJlY29tbWVuZGVkKSBvciBwcmVmaXggdGhlIHJvbGUgbmFtZSB3aXRoIHRoZSBwYXRoLiBGb3IgZXhhbXBsZSwgaWYgYSByb2xlIHdpdGggdGhlIG5hbWUgYGBiYXJgYCBoYXMgYSBwYXRoIG9mIGBgL2Zvby9gYCB0aGVuIHlvdSB3b3VsZCBzcGVjaWZ5IGBgL2Zvby9iYXJgYCBhcyB0aGUgcm9sZSBuYW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtGcmllbmRseSBuYW1lcyBhbmQgcGF0aHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWRlbnRpZmllcnMuaHRtbCNpZGVudGlmaWVycy1mcmllbmRseS1uYW1lcykgaW4gdGhlICpJQU0gVXNlciBHdWlkZSouXG4gKi9cblJvbGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGBgZmFtaWx5YGAgYW5kIGBgcmV2aXNpb25gYCAoYGBmYW1pbHk6cmV2aXNpb25gYCkgb3IgZnVsbCBBUk4gb2YgdGhlIHRhc2sgZGVmaW5pdGlvbiB0byBydW4gaW4geW91ciBzZXJ2aWNlLiBJZiBhIGBgcmV2aXNpb25gYCBpc24ndCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgYGBBQ1RJVkVgYCByZXZpc2lvbiBpcyB1c2VkLlxuICogIEEgdGFzayBkZWZpbml0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGlmIHRoZSBzZXJ2aWNlIHVzZXMgZWl0aGVyIHRoZSBgYEVDU2BgIG9yIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXJzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlcGxveW1lbnQgdHlwZXMsIHNlZSBbQW1hem9uIEVDUyBkZXBsb3ltZW50IHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGVzLmh0bWwpLlxuICovXG5UYXNrRGVmaW5pdGlvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB5b3VyIHNlcnZpY2UuIFVwIHRvIDI1NSBsZXR0ZXJzICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSksIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucyBhcmUgYWxsb3dlZC4gU2VydmljZSBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBjbHVzdGVyLCBidXQgeW91IGNhbiBoYXZlIHNpbWlsYXJseSBuYW1lZCBzZXJ2aWNlcyBpbiBtdWx0aXBsZSBjbHVzdGVycyB3aXRoaW4gYSBSZWdpb24gb3IgYWNyb3NzIG11bHRpcGxlIFJlZ2lvbnMuXG4gKiAgIFRoZSBzdGFjayB1cGRhdGUgZmFpbHMgaWYgeW91IGNoYW5nZSBhbnkgcHJvcGVydGllcyB0aGF0IHJlcXVpcmUgcmVwbGFjZW1lbnQgYW5kIHRoZSBgYFNlcnZpY2VOYW1lYGAgaXMgY29uZmlndXJlZC4gVGhpcyBpcyBiZWNhdXNlIEFXUyBDbG91ZEZvcm1hdGlvbiBjcmVhdGVzIHRoZSByZXBsYWNlbWVudCBzZXJ2aWNlIGZpcnN0LCBidXQgZWFjaCBgYFNlcnZpY2VOYW1lYGAgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGNsdXN0ZXIuXG4gKi9cblNlcnZpY2VOYW1lPzogc3RyaW5nXG5EZXBsb3ltZW50Q29uZmlndXJhdGlvbj86IERlcGxveW1lbnRDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSB0YXNrIHBsYWNlbWVudCBzdHJhdGVneSBmb3IgYSB0YXNrIG9yIHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IHN0cmF0ZWdpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2stcGxhY2VtZW50LXN0cmF0ZWdpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlbWVudFN0cmF0ZWd5IHtcbi8qKlxuICogVGhlIGZpZWxkIHRvIGFwcGx5IHRoZSBwbGFjZW1lbnQgc3RyYXRlZ3kgYWdhaW5zdC4gRm9yIHRoZSBgYHNwcmVhZGBgIHBsYWNlbWVudCBzdHJhdGVneSwgdmFsaWQgdmFsdWVzIGFyZSBgYGluc3RhbmNlSWRgYCAob3IgYGBob3N0YGAsIHdoaWNoIGhhcyB0aGUgc2FtZSBlZmZlY3QpLCBvciBhbnkgcGxhdGZvcm0gb3IgY3VzdG9tIGF0dHJpYnV0ZSB0aGF0J3MgYXBwbGllZCB0byBhIGNvbnRhaW5lciBpbnN0YW5jZSwgc3VjaCBhcyBgYGF0dHJpYnV0ZTplY3MuYXZhaWxhYmlsaXR5LXpvbmVgYC4gRm9yIHRoZSBgYGJpbnBhY2tgYCBwbGFjZW1lbnQgc3RyYXRlZ3ksIHZhbGlkIHZhbHVlcyBhcmUgYGBjcHVgYCBhbmQgYGBtZW1vcnlgYC4gRm9yIHRoZSBgYHJhbmRvbWBgIHBsYWNlbWVudCBzdHJhdGVneSwgdGhpcyBmaWVsZCBpcyBub3QgdXNlZC5cbiAqL1xuRmllbGQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgcGxhY2VtZW50IHN0cmF0ZWd5LiBUaGUgYGByYW5kb21gYCBwbGFjZW1lbnQgc3RyYXRlZ3kgcmFuZG9tbHkgcGxhY2VzIHRhc2tzIG9uIGF2YWlsYWJsZSBjYW5kaWRhdGVzLiBUaGUgYGBzcHJlYWRgYCBwbGFjZW1lbnQgc3RyYXRlZ3kgc3ByZWFkcyBwbGFjZW1lbnQgYWNyb3NzIGF2YWlsYWJsZSBjYW5kaWRhdGVzIGV2ZW5seSBiYXNlZCBvbiB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gVGhlIGBgYmlucGFja2BgIHN0cmF0ZWd5IHBsYWNlcyB0YXNrcyBvbiBhdmFpbGFibGUgY2FuZGlkYXRlcyB0aGF0IGhhdmUgdGhlIGxlYXN0IGF2YWlsYWJsZSBhbW91bnQgb2YgdGhlIHJlc291cmNlIHRoYXQncyBzcGVjaWZpZWQgd2l0aCB0aGUgYGBmaWVsZGBgIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUsIGlmIHlvdSBiaW5wYWNrIG9uIG1lbW9yeSwgYSB0YXNrIGlzIHBsYWNlZCBvbiB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHJlbWFpbmluZyBtZW1vcnkgYnV0IHN0aWxsIGVub3VnaCB0byBydW4gdGhlIHRhc2suXG4gKi9cblR5cGU6IChcImJpbnBhY2tcIiB8IFwicmFuZG9tXCIgfCBcInNwcmVhZFwiKVxufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBmb3IgdGhlIHNlcnZpY2UgcmVnaXN0cnkuXG4gKiAgRWFjaCBzZXJ2aWNlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggb25lIHNlcnZpY2UgcmVnaXN0cnkuIE11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcyBmb3IgZWFjaCBzZXJ2aWNlIGFyZSBub3Qgc3VwcG9ydGVkLlxuICogIFdoZW4geW91IGFkZCwgdXBkYXRlLCBvciByZW1vdmUgdGhlIHNlcnZpY2UgcmVnaXN0cmllcyBjb25maWd1cmF0aW9uLCBBbWF6b24gRUNTIHN0YXJ0cyBhIG5ldyBkZXBsb3ltZW50LiBOZXcgdGFza3MgYXJlIHJlZ2lzdGVyZWQgYW5kIGRlcmVnaXN0ZXJlZCB0byB0aGUgdXBkYXRlZCBzZXJ2aWNlIHJlZ2lzdHJ5IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVJlZ2lzdHJ5IHtcbi8qKlxuICogVGhlIGNvbnRhaW5lciBuYW1lIHZhbHVlIHRvIGJlIHVzZWQgZm9yIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZS4gSXQncyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIG9yIGEgYGBwb3J0YGAgdmFsdWUuIEhvd2V2ZXIsIHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGguXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdXNlZCBpZiB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2Ugc3BlY2lmaWVkIGFuIFNSViByZWNvcmQuIFRoaXMgZmllbGQgbWlnaHQgYmUgdXNlZCBpZiBib3RoIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhbmQgU1JWIHJlY29yZHMgYXJlIHVzZWQuXG4gKi9cblBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHBvcnQgdmFsdWUgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJdCdzIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24geW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGBgYnJpZGdlYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYGBjb250YWluZXJOYW1lYGAgYW5kIGBgY29udGFpbmVyUG9ydGBgIGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYW5kIGEgdHlwZSBTUlYgRE5TIHJlY29yZCBpcyB1c2VkLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIGBgY29udGFpbmVyTmFtZWBgIGFuZCBgYGNvbnRhaW5lclBvcnRgYCBjb21iaW5hdGlvbiBvciBhIGBgcG9ydGBgIHZhbHVlLiBIb3dldmVyLCB5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VydmljZSByZWdpc3RyeS4gVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgc2VydmljZSByZWdpc3RyeSBpcyBDTUFQLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGVTZXJ2aWNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbCkuXG4gKi9cblJlZ2lzdHJ5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBhIHZvbHVtZSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiBhcyBhIHZvbHVtZSB0aGF0IGlzIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZvbHVtZSB0eXBlIGlzIGFuIEFtYXpvbiBFQlMgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VWb2x1bWVDb25maWd1cmF0aW9uIHtcbk1hbmFnZWRFQlNWb2x1bWU/OiBTZXJ2aWNlTWFuYWdlZEVCU1ZvbHVtZUNvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHZvbHVtZS4gVGhpcyB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgbmFtZSBmcm9tIHRoZSBgYFZvbHVtZWBgIG9iamVjdCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBbWF6b24gRUJTIHZvbHVtZSB0aGF0IEFtYXpvbiBFQ1MgY3JlYXRlcyBhbmQgbWFuYWdlcyBvbiB5b3VyIGJlaGFsZi4gVGhlc2Ugc2V0dGluZ3MgYXJlIHVzZWQgdG8gY3JlYXRlIGVhY2ggQW1hem9uIEVCUyB2b2x1bWUsIHdpdGggb25lIHZvbHVtZSBjcmVhdGVkIGZvciBlYWNoIHRhc2sgaW4gdGhlIHNlcnZpY2UuIFRoZSBBbWF6b24gRUJTIHZvbHVtZXMgYXJlIHZpc2libGUgaW4geW91ciBhY2NvdW50IGluIHRoZSBBbWF6b24gRUMyIGNvbnNvbGUgb25jZSB0aGV5IGFyZSBjcmVhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VNYW5hZ2VkRUJTVm9sdW1lQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzbmFwc2hvdCB0aGF0IEFtYXpvbiBFQ1MgdXNlcyB0byBjcmVhdGUgdGhlIHZvbHVtZS4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBzbmFwc2hvdCBJRCBvciBhIHZvbHVtZSBzaXplLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFNuYXBzaG90SWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblNuYXBzaG90SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZvbHVtZSB0eXBlLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFZvbHVtZVR5cGVgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQlMgdm9sdW1lIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSouXG4gKiAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCB2b2x1bWUgdHlwZXMuXG4gKiAgICsgIEdlbmVyYWwgUHVycG9zZSBTU0Q6IGBgZ3AyYGB8YGBncDNgYCBcbiAqICAgKyAgUHJvdmlzaW9uZWQgSU9QUyBTU0Q6IGBgaW8xYGB8YGBpbzJgYCBcbiAqICAgKyAgVGhyb3VnaHB1dCBPcHRpbWl6ZWQgSEREOiBgYHN0MWBgIFxuICogICArICBDb2xkIEhERDogYGBzYzFgYCBcbiAqICAgKyAgTWFnbmV0aWM6IGBgc3RhbmRhcmRgYCBcbiAqICAgVGhlIG1hZ25ldGljIHZvbHVtZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgb24gRmFyZ2F0ZS5cbiAqL1xuVm9sdW1lVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgaWRlbnRpZmllciBvZiB0aGUgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2Uga2V5IHRvIHVzZSBmb3IgQW1hem9uIEVCUyBlbmNyeXB0aW9uLiBXaGVuIGVuY3J5cHRpb24gaXMgdHVybmVkIG9uIGFuZCBubyBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBBV1MgbWFuYWdlZCBrZXkgZm9yIEFtYXpvbiBFQlMgdm9sdW1lcyBpcyB1c2VkLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYEttc0tleUlkYGAgcGFyYW1ldGVyIG9mIHRoZSBbQ3JlYXRlVm9sdW1lIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEFQSSBSZWZlcmVuY2UqLlxuICogICAgQVdTIGF1dGhlbnRpY2F0ZXMgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSBhc3luY2hyb25vdXNseS4gVGhlcmVmb3JlLCBpZiB5b3Ugc3BlY2lmeSBhbiBJRCwgYWxpYXMsIG9yIEFSTiB0aGF0IGlzIGludmFsaWQsIHRoZSBhY3Rpb24gY2FuIGFwcGVhciB0byBjb21wbGV0ZSwgYnV0IGV2ZW50dWFsbHkgZmFpbHMuXG4gKi9cbkttc0tleUlkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSB2b2x1bWUuIEFtYXpvbiBFQ1MgYXBwbGllcyBzZXJ2aWNlLW1hbmFnZWQgdGFncyBieSBkZWZhdWx0LiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRhZ1NwZWNpZmljYXRpb25zLk5gYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cblRhZ1NwZWNpZmljYXRpb25zPzogRUJTVGFnU3BlY2lmaWNhdGlvbltdXG4vKipcbiAqIFRoZSBMaW51eCBmaWxlc3lzdGVtIHR5cGUgZm9yIHRoZSB2b2x1bWUuIEZvciB2b2x1bWVzIGNyZWF0ZWQgZnJvbSBhIHNuYXBzaG90LCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBzYW1lIGZpbGVzeXN0ZW0gdHlwZSB0aGF0IHRoZSB2b2x1bWUgd2FzIHVzaW5nIHdoZW4gdGhlIHNuYXBzaG90IHdhcyBjcmVhdGVkLiBJZiB0aGVyZSBpcyBhIGZpbGVzeXN0ZW0gdHlwZSBtaXNtYXRjaCwgdGhlIHRhc2sgd2lsbCBmYWlsIHRvIHN0YXJ0LlxuICogIFRoZSBhdmFpbGFibGUgZmlsZXN5c3RlbSB0eXBlcyBhcmXigKggYGBleHQzYGAsIGBgZXh0NGBgLCBhbmQgYGB4ZnNgYC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgYGB4ZnNgYCBmaWxlc3lzdGVtIHR5cGUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICovXG5GaWxlc3lzdGVtVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdm9sdW1lIHNob3VsZCBiZSBlbmNyeXB0ZWQuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgZW5jcnlwdGlvbiBpcyB0dXJuZWQgb24gYnkgZGVmYXVsdC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyAxOjEgd2l0aCB0aGUgYGBFbmNyeXB0ZWRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKi9cbkVuY3J5cHRlZD86IGJvb2xlYW5cbi8qKlxuICogVGhlIHRocm91Z2hwdXQgdG8gcHJvdmlzaW9uIGZvciBhIHZvbHVtZSwgaW4gTWlCL3MsIHdpdGggYSBtYXhpbXVtIG9mIDEsMDAwIE1pQi9zLiBUaGlzIHBhcmFtZXRlciBtYXBzIDE6MSB3aXRoIHRoZSBgYFRocm91Z2hwdXRgYCBwYXJhbWV0ZXIgb2YgdGhlIFtDcmVhdGVWb2x1bWUgQVBJXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVZvbHVtZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQVBJIFJlZmVyZW5jZSouXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB0aGUgYGBncDNgYCB2b2x1bWUgdHlwZS5cbiAqL1xuVGhyb3VnaHB1dD86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpLiBGb3IgYGBncDNgYCwgYGBpbzFgYCwgYW5kIGBgaW8yYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgSU9QUyB0aGF0IGFyZSBwcm92aXNpb25lZCBmb3IgdGhlIHZvbHVtZS4gRm9yIGBgZ3AyYGAgdm9sdW1lcywgdGhpcyByZXByZXNlbnRzIHRoZSBiYXNlbGluZSBwZXJmb3JtYW5jZSBvZiB0aGUgdm9sdW1lIGFuZCB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgdm9sdW1lIGFjY3VtdWxhdGVzIEkvTyBjcmVkaXRzIGZvciBidXJzdGluZy5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZS5cbiAqICAgKyAgIGBgZ3AzYGA6IDMsMDAwIC0gMTYsMDAwIElPUFNcbiAqICAgKyAgIGBgaW8xYGA6IDEwMCAtIDY0LDAwMCBJT1BTXG4gKiAgICsgICBgYGlvMmBgOiAxMDAgLSAyNTYsMDAwIElPUFNcbiAqICAgXG4gKiAgVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgZm9yIGBgaW8xYGAgYW5kIGBgaW8yYGAgdm9sdW1lIHR5cGVzLiBUaGUgZGVmYXVsdCBmb3IgYGBncDNgYCB2b2x1bWVzIGlzIGBgMywwMDAgSU9QU2BgLiBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBgYHN0MWBgLCBgYHNjMWBgLCBvciBgYHN0YW5kYXJkYGAgdm9sdW1lIHR5cGVzLlxuICogIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgSW9wc2BgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqL1xuSW9wcz86IG51bWJlclxuLyoqXG4gKiBUaGUgc2l6ZSBvZiB0aGUgdm9sdW1lIGluIEdpQi4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSB2b2x1bWUgc2l6ZSBvciBhIHNuYXBzaG90IElELiBJZiB5b3Ugc3BlY2lmeSBhIHNuYXBzaG90IElELCB0aGUgc25hcHNob3Qgc2l6ZSBpcyB1c2VkIGZvciB0aGUgdm9sdW1lIHNpemUgYnkgZGVmYXVsdC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSB2b2x1bWUgc2l6ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNuYXBzaG90IHNpemUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgMToxIHdpdGggdGhlIGBgU2l6ZWBgIHBhcmFtZXRlciBvZiB0aGUgW0NyZWF0ZVZvbHVtZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBUEkgUmVmZXJlbmNlKi5cbiAqICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIHZvbHVtZSBzaXplIHZhbHVlcyBmb3IgZWFjaCB2b2x1bWUgdHlwZS5cbiAqICAgKyAgIGBgZ3AyYGAgYW5kIGBgZ3AzYGA6IDEtMTYsMzg0XG4gKiAgICsgICBgYGlvMWBgIGFuZCBgYGlvMmBgOiA0LTE2LDM4NFxuICogICArICAgYGBzdDFgYCBhbmQgYGBzYzFgYDogMTI1LTE2LDM4NFxuICogICArICAgYGBzdGFuZGFyZGBgOiAxLTEsMDI0XG4gKi9cblNpemVJbkdpQj86IG51bWJlclxuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHZvbHVtZS4gVGhpcyBpcyB0aGUgQW1hem9uIEVDUyBpbmZyYXN0cnVjdHVyZSBJQU0gcm9sZSB0aGF0IGlzIHVzZWQgdG8gbWFuYWdlIHlvdXIgQVdTIGluZnJhc3RydWN0dXJlLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIEFtYXpvbiBFQ1MtbWFuYWdlZCBgYEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZvbHVtZXNgYCBJQU0gcG9saWN5IHdpdGggdGhpcyByb2xlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTIGluZnJhc3RydWN0dXJlIElBTSByb2xlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9pbmZyYXN0cnVjdHVyZV9JQU1fcm9sZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQ1MgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuUm9sZUFybjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSB0YWcgc3BlY2lmaWNhdGlvbnMgb2YgYW4gQW1hem9uIEVCUyB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUJTVGFnU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBwcm9wYWdhdGUgdGhlIHRhZ3MgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIHRvIOKAqHRoZSBBbWF6b24gRUJTIHZvbHVtZS4gVGFncyBjYW4gb25seSBwcm9wYWdhdGUgdG8gYSBgYFNFUlZJQ0VgYCBzcGVjaWZpZWQgaW4g4oCoYGBTZXJ2aWNlVm9sdW1lQ29uZmlndXJhdGlvbmBgLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSB0YWdzIGFyZW4ndCDigKhwcm9wYWdhdGVkLlxuICovXG5Qcm9wYWdhdGVUYWdzPzogKFwiU0VSVklDRVwiIHwgXCJUQVNLX0RFRklOSVRJT05cIilcbi8qKlxuICogVGhlIHR5cGUgb2Ygdm9sdW1lIHJlc291cmNlLlxuICovXG5SZXNvdXJjZVR5cGU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFncyBhcHBsaWVkIHRvIHRoaXMgQW1hem9uIEVCUyB2b2x1bWUuIGBgQW1hem9uRUNTQ3JlYXRlZGBgIGFuZCBgYEFtYXpvbkVDU01hbmFnZWRgYCBhcmUgcmVzZXJ2ZWQgdGFncyB0aGF0IGNhbid0IGJlIHVzZWQuXG4gKi9cblRhZ3M/OiBUYWdbXVxufVxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gYSByZXNvdXJjZSB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUuIFlvdSBkZWZpbmUgdGhlbS5cbiAqICBUaGUgZm9sbG93aW5nIGJhc2ljIHJlc3RyaWN0aW9ucyBhcHBseSB0byB0YWdzOlxuICogICArICBNYXhpbXVtIG51bWJlciBvZiB0YWdzIHBlciByZXNvdXJjZSAtIDUwXG4gKiAgICsgIEZvciBlYWNoIHJlc291cmNlLCBlYWNoIHRhZyBrZXkgbXVzdCBiZSB1bmlxdWUsIGFuZCBlYWNoIHRhZyBrZXkgY2FuIGhhdmUgb25seSBvbmUgdmFsdWUuXG4gKiAgICsgIE1heGltdW0ga2V5IGxlbmd0aCAtIDEyOCBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgTWF4aW11bSB2YWx1ZSBsZW5ndGggLSAyNTYgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIElmIHlvdXIgdGFnZ2luZyBzY2hlbWEgaXMgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgc2VydmljZXMgYW5kIHJlc291cmNlcywgcmVtZW1iZXIgdGhhdCBvdGhlciBzZXJ2aWNlcyBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gYWxsb3dlZCBjaGFyYWN0ZXJzLiBHZW5lcmFsbHkgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZTogbGV0dGVycywgbnVtYmVycywgYW5kIHNwYWNlcyByZXByZXNlbnRhYmxlIGluIFVURi04LCBhbmQgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiArIC0gPSAuIF8gOiAvIEAuXG4gKiAgICsgIFRhZyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuICogICArICBEbyBub3QgdXNlIGBgYXdzOmBgLCBgYEFXUzpgYCwgb3IgYW55IHVwcGVyIG9yIGxvd2VyY2FzZSBjb21iaW5hdGlvbiBvZiBzdWNoIGFzIGEgcHJlZml4IGZvciBlaXRoZXIga2V5cyBvciB2YWx1ZXMgYXMgaXQgaXMgcmVzZXJ2ZWQgZm9yIEFXUyB1c2UuIFlvdSBjYW5ub3QgZWRpdCBvciBkZWxldGUgdGFnIGtleXMgb3IgdmFsdWVzIHdpdGggdGhpcyBwcmVmaXguIFRhZ3Mgd2l0aCB0aGlzIHByZWZpeCBkbyBub3QgY291bnQgYWdhaW5zdCB5b3VyIHRhZ3MgcGVyIHJlc291cmNlIGxpbWl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4vKipcbiAqIFRoZSBvcHRpb25hbCBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBgdmFsdWVgYCBhY3RzIGFzIGEgZGVzY3JpcHRvciB3aXRoaW4gYSB0YWcgY2F0ZWdvcnkgKGtleSkuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIE9uZSBwYXJ0IG9mIGEga2V5LXZhbHVlIHBhaXIgdGhhdCBtYWtlIHVwIGEgdGFnLiBBIGBga2V5YGAgaXMgYSBnZW5lcmFsIGxhYmVsIHRoYXQgYWN0cyBsaWtlIGEgY2F0ZWdvcnkgZm9yIG1vcmUgc3BlY2lmaWMgdGFnIHZhbHVlcy5cbiAqL1xuS2V5Pzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kuIEEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3kgY2FuIGJlIHNldCB3aGVuIHVzaW5nIHRoZSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBBUElzIG9yIGFzIHRoZSBkZWZhdWx0IGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGZvciBhIGNsdXN0ZXIgd2l0aCB0aGUgYGBDcmVhdGVDbHVzdGVyYGAgQVBJLlxuICogIE9ubHkgY2FwYWNpdHkgcHJvdmlkZXJzIHRoYXQgYXJlIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGEgY2x1c3RlciBhbmQgaGF2ZSBhbiBgYEFDVElWRWBgIG9yIGBgVVBEQVRJTkdgYCBzdGF0dXMgY2FuIGJlIHVzZWQgaW4gYSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneS4gVGhlIGBgUHV0Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJzYGAgQVBJIGlzIHVzZWQgdG8gYXNzb2NpYXRlIGEgY2FwYWNpdHkgcHJvdmlkZXIgd2l0aCBhIGNsdXN0ZXIuXG4gKiAgSWYgc3BlY2lmeWluZyBhIGNhcGFjaXR5IHByb3ZpZGVyIHRoYXQgdXNlcyBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAsIHRoZSBjYXBhY2l0eSBwcm92aWRlciBtdXN0IGFscmVhZHkgYmUgY3JlYXRlZC4gTmV3IEF1dG8gU2NhbGluZyBncm91cCBjYXBhY2l0eSBwcm92aWRlcnMgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGUgYGBDcmVhdGVDYXBhY2l0eVByb3ZpZGVyYGAgQVBJIG9wZXJhdGlvbi5cbiAqICBUbyB1c2UgYW4gRkFSR0FURWxvbmcgY2FwYWNpdHkgcHJvdmlkZXIsIHNwZWNpZnkgZWl0aGVyIHRoZSBgYEZBUkdBVEVgYCBvciBgYEZBUkdBVEVfU1BPVGBgIGNhcGFjaXR5IHByb3ZpZGVycy4gVGhlIEZBUkdBVEVsb25nIGNhcGFjaXR5IHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIHRvIGFsbCBhY2NvdW50cyBhbmQgb25seSBuZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGNsdXN0ZXIgdG8gYmUgdXNlZCBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneUl0ZW0ge1xuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXIuXG4gKi9cbkNhcGFjaXR5UHJvdmlkZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlICpiYXNlKiB2YWx1ZSBkZXNpZ25hdGVzIGhvdyBtYW55IHRhc2tzLCBhdCBhIG1pbmltdW0sIHRvIHJ1biBvbiB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBPbmx5IG9uZSBjYXBhY2l0eSBwcm92aWRlciBpbiBhIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGNhbiBoYXZlIGEgKmJhc2UqIGRlZmluZWQuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGAwYGAgaXMgdXNlZC5cbiAqL1xuQmFzZT86IG51bWJlclxuLyoqXG4gKiBUaGUgKndlaWdodCogdmFsdWUgZGVzaWduYXRlcyB0aGUgcmVsYXRpdmUgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIHRhc2tzIGxhdW5jaGVkIHRoYXQgc2hvdWxkIHVzZSB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5IHByb3ZpZGVyLiBUaGUgYGB3ZWlnaHRgYCB2YWx1ZSBpcyB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gYWZ0ZXIgdGhlIGBgYmFzZWBgIHZhbHVlLCBpZiBkZWZpbmVkLCBpcyBzYXRpc2ZpZWQuXG4gKiAgSWYgbm8gYGB3ZWlnaHRgYCB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgMGBgIGlzIHVzZWQuIFdoZW4gbXVsdGlwbGUgY2FwYWNpdHkgcHJvdmlkZXJzIGFyZSBzcGVjaWZpZWQgd2l0aGluIGEgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3ksIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2FwYWNpdHkgcHJvdmlkZXJzIG11c3QgaGF2ZSBhIHdlaWdodCB2YWx1ZSBncmVhdGVyIHRoYW4gemVybyBhbmQgYW55IGNhcGFjaXR5IHByb3ZpZGVycyB3aXRoIGEgd2VpZ2h0IG9mIGBgMGBgIGNhbid0IGJlIHVzZWQgdG8gcGxhY2UgdGFza3MuIElmIHlvdSBzcGVjaWZ5IG11bHRpcGxlIGNhcGFjaXR5IHByb3ZpZGVycyBpbiBhIHN0cmF0ZWd5IHRoYXQgYWxsIGhhdmUgYSB3ZWlnaHQgb2YgYGAwYGAsIGFueSBgYFJ1blRhc2tgYCBvciBgYENyZWF0ZVNlcnZpY2VgYCBhY3Rpb25zIHVzaW5nIHRoZSBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSB3aWxsIGZhaWwuXG4gKiAgQW4gZXhhbXBsZSBzY2VuYXJpbyBmb3IgdXNpbmcgd2VpZ2h0cyBpcyBkZWZpbmluZyBhIHN0cmF0ZWd5IHRoYXQgY29udGFpbnMgdHdvIGNhcGFjaXR5IHByb3ZpZGVycyBhbmQgYm90aCBoYXZlIGEgd2VpZ2h0IG9mIGBgMWBgLCB0aGVuIHdoZW4gdGhlIGBgYmFzZWBgIGlzIHNhdGlzZmllZCwgdGhlIHRhc2tzIHdpbGwgYmUgc3BsaXQgZXZlbmx5IGFjcm9zcyB0aGUgdHdvIGNhcGFjaXR5IHByb3ZpZGVycy4gVXNpbmcgdGhhdCBzYW1lIGxvZ2ljLCBpZiB5b3Ugc3BlY2lmeSBhIHdlaWdodCBvZiBgYDFgYCBmb3IgKmNhcGFjaXR5UHJvdmlkZXJBKiBhbmQgYSB3ZWlnaHQgb2YgYGA0YGAgZm9yICpjYXBhY2l0eVByb3ZpZGVyQiosIHRoZW4gZm9yIGV2ZXJ5IG9uZSB0YXNrIHRoYXQncyBydW4gdXNpbmcgKmNhcGFjaXR5UHJvdmlkZXJBKiwgZm91ciB0YXNrcyB3b3VsZCB1c2UgKmNhcGFjaXR5UHJvdmlkZXJCKi5cbiAqL1xuV2VpZ2h0PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZXJ2aWNlLiBUaGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgdGFzayBkZWZpbml0aW9ucyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgdG8gcmVjZWl2ZSB0aGVpciBvd24gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgYW5kIGl0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG90aGVyIG5ldHdvcmsgbW9kZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgTmV0d29ya2luZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1uZXR3b3JraW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrQ29uZmlndXJhdGlvbiB7XG5Bd3N2cGNDb25maWd1cmF0aW9uPzogQXdzVnBjQ29uZmlndXJhdGlvblxufVxuLyoqXG4gKiBUaGUgVlBDIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3VwcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSB0YXNrLlxuICogICBBbGwgc3BlY2lmaWVkIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c1ZwY0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgSURzIG9mIHRoZSBzZWN1cml0eSBncm91cHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgc2VjdXJpdHkgZ3JvdXAsIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGdyb3VwIGZvciB0aGUgVlBDIGlzIHVzZWQuIFRoZXJlJ3MgYSBsaW1pdCBvZiA1IHNlY3VyaXR5IGdyb3VwcyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgcGVyIGBgYXdzdnBjQ29uZmlndXJhdGlvbmBgLlxuICogICBBbGwgc3BlY2lmaWVkIHNlY3VyaXR5IGdyb3VwcyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIHN1Ym5ldHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIFRoZXJlJ3MgYSBsaW1pdCBvZiAxNiBzdWJuZXRzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBwZXIgYGBhd3N2cGNDb25maWd1cmF0aW9uYGAuXG4gKiAgIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBtdXN0IGJlIGZyb20gdGhlIHNhbWUgVlBDLlxuICovXG5TdWJuZXRzPzogc3RyaW5nW11cbi8qKlxuICogV2hldGhlciB0aGUgdGFzaydzIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UgcmVjZWl2ZXMgYSBwdWJsaWMgSVAgYWRkcmVzcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGBESVNBQkxFRGBgLlxuICovXG5Bc3NpZ25QdWJsaWNJcD86IChcIkRJU0FCTEVEXCIgfCBcIkVOQUJMRURcIilcbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGNvbnN0cmFpbnQgb24gdGFzayBwbGFjZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgcGxhY2VtZW50IGNvbnN0cmFpbnRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLXBsYWNlbWVudC1jb25zdHJhaW50cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHlvdSdyZSB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGFzayBwbGFjZW1lbnQgY29uc3RyYWludHMgYXJlbid0IHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGFjZW1lbnRDb25zdHJhaW50IHtcbi8qKlxuICogVGhlIHR5cGUgb2YgY29uc3RyYWludC4gVXNlIGBgZGlzdGluY3RJbnN0YW5jZWBgIHRvIGVuc3VyZSB0aGF0IGVhY2ggdGFzayBpbiBhIHBhcnRpY3VsYXIgZ3JvdXAgaXMgcnVubmluZyBvbiBhIGRpZmZlcmVudCBjb250YWluZXIgaW5zdGFuY2UuIFVzZSBgYG1lbWJlck9mYGAgdG8gcmVzdHJpY3QgdGhlIHNlbGVjdGlvbiB0byBhIGdyb3VwIG9mIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblR5cGU6IChcImRpc3RpbmN0SW5zdGFuY2VcIiB8IFwibWVtYmVyT2ZcIilcbi8qKlxuICogQSBjbHVzdGVyIHF1ZXJ5IGxhbmd1YWdlIGV4cHJlc3Npb24gdG8gYXBwbHkgdG8gdGhlIGNvbnN0cmFpbnQuIFRoZSBleHByZXNzaW9uIGNhbiBoYXZlIGEgbWF4aW11bSBsZW5ndGggb2YgMjAwMCBjaGFyYWN0ZXJzLiBZb3UgY2FuJ3Qgc3BlY2lmeSBhbiBleHByZXNzaW9uIGlmIHRoZSBjb25zdHJhaW50IHR5cGUgaXMgYGBkaXN0aW5jdEluc3RhbmNlYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NsdXN0ZXIgcXVlcnkgbGFuZ3VhZ2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NsdXN0ZXItcXVlcnktbGFuZ3VhZ2UuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5FeHByZXNzaW9uPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYExvYWRCYWxhbmNlcmBgIHByb3BlcnR5IHNwZWNpZmllcyBkZXRhaWxzIG9uIGEgbG9hZCBiYWxhbmNlciB0aGF0IGlzIHVzZWQgd2l0aCBhIHNlcnZpY2UuXG4gKiAgSWYgdGhlIHNlcnZpY2UgaXMgdXNpbmcgdGhlIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHRoZSBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRvIHVzZSBlaXRoZXIgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIFdoZW4geW91IGFyZSBjcmVhdGluZyBhbiBBQ0Rsb25nIGRlcGxveW1lbnQgZ3JvdXAsIHlvdSBzcGVjaWZ5IHR3byB0YXJnZXQgZ3JvdXBzIChyZWZlcnJlZCB0byBhcyBhIGBgdGFyZ2V0R3JvdXBQYWlyYGApLiBFYWNoIHRhcmdldCBncm91cCBiaW5kcyB0byBhIHNlcGFyYXRlIHRhc2sgc2V0IGluIHRoZSBkZXBsb3ltZW50LiBUaGUgbG9hZCBiYWxhbmNlciBjYW4gYWxzbyBoYXZlIHVwIHRvIHR3byBsaXN0ZW5lcnMsIGEgcmVxdWlyZWQgbGlzdGVuZXIgZm9yIHByb2R1Y3Rpb24gdHJhZmZpYyBhbmQgYW4gb3B0aW9uYWwgbGlzdGVuZXIgdGhhdCBhbGxvd3MgeW91IHRvIHRlc3QgbmV3IHJldmlzaW9ucyBvZiB0aGUgc2VydmljZSBiZWZvcmUgcm91dGluZyBwcm9kdWN0aW9uIHRyYWZmaWMgdG8gaXQuXG4gKiAgU2VydmljZXMgd2l0aCB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgKGZvciBleGFtcGxlLCB0aG9zZSB3aXRoIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlKSBvbmx5IHN1cHBvcnQgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcnMgYW5kIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnMuIENsYXNzaWMgTG9hZCBCYWxhbmNlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIEFsc28sIHdoZW4geW91IGNyZWF0ZSBhbnkgdGFyZ2V0IGdyb3VwcyBmb3IgdGhlc2Ugc2VydmljZXMsIHlvdSBtdXN0IGNob29zZSBgYGlwYGAgYXMgdGhlIHRhcmdldCB0eXBlLCBub3QgYGBpbnN0YW5jZWBgLiBUYXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkQmFsYW5jZXIge1xuLyoqXG4gKiBUaGUgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCBhIHNlcnZpY2Ugb3IgdGFzayBzZXQuXG4gKiAgQSB0YXJnZXQgZ3JvdXAgQVJOIGlzIG9ubHkgc3BlY2lmaWVkIHdoZW4gdXNpbmcgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIFxuICogIEZvciBzZXJ2aWNlcyB1c2luZyB0aGUgYGBFQ1NgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb3IgbXVsdGlwbGUgdGFyZ2V0IGdyb3Vwcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVnaXN0ZXJpbmcgbXVsdGlwbGUgdGFyZ2V0IGdyb3VwcyB3aXRoIGEgc2VydmljZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcmVnaXN0ZXItbXVsdGlwbGUtdGFyZ2V0Z3JvdXBzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBGb3Igc2VydmljZXMgdXNpbmcgdGhlIGBgQ09ERV9ERVBMT1lgYCBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSdyZSByZXF1aXJlZCB0byBkZWZpbmUgdHdvIHRhcmdldCBncm91cHMgZm9yIHRoZSBsb2FkIGJhbGFuY2VyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCbHVlL2dyZWVuIGRlcGxveW1lbnQgd2l0aCBDb2RlRGVwbG95XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtYmx1ZWdyZWVuLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgeW91ciBzZXJ2aWNlJ3MgdGFzayBkZWZpbml0aW9uIHVzZXMgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBjaG9vc2UgYGBpcGBgIGFzIHRoZSB0YXJnZXQgdHlwZSwgbm90IGBgaW5zdGFuY2VgYC4gRG8gdGhpcyB3aGVuIGNyZWF0aW5nIHlvdXIgdGFyZ2V0IGdyb3VwcyBiZWNhdXNlIHRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIG5vdCBhbiBBbWF6b24gRUMyIGluc3RhbmNlLiBUaGlzIG5ldHdvcmsgbW9kZSBpcyByZXF1aXJlZCBmb3IgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuXG4gKi9cblRhcmdldEdyb3VwQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsb2FkIGJhbGFuY2VyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBBbWF6b24gRUNTIHNlcnZpY2Ugb3IgdGFzayBzZXQuXG4gKiAgSWYgeW91IGFyZSB1c2luZyBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIGEgTmV0d29yayBMb2FkIEJhbGFuY2VyIHRoZSBsb2FkIGJhbGFuY2VyIG5hbWUgcGFyYW1ldGVyIHNob3VsZCBiZSBvbWl0dGVkLlxuICovXG5Mb2FkQmFsYW5jZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgKGFzIGl0IGFwcGVhcnMgaW4gYSBjb250YWluZXIgZGVmaW5pdGlvbikgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuXG4gKiAgWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY29udGFpbmVyIG5hbWUgd2hlbiBjb25maWd1cmluZyB0aGUgdGFyZ2V0IGdyb3VwIGZvciBhbiBBbWF6b24gRUNTIGxvYWQgYmFsYW5jZXIuXG4gKi9cbkNvbnRhaW5lck5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgb24gdGhlIGNvbnRhaW5lciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci4gVGhpcyBwb3J0IG11c3QgY29ycmVzcG9uZCB0byBhIGBgY29udGFpbmVyUG9ydGBgIGluIHRoZSB0YXNrIGRlZmluaXRpb24gdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIGFyZSB1c2luZy4gRm9yIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSBjb250YWluZXIgaW5zdGFuY2UgdGhleSdyZSBsYXVuY2hlZCBvbiBtdXN0IGFsbG93IGluZ3Jlc3MgdHJhZmZpYyBvbiB0aGUgYGBob3N0UG9ydGBgIG9mIHRoZSBwb3J0IG1hcHBpbmcuXG4gKi9cbkNvbnRhaW5lclBvcnQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgc2VydmljZSB0byBkaXNjb3ZlciBhbmQgY29ubmVjdCB0byBzZXJ2aWNlcywgYW5kIGJlIGRpc2NvdmVyZWQgYnksIGFuZCBjb25uZWN0ZWQgZnJvbSwgb3RoZXIgc2VydmljZXMgd2l0aGluIGEgbmFtZXNwYWNlLlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgbGlzdCBvZiBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZSBvYmplY3RzLiBUaGVzZSBhcmUgbmFtZXMgYW5kIGFsaWFzZXMgKGFsc28ga25vd24gYXMgZW5kcG9pbnRzKSB0aGF0IGFyZSB1c2VkIGJ5IG90aGVyIEFtYXpvbiBFQ1Mgc2VydmljZXMgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZpY2UuIFxuICogIFRoaXMgZmllbGQgaXMgbm90IHJlcXVpcmVkIGZvciBhIFwiY2xpZW50XCIgQW1hem9uIEVDUyBzZXJ2aWNlIHRoYXQncyBhIG1lbWJlciBvZiBhIG5hbWVzcGFjZSBvbmx5IHRvIGNvbm5lY3QgdG8gb3RoZXIgc2VydmljZXMgd2l0aGluIHRoZSBuYW1lc3BhY2UuIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSBhIGZyb250ZW5kIGFwcGxpY2F0aW9uIHRoYXQgYWNjZXB0cyBpbmNvbWluZyByZXF1ZXN0cyBmcm9tIGVpdGhlciBhIGxvYWQgYmFsYW5jZXIgdGhhdCdzIGF0dGFjaGVkIHRvIHRoZSBzZXJ2aWNlIG9yIGJ5IG90aGVyIG1lYW5zLlxuICogIEFuIG9iamVjdCBzZWxlY3RzIGEgcG9ydCBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24sIGFzc2lnbnMgYSBuYW1lIGZvciB0aGUgQ01BUGxvbmcgc2VydmljZSwgYW5kIGEgbGlzdCBvZiBhbGlhc2VzIChlbmRwb2ludHMpIGFuZCBwb3J0cyBmb3IgY2xpZW50IGFwcGxpY2F0aW9ucyB0byByZWZlciB0byB0aGlzIHNlcnZpY2UuXG4gKi9cblNlcnZpY2VzPzogU2VydmljZUNvbm5lY3RTZXJ2aWNlW11cbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIFNlcnZpY2UgQ29ubmVjdCB3aXRoIHRoaXMgc2VydmljZS5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxuTG9nQ29uZmlndXJhdGlvbj86IExvZ0NvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWVzcGFjZSBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIENNQVBsb25nIG5hbWVzcGFjZSBmb3IgdXNlIHdpdGggU2VydmljZSBDb25uZWN0LiBUaGUgbmFtZXNwYWNlIG11c3QgYmUgaW4gdGhlIHNhbWUgQVdTIFJlZ2lvbiBhcyB0aGUgQW1hem9uIEVDUyBzZXJ2aWNlIGFuZCBjbHVzdGVyLiBUaGUgdHlwZSBvZiBuYW1lc3BhY2UgZG9lc24ndCBhZmZlY3QgU2VydmljZSBDb25uZWN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDTUFQbG9uZywgc2VlIFtXb3JraW5nIHdpdGggU2VydmljZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2RnL3dvcmtpbmctd2l0aC1zZXJ2aWNlcy5odG1sKSBpbiB0aGUgKkRldmVsb3BlciBHdWlkZSouXG4gKi9cbk5hbWVzcGFjZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgU2VydmljZSBDb25uZWN0IHNlcnZpY2Ugb2JqZWN0IGNvbmZpZ3VyYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFNlcnZpY2Uge1xuVGltZW91dD86IFRpbWVvdXRDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBwb3J0IG51bWJlciBmb3IgdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eSB0byBsaXN0ZW4gb24uXG4gKiAgVXNlIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIHRvIGJ5cGFzcyB0aGUgcHJveHkgZm9yIHRyYWZmaWMgb24gdGhlIHBvcnQgbnVtYmVyIHNwZWNpZmllZCBpbiB0aGUgbmFtZWQgYGBwb3J0TWFwcGluZ2BgIGluIHRoZSB0YXNrIGRlZmluaXRpb24gb2YgdGhpcyBhcHBsaWNhdGlvbiwgYW5kIHRoZW4gdXNlIGl0IGluIHlvdXIgVlBDIHNlY3VyaXR5IGdyb3VwcyB0byBhbGxvdyB0cmFmZmljIGludG8gdGhlIHByb3h5IGZvciB0aGlzIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqICBJbiBgYGF3c3ZwY2BgIG1vZGUgYW5kIEZhcmdhdGUsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBjb250YWluZXIgcG9ydCBudW1iZXIuIFRoZSBjb250YWluZXIgcG9ydCBudW1iZXIgaXMgaW4gdGhlIGBgcG9ydE1hcHBpbmdgYCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBJbiBicmlkZ2UgbW9kZSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGVwaGVtZXJhbCBwb3J0IG9mIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkuXG4gKi9cbkluZ3Jlc3NQb3J0T3ZlcnJpZGU/OiBudW1iZXJcbi8qKlxuICogVGhlIGxpc3Qgb2YgY2xpZW50IGFsaWFzZXMgZm9yIHRoaXMgU2VydmljZSBDb25uZWN0IHNlcnZpY2UuIFlvdSB1c2UgdGhlc2UgdG8gYXNzaWduIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucy4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNsaWVudCBhbGlhc2VzIHRoYXQgeW91IGNhbiBoYXZlIGluIHRoaXMgbGlzdCBpcyAxLlxuICogIEVhY2ggYWxpYXMgKFwiZW5kcG9pbnRcIikgaXMgYSBmdWxseS1xdWFsaWZpZWQgbmFtZSBhbmQgcG9ydCBudW1iZXIgdGhhdCBvdGhlciBBbWF6b24gRUNTIHRhc2tzIChcImNsaWVudHNcIikgY2FuIHVzZSB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS5cbiAqICBFYWNoIG5hbWUgYW5kIHBvcnQgbWFwcGluZyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZS5cbiAqICBGb3IgZWFjaCBgYFNlcnZpY2VDb25uZWN0U2VydmljZWBgLCB5b3UgbXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSBgYGNsaWVudEFsaWFzYGAgd2l0aCBvbmUgYGBwb3J0YGAuXG4gKi9cbkNsaWVudEFsaWFzZXM/OiBTZXJ2aWNlQ29ubmVjdENsaWVudEFsaWFzW11cblRscz86IFNlcnZpY2VDb25uZWN0VGxzQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXMgdGhlIG5hbWUgb2YgdGhlIG5ldyBDTUFQIHNlcnZpY2UgdGhhdCBBbWF6b24gRUNTIGNyZWF0ZXMgZm9yIHRoaXMgQW1hem9uIEVDUyBzZXJ2aWNlLiBUaGlzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgQ01BUCBuYW1lc3BhY2UuIFRoZSBuYW1lIGNhbiBjb250YWluIHVwIHRvIDY0IGNoYXJhY3RlcnMuIFRoZSBuYW1lIGNhbiBpbmNsdWRlIGxvd2VyY2FzZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcyAoXyksIGFuZCBoeXBoZW5zICgtKS4gVGhlIG5hbWUgY2FuJ3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi5cbiAqICBJZiB0aGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgcG9ydCBtYXBwaW5nIG5hbWUgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIGlzIHVzZWQgaW4gYGBwb3J0TmFtZS5uYW1lc3BhY2VgYC5cbiAqL1xuRGlzY292ZXJ5TmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYGBwb3J0TmFtZWBgIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBgYHBvcnRNYXBwaW5nc2BgIGZyb20gYWxsIHRoZSBjb250YWluZXJzIGluIHRoZSB0YXNrIGRlZmluaXRpb24gb2YgdGhpcyBBbWF6b24gRUNTIHNlcnZpY2UuXG4gKi9cblBvcnROYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgY29uZmlndXJlZCB0aW1lb3V0cyBmb3IgU2VydmljZSBDb25uZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lIHdhaXRpbmcgZm9yIHRoZSB1cHN0cmVhbSB0byByZXNwb25kIHdpdGggYSBjb21wbGV0ZSByZXNwb25zZSBwZXIgcmVxdWVzdC4gQSB2YWx1ZSBvZiBgYDBgYCBjYW4gYmUgc2V0IHRvIGRpc2FibGUgYGBwZXJSZXF1ZXN0VGltZW91dGBgLiBgYHBlclJlcXVlc3RUaW1lb3V0YGAgY2FuIG9ubHkgYmUgc2V0IGlmIFNlcnZpY2UgQ29ubmVjdCBgYGFwcFByb3RvY29sYGAgaXNuJ3QgYGBUQ1BgYC4gT25seSBgYGlkbGVUaW1lb3V0YGAgaXMgYWxsb3dlZCBmb3IgYGBUQ1BgYCBgYGFwcFByb3RvY29sYGAuXG4gKi9cblBlclJlcXVlc3RUaW1lb3V0U2Vjb25kcz86IG51bWJlclxuLyoqXG4gKiBUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyBhIGNvbm5lY3Rpb24gd2lsbCBzdGF5IGFjdGl2ZSB3aGlsZSBpZGxlLiBBIHZhbHVlIG9mIGBgMGBgIGNhbiBiZSBzZXQgdG8gZGlzYWJsZSBgYGlkbGVUaW1lb3V0YGAuXG4gKiAgVGhlIGBgaWRsZVRpbWVvdXRgYCBkZWZhdWx0IGZvciBgYEhUVFBgYC9gYEhUVFAyYGAvYGBHUlBDYGAgaXMgNSBtaW51dGVzLlxuICogIFRoZSBgYGlkbGVUaW1lb3V0YGAgZGVmYXVsdCBmb3IgYGBUQ1BgYCBpcyAxIGhvdXIuXG4gKi9cbklkbGVUaW1lb3V0U2Vjb25kcz86IG51bWJlclxufVxuLyoqXG4gKiBFYWNoIGFsaWFzIChcImVuZHBvaW50XCIpIGlzIGEgZnVsbHktcXVhbGlmaWVkIG5hbWUgYW5kIHBvcnQgbnVtYmVyIHRoYXQgb3RoZXIgdGFza3MgKFwiY2xpZW50c1wiKSBjYW4gdXNlIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2aWNlLlxuICogIEVhY2ggbmFtZSBhbmQgcG9ydCBtYXBwaW5nIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgbmFtZXNwYWNlLlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdENsaWVudEFsaWFzIHtcbi8qKlxuICogVGhlIGBgZG5zTmFtZWBgIGlzIHRoZSBuYW1lIHRoYXQgeW91IHVzZSBpbiB0aGUgYXBwbGljYXRpb25zIG9mIGNsaWVudCB0YXNrcyB0byBjb25uZWN0IHRvIHRoaXMgc2VydmljZS4gVGhlIG5hbWUgbXVzdCBiZSBhIHZhbGlkIEROUyBuYW1lIGJ1dCBkb2Vzbid0IG5lZWQgdG8gYmUgZnVsbHktcXVhbGlmaWVkLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSB1cCB0byAxMjcgY2hhcmFjdGVycy4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIChfKSwgaHlwaGVucyAoLSksIGFuZCBwZXJpb2RzICguKS4gVGhlIG5hbWUgY2FuJ3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi5cbiAqICBJZiB0aGlzIHBhcmFtZXRlciBpc24ndCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgZGlzY292ZXJ5TmFtZS5uYW1lc3BhY2VgYCBpcyB1c2VkLiBJZiB0aGUgYGBkaXNjb3ZlcnlOYW1lYGAgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgcG9ydCBtYXBwaW5nIG5hbWUgZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uIGlzIHVzZWQgaW4gYGBwb3J0TmFtZS5uYW1lc3BhY2VgYC5cbiAqICBUbyBhdm9pZCBjaGFuZ2luZyB5b3VyIGFwcGxpY2F0aW9ucyBpbiBjbGllbnQgQW1hem9uIEVDUyBzZXJ2aWNlcywgc2V0IHRoaXMgdG8gdGhlIHNhbWUgbmFtZSB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdXNlcyBieSBkZWZhdWx0LiBGb3IgZXhhbXBsZSwgYSBmZXcgY29tbW9uIG5hbWVzIGFyZSBgYGRhdGFiYXNlYGAsIGBgZGJgYCwgb3IgdGhlIGxvd2VyY2FzZSBuYW1lIG9mIGEgZGF0YWJhc2UsIHN1Y2ggYXMgYGBteXNxbGBgIG9yIGBgcmVkaXNgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5EbnNOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBsaXN0ZW5pbmcgcG9ydCBudW1iZXIgZm9yIHRoZSBTZXJ2aWNlIENvbm5lY3QgcHJveHkuIFRoaXMgcG9ydCBpcyBhdmFpbGFibGUgaW5zaWRlIG9mIGFsbCBvZiB0aGUgdGFza3Mgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZS5cbiAqICBUbyBhdm9pZCBjaGFuZ2luZyB5b3VyIGFwcGxpY2F0aW9ucyBpbiBjbGllbnQgQW1hem9uIEVDUyBzZXJ2aWNlcywgc2V0IHRoaXMgdG8gdGhlIHNhbWUgcG9ydCB0aGF0IHRoZSBjbGllbnQgYXBwbGljYXRpb24gdXNlcyBieSBkZWZhdWx0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlIENvbm5lY3RdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtY29ubmVjdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblBvcnQ6IG51bWJlclxufVxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUbHNDb25maWd1cmF0aW9uIHtcbklzc3VlckNlcnRpZmljYXRlQXV0aG9yaXR5OiBTZXJ2aWNlQ29ubmVjdFRsc0NlcnRpZmljYXRlQXV0aG9yaXR5XG4vKipcbiAqIFRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkuXG4gKi9cbkttc0tleT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTSByb2xlIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIFNlcnZpY2UgQ29ubmVjdCBUTFMuXG4gKi9cblJvbGVBcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHNpZ25lciBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RUbHNDZXJ0aWZpY2F0ZUF1dGhvcml0eSB7XG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSBjZXJ0aWZpY2F0ZS5cbiAqL1xuQXdzUGNhQXV0aG9yaXR5QXJuPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsb2cgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYExvZ0NvbmZpZ2BgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWxvZy1kcml2ZXJgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICBCeSBkZWZhdWx0LCBjb250YWluZXJzIHVzZSB0aGUgc2FtZSBsb2dnaW5nIGRyaXZlciB0aGF0IHRoZSBEb2NrZXIgZGFlbW9uIHVzZXMuIEhvd2V2ZXIsIHRoZSBjb250YWluZXIgbWlnaHQgdXNlIGEgZGlmZmVyZW50IGxvZ2dpbmcgZHJpdmVyIHRoYW4gdGhlIERvY2tlciBkYWVtb24gYnkgc3BlY2lmeWluZyBhIGxvZyBkcml2ZXIgY29uZmlndXJhdGlvbiBpbiB0aGUgY29udGFpbmVyIGRlZmluaXRpb24uXG4gKiAgVW5kZXJzdGFuZCB0aGUgZm9sbG93aW5nIHdoZW4gc3BlY2lmeWluZyBhIGxvZyBjb25maWd1cmF0aW9uIGZvciB5b3VyIGNvbnRhaW5lcnMuXG4gKiAgICsgIEFtYXpvbiBFQ1MgY3VycmVudGx5IHN1cHBvcnRzIGEgc3Vic2V0IG9mIHRoZSBsb2dnaW5nIGRyaXZlcnMgYXZhaWxhYmxlIHRvIHRoZSBEb2NrZXIgZGFlbW9uLiBBZGRpdGlvbmFsIGxvZyBkcml2ZXJzIG1heSBiZSBhdmFpbGFibGUgaW4gZnV0dXJlIHJlbGVhc2VzIG9mIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudC5cbiAqICBGb3IgdGFza3Mgb24gRkFSR0FURWxvbmcsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciB0YXNrcyBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMgYXJlIGBgYXdzbG9nc2BgLCBgYGZsdWVudGRgYCwgYGBnZWxmYGAsIGBganNvbi1maWxlYGAsIGBgam91cm5hbGRgYCxgYHN5c2xvZ2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogICArICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTggb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IGFyZSBob3N0ZWQgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBtdXN0IHJlZ2lzdGVyIHRoZSBhdmFpbGFibGUgbG9nZ2luZyBkcml2ZXJzIHdpdGggdGhlIGBgRUNTX0FWQUlMQUJMRV9MT0dHSU5HX0RSSVZFUlNgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWZvcmUgY29udGFpbmVycyBwbGFjZWQgb24gdGhhdCBpbnN0YW5jZSBjYW4gdXNlIHRoZXNlIGxvZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1hZ2VudC1jb25maWcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICArICBGb3IgdGFza3MgdGhhdCBhcmUgb24gRkFSR0FURWxvbmcsIGJlY2F1c2UgeW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIHlvdXIgdGFza3MgYXJlIGhvc3RlZCBvbiwgYW55IGFkZGl0aW9uYWwgc29mdHdhcmUgbmVlZGVkIG11c3QgYmUgaW5zdGFsbGVkIG91dHNpZGUgb2YgdGhlIHRhc2suIEZvciBleGFtcGxlLCB0aGUgRmx1ZW50ZCBvdXRwdXQgYWdncmVnYXRvcnMgb3IgYSByZW1vdGUgaG9zdCBydW5uaW5nIExvZ3N0YXNoIHRvIHNlbmQgR2VsZiBsb2dzIHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgc2VjcmV0cyB0byBwYXNzIHRvIHRoZSBsb2cgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblNlY3JldE9wdGlvbnM/OiBTZWNyZXRbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlbmQgdG8gdGhlIGxvZyBkcml2ZXIuXG4gKiAgVGhlIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IGRlcGVuZCBvbiB0aGUgbG9nIGRyaXZlci4gU29tZSBvZiB0aGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB5b3UgdXNlIHRoZSBgYGF3c2xvZ3NgYCBsb2cgZHJpdmVyIHRvIHJvdXRlIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggaW5jbHVkZSB0aGUgZm9sbG93aW5nOlxuICogICArIGF3c2xvZ3MtY3JlYXRlLWdyb3VwIFJlcXVpcmVkOiBObyBTcGVjaWZ5IHdoZXRoZXIgeW91IHdhbnQgdGhlIGxvZyBncm91cCB0byBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuIElmIHRoaXMgb3B0aW9uIGlzbid0IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gZmFsc2UuIFlvdXIgSUFNIHBvbGljeSBtdXN0IGluY2x1ZGUgdGhlIGxvZ3M6Q3JlYXRlTG9nR3JvdXAgcGVybWlzc2lvbiBiZWZvcmUgeW91IGF0dGVtcHQgdG8gdXNlIGF3c2xvZ3MtY3JlYXRlLWdyb3VwLiArIGF3c2xvZ3MtcmVnaW9uIFJlcXVpcmVkOiBZZXMgU3BlY2lmeSB0aGUgUmVnaW9uIHRoYXQgdGhlIGF3c2xvZ3MgbG9nIGRyaXZlciBpcyB0byBzZW5kIHlvdXIgRG9ja2VyIGxvZ3MgdG8uIFlvdSBjYW4gY2hvb3NlIHRvIHNlbmQgYWxsIG9mIHlvdXIgbG9ncyBmcm9tIGNsdXN0ZXJzIGluIGRpZmZlcmVudCBSZWdpb25zIHRvIGEgc2luZ2xlIHJlZ2lvbiBpbiBDbG91ZFdhdGNoIExvZ3MuIFRoaXMgaXMgc28gdGhhdCB0aGV5J3JlIGFsbCB2aXNpYmxlIGluIG9uZSBsb2NhdGlvbi4gT3RoZXJ3aXNlLCB5b3UgY2FuIHNlcGFyYXRlIHRoZW0gYnkgUmVnaW9uIGZvciBtb3JlIGdyYW51bGFyaXR5LiBNYWtlIHN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGxvZyBncm91cCBleGlzdHMgaW4gdGhlIFJlZ2lvbiB0aGF0IHlvdSBzcGVjaWZ5IHdpdGggdGhpcyBvcHRpb24uICsgYXdzbG9ncy1ncm91cCBSZXF1aXJlZDogWWVzIE1ha2Ugc3VyZSB0byBzcGVjaWZ5IGEgbG9nIGdyb3VwIHRoYXQgdGhlIGF3c2xvZ3MgbG9nIGRyaXZlciBzZW5kcyBpdHMgbG9nIHN0cmVhbXMgdG8uICsgYXdzbG9ncy1zdHJlYW0tcHJlZml4IFJlcXVpcmVkOiBZZXMsIHdoZW4gdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuT3B0aW9uYWwgZm9yIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHJlcXVpcmVkIGZvciB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS4gVXNlIHRoZSBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggb3B0aW9uIHRvIGFzc29jaWF0ZSBhIGxvZyBzdHJlYW0gd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeCwgdGhlIGNvbnRhaW5lciBuYW1lLCBhbmQgdGhlIElEIG9mIHRoZSBBbWF6b24gRUNTIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIElmIHlvdSBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24sIHRoZW4gdGhlIGxvZyBzdHJlYW0gdGFrZXMgdGhlIGZvcm1hdCBwcmVmaXgtbmFtZS9jb250YWluZXItbmFtZS9lY3MtdGFzay1pZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSBpcyBuYW1lZCBhZnRlciB0aGUgY29udGFpbmVyIElEIHRoYXQncyBhc3NpZ25lZCBieSB0aGUgRG9ja2VyIGRhZW1vbiBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlLiBCZWNhdXNlIGl0J3MgZGlmZmljdWx0IHRvIHRyYWNlIGxvZ3MgYmFjayB0byB0aGUgY29udGFpbmVyIHRoYXQgc2VudCB0aGVtIHdpdGgganVzdCB0aGUgRG9ja2VyIGNvbnRhaW5lciBJRCAod2hpY2ggaXMgb25seSBhdmFpbGFibGUgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSksIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24uIEZvciBBbWF6b24gRUNTIHNlcnZpY2VzLCB5b3UgY2FuIHVzZSB0aGUgc2VydmljZSBuYW1lIGFzIHRoZSBwcmVmaXguIERvaW5nIHNvLCB5b3UgY2FuIHRyYWNlIGxvZyBzdHJlYW1zIHRvIHRoZSBzZXJ2aWNlIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLCB0aGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIHRoYXQgc2VudCB0aGVtLCBhbmQgdGhlIElEIG9mIHRoZSB0YXNrIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLiBZb3UgbXVzdCBzcGVjaWZ5IGEgc3RyZWFtLXByZWZpeCBmb3IgeW91ciBsb2dzIHRvIGhhdmUgeW91ciBsb2dzIGFwcGVhciBpbiB0aGUgTG9nIHBhbmUgd2hlbiB1c2luZyB0aGUgQW1hem9uIEVDUyBjb25zb2xlLiArIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IFJlcXVpcmVkOiBObyBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gaW4gUHl0aG9uIHN0cmZ0aW1lIGZvcm1hdC4gQSBsb2cgbWVzc2FnZSBjb25zaXN0cyBvZiBhIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGFuZCBhbnkgZm9sbG93aW5nIGxpbmVzIHRoYXQgZG9u4oCZdCBtYXRjaCB0aGUgcGF0dGVybi4gVGhlIG1hdGNoZWQgbGluZSBpcyB0aGUgZGVsaW1pdGVyIGJldHdlZW4gbG9nIG1lc3NhZ2VzLiBPbmUgZXhhbXBsZSBvZiBhIHVzZSBjYXNlIGZvciB1c2luZyB0aGlzIGZvcm1hdCBpcyBmb3IgcGFyc2luZyBvdXRwdXQgc3VjaCBhcyBhIHN0YWNrIGR1bXAsIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBiZSBsb2dnZWQgaW4gbXVsdGlwbGUgZW50cmllcy4gVGhlIGNvcnJlY3QgcGF0dGVybiBhbGxvd3MgaXQgdG8gYmUgY2FwdHVyZWQgaW4gYSBzaW5nbGUgZW50cnkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQuIFlvdSBjYW5ub3QgY29uZmlndXJlIGJvdGggdGhlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGFuZCBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIG9wdGlvbnMuIE11bHRpbGluZSBsb2dnaW5nIHBlcmZvcm1zIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBtYXRjaGluZyBvZiBhbGwgbG9nIG1lc3NhZ2VzLiBUaGlzIG1pZ2h0IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbG9nZ2luZyBwZXJmb3JtYW5jZS4gKyBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIFJlcXVpcmVkOiBObyBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gdGhhdCB1c2VzIGEgcmVndWxhciBleHByZXNzaW9uLiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybi4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBpcyBhbHNvIGNvbmZpZ3VyZWQuIFlvdSBjYW5ub3QgY29uZmlndXJlIGJvdGggdGhlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGFuZCBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIG9wdGlvbnMuIE11bHRpbGluZSBsb2dnaW5nIHBlcmZvcm1zIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBtYXRjaGluZyBvZiBhbGwgbG9nIG1lc3NhZ2VzLiBUaGlzIG1pZ2h0IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbG9nZ2luZyBwZXJmb3JtYW5jZS4gKyBtb2RlIFJlcXVpcmVkOiBObyBWYWxpZCB2YWx1ZXM6IG5vbi1ibG9ja2luZyB8IGJsb2NraW5nIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIGRlbGl2ZXJ5IG1vZGUgb2YgbG9nIG1lc3NhZ2VzIGZyb20gdGhlIGNvbnRhaW5lciB0byBDbG91ZFdhdGNoIExvZ3MuIFRoZSBkZWxpdmVyeSBtb2RlIHlvdSBjaG9vc2UgYWZmZWN0cyBhcHBsaWNhdGlvbiBhdmFpbGFiaWxpdHkgd2hlbiB0aGUgZmxvdyBvZiBsb2dzIGZyb20gY29udGFpbmVyIHRvIENsb3VkV2F0Y2ggaXMgaW50ZXJydXB0ZWQuIElmIHlvdSB1c2UgdGhlIGJsb2NraW5nIG1vZGUgYW5kIHRoZSBmbG93IG9mIGxvZ3MgdG8gQ2xvdWRXYXRjaCBpcyBpbnRlcnJ1cHRlZCwgY2FsbHMgZnJvbSBjb250YWluZXIgY29kZSB0byB3cml0ZSB0byB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyB3aWxsIGJsb2NrLiBUaGUgbG9nZ2luZyB0aHJlYWQgb2YgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmxvY2sgYXMgYSByZXN1bHQuIFRoaXMgbWF5IGNhdXNlIHRoZSBhcHBsaWNhdGlvbiB0byBiZWNvbWUgdW5yZXNwb25zaXZlIGFuZCBsZWFkIHRvIGNvbnRhaW5lciBoZWFsdGhjaGVjayBmYWlsdXJlLiBJZiB5b3UgdXNlIHRoZSBub24tYmxvY2tpbmcgbW9kZSwgdGhlIGNvbnRhaW5lcidzIGxvZ3MgYXJlIGluc3RlYWQgc3RvcmVkIGluIGFuIGluLW1lbW9yeSBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvbmZpZ3VyZWQgd2l0aCB0aGUgbWF4LWJ1ZmZlci1zaXplIG9wdGlvbi4gVGhpcyBwcmV2ZW50cyB0aGUgYXBwbGljYXRpb24gZnJvbSBiZWNvbWluZyB1bnJlc3BvbnNpdmUgd2hlbiBsb2dzIGNhbm5vdCBiZSBzZW50IHRvIENsb3VkV2F0Y2guIFdlIHJlY29tbWVuZCB1c2luZyB0aGlzIG1vZGUgaWYgeW91IHdhbnQgdG8gZW5zdXJlIHNlcnZpY2UgYXZhaWxhYmlsaXR5IGFuZCBhcmUgb2theSB3aXRoIHNvbWUgbG9nIGxvc3MuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUHJldmVudGluZyBsb2cgbG9zcyB3aXRoIG5vbi1ibG9ja2luZyBtb2RlIGluIHRoZSBhd3Nsb2dzIGNvbnRhaW5lciBsb2cgZHJpdmVyLiArIG1heC1idWZmZXItc2l6ZSBSZXF1aXJlZDogTm8gRGVmYXVsdCB2YWx1ZTogMW0gV2hlbiBub24tYmxvY2tpbmcgbW9kZSBpcyB1c2VkLCB0aGUgbWF4LWJ1ZmZlci1zaXplIGxvZyBvcHRpb24gY29udHJvbHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0aGF0J3MgdXNlZCBmb3IgaW50ZXJtZWRpYXRlIG1lc3NhZ2Ugc3RvcmFnZS4gTWFrZSBzdXJlIHRvIHNwZWNpZnkgYW4gYWRlcXVhdGUgYnVmZmVyIHNpemUgYmFzZWQgb24geW91ciBhcHBsaWNhdGlvbi4gV2hlbiB0aGUgYnVmZmVyIGZpbGxzIHVwLCBmdXJ0aGVyIGxvZ3MgY2Fubm90IGJlIHN0b3JlZC4gTG9ncyB0aGF0IGNhbm5vdCBiZSBzdG9yZWQgYXJlIGxvc3QuIFxuICogIFRvIHJvdXRlIGxvZ3MgdXNpbmcgdGhlIGBgc3BsdW5rYGAgbG9nIHJvdXRlciwgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGBgc3BsdW5rLXRva2VuYGAgYW5kIGEgYGBzcGx1bmstdXJsYGAuXG4gKiAgV2hlbiB5b3UgdXNlIHRoZSBgYGF3c2ZpcmVsZW5zYGAgbG9nIHJvdXRlciB0byByb3V0ZSBsb2dzIHRvIGFuIEFXUyBTZXJ2aWNlIG9yIEFXUyBQYXJ0bmVyIE5ldHdvcmsgZGVzdGluYXRpb24gZm9yIGxvZyBzdG9yYWdlIGFuZCBhbmFseXRpY3MsIHlvdSBjYW4gc2V0IHRoZSBgYGxvZy1kcml2ZXItYnVmZmVyLWxpbWl0YGAgb3B0aW9uIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgYXJlIGJ1ZmZlcmVkIGluIG1lbW9yeSwgYmVmb3JlIGJlaW5nIHNlbnQgdG8gdGhlIGxvZyByb3V0ZXIgY29udGFpbmVyLiBJdCBjYW4gaGVscCB0byByZXNvbHZlIHBvdGVudGlhbCBsb2cgbG9zcyBpc3N1ZSBiZWNhdXNlIGhpZ2ggdGhyb3VnaHB1dCBtaWdodCByZXN1bHQgaW4gbWVtb3J5IHJ1bm5pbmcgb3V0IGZvciB0aGUgYnVmZmVyIGluc2lkZSBvZiBEb2NrZXIuXG4gKiAgT3RoZXIgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB1c2luZyBgYGF3c2ZpcmVsZW5zYGAgdG8gcm91dGUgbG9ncyBkZXBlbmQgb24gdGhlIGRlc3RpbmF0aW9uLiBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gRGF0YSBGaXJlaG9zZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBBV1MgUmVnaW9uIHdpdGggYGByZWdpb25gYCBhbmQgYSBuYW1lIGZvciB0aGUgbG9nIHN0cmVhbSB3aXRoIGBgZGVsaXZlcnlfc3RyZWFtYGAuXG4gKiAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIEtpbmVzaXMgRGF0YSBTdHJlYW1zLCB5b3UgY2FuIHNwZWNpZnkgYW4gQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgZGF0YSBzdHJlYW0gbmFtZSB3aXRoIGBgc3RyZWFtYGAuXG4gKiAgIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UsIHlvdSBjYW4gc3BlY2lmeSBvcHRpb25zIGxpa2UgYGBOYW1lYGAsIGBgSG9zdGBgIChPcGVuU2VhcmNoIFNlcnZpY2UgZW5kcG9pbnQgd2l0aG91dCBwcm90b2NvbCksIGBgUG9ydGBgLCBgYEluZGV4YGAsIGBgVHlwZWBgLCBgYEF3c19hdXRoYGAsIGBgQXdzX3JlZ2lvbmBgLCBgYFN1cHByZXNzX1R5cGVfTmFtZWBgLCBhbmQgYGB0bHNgYC5cbiAqICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gUzMsIHlvdSBjYW4gc3BlY2lmeSB0aGUgYnVja2V0IHVzaW5nIHRoZSBgYGJ1Y2tldGBgIG9wdGlvbi4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYGByZWdpb25gYCwgYGB0b3RhbF9maWxlX3NpemVgYCwgYGB1cGxvYWRfdGltZW91dGBgLCBhbmQgYGB1c2VfcHV0X29iamVjdGBgIGFzIG9wdGlvbnMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjE5IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLiBUbyBjaGVjayB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgdmVyc2lvbiBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSwgbG9nIGluIHRvIHlvdXIgY29udGFpbmVyIGluc3RhbmNlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOiBgYHN1ZG8gZG9ja2VyIHZlcnNpb24gLS1mb3JtYXQgJ3t7LlNlcnZlci5BUElWZXJzaW9ufX0nYGBcbiAqL1xuT3B0aW9ucz86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLnsxLH1cIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIGRyaXZlciB0byB1c2UgZm9yIHRoZSBjb250YWluZXIuXG4gKiAgRm9yIHRhc2tzIG9uIEZBUkdBVEVsb25nLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgdGFza3MgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBmbHVlbnRkYGAsIGBgZ2VsZmBgLCBgYGpzb24tZmlsZWBgLCBgYGpvdXJuYWxkYGAsIGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gQ2xvdWRXYXRjaF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfYXdzbG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzZmlyZWxlbnNgYCBsb2cgZHJpdmVyLCBzZWUgW1NlbmQgQW1hem9uIEVDUyBsb2dzIHRvIGFuIHNlcnZpY2Ugb3IgUGFydG5lcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfZmlyZWxlbnMuaHRtbCkuXG4gKiAgIElmIHlvdSBoYXZlIGEgY3VzdG9tIGRyaXZlciB0aGF0IGlzbid0IGxpc3RlZCwgeW91IGNhbiBmb3JrIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBwcm9qZWN0IHRoYXQncyBbYXZhaWxhYmxlIG9uIEdpdEh1Yl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYW1hem9uLWVjcy1hZ2VudCkgYW5kIGN1c3RvbWl6ZSBpdCB0byB3b3JrIHdpdGggdGhhdCBkcml2ZXIuIFdlIGVuY291cmFnZSB5b3UgdG8gc3VibWl0IHB1bGwgcmVxdWVzdHMgZm9yIGNoYW5nZXMgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBoYXZlIGluY2x1ZGVkLiBIb3dldmVyLCB3ZSBkb24ndCBjdXJyZW50bHkgcHJvdmlkZSBzdXBwb3J0IGZvciBydW5uaW5nIG1vZGlmaWVkIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLlxuICovXG5Mb2dEcml2ZXI/OiBzdHJpbmdcbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2VjcmV0IHRvIGV4cG9zZSB0byB5b3VyIGNvbnRhaW5lci4gU2VjcmV0cyBjYW4gYmUgZXhwb3NlZCB0byBhIGNvbnRhaW5lciBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAgICsgIFRvIGluamVjdCBzZW5zaXRpdmUgZGF0YSBpbnRvIHlvdXIgY29udGFpbmVycyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHVzZSB0aGUgYGBzZWNyZXRzYGAgY29udGFpbmVyIGRlZmluaXRpb24gcGFyYW1ldGVyLlxuICogICArICBUbyByZWZlcmVuY2Ugc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIHRoZSBsb2cgY29uZmlndXJhdGlvbiBvZiBhIGNvbnRhaW5lciwgdXNlIHRoZSBgYHNlY3JldE9wdGlvbnNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgc2Vuc2l0aXZlIGRhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldCB7XG4vKipcbiAqIFRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHRoZSBjb250YWluZXIuIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9mIHRoZSBBU01sb25nIHNlY3JldCBvciB0aGUgZnVsbCBBUk4gb2YgdGhlIHBhcmFtZXRlciBpbiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZS5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVpcmUgSUFNbG9uZyBwZXJtaXNzaW9ucywgc2VlIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1zZWNyZXRzLmh0bWwjc2VjcmV0cy1pYW0pIChmb3IgU2VjcmV0cyBNYW5hZ2VyKSBvciBbUmVxdWlyZWQgSUFNIHBlcm1pc3Npb25zIGZvciBBbWF6b24gRUNTIHNlY3JldHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEtcGFyYW1ldGVycy5odG1sKSAoZm9yIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgc3RvcmUpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgdGhlIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGFyYW1ldGVyIGV4aXN0cyBpbiB0aGUgc2FtZSBSZWdpb24gYXMgdGhlIHRhc2sgeW91J3JlIGxhdW5jaGluZywgdGhlbiB5b3UgY2FuIHVzZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9yIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4gSWYgdGhlIHBhcmFtZXRlciBleGlzdHMgaW4gYSBkaWZmZXJlbnQgUmVnaW9uLCB0aGVuIHRoZSBmdWxsIEFSTiBtdXN0IGJlIHNwZWNpZmllZC5cbiAqL1xuVmFsdWVGcm9tOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHNlY3JldC5cbiAqL1xuTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgdG8gdXNlIGZvciB0aGUgc2VydmljZS4gSWYgbm8gZGVwbG95bWVudCBjb250cm9sbGVyIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBFQ1NgYCBpcyB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDb250cm9sbGVyIHtcbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlIHRvIHVzZS4gVGhlcmUgYXJlIHRocmVlIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlcyBhdmFpbGFibGU6XG4gKiAgICsgRUNTIFRoZSByb2xsaW5nIHVwZGF0ZSAoRUNTKSBkZXBsb3ltZW50IHR5cGUgaW52b2x2ZXMgcmVwbGFjaW5nIHRoZSBjdXJyZW50IHJ1bm5pbmcgdmVyc2lvbiBvZiB0aGUgY29udGFpbmVyIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uLiBUaGUgbnVtYmVyIG9mIGNvbnRhaW5lcnMgQW1hem9uIEVDUyBhZGRzIG9yIHJlbW92ZXMgZnJvbSB0aGUgc2VydmljZSBkdXJpbmcgYSByb2xsaW5nIHVwZGF0ZSBpcyBjb250cm9sbGVkIGJ5IGFkanVzdGluZyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgaGVhbHRoeSB0YXNrcyBhbGxvd2VkIGR1cmluZyBhIHNlcnZpY2UgZGVwbG95bWVudCwgYXMgc3BlY2lmaWVkIGluIHRoZSBEZXBsb3ltZW50Q29uZmlndXJhdGlvbi4gKyBDT0RFX0RFUExPWSBUaGUgYmx1ZS9ncmVlbiAoQ09ERV9ERVBMT1kpIGRlcGxveW1lbnQgdHlwZSB1c2VzIHRoZSBibHVlL2dyZWVuIGRlcGxveW1lbnQgbW9kZWwgcG93ZXJlZCBieSAsIHdoaWNoIGFsbG93cyB5b3UgdG8gdmVyaWZ5IGEgbmV3IGRlcGxveW1lbnQgb2YgYSBzZXJ2aWNlIGJlZm9yZSBzZW5kaW5nIHByb2R1Y3Rpb24gdHJhZmZpYyB0byBpdC4gKyBFWFRFUk5BTCBUaGUgZXh0ZXJuYWwgKEVYVEVSTkFMKSBkZXBsb3ltZW50IHR5cGUgZW5hYmxlcyB5b3UgdG8gdXNlIGFueSB0aGlyZC1wYXJ0eSBkZXBsb3ltZW50IGNvbnRyb2xsZXIgZm9yIGZ1bGwgY29udHJvbCBvdmVyIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MgZm9yIGFuIEFtYXpvbiBFQ1Mgc2VydmljZS5cbiAqL1xuVHlwZT86IChcIkNPREVfREVQTE9ZXCIgfCBcIkVDU1wiIHwgXCJFWFRFUk5BTFwiKVxufVxuLyoqXG4gKiBPcHRpb25hbCBkZXBsb3ltZW50IHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIGhvdyBtYW55IHRhc2tzIHJ1biBkdXJpbmcgdGhlIGRlcGxveW1lbnQgYW5kIHRoZSBvcmRlcmluZyBvZiBzdG9wcGluZyBhbmQgc3RhcnRpbmcgdGFza3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudENvbmZpZ3VyYXRpb24ge1xuQWxhcm1zPzogRGVwbG95bWVudEFsYXJtc1xuRGVwbG95bWVudENpcmN1aXRCcmVha2VyPzogRGVwbG95bWVudENpcmN1aXRCcmVha2VyXG4vKipcbiAqIElmIGEgc2VydmljZSBpcyB1c2luZyB0aGUgcm9sbGluZyB1cGRhdGUgKGBgRUNTYGApIGRlcGxveW1lbnQgdHlwZSwgdGhlIGBgbWF4aW11bVBlcmNlbnRgYCBwYXJhbWV0ZXIgcmVwcmVzZW50cyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHlvdXIgc2VydmljZSdzIHRhc2tzIHRoYXQgYXJlIGFsbG93ZWQgaW4gdGhlIGBgUlVOTklOR2BgIG9yIGBgUEVORElOR2BgIHN0YXRlIGR1cmluZyBhIGRlcGxveW1lbnQsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYGBkZXNpcmVkQ291bnRgYCAocm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IGludGVnZXIpLiBUaGlzIHBhcmFtZXRlciBlbmFibGVzIHlvdSB0byBkZWZpbmUgdGhlIGRlcGxveW1lbnQgYmF0Y2ggc2l6ZS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2VydmljZSBpcyB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgYW5kIGhhcyBhIGBgZGVzaXJlZENvdW50YGAgb2YgZm91ciB0YXNrcyBhbmQgYSBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgb2YgMjAwJSwgdGhlIHNjaGVkdWxlciBtYXkgc3RhcnQgZm91ciBuZXcgdGFza3MgYmVmb3JlIHN0b3BwaW5nIHRoZSBmb3VyIG9sZGVyIHRhc2tzIChwcm92aWRlZCB0aGF0IHRoZSBjbHVzdGVyIHJlc291cmNlcyByZXF1aXJlZCB0byBkbyB0aGlzIGFyZSBhdmFpbGFibGUpLiBUaGUgZGVmYXVsdCBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBSRVBMSUNBYGAgc2VydmljZSBzY2hlZHVsZXIgaXMgMjAwJS5cbiAqICBJZiBhIHNlcnZpY2UgaXMgdXNpbmcgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzLCBhbmQgdGFza3MgaW4gdGhlIHNlcnZpY2UgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoZSAqbWF4aW11bSBwZXJjZW50KiB2YWx1ZSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFRoZSAqbWF4aW11bSBwZXJjZW50KiB2YWx1ZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB0aGUgdGFza3MgaW4gdGhlIHNlcnZpY2UgdGhhdCByZW1haW4gaW4gdGhlIGBgUlVOTklOR2BgIHN0YXRlIHdoaWxlIHRoZSBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBpbiB0aGUgYGBEUkFJTklOR2BgIHN0YXRlLlxuICogICBZb3UgY2FuJ3Qgc3BlY2lmeSBhIGN1c3RvbSBgYG1heGltdW1QZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB0aGF0IHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBoYXMgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZS5cbiAqICAgSWYgdGhlIHRhc2tzIGluIHRoZSBzZXJ2aWNlIHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1heGltdW0gcGVyY2VudCB2YWx1ZSBpcyBub3QgdXNlZCwgYWx0aG91Z2ggaXQgaXMgcmV0dXJuZWQgd2hlbiBkZXNjcmliaW5nIHlvdXIgc2VydmljZS5cbiAqL1xuTWF4aW11bVBlcmNlbnQ/OiBudW1iZXJcbi8qKlxuICogSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLCB0aGUgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCByZXByZXNlbnRzIGEgbG93ZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB5b3VyIHNlcnZpY2UncyB0YXNrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBgYFJVTk5JTkdgYCBzdGF0ZSBkdXJpbmcgYSBkZXBsb3ltZW50LCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGBgZGVzaXJlZENvdW50YGAgKHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcikuIFRoaXMgcGFyYW1ldGVyIGVuYWJsZXMgeW91IHRvIGRlcGxveSB3aXRob3V0IHVzaW5nIGFkZGl0aW9uYWwgY2x1c3RlciBjYXBhY2l0eS4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2VydmljZSBoYXMgYSBgYGRlc2lyZWRDb3VudGBgIG9mIGZvdXIgdGFza3MgYW5kIGEgYGBtaW5pbXVtSGVhbHRoeVBlcmNlbnRgYCBvZiA1MCUsIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBtYXkgc3RvcCB0d28gZXhpc3RpbmcgdGFza3MgdG8gZnJlZSB1cCBjbHVzdGVyIGNhcGFjaXR5IGJlZm9yZSBzdGFydGluZyB0d28gbmV3IHRhc2tzLiBcbiAqICBGb3Igc2VydmljZXMgdGhhdCAqZG8gbm90KiB1c2UgYSBsb2FkIGJhbGFuY2VyLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBub3RlZDpcbiAqICAgKyAgQSBzZXJ2aWNlIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSBpZiBhbGwgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBwYXNzIHRoZWlyIGhlYWx0aCBjaGVja3MuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciA0MCBzZWNvbmRzIGFmdGVyIGEgdGFzayByZWFjaGVzIGEgYGBSVU5OSU5HYGAgc3RhdGUgYmVmb3JlIHRoZSB0YXNrIGlzIGNvdW50ZWQgdG93YXJkcyB0aGUgbWluaW11bSBoZWFsdGh5IHBlcmNlbnQgdG90YWwuXG4gKiAgICsgIElmIGEgdGFzayBoYXMgb25lIG9yIG1vcmUgZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyBpdCB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC4gQSB0YXNrIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSB3aGVuIGFsbCBlc3NlbnRpYWwgY29udGFpbmVycyB3aXRoaW4gdGhlIHRhc2sgaGF2ZSBwYXNzZWQgdGhlaXIgaGVhbHRoIGNoZWNrcy4gVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2aWNlIHNjaGVkdWxlciBjYW4gd2FpdCBmb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY29udGFpbmVyIGhlYWx0aCBjaGVjayBzZXR0aW5ncy4gXG4gKiAgIFxuICogIEZvciBzZXJ2aWNlcyB0aGF0ICpkbyogdXNlIGEgbG9hZCBiYWxhbmNlciwgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgbm90ZWQ6XG4gKiAgICsgIElmIGEgdGFzayBoYXMgbm8gZXNzZW50aWFsIGNvbnRhaW5lcnMgd2l0aCBhIGhlYWx0aCBjaGVjayBkZWZpbmVkLCB0aGUgc2VydmljZSBzY2hlZHVsZXIgd2lsbCB3YWl0IGZvciB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgKyAgSWYgYSB0YXNrIGhhcyBhbiBlc3NlbnRpYWwgY29udGFpbmVyIHdpdGggYSBoZWFsdGggY2hlY2sgZGVmaW5lZCwgdGhlIHNlcnZpY2Ugc2NoZWR1bGVyIHdpbGwgd2FpdCBmb3IgYm90aCB0aGUgdGFzayB0byByZWFjaCBhIGhlYWx0aHkgc3RhdHVzIGFuZCB0aGUgbG9hZCBiYWxhbmNlciB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrIHRvIHJldHVybiBhIGhlYWx0aHkgc3RhdHVzIGJlZm9yZSBjb3VudGluZyB0aGUgdGFzayB0b3dhcmRzIHRoZSBtaW5pbXVtIGhlYWx0aHkgcGVyY2VudCB0b3RhbC5cbiAqICAgXG4gKiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgcmVwbGljYSBzZXJ2aWNlIGZvciBgYG1pbmltdW1IZWFsdGh5UGVyY2VudGBgIGlzIDEwMCUuIFRoZSBkZWZhdWx0IGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB1c2luZyB0aGUgYGBEQUVNT05gYCBzZXJ2aWNlIHNjaGVkdWxlIGlzIDAlIGZvciB0aGUgQ0xJLCB0aGUgQVdTIFNES3MsIGFuZCB0aGUgQVBJcyBhbmQgNTAlIGZvciB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS5cbiAqICBUaGUgbWluaW11bSBudW1iZXIgb2YgaGVhbHRoeSB0YXNrcyBkdXJpbmcgYSBkZXBsb3ltZW50IGlzIHRoZSBgYGRlc2lyZWRDb3VudGBgIG11bHRpcGxpZWQgYnkgdGhlIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAvMTAwLCByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuXG4gKiAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgKm1pbmltdW0gaGVhbHRoeSBwZXJjZW50KiB2YWx1ZSBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIFRoZSAqbWluaW11bSBoZWFsdGh5IHBlcmNlbnQqIHZhbHVlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBsb3dlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSB0aGF0IHJlbWFpbiBpbiB0aGUgYGBSVU5OSU5HYGAgc3RhdGUgd2hpbGUgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGluIHRoZSBgYERSQUlOSU5HYGAgc3RhdGUuXG4gKiAgIFlvdSBjYW4ndCBzcGVjaWZ5IGEgY3VzdG9tIGBgbWluaW11bUhlYWx0aHlQZXJjZW50YGAgdmFsdWUgZm9yIGEgc2VydmljZSB0aGF0IHVzZXMgZWl0aGVyIHRoZSBibHVlL2dyZWVuIChgYENPREVfREVQTE9ZYGApIG9yIGBgRVhURVJOQUxgYCBkZXBsb3ltZW50IHR5cGVzIGFuZCBoYXMgdGFza3MgdGhhdCB1c2UgdGhlIEVDMiBsYXVuY2ggdHlwZS5cbiAqICAgSWYgYSBzZXJ2aWNlIGlzIHVzaW5nIGVpdGhlciB0aGUgYmx1ZS9ncmVlbiAoYGBDT0RFX0RFUExPWWBgKSBvciBgYEVYVEVSTkFMYGAgZGVwbG95bWVudCB0eXBlcyBhbmQgaXMgcnVubmluZyB0YXNrcyB0aGF0IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIG1pbmltdW0gaGVhbHRoeSBwZXJjZW50IHZhbHVlIGlzIG5vdCB1c2VkLCBhbHRob3VnaCBpdCBpcyByZXR1cm5lZCB3aGVuIGRlc2NyaWJpbmcgeW91ciBzZXJ2aWNlLlxuICovXG5NaW5pbXVtSGVhbHRoeVBlcmNlbnQ/OiBudW1iZXJcbn1cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIENsb3VkV2F0Y2ggYWxhcm1zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRBbGFybXMge1xuLyoqXG4gKiBPbmUgb3IgbW9yZSBDbG91ZFdhdGNoIGFsYXJtIG5hbWVzLiBVc2UgYSBcIixcIiB0byBzZXBhcmF0ZSB0aGUgYWxhcm1zLlxuICovXG5BbGFybU5hbWVzOiBzdHJpbmdbXVxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBDbG91ZFdhdGNoIGFsYXJtIG9wdGlvbiBpbiB0aGUgc2VydmljZSBkZXBsb3ltZW50IHByb2Nlc3MuXG4gKi9cbkVuYWJsZTogYm9vbGVhblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29uZmlndXJlIEFtYXpvbiBFQ1MgdG8gcm9sbCBiYWNrIHRoZSBzZXJ2aWNlIGlmIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLiBJZiByb2xsYmFjayBpcyB1c2VkLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuUm9sbGJhY2s6IGJvb2xlYW5cbn1cbi8qKlxuICogVGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHNlcnZpY2VzIHVzaW5nIHRoZSByb2xsaW5nIHVwZGF0ZSAoYGBFQ1NgYCkgZGVwbG95bWVudCB0eXBlLlxuICogICBUaGUgKmRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyKiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBzZXJ2aWNlIGRlcGxveW1lbnQgd2lsbCBmYWlsIGlmIHRoZSBzZXJ2aWNlIGNhbid0IHJlYWNoIGEgc3RlYWR5IHN0YXRlLiBJZiB5b3UgdXNlIHRoZSBkZXBsb3ltZW50IGNpcmN1aXQgYnJlYWtlciwgYSBzZXJ2aWNlIGRlcGxveW1lbnQgd2lsbCB0cmFuc2l0aW9uIHRvIGEgZmFpbGVkIHN0YXRlIGFuZCBzdG9wIGxhdW5jaGluZyBuZXcgdGFza3MuIElmIHlvdSB1c2UgdGhlIHJvbGxiYWNrIG9wdGlvbiwgd2hlbiBhIHNlcnZpY2UgZGVwbG95bWVudCBmYWlscywgdGhlIHNlcnZpY2UgaXMgcm9sbGVkIGJhY2sgdG8gdGhlIGxhc3QgZGVwbG95bWVudCB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JvbGxpbmcgdXBkYXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtZWNzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRDaXJjdWl0QnJlYWtlciB7XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIGRlcGxveW1lbnQgY2lyY3VpdCBicmVha2VyIGxvZ2ljIGZvciB0aGUgc2VydmljZS5cbiAqL1xuRW5hYmxlOiBib29sZWFuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0byBjb25maWd1cmUgQW1hem9uIEVDUyB0byByb2xsIGJhY2sgdGhlIHNlcnZpY2UgaWYgYSBzZXJ2aWNlIGRlcGxveW1lbnQgZmFpbHMuIElmIHJvbGxiYWNrIGlzIG9uLCB3aGVuIGEgc2VydmljZSBkZXBsb3ltZW50IGZhaWxzLCB0aGUgc2VydmljZSBpcyByb2xsZWQgYmFjayB0byB0aGUgbGFzdCBkZXBsb3ltZW50IHRoYXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cbiAqL1xuUm9sbGJhY2s6IGJvb2xlYW5cbn1cbiJdfQ==
@@ -3,46 +3,51 @@
3
3
  */
4
4
  export interface _AWS_ECS_TASKSET {
5
5
  /**
6
- * The short name or full Amazon Resource Name (ARN) of the cluster that hosts the service to create the task set in.
6
+ * The platform version that the tasks in the task set should use. A platform version is specified only for tasks using the Fargate launch type. If one isn't specified, the LATEST platform version is used by default.
7
7
  */
8
- Cluster: string;
8
+ PlatformVersion?: string;
9
9
  /**
10
10
  * An optional non-unique tag that identifies this task set in external systems. If the task set is associated with a service discovery registry, the tasks in this task set will have the ECS_TASK_SET_EXTERNAL_ID AWS Cloud Map attribute set to the provided value.
11
11
  */
12
12
  ExternalId?: string;
13
13
  /**
14
- * The ID of the task set.
15
- */
16
- Id?: string;
17
- /**
18
- * The launch type that new tasks in the task set will use. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html in the Amazon Elastic Container Service Developer Guide.
14
+ * The short name or full Amazon Resource Name (ARN) of the cluster that hosts the service to create the task set in.
19
15
  */
20
- LaunchType?: ("EC2" | "FARGATE");
16
+ Cluster: string;
21
17
  LoadBalancers?: LoadBalancer[];
22
- NetworkConfiguration?: NetworkConfiguration;
23
- /**
24
- * The platform version that the tasks in the task set should use. A platform version is specified only for tasks using the Fargate launch type. If one isn't specified, the LATEST platform version is used by default.
25
- */
26
- PlatformVersion?: string;
27
- Scale?: Scale;
28
18
  /**
29
19
  * The short name or full Amazon Resource Name (ARN) of the service to create the task set in.
30
20
  */
31
21
  Service: string;
22
+ Scale?: Scale;
32
23
  /**
33
24
  * The details of the service discovery registries to assign to this task set. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html.
34
25
  */
35
26
  ServiceRegistries?: ServiceRegistry[];
36
- Tags?: Tag[];
27
+ CapacityProviderStrategy?: CapacityProviderStrategyItem[];
28
+ /**
29
+ * The launch type that new tasks in the task set will use. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html in the Amazon Elastic Container Service Developer Guide.
30
+ */
31
+ LaunchType?: ("EC2" | "FARGATE");
37
32
  /**
38
33
  * The short name or full Amazon Resource Name (ARN) of the task definition for the tasks in the task set to use.
39
34
  */
40
35
  TaskDefinition: string;
36
+ NetworkConfiguration?: NetworkConfiguration;
37
+ /**
38
+ * The ID of the task set.
39
+ */
40
+ Id?: string;
41
+ Tags?: Tag[];
41
42
  }
42
43
  /**
43
44
  * A load balancer object representing the load balancer to use with the task set. The supported load balancer types are either an Application Load Balancer or a Network Load Balancer.
44
45
  */
45
46
  export interface LoadBalancer {
47
+ /**
48
+ * The full Amazon Resource Name (ARN) of the Elastic Load Balancing target group or groups associated with a service or task set. A target group ARN is only specified when using an Application Load Balancer or Network Load Balancer. If you are using a Classic Load Balancer this should be omitted. For services using the ECS deployment controller, you can specify one or multiple target groups. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html in the Amazon Elastic Container Service Developer Guide. For services using the CODE_DEPLOY deployment controller, you are required to define two target groups for the load balancer. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-bluegreen.html in the Amazon Elastic Container Service Developer Guide. If your service's task definition uses the awsvpc network mode (which is required for the Fargate launch type), you must choose ip as the target type, not instance, when creating your target groups because tasks that use the awsvpc network mode are associated with an elastic network interface, not an Amazon EC2 instance.
49
+ */
50
+ TargetGroupArn?: string;
46
51
  /**
47
52
  * The name of the container (as it appears in a container definition) to associate with the load balancer.
48
53
  */
@@ -51,10 +56,42 @@ export interface LoadBalancer {
51
56
  * The port on the container to associate with the load balancer. This port must correspond to a containerPort in the task definition the tasks in the service are using. For tasks that use the EC2 launch type, the container instance they are launched on must allow ingress traffic on the hostPort of the port mapping.
52
57
  */
53
58
  ContainerPort?: number;
59
+ }
60
+ /**
61
+ * A floating-point percentage of the desired number of tasks to place and keep running in the task set.
62
+ */
63
+ export interface Scale {
54
64
  /**
55
- * The full Amazon Resource Name (ARN) of the Elastic Load Balancing target group or groups associated with a service or task set. A target group ARN is only specified when using an Application Load Balancer or Network Load Balancer. If you are using a Classic Load Balancer this should be omitted. For services using the ECS deployment controller, you can specify one or multiple target groups. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html in the Amazon Elastic Container Service Developer Guide. For services using the CODE_DEPLOY deployment controller, you are required to define two target groups for the load balancer. For more information, see https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-bluegreen.html in the Amazon Elastic Container Service Developer Guide. If your service's task definition uses the awsvpc network mode (which is required for the Fargate launch type), you must choose ip as the target type, not instance, when creating your target groups because tasks that use the awsvpc network mode are associated with an elastic network interface, not an Amazon EC2 instance.
65
+ * The value, specified as a percent total of a service's desiredCount, to scale the task set. Accepted values are numbers between 0 and 100.
56
66
  */
57
- TargetGroupArn?: string;
67
+ Value?: number;
68
+ /**
69
+ * The unit of measure for the scale value.
70
+ */
71
+ Unit?: "PERCENT";
72
+ }
73
+ export interface ServiceRegistry {
74
+ /**
75
+ * The container name value, already specified in the task definition, to be used for your service discovery service. If the task definition that your service task specifies uses the bridge or host network mode, you must specify a containerName and containerPort combination from the task definition. If the task definition that your service task specifies uses the awsvpc network mode and a type SRV DNS record is used, you must specify either a containerName and containerPort combination or a port value, but not both.
76
+ */
77
+ ContainerName?: string;
78
+ /**
79
+ * The port value used if your service discovery service specified an SRV record. This field may be used if both the awsvpc network mode and SRV records are used.
80
+ */
81
+ Port?: number;
82
+ /**
83
+ * The port value, already specified in the task definition, to be used for your service discovery service. If the task definition your service task specifies uses the bridge or host network mode, you must specify a containerName and containerPort combination from the task definition. If the task definition your service task specifies uses the awsvpc network mode and a type SRV DNS record is used, you must specify either a containerName and containerPort combination or a port value, but not both.
84
+ */
85
+ ContainerPort?: number;
86
+ /**
87
+ * The Amazon Resource Name (ARN) of the service registry. The currently supported service registry is AWS Cloud Map. For more information, see https://docs.aws.amazon.com/cloud-map/latest/api/API_CreateService.html
88
+ */
89
+ RegistryArn?: string;
90
+ }
91
+ export interface CapacityProviderStrategyItem {
92
+ CapacityProvider?: string;
93
+ Base?: number;
94
+ Weight?: number;
58
95
  }
59
96
  /**
60
97
  * An object representing the network configuration for a task or service.
@@ -66,10 +103,6 @@ export interface NetworkConfiguration {
66
103
  * The VPC subnets and security groups associated with a task. All specified subnets and security groups must be from the same VPC.
67
104
  */
68
105
  export interface AwsVpcConfiguration {
69
- /**
70
- * Whether the task's elastic network interface receives a public IP address. The default value is DISABLED.
71
- */
72
- AssignPublicIp?: ("DISABLED" | "ENABLED");
73
106
  /**
74
107
  * The security groups associated with the task or service. If you do not specify a security group, the default security group for the VPC is used. There is a limit of 5 security groups that can be specified per AwsVpcConfiguration.
75
108
  *
@@ -82,39 +115,12 @@ export interface AwsVpcConfiguration {
82
115
  * @maxItems 16
83
116
  */
84
117
  Subnets: string[];
85
- }
86
- /**
87
- * A floating-point percentage of the desired number of tasks to place and keep running in the task set.
88
- */
89
- export interface Scale {
90
118
  /**
91
- * The unit of measure for the scale value.
92
- */
93
- Unit?: "PERCENT";
94
- /**
95
- * The value, specified as a percent total of a service's desiredCount, to scale the task set. Accepted values are numbers between 0 and 100.
96
- */
97
- Value?: number;
98
- }
99
- export interface ServiceRegistry {
100
- /**
101
- * The container name value, already specified in the task definition, to be used for your service discovery service. If the task definition that your service task specifies uses the bridge or host network mode, you must specify a containerName and containerPort combination from the task definition. If the task definition that your service task specifies uses the awsvpc network mode and a type SRV DNS record is used, you must specify either a containerName and containerPort combination or a port value, but not both.
102
- */
103
- ContainerName?: string;
104
- /**
105
- * The port value, already specified in the task definition, to be used for your service discovery service. If the task definition your service task specifies uses the bridge or host network mode, you must specify a containerName and containerPort combination from the task definition. If the task definition your service task specifies uses the awsvpc network mode and a type SRV DNS record is used, you must specify either a containerName and containerPort combination or a port value, but not both.
106
- */
107
- ContainerPort?: number;
108
- /**
109
- * The port value used if your service discovery service specified an SRV record. This field may be used if both the awsvpc network mode and SRV records are used.
110
- */
111
- Port?: number;
112
- /**
113
- * The Amazon Resource Name (ARN) of the service registry. The currently supported service registry is AWS Cloud Map. For more information, see https://docs.aws.amazon.com/cloud-map/latest/api/API_CreateService.html
119
+ * Whether the task's elastic network interface receives a public IP address. The default value is DISABLED.
114
120
  */
115
- RegistryArn?: string;
121
+ AssignPublicIp?: ("DISABLED" | "ENABLED");
116
122
  }
117
123
  export interface Tag {
118
- Key?: string;
119
124
  Value?: string;
125
+ Key?: string;
120
126
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy10YXNrc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy10YXNrc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZSBhIHRhc2sgc2V0IGluIHRoZSBzcGVjaWZpZWQgY2x1c3RlciBhbmQgc2VydmljZS4gVGhpcyBpcyB1c2VkIHdoZW4gYSBzZXJ2aWNlIHVzZXMgdGhlIEVYVEVSTkFMIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZXMuaHRtbGluIHRoZSBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19FQ1NfVEFTS1NFVCB7XG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGNsdXN0ZXIgdGhhdCBob3N0cyB0aGUgc2VydmljZSB0byBjcmVhdGUgdGhlIHRhc2sgc2V0IGluLlxuICovXG5DbHVzdGVyOiBzdHJpbmdcbi8qKlxuICogQW4gb3B0aW9uYWwgbm9uLXVuaXF1ZSB0YWcgdGhhdCBpZGVudGlmaWVzIHRoaXMgdGFzayBzZXQgaW4gZXh0ZXJuYWwgc3lzdGVtcy4gSWYgdGhlIHRhc2sgc2V0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNlcnZpY2UgZGlzY292ZXJ5IHJlZ2lzdHJ5LCB0aGUgdGFza3MgaW4gdGhpcyB0YXNrIHNldCB3aWxsIGhhdmUgdGhlIEVDU19UQVNLX1NFVF9FWFRFUk5BTF9JRCBBV1MgQ2xvdWQgTWFwIGF0dHJpYnV0ZSBzZXQgdG8gdGhlIHByb3ZpZGVkIHZhbHVlLiBcbiAqL1xuRXh0ZXJuYWxJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIHRhc2sgc2V0LlxuICovXG5JZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGF1bmNoIHR5cGUgdGhhdCBuZXcgdGFza3MgaW4gdGhlIHRhc2sgc2V0IHdpbGwgdXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2xhdW5jaF90eXBlcy5odG1sIGluIHRoZSBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUuIFxuICovXG5MYXVuY2hUeXBlPzogKFwiRUMyXCIgfCBcIkZBUkdBVEVcIilcbkxvYWRCYWxhbmNlcnM/OiBMb2FkQmFsYW5jZXJbXVxuTmV0d29ya0NvbmZpZ3VyYXRpb24/OiBOZXR3b3JrQ29uZmlndXJhdGlvblxuLyoqXG4gKiBUaGUgcGxhdGZvcm0gdmVyc2lvbiB0aGF0IHRoZSB0YXNrcyBpbiB0aGUgdGFzayBzZXQgc2hvdWxkIHVzZS4gQSBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHNwZWNpZmllZCBvbmx5IGZvciB0YXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZS4gSWYgb25lIGlzbid0IHNwZWNpZmllZCwgdGhlIExBVEVTVCBwbGF0Zm9ybSB2ZXJzaW9uIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqL1xuUGxhdGZvcm1WZXJzaW9uPzogc3RyaW5nXG5TY2FsZT86IFNjYWxlXG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHNlcnZpY2UgdG8gY3JlYXRlIHRoZSB0YXNrIHNldCBpbi5cbiAqL1xuU2VydmljZTogc3RyaW5nXG4vKipcbiAqIFRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2aWNlIGRpc2NvdmVyeSByZWdpc3RyaWVzIHRvIGFzc2lnbiB0byB0aGlzIHRhc2sgc2V0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2UtZGlzY292ZXJ5Lmh0bWwuXG4gKi9cblNlcnZpY2VSZWdpc3RyaWVzPzogU2VydmljZVJlZ2lzdHJ5W11cblRhZ3M/OiBUYWdbXVxuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSB0YXNrIGRlZmluaXRpb24gZm9yIHRoZSB0YXNrcyBpbiB0aGUgdGFzayBzZXQgdG8gdXNlLlxuICovXG5UYXNrRGVmaW5pdGlvbjogc3RyaW5nXG59XG4vKipcbiAqIEEgbG9hZCBiYWxhbmNlciBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBsb2FkIGJhbGFuY2VyIHRvIHVzZSB3aXRoIHRoZSB0YXNrIHNldC4gVGhlIHN1cHBvcnRlZCBsb2FkIGJhbGFuY2VyIHR5cGVzIGFyZSBlaXRoZXIgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBhIE5ldHdvcmsgTG9hZCBCYWxhbmNlci4gXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciAoYXMgaXQgYXBwZWFycyBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uKSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCBvbiB0aGUgY29udGFpbmVyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLiBUaGlzIHBvcnQgbXVzdCBjb3JyZXNwb25kIHRvIGEgY29udGFpbmVyUG9ydCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBhcmUgdXNpbmcuIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgY29udGFpbmVyIGluc3RhbmNlIHRoZXkgYXJlIGxhdW5jaGVkIG9uIG11c3QgYWxsb3cgaW5ncmVzcyB0cmFmZmljIG9uIHRoZSBob3N0UG9ydCBvZiB0aGUgcG9ydCBtYXBwaW5nLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRhcmdldCBncm91cCBvciBncm91cHMgYXNzb2NpYXRlZCB3aXRoIGEgc2VydmljZSBvciB0YXNrIHNldC4gQSB0YXJnZXQgZ3JvdXAgQVJOIGlzIG9ubHkgc3BlY2lmaWVkIHdoZW4gdXNpbmcgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIuIElmIHlvdSBhcmUgdXNpbmcgYSBDbGFzc2ljIExvYWQgQmFsYW5jZXIgdGhpcyBzaG91bGQgYmUgb21pdHRlZC4gRm9yIHNlcnZpY2VzIHVzaW5nIHRoZSBFQ1MgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UgY2FuIHNwZWNpZnkgb25lIG9yIG11bHRpcGxlIHRhcmdldCBncm91cHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcmVnaXN0ZXItbXVsdGlwbGUtdGFyZ2V0Z3JvdXBzLmh0bWwgaW4gdGhlIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZS4gRm9yIHNlcnZpY2VzIHVzaW5nIHRoZSBDT0RFX0RFUExPWSBkZXBsb3ltZW50IGNvbnRyb2xsZXIsIHlvdSBhcmUgcmVxdWlyZWQgdG8gZGVmaW5lIHR3byB0YXJnZXQgZ3JvdXBzIGZvciB0aGUgbG9hZCBiYWxhbmNlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9kZXBsb3ltZW50LXR5cGUtYmx1ZWdyZWVuLmh0bWwgaW4gdGhlIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZS4gSWYgeW91ciBzZXJ2aWNlJ3MgdGFzayBkZWZpbml0aW9uIHVzZXMgdGhlIGF3c3ZwYyBuZXR3b3JrIG1vZGUgKHdoaWNoIGlzIHJlcXVpcmVkIGZvciB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSksIHlvdSBtdXN0IGNob29zZSBpcCBhcyB0aGUgdGFyZ2V0IHR5cGUsIG5vdCBpbnN0YW5jZSwgd2hlbiBjcmVhdGluZyB5b3VyIHRhcmdldCBncm91cHMgYmVjYXVzZSB0YXNrcyB0aGF0IHVzZSB0aGUgYXdzdnBjIG5ldHdvcmsgbW9kZSBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIG5vdCBhbiBBbWF6b24gRUMyIGluc3RhbmNlLlxuICovXG5UYXJnZXRHcm91cEFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIGEgdGFzayBvciBzZXJ2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtDb25maWd1cmF0aW9uIHtcbkF3c1ZwY0NvbmZpZ3VyYXRpb24/OiBBd3NWcGNDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSBWUEMgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCBhIHRhc2suIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzVnBjQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFdoZXRoZXIgdGhlIHRhc2sncyBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlIHJlY2VpdmVzIGEgcHVibGljIElQIGFkZHJlc3MuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIERJU0FCTEVELlxuICovXG5Bc3NpZ25QdWJsaWNJcD86IChcIkRJU0FCTEVEXCIgfCBcIkVOQUJMRURcIilcbi8qKlxuICogVGhlIHNlY3VyaXR5IGdyb3VwcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2sgb3Igc2VydmljZS4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgc2VjdXJpdHkgZ3JvdXAsIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGdyb3VwIGZvciB0aGUgVlBDIGlzIHVzZWQuIFRoZXJlIGlzIGEgbGltaXQgb2YgNSBzZWN1cml0eSBncm91cHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIHBlciBBd3NWcGNDb25maWd1cmF0aW9uLlxuICogXG4gKiBAbWF4SXRlbXMgNVxuICovXG5TZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBzdWJuZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFzayBvciBzZXJ2aWNlLiBUaGVyZSBpcyBhIGxpbWl0IG9mIDE2IHN1Ym5ldHMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIHBlciBBd3NWcGNDb25maWd1cmF0aW9uLlxuICogXG4gKiBAbWF4SXRlbXMgMTZcbiAqL1xuU3VibmV0czogc3RyaW5nW11cbn1cbi8qKlxuICogQSBmbG9hdGluZy1wb2ludCBwZXJjZW50YWdlIG9mIHRoZSBkZXNpcmVkIG51bWJlciBvZiB0YXNrcyB0byBwbGFjZSBhbmQga2VlcCBydW5uaW5nIGluIHRoZSB0YXNrIHNldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2FsZSB7XG4vKipcbiAqIFRoZSB1bml0IG9mIG1lYXN1cmUgZm9yIHRoZSBzY2FsZSB2YWx1ZS5cbiAqL1xuVW5pdD86IFwiUEVSQ0VOVFwiXG4vKipcbiAqIFRoZSB2YWx1ZSwgc3BlY2lmaWVkIGFzIGEgcGVyY2VudCB0b3RhbCBvZiBhIHNlcnZpY2UncyBkZXNpcmVkQ291bnQsIHRvIHNjYWxlIHRoZSB0YXNrIHNldC4gQWNjZXB0ZWQgdmFsdWVzIGFyZSBudW1iZXJzIGJldHdlZW4gMCBhbmQgMTAwLlxuICovXG5WYWx1ZT86IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlUmVnaXN0cnkge1xuLyoqXG4gKiBUaGUgY29udGFpbmVyIG5hbWUgdmFsdWUsIGFscmVhZHkgc3BlY2lmaWVkIGluIHRoZSB0YXNrIGRlZmluaXRpb24sIHRvIGJlIHVzZWQgZm9yIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZS4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBicmlkZ2Ugb3IgaG9zdCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IHNwZWNpZnkgYSBjb250YWluZXJOYW1lIGFuZCBjb250YWluZXJQb3J0IGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBhd3N2cGMgbmV0d29yayBtb2RlIGFuZCBhIHR5cGUgU1JWIEROUyByZWNvcmQgaXMgdXNlZCwgeW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBjb250YWluZXJOYW1lIGFuZCBjb250YWluZXJQb3J0IGNvbWJpbmF0aW9uIG9yIGEgcG9ydCB2YWx1ZSwgYnV0IG5vdCBib3RoLlxuICovXG5Db250YWluZXJOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwb3J0IHZhbHVlLCBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLCB0byBiZSB1c2VkIGZvciB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2UuIElmIHRoZSB0YXNrIGRlZmluaXRpb24geW91ciBzZXJ2aWNlIHRhc2sgc3BlY2lmaWVzIHVzZXMgdGhlIGJyaWRnZSBvciBob3N0IG5ldHdvcmsgbW9kZSwgeW91IG11c3Qgc3BlY2lmeSBhIGNvbnRhaW5lck5hbWUgYW5kIGNvbnRhaW5lclBvcnQgY29tYmluYXRpb24gZnJvbSB0aGUgdGFzayBkZWZpbml0aW9uLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBhd3N2cGMgbmV0d29yayBtb2RlIGFuZCBhIHR5cGUgU1JWIEROUyByZWNvcmQgaXMgdXNlZCwgeW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBjb250YWluZXJOYW1lIGFuZCBjb250YWluZXJQb3J0IGNvbWJpbmF0aW9uIG9yIGEgcG9ydCB2YWx1ZSwgYnV0IG5vdCBib3RoLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBwb3J0IHZhbHVlIHVzZWQgaWYgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlIHNwZWNpZmllZCBhbiBTUlYgcmVjb3JkLiBUaGlzIGZpZWxkIG1heSBiZSB1c2VkIGlmIGJvdGggdGhlIGF3c3ZwYyBuZXR3b3JrIG1vZGUgYW5kIFNSViByZWNvcmRzIGFyZSB1c2VkLlxuICovXG5Qb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VydmljZSByZWdpc3RyeS4gVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgc2VydmljZSByZWdpc3RyeSBpcyBBV1MgQ2xvdWQgTWFwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZC1tYXAvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlU2VydmljZS5odG1sXG4gKi9cblJlZ2lzdHJ5QXJuPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG5LZXk/OiBzdHJpbmdcblZhbHVlPzogc3RyaW5nXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy10YXNrc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWVjcy10YXNrc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZSBhIHRhc2sgc2V0IGluIHRoZSBzcGVjaWZpZWQgY2x1c3RlciBhbmQgc2VydmljZS4gVGhpcyBpcyB1c2VkIHdoZW4gYSBzZXJ2aWNlIHVzZXMgdGhlIEVYVEVSTkFMIGRlcGxveW1lbnQgY29udHJvbGxlciB0eXBlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2RlcGxveW1lbnQtdHlwZXMuaHRtbGluIHRoZSBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19FQ1NfVEFTS1NFVCB7XG4vKipcbiAqIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIHRoYXQgdGhlIHRhc2tzIGluIHRoZSB0YXNrIHNldCBzaG91bGQgdXNlLiBBIHBsYXRmb3JtIHZlcnNpb24gaXMgc3BlY2lmaWVkIG9ubHkgZm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLiBJZiBvbmUgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUgTEFURVNUIHBsYXRmb3JtIHZlcnNpb24gaXMgdXNlZCBieSBkZWZhdWx0LlxuICovXG5QbGF0Zm9ybVZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogQW4gb3B0aW9uYWwgbm9uLXVuaXF1ZSB0YWcgdGhhdCBpZGVudGlmaWVzIHRoaXMgdGFzayBzZXQgaW4gZXh0ZXJuYWwgc3lzdGVtcy4gSWYgdGhlIHRhc2sgc2V0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNlcnZpY2UgZGlzY292ZXJ5IHJlZ2lzdHJ5LCB0aGUgdGFza3MgaW4gdGhpcyB0YXNrIHNldCB3aWxsIGhhdmUgdGhlIEVDU19UQVNLX1NFVF9FWFRFUk5BTF9JRCBBV1MgQ2xvdWQgTWFwIGF0dHJpYnV0ZSBzZXQgdG8gdGhlIHByb3ZpZGVkIHZhbHVlLiBcbiAqL1xuRXh0ZXJuYWxJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBjbHVzdGVyIHRoYXQgaG9zdHMgdGhlIHNlcnZpY2UgdG8gY3JlYXRlIHRoZSB0YXNrIHNldCBpbi5cbiAqL1xuQ2x1c3Rlcjogc3RyaW5nXG5Mb2FkQmFsYW5jZXJzPzogTG9hZEJhbGFuY2VyW11cbi8qKlxuICogVGhlIHNob3J0IG5hbWUgb3IgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VydmljZSB0byBjcmVhdGUgdGhlIHRhc2sgc2V0IGluLlxuICovXG5TZXJ2aWNlOiBzdHJpbmdcblNjYWxlPzogU2NhbGVcbi8qKlxuICogVGhlIGRldGFpbHMgb2YgdGhlIHNlcnZpY2UgZGlzY292ZXJ5IHJlZ2lzdHJpZXMgdG8gYXNzaWduIHRvIHRoaXMgdGFzayBzZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1kaXNjb3ZlcnkuaHRtbC5cbiAqL1xuU2VydmljZVJlZ2lzdHJpZXM/OiBTZXJ2aWNlUmVnaXN0cnlbXVxuQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5PzogQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5SXRlbVtdXG4vKipcbiAqIFRoZSBsYXVuY2ggdHlwZSB0aGF0IG5ldyB0YXNrcyBpbiB0aGUgdGFzayBzZXQgd2lsbCB1c2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvbGF1bmNoX3R5cGVzLmh0bWwgaW4gdGhlIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZS4gXG4gKi9cbkxhdW5jaFR5cGU/OiAoXCJFQzJcIiB8IFwiRkFSR0FURVwiKVxuLyoqXG4gKiBUaGUgc2hvcnQgbmFtZSBvciBmdWxsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSB0YXNrIGRlZmluaXRpb24gZm9yIHRoZSB0YXNrcyBpbiB0aGUgdGFzayBzZXQgdG8gdXNlLlxuICovXG5UYXNrRGVmaW5pdGlvbjogc3RyaW5nXG5OZXR3b3JrQ29uZmlndXJhdGlvbj86IE5ldHdvcmtDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgdGFzayBzZXQuXG4gKi9cbklkPzogc3RyaW5nXG5UYWdzPzogVGFnW11cbn1cbi8qKlxuICogQSBsb2FkIGJhbGFuY2VyIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGxvYWQgYmFsYW5jZXIgdG8gdXNlIHdpdGggdGhlIHRhc2sgc2V0LiBUaGUgc3VwcG9ydGVkIGxvYWQgYmFsYW5jZXIgdHlwZXMgYXJlIGVpdGhlciBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIG9yIGEgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkQmFsYW5jZXIge1xuLyoqXG4gKiBUaGUgZnVsbCBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgZ3JvdXAgb3IgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCBhIHNlcnZpY2Ugb3IgdGFzayBzZXQuIEEgdGFyZ2V0IGdyb3VwIEFSTiBpcyBvbmx5IHNwZWNpZmllZCB3aGVuIHVzaW5nIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLiBJZiB5b3UgYXJlIHVzaW5nIGEgQ2xhc3NpYyBMb2FkIEJhbGFuY2VyIHRoaXMgc2hvdWxkIGJlIG9taXR0ZWQuIEZvciBzZXJ2aWNlcyB1c2luZyB0aGUgRUNTIGRlcGxveW1lbnQgY29udHJvbGxlciwgeW91IGNhbiBzcGVjaWZ5IG9uZSBvciBtdWx0aXBsZSB0YXJnZXQgZ3JvdXBzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3JlZ2lzdGVyLW11bHRpcGxlLXRhcmdldGdyb3Vwcy5odG1sIGluIHRoZSBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUuIEZvciBzZXJ2aWNlcyB1c2luZyB0aGUgQ09ERV9ERVBMT1kgZGVwbG95bWVudCBjb250cm9sbGVyLCB5b3UgYXJlIHJlcXVpcmVkIHRvIGRlZmluZSB0d28gdGFyZ2V0IGdyb3VwcyBmb3IgdGhlIGxvYWQgYmFsYW5jZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWJsdWVncmVlbi5odG1sIGluIHRoZSBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUuIElmIHlvdXIgc2VydmljZSdzIHRhc2sgZGVmaW5pdGlvbiB1c2VzIHRoZSBhd3N2cGMgbmV0d29yayBtb2RlICh3aGljaCBpcyByZXF1aXJlZCBmb3IgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUpLCB5b3UgbXVzdCBjaG9vc2UgaXAgYXMgdGhlIHRhcmdldCB0eXBlLCBub3QgaW5zdGFuY2UsIHdoZW4gY3JlYXRpbmcgeW91ciB0YXJnZXQgZ3JvdXBzIGJlY2F1c2UgdGFza3MgdGhhdCB1c2UgdGhlIGF3c3ZwYyBuZXR3b3JrIG1vZGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgYW4gQW1hem9uIEVDMiBpbnN0YW5jZS5cbiAqL1xuVGFyZ2V0R3JvdXBBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciAoYXMgaXQgYXBwZWFycyBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uKSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCBvbiB0aGUgY29udGFpbmVyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBsb2FkIGJhbGFuY2VyLiBUaGlzIHBvcnQgbXVzdCBjb3JyZXNwb25kIHRvIGEgY29udGFpbmVyUG9ydCBpbiB0aGUgdGFzayBkZWZpbml0aW9uIHRoZSB0YXNrcyBpbiB0aGUgc2VydmljZSBhcmUgdXNpbmcuIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgRUMyIGxhdW5jaCB0eXBlLCB0aGUgY29udGFpbmVyIGluc3RhbmNlIHRoZXkgYXJlIGxhdW5jaGVkIG9uIG11c3QgYWxsb3cgaW5ncmVzcyB0cmFmZmljIG9uIHRoZSBob3N0UG9ydCBvZiB0aGUgcG9ydCBtYXBwaW5nLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG59XG4vKipcbiAqIEEgZmxvYXRpbmctcG9pbnQgcGVyY2VudGFnZSBvZiB0aGUgZGVzaXJlZCBudW1iZXIgb2YgdGFza3MgdG8gcGxhY2UgYW5kIGtlZXAgcnVubmluZyBpbiB0aGUgdGFzayBzZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NhbGUge1xuLyoqXG4gKiBUaGUgdmFsdWUsIHNwZWNpZmllZCBhcyBhIHBlcmNlbnQgdG90YWwgb2YgYSBzZXJ2aWNlJ3MgZGVzaXJlZENvdW50LCB0byBzY2FsZSB0aGUgdGFzayBzZXQuIEFjY2VwdGVkIHZhbHVlcyBhcmUgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIDEwMC5cbiAqL1xuVmFsdWU/OiBudW1iZXJcbi8qKlxuICogVGhlIHVuaXQgb2YgbWVhc3VyZSBmb3IgdGhlIHNjYWxlIHZhbHVlLlxuICovXG5Vbml0PzogXCJQRVJDRU5UXCJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVJlZ2lzdHJ5IHtcbi8qKlxuICogVGhlIGNvbnRhaW5lciBuYW1lIHZhbHVlLCBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLCB0byBiZSB1c2VkIGZvciB5b3VyIHNlcnZpY2UgZGlzY292ZXJ5IHNlcnZpY2UuIElmIHRoZSB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYnJpZGdlIG9yIGhvc3QgbmV0d29yayBtb2RlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgY29udGFpbmVyTmFtZSBhbmQgY29udGFpbmVyUG9ydCBjb21iaW5hdGlvbiBmcm9tIHRoZSB0YXNrIGRlZmluaXRpb24uIElmIHRoZSB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYXdzdnBjIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgY29udGFpbmVyTmFtZSBhbmQgY29udGFpbmVyUG9ydCBjb21iaW5hdGlvbiBvciBhIHBvcnQgdmFsdWUsIGJ1dCBub3QgYm90aC5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCB2YWx1ZSB1c2VkIGlmIHlvdXIgc2VydmljZSBkaXNjb3Zlcnkgc2VydmljZSBzcGVjaWZpZWQgYW4gU1JWIHJlY29yZC4gVGhpcyBmaWVsZCBtYXkgYmUgdXNlZCBpZiBib3RoIHRoZSBhd3N2cGMgbmV0d29yayBtb2RlIGFuZCBTUlYgcmVjb3JkcyBhcmUgdXNlZC5cbiAqL1xuUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgcG9ydCB2YWx1ZSwgYWxyZWFkeSBzcGVjaWZpZWQgaW4gdGhlIHRhc2sgZGVmaW5pdGlvbiwgdG8gYmUgdXNlZCBmb3IgeW91ciBzZXJ2aWNlIGRpc2NvdmVyeSBzZXJ2aWNlLiBJZiB0aGUgdGFzayBkZWZpbml0aW9uIHlvdXIgc2VydmljZSB0YXNrIHNwZWNpZmllcyB1c2VzIHRoZSBicmlkZ2Ugb3IgaG9zdCBuZXR3b3JrIG1vZGUsIHlvdSBtdXN0IHNwZWNpZnkgYSBjb250YWluZXJOYW1lIGFuZCBjb250YWluZXJQb3J0IGNvbWJpbmF0aW9uIGZyb20gdGhlIHRhc2sgZGVmaW5pdGlvbi4gSWYgdGhlIHRhc2sgZGVmaW5pdGlvbiB5b3VyIHNlcnZpY2UgdGFzayBzcGVjaWZpZXMgdXNlcyB0aGUgYXdzdnBjIG5ldHdvcmsgbW9kZSBhbmQgYSB0eXBlIFNSViBETlMgcmVjb3JkIGlzIHVzZWQsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgY29udGFpbmVyTmFtZSBhbmQgY29udGFpbmVyUG9ydCBjb21iaW5hdGlvbiBvciBhIHBvcnQgdmFsdWUsIGJ1dCBub3QgYm90aC5cbiAqL1xuQ29udGFpbmVyUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHNlcnZpY2UgcmVnaXN0cnkuIFRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIHNlcnZpY2UgcmVnaXN0cnkgaXMgQVdTIENsb3VkIE1hcC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWQtbWFwL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxuICovXG5SZWdpc3RyeUFybj86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lJdGVtIHtcbkNhcGFjaXR5UHJvdmlkZXI/OiBzdHJpbmdcbkJhc2U/OiBudW1iZXJcbldlaWdodD86IG51bWJlclxufVxuLyoqXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIGEgdGFzayBvciBzZXJ2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtDb25maWd1cmF0aW9uIHtcbkF3c1ZwY0NvbmZpZ3VyYXRpb24/OiBBd3NWcGNDb25maWd1cmF0aW9uXG59XG4vKipcbiAqIFRoZSBWUEMgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCBhIHRhc2suIEFsbCBzcGVjaWZpZWQgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzIG11c3QgYmUgZnJvbSB0aGUgc2FtZSBWUEMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzVnBjQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzZWN1cml0eSBncm91cHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXNrIG9yIHNlcnZpY2UuIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHNlY3VyaXR5IGdyb3VwLCB0aGUgZGVmYXVsdCBzZWN1cml0eSBncm91cCBmb3IgdGhlIFZQQyBpcyB1c2VkLiBUaGVyZSBpcyBhIGxpbWl0IG9mIDUgc2VjdXJpdHkgZ3JvdXBzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBwZXIgQXdzVnBjQ29uZmlndXJhdGlvbi5cbiAqIFxuICogQG1heEl0ZW1zIDVcbiAqL1xuU2VjdXJpdHlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgc3VibmV0cyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2sgb3Igc2VydmljZS4gVGhlcmUgaXMgYSBsaW1pdCBvZiAxNiBzdWJuZXRzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBwZXIgQXdzVnBjQ29uZmlndXJhdGlvbi5cbiAqIFxuICogQG1heEl0ZW1zIDE2XG4gKi9cblN1Ym5ldHM6IHN0cmluZ1tdXG4vKipcbiAqIFdoZXRoZXIgdGhlIHRhc2sncyBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlIHJlY2VpdmVzIGEgcHVibGljIElQIGFkZHJlc3MuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIERJU0FCTEVELlxuICovXG5Bc3NpZ25QdWJsaWNJcD86IChcIkRJU0FCTEVEXCIgfCBcIkVOQUJMRURcIilcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcblZhbHVlPzogc3RyaW5nXG5LZXk/OiBzdHJpbmdcbn1cbiJdfQ==
@@ -8,13 +8,14 @@ export type EnabledTypes = LoggingTypeConfig[];
8
8
  export interface _AWS_EKS_CLUSTER {
9
9
  Logging?: Logging;
10
10
  /**
11
- * Set this value to false to avoid creating the default networking addons when the cluster is created.
11
+ * Set this value to false to avoid creating the default networking add-ons when the cluster is created.
12
12
  */
13
13
  BootstrapSelfManagedAddons?: boolean;
14
14
  /**
15
15
  * Amazon Resource Name (ARN) or alias of the customer master key (CMK).
16
16
  */
17
17
  EncryptionConfigKeyArn?: string;
18
+ ZonalShiftConfig?: ZonalShiftConfig;
18
19
  AccessConfig?: AccessConfig;
19
20
  /**
20
21
  * The certificate-authority-data for your cluster.
@@ -83,6 +84,15 @@ export interface LoggingTypeConfig {
83
84
  */
84
85
  Type?: ("api" | "audit" | "authenticator" | "controllerManager" | "scheduler");
85
86
  }
87
+ /**
88
+ * The current zonal shift configuration to use for the cluster.
89
+ */
90
+ export interface ZonalShiftConfig {
91
+ /**
92
+ * Set this value to true to enable zonal shift for the cluster.
93
+ */
94
+ Enabled?: boolean;
95
+ }
86
96
  /**
87
97
  * An object representing the Access Config to use for the cluster.
88
98
  */